ath79: MikroTik RB912UAG: not working Wi-Fi card in mPCIe slot

Denis K denis281089 at gmail.com
Fri Dec 10 03:13:06 PST 2021


> Thomas Hühn <thomas.huehn at hs-nordhausen.de> wrote:
>
> We have 5 Mikrotik 912UAG in our Freifunk Network and just build and updated
> them today with latest tunk .. we moved vom ar71xx to ath79 successfully,
> so far so good .. thx for your upstream work!
>
> The only thing that is not working: we can not get your 2nd wifi card in the
> mPCIe port up and running. Only the USB Port is working. We have tried
> several things to switch from USB to mPCIe .. without success:
>
> * change the dts file ar9342_mikrotik_routerboard-912uag-2hpnd.dts in
>   the gpio-export section to have usb_power output = 0 and pcie_power = 1
>   mPCIe port is powered with 3,3V (measured on in 2 & 4) but mPCIe WiFi
>   cards (ath9k - mikrotik) are not detected, tried to rescan the PCI bus
>   as well
> * change on a running 912UAG i the /sys/class/gpio/power_usb
>   ../power-pcie/values ... not WiFi Card detection
> * compare the running und working mPCIe port ar71xx image on the router ...
>   found out there is gpio52 used, but different latch setup .. our good
>   gues was that GPIO20 could be responsible for the usb switch for the mPCIe
>   port .. add gpio20 to the export folder and set it to 1.. but no WiFi card
>   detection
>
> Who has some troubleshooting tips for how to disable the usb port and enable
> the mPCIe port?

I've done some tests with RB912UAG-2HPnD and R11e-5HacT.
It seems that you need to set power-pcie gpio before pci controller
driver starts. Since it doesn't support hotplug or rescan (I suppose).
gpio-export starts after, so I've used this temporarily hack in ssr
node in dts (gpio-hog):

ssr: ssr at 1 {
    compatible = "fairchild,74hc595";
        gpio-controller;
        #gpio-cells = <2>;
        registers-number = <1>;
        reg = <1>;
        spi-max-frequency = <50000000>;

        power_pcie {
                gpio-hog;
            gpios = <7 0>;
                output-high;
        };

        power_usb {
                gpio-hog;
                gpios = <6 0>;
                output-low;
        };
};

root at OpenWrt:~# lspci
00:00.0 Class 0280: 168c:003c

This workaround works, but it is better to make pci rescan working.

power_usb and power_pcie gpio lines are on the Serial Shift Register (ssr).
It seems that RouterBoot left both =1. But SSR while init set them =0. Then
the PCI controller (arch/mips/pci-ar724x) starts... and says: "PCIe link is
down", remembers this in the internal link_up field and never re-check
AR724x_PCI_RESET_LINK_UP register bit. When link_up is false, pci read/write
handlers always return error. When I patched it to actually check link status
before reading, I had kernel panic with Device bus error when trying to read
Vendor ID from config register (see "MIPS: pci-ar724x: avoid data bus error
due to a missing PCIe module" Gabor Juhos patch). It seems that we need to
somehow reinit the PCI host controller.

Does anyone have any ideas?

Regards, Denis



More information about the openwrt-devel mailing list