Re: [PATCH 1/2] irqchip: irq-meson-gpio: make it possible to build as a module
From: Neil Armstrong <hidden>
Date: 2021-08-03 09:52:07
Also in:
linux-amlogic, lkml
On 03/08/2021 11:44, Marc Zyngier wrote:
On Mon, 14 Jun 2021 23:30:22 +0100, Kevin Hilman [off-list ref] wrote:quoted
Marc Zyngier [off-list ref] writes:quoted
On Fri, 21 May 2021 10:47:48 +0100, Lee Jones [off-list ref] wrote:quoted
[1 <text/plain; UTF-8 (quoted-printable)>] On Tue, 20 Oct 2020 at 19:23, Kevin Hilman [off-list ref] wrote:quoted
Neil Armstrong [off-list ref] writes:quoted
In order to reduce the kernel Image size on multi-platform distributions, make it possible to build the Amlogic GPIO IRQ controller as a module by switching it to a platform driver. Signed-off-by: Neil Armstrong <redacted>Reviewed-by: Kevin Hilman <khilman@baylibre.com> Tested-by: Kevin Hilman <khilman@baylibre.com> Tested as a module on meson-sm1-khadas-vim3l where the wired networking uses GPIO IRQs.Good morning Neil, Kevin, What happened to this set in the end? I still don't see it in Mainline.Last time I tried this patch, it broke my test setup in non-obvious ways. Has someone checked that the issue I reported back then has been resolved now that fw_devlink is more usable?OK, after much anticipation (and much delay due to me forgetting about this), I just gave this series a spin again on top of v5.13-rc6, and it seems to work fine with `fw_devlink=on` I started with your config[1] and accepting all the defaults of any new configs. IOW, I ran: yes '' | make oldconfig after copying your config to .config. With that it seems to be working fine for me. Right after boot (and before network probes) I see module loaded, but no users yet in /proc/interrupts: / # uname -a Linux buildroot 5.13.0-rc6-00002-g679c8e852942 #5 SMP PREEMPT Mon Jun 14 15:08:40 PDT 2021 aarch64 GNU/Linux / # lsmod |grep gpio irq_meson_gpio 20480 0 leds_gpio 16384 0 / # cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 9: 0 0 0 0 GICv2 25 Level vgic 11: 0 0 0 0 GICv2 30 Level kvm guest ptimer 12: 0 0 0 0 GICv2 27 Level kvm guest vtimer 13: 1416 916 534 1421 GICv2 26 Level arch_timer 15: 5 0 0 0 GICv2 89 Edge dw_hdmi_top_irq, ff600000.hdmi-tx 22: 38 0 0 0 GICv2 225 Edge ttyAML0 23: 20 0 0 0 GICv2 227 Edge ff805000.i2c 25: 2 0 0 0 GICv2 232 Edge ff809000.adc 28: 322 0 0 0 GICv2 35 Edge meson 31: 0 0 0 0 GICv2 222 Edge ffe05000.sd 32: 787 0 0 0 GICv2 223 Edge ffe07000.mmc 34: 0 0 0 0 GICv2 194 Level panfrost-job 35: 0 0 0 0 GICv2 193 Level panfrost-mmu 36: 3 0 0 0 GICv2 192 Level panfrost-gpu 39: 0 0 0 0 GICv2 63 Level ff400000.usb, ff400000.usb 40: 32 0 0 0 GICv2 62 Level xhci-hcd:usb1 IPI0: 425 544 664 925 Rescheduling interrupts IPI1: 86 166 269 136 Function call interrupts IPI2: 0 0 0 0 CPU stop interrupts IPI3: 0 0 0 0 CPU stop (for crash dump) interrupts IPI4: 0 0 0 0 Timer broadcast interrupts IPI5: 0 0 0 0 IRQ work interrupts IPI6: 0 0 0 0 CPU wake-up interrupts Err: 0 So then I init the network interface and PHY works, DHCP works etc. / # udhcpc udhcpc: started, v1.31.1 [ 102.250449] meson8b-dwmac ff3f0000.ethernet eth0: PHY [0.0:00] driver [RTL8211F Gigabit Ethernet] (irq=37) [ 102.256413] meson8b-dwmac ff3f0000.ethernet eth0: Register MEM_TYPE_PAGE_POOL RxQ-0 [ 102.269433] meson8b-dwmac ff3f0000.ethernet eth0: No Safety Features support found [ 102.271357] meson8b-dwmac ff3f0000.ethernet eth0: PTP not supported by HW [ 102.278493] meson8b-dwmac ff3f0000.ethernet eth0: configuring for phy/rgmii link mode udhcpc: sending discover [ 104.743301] meson8b-dwmac ff3f0000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx [ 104.746470] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready udhcpc: sending discover udhcpc: sending select for 192.168.0.122 udhcpc: lease of 192.168.0.122 obtained, lease time 600 deleting routers adding dns 192.168.0.254 adding dns 192.168.0.254 / # cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 9: 0 0 0 0 GICv2 25 Level vgic 11: 0 0 0 0 GICv2 30 Level kvm guest ptimer 12: 0 0 0 0 GICv2 27 Level kvm guest vtimer 13: 1575 1018 604 1588 GICv2 26 Level arch_timer 14: 8 0 0 0 GICv2 40 Level eth0 15: 5 0 0 0 GICv2 89 Edge dw_hdmi_top_irq, ff600000.hdmi-tx 22: 132 0 0 0 GICv2 225 Edge ttyAML0 23: 20 0 0 0 GICv2 227 Edge ff805000.i2c 25: 2 0 0 0 GICv2 232 Edge ff809000.adc 28: 322 0 0 0 GICv2 35 Edge meson 31: 0 0 0 0 GICv2 222 Edge ffe05000.sd 32: 787 0 0 0 GICv2 223 Edge ffe07000.mmc 34: 0 0 0 0 GICv2 194 Level panfrost-job 35: 0 0 0 0 GICv2 193 Level panfrost-mmu 36: 3 0 0 0 GICv2 192 Level panfrost-gpu 37: 2 0 0 0 meson-gpio-irqchip 26 Level 0.0:00 39: 0 0 0 0 GICv2 63 Level ff400000.usb, ff400000.usb 40: 32 0 0 0 GICv2 62 Level xhci-hcd:usb1 IPI0: 476 567 720 956 Rescheduling interrupts IPI1: 93 166 270 137 Function call interrupts IPI2: 0 0 0 0 CPU stop interrupts IPI3: 0 0 0 0 CPU stop (for crash dump) interrupts IPI4: 0 0 0 0 Timer broadcast interrupts IPI5: 0 0 0 0 IRQ work interrupts IPI6: 0 0 0 0 CPU wake-up interrupts Err: 0 / #This thing keeps failing on my end. It only works if I force the irqchip module to be present before the MDIO module is loaded. Here's an example: root@tiger-roach:~# modprobe mdio_mux_meson_g12a [ 125.871544] libphy: mdio_mux: probed [ 125.882575] g12a-mdio_mux ff64c000.mdio-multiplexer: Error: Failed to register MDIO bus for child /soc/bus@ff600000/mdio-multiplexer@4c000/mdio@0 [ 125.892630] libphy: mdio_mux: probed
This error is caused because the PHY in the mdio@0 sub-bus cannot get the IRQ from the irq-meson-gpio driver, so it may be a dependency issue causing the PHY not probing the irq-meson-gpio node. IRQ management from PHY drivers is weird, because the core request the IRQ instead of the PHY driver. maybe causing fw_devlink issue not detecting the link. Neil
Trying to bring up the Ethernet interface will fail. Note that there was no attempt to load the irqchip driver. root@tiger-roach:~# modprobe -r mdio_mux_meson_g12a root@tiger-roach:~# modprobe irq-meson-gpio [ 144.983344] meson-gpio-intc ffd0f080.interrupt-controller: 100 to 8 gpio interrupt mux initialized root@tiger-roach:~# modprobe mdio_mux_meson_g12a [ 150.376464] libphy: mdio_mux: probed [ 150.391039] libphy: mdio_mux: probed And it now works. Is it a MDIO issue? a fw_devlink issue? No idea. But I'd really like to see this addressed before taking this patch, as everything works just fine as long as the irqchip is built in (which on its own could well pure luck). Saravana, could you please have a look from a fw_devlink perspective? Thanks, M.
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel