From 4841ee933ddf14e41283d47a83b55393c9724bba Mon Sep 17 00:00:00 2001
From: Josef Schlehofer <josef.schlehofer@nic.cz>
Date: Mon, 5 Sep 2022 23:17:12 +0200
Subject: [PATCH] patches/openwrt: linux: add patch for gpio mpc85xx
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Before this patch applied on Turris 1.1:

[   16.392988] lm90 0-004c: cannot request IRQ 48
[   16.398280] lm90: probe of 0-004c failed with error -22

root@turris:~# sensors
No sensors found!
Make sure you loaded all the kernel drivers you need.
Try sensors-detect to find out which these are.

After this patch applied on the same router:

root@turris:/# sensors
sa56004-i2c-0-4c
Adapter: MPC adapter (i2c@3000)
temp1:        +44.0°C  (low  =  +0.0°C, high = +70.0°C)
                       (crit = +85.0°C, hyst = +75.0°C)
temp2:        +73.8°C  (low  =  +0.0°C, high = +70.0°C)  ALARM (HIGH)
                       (crit = +85.0°C, hyst = +75.0°C)
---
 ...-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch | 149 ++++++++++++++++++
 1 file changed, 149 insertions(+)
 create mode 100644 patches/openwrt/to-upstream/0053-gpio-mpc8xxx-Fix-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch

