gemini: Add v5.4 kernel patches
This adds the kernel patches needed for the Gemini. Just 7 patches, 5 of them are already upstream. Notably we incorperate the temperature sensor on the hard drive to drive temperature control of the NAS chassis. This is required for the DIR-685 which has no external temperature sensor. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> [use the drivetemp package over the backport] Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
This commit is contained in:
parent
711bd33cd1
commit
ea2d284082
|
@ -0,0 +1,131 @@
|
||||||
|
From 3aaff88a0f5e154aa5a489d59fd4015a2a937c23 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Linus Walleij <linus.walleij@linaro.org>
|
||||||
|
Date: Fri, 21 Apr 2017 22:19:00 +0200
|
||||||
|
Subject: [PATCH 1/7] usb: host: fotg2: add Gemini-specific handling
|
||||||
|
|
||||||
|
The Cortina Systems Gemini has bolted on a PHY inside the
|
||||||
|
silicon that can be handled by six bits in a MISC register in
|
||||||
|
the system controller.
|
||||||
|
|
||||||
|
If we are running on Gemini, look up a syscon regmap through
|
||||||
|
a phandle and enable VBUS and optionally the Mini-B connector.
|
||||||
|
|
||||||
|
If the device is flagged as "wakeup-source" using the standard
|
||||||
|
DT bindings, we also enable this in the global controller for
|
||||||
|
respective port.
|
||||||
|
|
||||||
|
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/usb/host/Kconfig | 1 +
|
||||||
|
drivers/usb/host/fotg210-hcd.c | 76 ++++++++++++++++++++++++++++++++++
|
||||||
|
2 files changed, 77 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/usb/host/Kconfig
|
||||||
|
+++ b/drivers/usb/host/Kconfig
|
||||||
|
@@ -363,6 +363,7 @@ config USB_ISP1362_HCD
|
||||||
|
config USB_FOTG210_HCD
|
||||||
|
tristate "FOTG210 HCD support"
|
||||||
|
depends on USB && HAS_DMA && HAS_IOMEM
|
||||||
|
+ select MFD_SYSCON
|
||||||
|
---help---
|
||||||
|
Faraday FOTG210 is an OTG controller which can be configured as
|
||||||
|
an USB2.0 host. It is designed to meet USB2.0 EHCI specification
|
||||||
|
--- a/drivers/usb/host/fotg210-hcd.c
|
||||||
|
+++ b/drivers/usb/host/fotg210-hcd.c
|
||||||
|
@@ -33,6 +33,10 @@
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
#include <linux/clk.h>
|
||||||
|
+#include <linux/bitops.h>
|
||||||
|
+/* For Cortina Gemini */
|
||||||
|
+#include <linux/mfd/syscon.h>
|
||||||
|
+#include <linux/regmap.h>
|
||||||
|
|
||||||
|
#include <asm/byteorder.h>
|
||||||
|
#include <asm/irq.h>
|
||||||
|
@@ -5558,6 +5562,72 @@ static void fotg210_init(struct fotg210_
|
||||||
|
iowrite32(value, &fotg210->regs->otgcsr);
|
||||||
|
}
|
||||||
|
|
||||||
|
+/*
|
||||||
|
+ * Gemini-specific initialization function, only executed on the
|
||||||
|
+ * Gemini SoC using the global misc control register.
|
||||||
|
+ */
|
||||||
|
+#define GEMINI_GLOBAL_MISC_CTRL 0x30
|
||||||
|
+#define GEMINI_MISC_USB0_WAKEUP BIT(14)
|
||||||
|
+#define GEMINI_MISC_USB1_WAKEUP BIT(15)
|
||||||
|
+#define GEMINI_MISC_USB0_VBUS_ON BIT(22)
|
||||||
|
+#define GEMINI_MISC_USB1_VBUS_ON BIT(23)
|
||||||
|
+#define GEMINI_MISC_USB0_MINI_B BIT(29)
|
||||||
|
+#define GEMINI_MISC_USB1_MINI_B BIT(30)
|
||||||
|
+
|
||||||
|
+static int fotg210_gemini_init(struct device *dev, struct usb_hcd *hcd)
|
||||||
|
+{
|
||||||
|
+ struct device_node *np = dev->of_node;
|
||||||
|
+ struct regmap *map;
|
||||||
|
+ bool mini_b;
|
||||||
|
+ bool wakeup;
|
||||||
|
+ u32 mask, val;
|
||||||
|
+ int ret;
|
||||||
|
+
|
||||||
|
+ map = syscon_regmap_lookup_by_phandle(np, "syscon");
|
||||||
|
+ if (IS_ERR(map)) {
|
||||||
|
+ dev_err(dev, "no syscon\n");
|
||||||
|
+ return PTR_ERR(map);
|
||||||
|
+ }
|
||||||
|
+ mini_b = of_property_read_bool(np, "cortina,gemini-mini-b");
|
||||||
|
+ wakeup = of_property_read_bool(np, "wakeup-source");
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Figure out if this is USB0 or USB1 by simply checking the
|
||||||
|
+ * physical base address.
|
||||||
|
+ */
|
||||||
|
+ mask = 0;
|
||||||
|
+ if (hcd->rsrc_start == 0x69000000) {
|
||||||
|
+ val = GEMINI_MISC_USB1_VBUS_ON;
|
||||||
|
+ if (mini_b)
|
||||||
|
+ val |= GEMINI_MISC_USB1_MINI_B;
|
||||||
|
+ else
|
||||||
|
+ mask |= GEMINI_MISC_USB1_MINI_B;
|
||||||
|
+ if (wakeup)
|
||||||
|
+ val |= GEMINI_MISC_USB1_WAKEUP;
|
||||||
|
+ else
|
||||||
|
+ mask |= GEMINI_MISC_USB1_WAKEUP;
|
||||||
|
+ } else {
|
||||||
|
+ val = GEMINI_MISC_USB0_VBUS_ON;
|
||||||
|
+ if (mini_b)
|
||||||
|
+ val |= GEMINI_MISC_USB0_MINI_B;
|
||||||
|
+ else
|
||||||
|
+ mask |= GEMINI_MISC_USB0_MINI_B;
|
||||||
|
+ if (wakeup)
|
||||||
|
+ val |= GEMINI_MISC_USB0_WAKEUP;
|
||||||
|
+ else
|
||||||
|
+ mask |= GEMINI_MISC_USB0_WAKEUP;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ ret = regmap_update_bits(map, GEMINI_GLOBAL_MISC_CTRL, mask, val);
|
||||||
|
+ if (ret) {
|
||||||
|
+ dev_err(dev, "failed to initialize Gemini PHY\n");
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ dev_info(dev, "initialized Gemini PHY\n");
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* fotg210_hcd_probe - initialize faraday FOTG210 HCDs
|
||||||
|
*
|
||||||
|
@@ -5635,6 +5705,12 @@ static int fotg210_hcd_probe(struct plat
|
||||||
|
|
||||||
|
fotg210_init(fotg210);
|
||||||
|
|
||||||
|
+ if (of_device_is_compatible(dev->of_node, "cortina,gemini-usb")) {
|
||||||
|
+ retval = fotg210_gemini_init(dev, hcd);
|
||||||
|
+ if (retval)
|
||||||
|
+ goto failed_dis_clk;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
retval = usb_add_hcd(hcd, irq, IRQF_SHARED);
|
||||||
|
if (retval) {
|
||||||
|
dev_err(dev, "failed to add hcd with err %d\n", retval);
|
|
@ -0,0 +1,37 @@
|
||||||
|
From a2de8560885469f3d76c80207a669029e4fc8a45 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Linus Walleij <linus.walleij@linaro.org>
|
||||||
|
Date: Mon, 11 Mar 2019 15:44:29 +0100
|
||||||
|
Subject: [PATCH 2/7] ARM: dts: Augment DIR-685 partition table for OpenWrt
|
||||||
|
|
||||||
|
Rename the firmware partition so that the firmware MTD
|
||||||
|
splitter will do its job, drop the rootfs arguments as
|
||||||
|
the MTD splitter will set this up automatically.
|
||||||
|
|
||||||
|
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/gemini-dlink-dir-685.dts | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/arch/arm/boot/dts/gemini-dlink-dir-685.dts
|
||||||
|
+++ b/arch/arm/boot/dts/gemini-dlink-dir-685.dts
|
||||||
|
@@ -20,7 +20,7 @@
|
||||||
|
};
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
- bootargs = "console=ttyS0,19200n8 root=/dev/sda1 rw rootwait consoleblank=300";
|
||||||
|
+ bootargs = "console=ttyS0,19200n8 consoleblank=300";
|
||||||
|
stdout-path = "uart0:19200n8";
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -285,9 +285,9 @@
|
||||||
|
* this is called "upgrade" on the vendor system.
|
||||||
|
*/
|
||||||
|
partition@40000 {
|
||||||
|
- label = "upgrade";
|
||||||
|
+ compatible = "wrg";
|
||||||
|
+ label = "firmware";
|
||||||
|
reg = <0x00040000 0x01f40000>;
|
||||||
|
- read-only;
|
||||||
|
};
|
||||||
|
/* RGDB, Residental Gateway Database? */
|
||||||
|
partition@1f80000 {
|
|
@ -0,0 +1,117 @@
|
||||||
|
From 9b95b301b219df19c20f4a563f1da6338b09b0d0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Linus Walleij <linus.walleij@linaro.org>
|
||||||
|
Date: Tue, 31 Dec 2019 18:14:28 +0100
|
||||||
|
Subject: [PATCH 3/7] ARM: dts: gemini: Rename IDE nodes
|
||||||
|
|
||||||
|
By renaming the ATA drive nodes to "ide@" we activate the
|
||||||
|
semantic checks to the DT schema for the controller and use
|
||||||
|
the correct notation for PATA drives.
|
||||||
|
|
||||||
|
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/gemini-dlink-dir-685.dts | 2 +-
|
||||||
|
arch/arm/boot/dts/gemini-dlink-dns-313.dts | 2 +-
|
||||||
|
arch/arm/boot/dts/gemini-nas4220b.dts | 4 ++--
|
||||||
|
arch/arm/boot/dts/gemini-sl93512r.dts | 4 ++--
|
||||||
|
arch/arm/boot/dts/gemini-sq201.dts | 2 +-
|
||||||
|
arch/arm/boot/dts/gemini.dtsi | 8 ++++++--
|
||||||
|
6 files changed, 13 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
--- a/arch/arm/boot/dts/gemini-dlink-dir-685.dts
|
||||||
|
+++ b/arch/arm/boot/dts/gemini-dlink-dir-685.dts
|
||||||
|
@@ -443,7 +443,7 @@
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
- ata@63000000 {
|
||||||
|
+ ide@63000000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
--- a/arch/arm/boot/dts/gemini-dlink-dns-313.dts
|
||||||
|
+++ b/arch/arm/boot/dts/gemini-dlink-dns-313.dts
|
||||||
|
@@ -297,7 +297,7 @@
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
- ata@63000000 {
|
||||||
|
+ ide@63000000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
--- a/arch/arm/boot/dts/gemini-nas4220b.dts
|
||||||
|
+++ b/arch/arm/boot/dts/gemini-nas4220b.dts
|
||||||
|
@@ -170,11 +170,11 @@
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
- ata@63000000 {
|
||||||
|
+ ide@63000000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
- ata@63400000 {
|
||||||
|
+ ide@63400000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
--- a/arch/arm/boot/dts/gemini-sl93512r.dts
|
||||||
|
+++ b/arch/arm/boot/dts/gemini-sl93512r.dts
|
||||||
|
@@ -293,11 +293,11 @@
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
- ata@63000000 {
|
||||||
|
+ ide@63000000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
- ata@63400000 {
|
||||||
|
+ ide@63400000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
--- a/arch/arm/boot/dts/gemini-sq201.dts
|
||||||
|
+++ b/arch/arm/boot/dts/gemini-sq201.dts
|
||||||
|
@@ -289,7 +289,7 @@
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
- ata@63000000 {
|
||||||
|
+ ide@63000000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
--- a/arch/arm/boot/dts/gemini.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/gemini.dtsi
|
||||||
|
@@ -356,7 +356,7 @@
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
- ata@63000000 {
|
||||||
|
+ ide@63000000 {
|
||||||
|
compatible = "cortina,gemini-pata", "faraday,ftide010";
|
||||||
|
reg = <0x63000000 0x1000>;
|
||||||
|
interrupts = <4 IRQ_TYPE_EDGE_RISING>;
|
||||||
|
@@ -365,9 +365,11 @@
|
||||||
|
clock-names = "PCLK";
|
||||||
|
sata = <&sata>;
|
||||||
|
status = "disabled";
|
||||||
|
+ #address-cells = <1>;
|
||||||
|
+ #size-cells = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
- ata@63400000 {
|
||||||
|
+ ide@63400000 {
|
||||||
|
compatible = "cortina,gemini-pata", "faraday,ftide010";
|
||||||
|
reg = <0x63400000 0x1000>;
|
||||||
|
interrupts = <5 IRQ_TYPE_EDGE_RISING>;
|
||||||
|
@@ -376,6 +378,8 @@
|
||||||
|
clock-names = "PCLK";
|
||||||
|
sata = <&sata>;
|
||||||
|
status = "disabled";
|
||||||
|
+ #address-cells = <1>;
|
||||||
|
+ #size-cells = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
dma-controller@67000000 {
|
|
@ -0,0 +1,101 @@
|
||||||
|
From 2b2e9d0e1ee4765b21c648235489028c6dc7e336 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Linus Walleij <linus.walleij@linaro.org>
|
||||||
|
Date: Tue, 31 Dec 2019 18:18:08 +0100
|
||||||
|
Subject: [PATCH 4/7] ARM: dts: gemini: Add thermal zone to DIR-685
|
||||||
|
|
||||||
|
The DIR-685 can now exploit the thermal zone added by the
|
||||||
|
drive temperature sensor inside the hard drive. We have
|
||||||
|
patched the libata subsystem to assign the device nodes
|
||||||
|
properly to the SCSI devices and this is what the drivetemp
|
||||||
|
driver will use to populate the sensor and the thermal
|
||||||
|
zone, so pick that up into the thermal zone and let this
|
||||||
|
control the fan.
|
||||||
|
|
||||||
|
The hardware lacks an embedded temperature sensor so the
|
||||||
|
D-Link vendor firmware uses this method to control the
|
||||||
|
temperature of the NAS enclosure using the thermal sensor
|
||||||
|
inside the hard drive.
|
||||||
|
|
||||||
|
The drive temperature trigger points to be used comes from
|
||||||
|
the vendor firmware.
|
||||||
|
|
||||||
|
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/gemini-dlink-dir-685.dts | 48 ++++++++++++++++++++--
|
||||||
|
1 file changed, 45 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/arch/arm/boot/dts/gemini-dlink-dir-685.dts
|
||||||
|
+++ b/arch/arm/boot/dts/gemini-dlink-dir-685.dts
|
||||||
|
@@ -119,13 +119,11 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is a Sunon Maglev GM0502PFV2-8 cooling fan @10000 RPM.
|
||||||
|
- * Since the platform has no temperature sensor, this is controlled
|
||||||
|
- * from userspace by using the hard disks S.M.A.R.T. temperature
|
||||||
|
* sensor. It is turned on when the temperature exceeds 46 degrees
|
||||||
|
* and turned off when the temperatures goes below 41 degrees
|
||||||
|
* (celsius).
|
||||||
|
*/
|
||||||
|
- gpio-fan {
|
||||||
|
+ fan0: gpio-fan {
|
||||||
|
compatible = "gpio-fan";
|
||||||
|
/* Collides with IDE */
|
||||||
|
gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
|
||||||
|
@@ -133,6 +131,40 @@
|
||||||
|
#cooling-cells = <2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
+ thermal-zones {
|
||||||
|
+ chassis-thermal {
|
||||||
|
+ /* Poll every 20 seconds */
|
||||||
|
+ polling-delay = <20000>;
|
||||||
|
+ /* Poll every 2nd second when cooling */
|
||||||
|
+ polling-delay-passive = <2000>;
|
||||||
|
+ /* Use the thermal sensor in the hard drive */
|
||||||
|
+ thermal-sensors = <&drive0>;
|
||||||
|
+
|
||||||
|
+ /* Tripping points from the fan.script in the rootfs */
|
||||||
|
+ trips {
|
||||||
|
+ alert: chassis-alert {
|
||||||
|
+ /* At 43 degrees turn on the fan */
|
||||||
|
+ temperature = <43000>;
|
||||||
|
+ hysteresis = <3000>;
|
||||||
|
+ type = "active";
|
||||||
|
+ };
|
||||||
|
+ crit: chassis-crit {
|
||||||
|
+ /* Just shut down at 60 degrees */
|
||||||
|
+ temperature = <60000>;
|
||||||
|
+ hysteresis = <2000>;
|
||||||
|
+ type = "critical";
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ cooling-maps {
|
||||||
|
+ map0 {
|
||||||
|
+ trip = <&alert>;
|
||||||
|
+ cooling-device = <&fan0 1 1>;
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* The touchpad input is connected to a GPIO bit-banged
|
||||||
|
* I2C bus.
|
||||||
|
@@ -445,6 +477,16 @@
|
||||||
|
|
||||||
|
ide@63000000 {
|
||||||
|
status = "okay";
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * This drive may have a temperature sensor with a
|
||||||
|
+ * thermal zone we can use for thermal control of the
|
||||||
|
+ * chassis temperature using the fan.
|
||||||
|
+ */
|
||||||
|
+ drive0: ide-port@0 {
|
||||||
|
+ reg = <0>;
|
||||||
|
+ #thermal-sensor-cells = <0>;
|
||||||
|
+ };
|
||||||
|
};
|
||||||
|
|
||||||
|
display-controller@6a000000 {
|
Loading…
Reference in New Issue