Hi,
There seems to be an issue with GPIO as interrupt on LS2088A. We managed to reproduce the issue on LS2088A RDB. We modified the RDB so that IRQ04 can be externally triggerred .
Made changes to RCW to configure IRQ04 as GPIO3_28.
We tested on LSDK19.06. There seems to be issue with mpc8xxx-gpio driver for LS2088A.
[root@TinyLSDK ~]$ uname -a
Linux TinyLSDK 4.19.46 #2 SMP PREEMPT Tue Sep 10 10:38:00 UTC 2019 aarch64 GNU/Linux
[root@TinyLSDK ~]$ echo 444 > /sys/class/gpio/export
[root@TinyLSDK ~]$ echo "in" > /sys/class/gpio/gpio444/direction
[root@TinyLSDK ~]$ cat /sys/class/gpio/gpio444/value
1
We are able to readback the changed value.
[root@TinyLSDK ~]$ cat /sys/class/gpio/gpio444/value
0
echo falling > /sys/class/gpio/gpio444/edge
[root@TinyLSDK ~]$ cat /sys/class/gpio/gpio444/value
0
[root@TinyLSDK ~]$ cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
1: 0 0 0 0 0 0 0 0 GICv3 25 Level vgic
3: 1439 808 958 1010 965 963 1556 836 GICv3 30 Level arch_timer
4: 0 0 0 0 0 0 0 0 GICv3 27 Level kvm guest timer
6: 0 0 0 0 0 0 0 0 GICv3 23 Level arm-pmu
8: 671 0 0 0 0 0 0 0 GICv3 64 Level ttyS1
11: 0 0 0 0 0 0 0 0 GICv3 45 Level arm-smmu global fault
12: 0 0 0 0 0 0 0 0 GICv3 46 Level arm-smmu global fault
13: 0 0 0 0 0 0 0 0 GICv3 47 Level arm-smmu global fault
14: 0 0 0 0 0 0 0 0 GICv3 48 Level arm-smmu global fault
15: 0 0 0 0 0 0 0 0 GICv3 243 Level arm-smmu global fault
16: 0 0 0 0 0 0 0 0 GICv3 244 Level arm-smmu global fault
17: 0 0 0 0 0 0 0 0 GICv3 245 Level arm-smmu global fault
18: 0 0 0 0 0 0 0 0 GICv3 246 Level arm-smmu global fault
19: 0 0 0 0 0 0 0 0 GICv3 247 Level arm-smmu global fault
20: 0 0 0 0 0 0 0 0 GICv3 248 Level arm-smmu global fault
21: 0 0 0 0 0 0 0 0 GICv3 249 Level arm-smmu global fault
22: 0 0 0 0 0 0 0 0 GICv3 250 Level arm-smmu global fault
23: 0 0 0 0 0 0 0 0 GICv3 178 Level arm-smmu-context-fault
87: 7 0 0 0 0 0 0 0 GICv3 58 Level 2100000.spi
88: 0 0 0 0 0 0 0 0 GICv3 60 Level mmc0
91: 4073 0 0 0 0 0 0 0 GICv3 66 Level 2000000.i2c
92: 9 0 0 0 0 0 0 0 GICv3 53 Level fsl-ifc
93: 1 0 0 0 0 0 0 0 GICv3 57 Level
96: 0 0 0 0 0 0 0 0 GICv3 165 Level ahci-qoriq[3200000.sata]
97: 0 0 0 0 0 0 0 0 GICv3 168 Level ahci-qoriq[3210000.sata]
98: 1 0 0 0 0 0 0 0 GICv3 112 Level xhci-hcd:usb1
99: 1 0 0 0 0 0 0 0 GICv3 113 Level xhci-hcd:usb3
101: 0 0 0 0 0 0 0 0 GICv3 76 Level 2800000.ftm0
112: 2 0 0 0 0 0 0 0 GICv3 172 Level 8010000.jr
113: 0 0 0 0 0 0 0 0 GICv3 173 Level 8020000.jr
114: 0 0 0 0 0 0 0 0 GICv3 174 Level 8030000.jr
115: 0 0 0 0 0 0 0 0 mpc8xxx-gpio 28 Edge gpiolib
IPI0: 907 940 695 811 682 1050 4144 755 Rescheduling interrupts
IPI1: 4 7 8 9 9 7 7 8 Function call interrupts
IPI2: 0 0 0 0 0 0 0 0 CPU stop interrupts
IPI3: 0 0 0 0 0 0 0 0 CPU stop (for crash dump) interrupts
IPI4: 0 0 0 0 0 0 0 0 Timer broadcast interrupts
IPI5: 0 0 0 0 0 0 0 0 IRQ work interrupts
IPI6: 0 0 0 0 0 0 0 0 CPU wake-up interrupts
Err: 0
When we trigger interrupts, we get stalls on CPUs
[root@TinyLSDK ~]$ [ 122.771222] rcu: INFO: rcu_preempt detected stalls on CPUs/tasks:
[ 122.775217] rcu: INFO: rcu_sched detected stalls on CPUs/tasks:
[ 122.777316] rcu: 0-....: (46 GPs behind) idle=2a2/0/0x1 softirq=1109/1109 fqs=2625
[ 122.777323] rcu: 0-....: (22 GPs behind) idle=2a2/0/0x3 softirq=1109/1109 fqs=2626
[ 122.783231] rcu:
[ 122.790966] rcu:
[ 122.798702] (detected by 3, t=5252 jiffies, g=129, q=110)
[ 122.800704] (detected by 4, t=5252 jiffies, g=-751, q=21)
[ 122.802706] Task dump for CPU 0:
[ 122.808095] Task dump for CPU 0:
[ 122.813484] swapper/0 R
[ 122.816702] swapper/0 R
[ 122.819918] running task
[ 122.822876] running task
[ 122.825834] 0 0 0 0x0000002a
[ 122.825836] Call trace:
[ 122.828880] 0 0 0 0x0000002a
[ 122.828882] Call trace:
[ 122.831934] __switch_to+0xa0/0xe8
[ 122.831937] 0x60000005
[ 122.835940] __switch_to+0xa0/0xe8
[ 122.835943] 0x60000005