diff --git a/patches/openwrt/to-upstream/0053-gpio-mpc8xxx-Fix-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch b/patches/openwrt/to-upstream/0053-gpio-mpc8xxx-Fix-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch
new file mode 100644
index 000000000..110e890c7
--- /dev/null
+++ b/patches/openwrt/to-upstream/0053-gpio-mpc8xxx-Fix-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch
@@ -0,0 +1,149 @@
+From 0f0d568ed2d6e022b7f6f12eca6b7ef52331f591 Mon Sep 17 00:00:00 2001
+From: Josef Schlehofer <pepe.schlehofer@gmail.com>
+Date: Tue, 6 Sep 2022 13:17:02 +0200
+Subject: [PATCH] mpc85xx: add patch to fix gpio mpc8xxx
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Backports patch, which is currently on review [1] for kernel 5.10 and
+kernel 5.15, where it applies cleanly. This was tested on CZ.NIC Turris
+1.1 router running OpenWrt 21.02.03 with kernel 5.15.
+
+Before:
+
+- In /var/log/messages:
+```
+[   16.392988] lm90 0-004c: cannot request IRQ 48
+[   16.398280] lm90: probe of 0-004c failed with error -22
+```
+
+- Sensors does not work:
+```
+root@turris:~# sensors
+No sensors found!
+Make sure you loaded all the kernel drivers you need.
+Try sensors-detect to find out which these are.
+```
+
+After:
+
+```
+root@turris:/# sensors
+sa56004-i2c-0-4c
+Adapter: MPC adapter (i2c@3000)
+temp1:        +44.0°C  (low  =  +0.0°C, high = +70.0°C)
+                       (crit = +85.0°C, hyst = +75.0°C)
+temp2:        +73.8°C  (low  =  +0.0°C, high = +70.0°C)  ALARM (HIGH)
+                       (crit = +85.0°C, hyst = +75.0°C)
+```
+
+[1] https://lore.kernel.org/linux-gpio/20220906105431.30911-1-pali@kernel.org/
+
+Signed-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>
+---
+ ...-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch | 42 +++++++++++++++++++
+ ...-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch | 42 +++++++++++++++++++
+ 2 files changed, 84 insertions(+)
+ create mode 100644 target/linux/mpc85xx/patches-5.10/110-gpio-mpc8xxx-Fix-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch
+ create mode 100644 target/linux/mpc85xx/patches-5.15/110-gpio-mpc8xxx-Fix-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch
+
+diff --git a/target/linux/mpc85xx/patches-5.10/110-gpio-mpc8xxx-Fix-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch b/target/linux/mpc85xx/patches-5.10/110-gpio-mpc8xxx-Fix-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch
+new file mode 100644
+index 0000000000..c4d7a5d5af
+--- /dev/null
++++ b/target/linux/mpc85xx/patches-5.10/110-gpio-mpc8xxx-Fix-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch
+@@ -0,0 +1,42 @@
++From 29af30435022442ec4eccf3166956b8e0b8a2134 Mon Sep 17 00:00:00 2001
++From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>
++Date: Mon, 5 Sep 2022 23:13:47 +0200
++Subject: [PATCH] gpio: mpc8xxx: Fix support for IRQ_TYPE_LEVEL_LOW flow_type
++ in mpc85xx
++MIME-Version: 1.0
++Content-Type: text/plain; charset=UTF-8
++Content-Transfer-Encoding: 8bit
++
++Commit e39d5ef67804 ("powerpc/5xxx: extend mpc8xxx_gpio driver to support
++mpc512x gpios") implemented support for IRQ_TYPE_LEVEL_LOW flow type in
++mpc512x via falling edge type. Do same for mpc85xx which support was added
++in commit 345e5c8a1cc3 ("powerpc: Add interrupt support to mpc8xxx_gpio").
++
++Fixes probing of lm90 hwmon driver on mpc85xx based board which use level
++interrupt. Without it kernel prints error and refuse lm90 to work:
++
++    [   15.258370] genirq: Setting trigger mode 8 for irq 49 failed (mpc8xxx_irq_set_type+0x0/0xf8)
++    [   15.267168] lm90 0-004c: cannot request IRQ 49
++    [   15.272708] lm90: probe of 0-004c failed with error -22
++
++Fixes: 345e5c8a1cc3 ("powerpc: Add interrupt support to mpc8xxx_gpio")
++Signed-off-by: Pali Rohár <pali@kernel.org>
++---
++ drivers/gpio/gpio-mpc8xxx.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c
++index d60d5520707d..60c2533a39a5 100644
++--- a/drivers/gpio/gpio-mpc8xxx.c
+++++ b/drivers/gpio/gpio-mpc8xxx.c
++@@ -169,6 +169,7 @@ static int mpc8xxx_irq_set_type(struct irq_data *d, unsigned int flow_type)
++ 
++ 	switch (flow_type) {
++ 	case IRQ_TYPE_EDGE_FALLING:
+++	case IRQ_TYPE_LEVEL_LOW:
++ 		raw_spin_lock_irqsave(&mpc8xxx_gc->lock, flags);
++ 		gc->write_reg(mpc8xxx_gc->regs + GPIO_ICR,
++ 			gc->read_reg(mpc8xxx_gc->regs + GPIO_ICR)
++-- 
++2.34.1
++
+diff --git a/target/linux/mpc85xx/patches-5.15/110-gpio-mpc8xxx-Fix-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch b/target/linux/mpc85xx/patches-5.15/110-gpio-mpc8xxx-Fix-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch
+new file mode 100644
+index 0000000000..7a4075abfe
+--- /dev/null
++++ b/target/linux/mpc85xx/patches-5.15/110-gpio-mpc8xxx-Fix-support-for-IRQ_TYPE_LEVEL_LOW-flow.patch
+@@ -0,0 +1,42 @@
++From 5239046ec6af9d61429db246107289de8f43b067 Mon Sep 17 00:00:00 2001
++From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>
++Date: Mon, 5 Sep 2022 23:13:47 +0200
++Subject: [PATCH] gpio: mpc8xxx: Fix support for IRQ_TYPE_LEVEL_LOW flow_type
++ in mpc85xx
++MIME-Version: 1.0
++Content-Type: text/plain; charset=UTF-8
++Content-Transfer-Encoding: 8bit
++
++Commit e39d5ef67804 ("powerpc/5xxx: extend mpc8xxx_gpio driver to support
++mpc512x gpios") implemented support for IRQ_TYPE_LEVEL_LOW flow type in
++mpc512x via falling edge type. Do same for mpc85xx which support was added
++in commit 345e5c8a1cc3 ("powerpc: Add interrupt support to mpc8xxx_gpio").
++
++Fixes probing of lm90 hwmon driver on mpc85xx based board which use level
++interrupt. Without it kernel prints error and refuse lm90 to work:
++
++    [   15.258370] genirq: Setting trigger mode 8 for irq 49 failed (mpc8xxx_irq_set_type+0x0/0xf8)
++    [   15.267168] lm90 0-004c: cannot request IRQ 49
++    [   15.272708] lm90: probe of 0-004c failed with error -22
++
++Fixes: 345e5c8a1cc3 ("powerpc: Add interrupt support to mpc8xxx_gpio")
++Signed-off-by: Pali Rohár <pali@kernel.org>
++---
++ drivers/gpio/gpio-mpc8xxx.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c
++index a964e25ea620..763256efddc2 100644
++--- a/drivers/gpio/gpio-mpc8xxx.c
+++++ b/drivers/gpio/gpio-mpc8xxx.c
++@@ -172,6 +172,7 @@ static int mpc8xxx_irq_set_type(struct irq_data *d, unsigned int flow_type)
++ 
++ 	switch (flow_type) {
++ 	case IRQ_TYPE_EDGE_FALLING:
+++	case IRQ_TYPE_LEVEL_LOW:
++ 		raw_spin_lock_irqsave(&mpc8xxx_gc->lock, flags);
++ 		gc->write_reg(mpc8xxx_gc->regs + GPIO_ICR,
++ 			gc->read_reg(mpc8xxx_gc->regs + GPIO_ICR)
++-- 
++2.34.1
++
+-- 
+2.34.1
+
-- 
GitLab