[PATCH 2/2] ath79: mikrotik: Change the moment of routerboot partition parser init

Denis Kalashnikov denis281089 at gmail.com
Tue Nov 9 06:46:07 PST 2021

If kernel invokes routerboot partion parser module
(drivers/platform/mikrotik/routerboot.c) init function too early, when SPI flash
hasn't been found yet, its rb_hardconfig_init() failed with -ENODEV (since no
mtd device with name "hard_config" was found). In this case when kernel calls
ath9k probe function, it tries a sysfs fallback for loading calibration data,
but hotplug script fails to load it, since "/sys/firmware/mikrotik/hard_config"
is missing (whole "/sys/firmware/mikrotik" dir is empty, since
rb_hardconfig_init() has failed). As a result we see no phy0 and no wlan0, and
in logs we found:

root at OpenWrt:/dev# logread | grep ath9k
kern.warn kernel: [   13.818737] ath9k 18100000.wmac: Direct firmware load
  for ath9k-eeprom-ahb-18100000.wmac.bin failed with error -2
kern.warn kernel: [   13.829463] ath9k 18100000.wmac: Falling back to sysfs
  fallback for: ath9k-eeprom-ahb-18100000.wmac.bin
kern.err kernel: [   14.838766] ath: phy0: Unable to load EEPROM file
kern.err kernel: [   14.846909] ath9k 18100000.wmac: failed to initialize device
kern.warn kernel: [   14.852870] ath9k: probe of 18100000.wmac failed with error -22

We managed to fix this by changing module_init() to late_initcall()
in routerboot module:

root at OpenWrt:~# logread | grep ath
kern.warn kernel: [   13.661861] ath9k 18100000.wmac: Direct firmware load for
  ath9k-eeprom-ahb-18100000.wmac.bin failed with error -2
kern.warn kernel: [   13.672583] ath9k 18100000.wmac: Falling back to sysfs for:
kern.debug kernel: [   14.569014] ath: EEPROM regdomain sanitized
kern.debug kernel: [   14.569038] ath: EEPROM regdomain: 0x64
kern.debug kernel: [   14.569044] ath: EEPROM indicates we should expect a
  direct regpair map
kern.debug kernel: [   14.569073] ath: Country alpha2 being used: 00
kern.debug kernel: [   14.569079] ath: Regpair used: 0x64

root at OpenWrt:~# iw dev
	Interface wlan0
		ifindex 3
		wdev 0x1
		addr xx:xx:xx:xx:xx:xx
		type managed
		txpower 20.00 dBm

Signed-off-by: Denis Kalashnikov <denis281089 at gmail.com>
 .../linux/generic/files/drivers/platform/mikrotik/routerboot.c  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/target/linux/generic/files/drivers/platform/mikrotik/routerboot.c b/target/linux/generic/files/drivers/platform/mikrotik/routerboot.c
index 4c8c0bfac5..e5745c88a9 100644
--- a/target/linux/generic/files/drivers/platform/mikrotik/routerboot.c
+++ b/target/linux/generic/files/drivers/platform/mikrotik/routerboot.c
@@ -210,7 +210,7 @@ ssize_t routerboot_tag_show_u32s(const u8 *pld, u16 pld_len, char *buf)
 	return out - buf;

More information about the openwrt-devel mailing list