Bug#908438: cubietruck wifi reversion
Hi Hans,
On Sun, Sep 30, 2018 at 05:07:39PM +0200, Hans de Goede wrote:
> Hi all,
>
> I've hit this problem myself this weekend on both a
> Cubietruck and on a "LeMaker Banana Pro.
>
> For me the problem was intermittent on both devices, once
> it happened it seems to require a power-cycle to fix.
>
> Once things work one can safely reboot without hitting
> the issue.
>
> I'm attaching a patch which fixes this problem for me,
> it is more of a workaround but it does not have much of
> a downside. Using an OOB IRQ instead of the sdio-IRQ
> mechanism is mostly important to allow the MMC controller
> to go into runtime-suspend which is not really an issue
> on these boards since they are (usually) not battery
> powered.
>
> Regards,
>
> Hans
>
> >From 34de386e5a1113360c967ba9f76901282e46a415 Mon Sep 17 00:00:00 2001
> From: Hans de Goede <hdegoede@redhat.com>
> Date: Sun, 30 Sep 2018 16:58:52 +0200
> Subject: [PATCH resend] ARM: dts: sun7i: Disable OOB IRQ for brcm wifi on
> Cubietruck and Banana Pro
>
> While doing some brcmfmac driver work I needed to test this also on some
> devicetree based boards. So I fired up the good old Cubietruck and when
> that would not work a Banana Pro.
>
> With an unmodified 4.17 kernel both boards intermittently would come up
> with non working wifi with the following errors:
>
> brcmfmac: brcmf_sdio_bus_rxctl: resumed on timeout
> brcmfmac: brcmf_bus_started: failed: -110
> brcmfmac: brcmf_attach: dongle is not responding: err=-110
> brcmfmac: brcmf_sdio_firmware_callback: brcmf_attach failed
>
> They would come up this way more often then with actual working wifi,
> once this problem happens it seems to require a power-cycle to fix.
> Once things work one can safely reboot without hitting the issue.
>
> I've found that disabling OOB interrupts fixes this. This really is more
> of a workaround then a proper fix, but it makes the wifi reliable again
> and it does not have much of a downside.
>
> Using an OOB IRQ instead of the sdio-IRQ mechanism is mostly important to
> allow the MMC controller to go into runtime-suspend which is not really an
> issue on these boards since they are (usually) not battery powered.
>
> I've looked at recent brcmfmac and mmc-core changes which may explain this
> and I've not found anything. So the most likely culprit is the A20 external
> interrupt handling e.g. perhaps it is set to edge instead of level? Either
> way I do not have time to further investigate this.
>
> BugLink: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=908438
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
> arch/arm/boot/dts/sun7i-a20-bananapro.dts | 16 +++++++++++++---
> arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 16 +++++++++++++---
> 2 files changed, 26 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm/boot/dts/sun7i-a20-bananapro.dts b/arch/arm/boot/dts/sun7i-a20-bananapro.dts
> index 0898eb6162f5..0e1ddd998b20 100644
> --- a/arch/arm/boot/dts/sun7i-a20-bananapro.dts
> +++ b/arch/arm/boot/dts/sun7i-a20-bananapro.dts
> @@ -174,9 +174,19 @@
> brcmf: wifi@1 {
> reg = <1>;
> compatible = "brcm,bcm4329-fmac";
> - interrupt-parent = <&pio>;
> - interrupts = <7 15 IRQ_TYPE_LEVEL_LOW>;
> - interrupt-names = "host-wake";
> + /*
> + * OOB interrupt support is broken ATM, often the first irq
> + * does not get seen resulting in the drv probe failing with:
> + *
> + * brcmfmac: brcmf_sdio_bus_rxctl: resumed on timeout
> + * brcmfmac: brcmf_bus_started: failed: -110
> + * brcmfmac: brcmf_attach: dongle is not responding: err=-110
> + * brcmfmac: brcmf_sdio_firmware_callback: brcmf_attach failed
> + *
> + * interrupt-parent = <&pio>;
> + * interrupts = <7 15 IRQ_TYPE_LEVEL_LOW>;
> + * interrupt-names = "host-wake";
> + */
> };
> };
>
> diff --git a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
> index 5649161de1d7..a837516db6f9 100644
> --- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
> +++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
> @@ -222,9 +222,19 @@
> brcmf: wifi@1 {
> reg = <1>;
> compatible = "brcm,bcm4329-fmac";
> - interrupt-parent = <&pio>;
> - interrupts = <7 10 IRQ_TYPE_LEVEL_LOW>; /* PH10 / EINT10 */
> - interrupt-names = "host-wake";
> + /*
> + * OOB interrupt support is broken ATM, often the first irq
> + * does not get seen resulting in the drv probe failing with:
> + *
> + * brcmfmac: brcmf_sdio_bus_rxctl: resumed on timeout
> + * brcmfmac: brcmf_bus_started: failed: -110
> + * brcmfmac: brcmf_attach: dongle is not responding: err=-110
> + * brcmfmac: brcmf_sdio_firmware_callback: brcmf_attach failed
> + *
> + * interrupt-parent = <&pio>;
> + * interrupts = <7 10 IRQ_TYPE_LEVEL_LOW>; /* PH10 / EINT10 */
> + * interrupt-names = "host-wake";
> + */
> };
> };
Can you report this to upstream directly? (Please keep the Debian bug
into the loop).
Regards,
Salvatore
Reply to: