ar71xx: WNR612v2: fix kernel panic due to wrong Wifi LED init
authorMichal Cieslakiewicz <michal.cieslakiewicz@wp.pl>
Mon, 27 Aug 2018 18:24:04 +0000 (20:24 +0200)
committerMathias Kresin <dev@kresin.me>
Tue, 28 Aug 2018 05:21:01 +0000 (07:21 +0200)
Netgear WNR612v2 flashed with recent OpenWrt builds suffers from kernel
panic at boot during wireless chip initialization, making device
unusable:

 ath: phy0: Ignoring endianness difference in EEPROM magic bytes.
 ath: phy0: Enable LNA combining
 CPU 0 Unable to handle kernel paging request at virtual address 1000fee1, epc == 801d08f0, ra == 801d0d90
 Oops[#1]:
 CPU: 0 PID: 469 Comm: kmodloader Not tainted 4.9.120 #0
 [ ... register dump etc ... ]
 Kernel panic - not syncing: Fatal exception
 Rebooting in 1 seconds..

This simple patch fixes above error. It keeps LED table in memory after
kernel init phase for ath9k driver to operate correctly (__initdata
removed).

Also, another bug is fixed - correct array size is provided to function
that adds platform LEDs (this device has only 1 connected to Wifi chip)
preventing code from going outside array bounds.

Fixes: 1f5ea4eae46e ("ar71xx: add correct named default wireless led by using platform leds")
Signed-off-by: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl>
[trimmed commit message]
Signed-off-by: Mathias Kresin <dev@kresin.me>
target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2000-v3.c

index 6c18dc6d904c915fb43a0e182b23a0e6215dbb54..76c9cb99c9bb94de216f7239738e9f8d9a76f736 100644 (file)
@@ -197,7 +197,7 @@ static struct gpio_led wnr612v2_leds_gpio[] __initdata = {
        }
 };
 
        }
 };
 
-static struct gpio_led wnr612v2_wmac_leds_gpio[] __initdata = {
+static struct gpio_led wnr612v2_wmac_leds_gpio[] = {
        {
                .name           = "netgear:green:wlan",
                .gpio           = WNR612V2_GPIO_WMAC_LED_WLAN_GREEN,
        {
                .name           = "netgear:green:wlan",
                .gpio           = WNR612V2_GPIO_WMAC_LED_WLAN_GREEN,
@@ -561,7 +561,7 @@ static void __init wnr612v2_setup(void)
                                 wnr612v2_leds_gpio);
 
        ap9x_pci_setup_wmac_leds(0, wnr612v2_wmac_leds_gpio,
                                 wnr612v2_leds_gpio);
 
        ap9x_pci_setup_wmac_leds(0, wnr612v2_wmac_leds_gpio,
-                                ARRAY_SIZE(wnr612v2_leds_gpio));
+                                ARRAY_SIZE(wnr612v2_wmac_leds_gpio));
 
        ap9x_pci_setup_wmac_btns(0, wnr612v2_wmac_keys_gpio,
                                 ARRAY_SIZE(wnr612v2_wmac_keys_gpio),
 
        ap9x_pci_setup_wmac_btns(0, wnr612v2_wmac_keys_gpio,
                                 ARRAY_SIZE(wnr612v2_wmac_keys_gpio),