mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-20 06:08:08 +00:00
brcm47xx: backport upstream patches for Netgear WNR1000 V3
This includes fix for reading NVRAM content. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
parent
751746c736
commit
b1f5dd34ed
@ -0,0 +1,96 @@
|
|||||||
|
From 88b882ba0b0b7439d16d2c9df7f111cdf793443b Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Sun, 8 Apr 2018 22:39:15 +0200
|
||||||
|
Subject: [PATCH] MIPS: BCM47XX: Add support for Netgear WNR1000 V3
|
||||||
|
|
||||||
|
This adds support for detecting this model board and registers some LEDs
|
||||||
|
and buttons.
|
||||||
|
|
||||||
|
There are two uncommon things regarding this device:
|
||||||
|
1) It can use two different "board_id" ID values.
|
||||||
|
Unit I have uses "U12H139T00_NETGEAR" value. This magic is also used
|
||||||
|
in firmware file header. There are two reports (one from an OpenWrt
|
||||||
|
user) of a different "U12H139T50_NETGEAR" magic though.
|
||||||
|
2) Power LEDs share GPIOs with buttons.
|
||||||
|
Amber one seems to share GPIO 2 with WPS button and green one seems
|
||||||
|
to share GPIO 3 with reset button. It remains unknown how to support
|
||||||
|
them and handle buttons at the same time. For that reason they aren't
|
||||||
|
added to the list of supported LEDs.
|
||||||
|
---
|
||||||
|
arch/mips/bcm47xx/board.c | 2 ++
|
||||||
|
arch/mips/bcm47xx/buttons.c | 9 +++++++++
|
||||||
|
arch/mips/bcm47xx/leds.c | 9 +++++++++
|
||||||
|
arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 1 +
|
||||||
|
4 files changed, 21 insertions(+)
|
||||||
|
|
||||||
|
--- a/arch/mips/bcm47xx/board.c
|
||||||
|
+++ b/arch/mips/bcm47xx/board.c
|
||||||
|
@@ -172,6 +172,8 @@ struct bcm47xx_board_type_list1 bcm47xx_
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNDR4000, "Netgear WNDR4000"}, "U12H181T00_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNDR4500V1, "Netgear WNDR4500 V1"}, "U12H189T00_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNDR4500V2, "Netgear WNDR4500 V2"}, "U12H224T00_NETGEAR"},
|
||||||
|
+ {{BCM47XX_BOARD_NETGEAR_WNR1000_V3, "Netgear WNR1000 V3"}, "U12H139T00_NETGEAR"},
|
||||||
|
+ {{BCM47XX_BOARD_NETGEAR_WNR1000_V3, "Netgear WNR1000 V3"}, "U12H139T50_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNR2000, "Netgear WNR2000"}, "U12H114T00_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNR3500L, "Netgear WNR3500L"}, "U12H136T99_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNR3500U, "Netgear WNR3500U"}, "U12H136T00_NETGEAR"},
|
||||||
|
--- a/arch/mips/bcm47xx/buttons.c
|
||||||
|
+++ b/arch/mips/bcm47xx/buttons.c
|
||||||
|
@@ -412,6 +412,12 @@ bcm47xx_buttons_netgear_wndr4500v1[] __i
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct gpio_keys_button
|
||||||
|
+bcm47xx_buttons_netgear_wnr1000_v3[] __initconst = {
|
||||||
|
+ BCM47XX_GPIO_KEY(2, KEY_WPS_BUTTON),
|
||||||
|
+ BCM47XX_GPIO_KEY(3, KEY_RESTART),
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const struct gpio_keys_button
|
||||||
|
bcm47xx_buttons_netgear_wnr3500lv1[] __initconst = {
|
||||||
|
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
||||||
|
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
||||||
|
@@ -670,6 +676,9 @@ int __init bcm47xx_buttons_register(void
|
||||||
|
case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
|
||||||
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500v1);
|
||||||
|
break;
|
||||||
|
+ case BCM47XX_BOARD_NETGEAR_WNR1000_V3:
|
||||||
|
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr1000_v3);
|
||||||
|
+ break;
|
||||||
|
case BCM47XX_BOARD_NETGEAR_WNR3500L:
|
||||||
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr3500lv1);
|
||||||
|
break;
|
||||||
|
--- a/arch/mips/bcm47xx/leds.c
|
||||||
|
+++ b/arch/mips/bcm47xx/leds.c
|
||||||
|
@@ -498,6 +498,12 @@ bcm47xx_leds_netgear_wndr4500v1[] __init
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct gpio_led
|
||||||
|
+bcm47xx_leds_netgear_wnr1000_v3[] __initconst = {
|
||||||
|
+ BCM47XX_GPIO_LED(0, "blue", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
|
+ BCM47XX_GPIO_LED(1, "green", "wps", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const struct gpio_led
|
||||||
|
bcm47xx_leds_netgear_wnr3500lv1[] __initconst = {
|
||||||
|
BCM47XX_GPIO_LED(0, "blue", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
|
BCM47XX_GPIO_LED(1, "green", "wps", 1, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
|
@@ -758,6 +764,9 @@ void __init bcm47xx_leds_register(void)
|
||||||
|
case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
|
||||||
|
bcm47xx_set_pdata(bcm47xx_leds_netgear_wndr4500v1);
|
||||||
|
break;
|
||||||
|
+ case BCM47XX_BOARD_NETGEAR_WNR1000_V3:
|
||||||
|
+ bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr1000_v3);
|
||||||
|
+ break;
|
||||||
|
case BCM47XX_BOARD_NETGEAR_WNR3500L:
|
||||||
|
bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr3500lv1);
|
||||||
|
break;
|
||||||
|
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||||
|
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||||
|
@@ -110,6 +110,7 @@ enum bcm47xx_board {
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNDR4000,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNDR4500V1,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNDR4500V2,
|
||||||
|
+ BCM47XX_BOARD_NETGEAR_WNR1000_V3,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNR2000,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNR3500L,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNR3500U,
|
@ -0,0 +1,24 @@
|
|||||||
|
From 663beaeacf2552ed07405e69e96a18775e069eab Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Sun, 8 Apr 2018 22:51:08 +0200
|
||||||
|
Subject: [PATCH] firmware: bcm47xx_nvram: support small (0x6000 B) NVRAM
|
||||||
|
partitions
|
||||||
|
|
||||||
|
Some old devices with 4 MiB flashes were using 0x1000 block size and
|
||||||
|
could use smaller (0x6000 bytes) flash partition for storing NVRAM
|
||||||
|
content. This adds support for reading NVRAM on Netgear WNR1000 V3.
|
||||||
|
---
|
||||||
|
drivers/firmware/broadcom/bcm47xx_nvram.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/firmware/broadcom/bcm47xx_nvram.c
|
||||||
|
+++ b/drivers/firmware/broadcom/bcm47xx_nvram.c
|
||||||
|
@@ -36,7 +36,7 @@ struct nvram_header {
|
||||||
|
|
||||||
|
static char nvram_buf[NVRAM_SPACE];
|
||||||
|
static size_t nvram_len;
|
||||||
|
-static const u32 nvram_sizes[] = {0x8000, 0xF000, 0x10000};
|
||||||
|
+static const u32 nvram_sizes[] = {0x6000, 0x8000, 0xF000, 0x10000};
|
||||||
|
|
||||||
|
static u32 find_nvram_size(void __iomem *end)
|
||||||
|
{
|
@ -21,14 +21,6 @@
|
|||||||
{{BCM47XX_BOARD_NETGEAR_WNDR3300, "Netgear WNDR3300"}, "U12H093T00_NETGEAR"},
|
{{BCM47XX_BOARD_NETGEAR_WNDR3300, "Netgear WNDR3300"}, "U12H093T00_NETGEAR"},
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR3400V1, "Netgear WNDR3400 V1"}, "U12H155T00_NETGEAR"},
|
{{BCM47XX_BOARD_NETGEAR_WNDR3400V1, "Netgear WNDR3400 V1"}, "U12H155T00_NETGEAR"},
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR3400V2, "Netgear WNDR3400 V2"}, "U12H187T00_NETGEAR"},
|
{{BCM47XX_BOARD_NETGEAR_WNDR3400V2, "Netgear WNDR3400 V2"}, "U12H187T00_NETGEAR"},
|
||||||
@@ -172,6 +176,7 @@ struct bcm47xx_board_type_list1 bcm47xx_
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR4000, "Netgear WNDR4000"}, "U12H181T00_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR4500V1, "Netgear WNDR4500 V1"}, "U12H189T00_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR4500V2, "Netgear WNDR4500 V2"}, "U12H224T00_NETGEAR"},
|
|
||||||
+ {{BCM47XX_BOARD_NETGEAR_WNR1000_V3, "Netgear WNR1000 V3"}, "U12H139T50_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNR2000, "Netgear WNR2000"}, "U12H114T00_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNR3500L, "Netgear WNR3500L"}, "U12H136T99_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNR3500U, "Netgear WNR3500U"}, "U12H136T00_NETGEAR"},
|
|
||||||
--- a/arch/mips/bcm47xx/buttons.c
|
--- a/arch/mips/bcm47xx/buttons.c
|
||||||
+++ b/arch/mips/bcm47xx/buttons.c
|
+++ b/arch/mips/bcm47xx/buttons.c
|
||||||
@@ -27,6 +27,12 @@
|
@@ -27,6 +27,12 @@
|
||||||
@ -81,19 +73,7 @@
|
|||||||
bcm47xx_buttons_netgear_wndr3400v1[] __initconst = {
|
bcm47xx_buttons_netgear_wndr3400v1[] __initconst = {
|
||||||
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
||||||
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
||||||
@@ -412,6 +441,11 @@ bcm47xx_buttons_netgear_wndr4500v1[] __i
|
@@ -471,6 +500,9 @@ int __init bcm47xx_buttons_register(void
|
||||||
};
|
|
||||||
|
|
||||||
static const struct gpio_keys_button
|
|
||||||
+bcm47xx_buttons_netgear_wnr1000_v3[] __initconst = {
|
|
||||||
+ BCM47XX_GPIO_KEY(3, KEY_RESTART),
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static const struct gpio_keys_button
|
|
||||||
bcm47xx_buttons_netgear_wnr3500lv1[] __initconst = {
|
|
||||||
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
|
||||||
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
|
||||||
@@ -465,6 +499,9 @@ int __init bcm47xx_buttons_register(void
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
switch (board) {
|
switch (board) {
|
||||||
@ -103,7 +83,7 @@
|
|||||||
case BCM47XX_BOARD_ASUS_RTN12:
|
case BCM47XX_BOARD_ASUS_RTN12:
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn12);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn12);
|
||||||
break;
|
break;
|
||||||
@@ -595,6 +632,12 @@ int __init bcm47xx_buttons_register(void
|
@@ -601,6 +633,12 @@ int __init bcm47xx_buttons_register(void
|
||||||
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1);
|
||||||
break;
|
break;
|
||||||
@ -116,7 +96,7 @@
|
|||||||
case BCM47XX_BOARD_LINKSYS_WRT54G3GV2:
|
case BCM47XX_BOARD_LINKSYS_WRT54G3GV2:
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g3gv2);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g3gv2);
|
||||||
break;
|
break;
|
||||||
@@ -658,6 +701,12 @@ int __init bcm47xx_buttons_register(void
|
@@ -664,6 +702,12 @@ int __init bcm47xx_buttons_register(void
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gv2v3);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gv2v3);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -129,16 +109,6 @@
|
|||||||
case BCM47XX_BOARD_NETGEAR_WNDR3400V1:
|
case BCM47XX_BOARD_NETGEAR_WNDR3400V1:
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3400v1);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3400v1);
|
||||||
break;
|
break;
|
||||||
@@ -670,6 +719,9 @@ int __init bcm47xx_buttons_register(void
|
|
||||||
case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
|
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500v1);
|
|
||||||
break;
|
|
||||||
+ case BCM47XX_BOARD_NETGEAR_WNR1000_V3:
|
|
||||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr1000_v3);
|
|
||||||
+ break;
|
|
||||||
case BCM47XX_BOARD_NETGEAR_WNR3500L:
|
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr3500lv1);
|
|
||||||
break;
|
|
||||||
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||||
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||||
@@ -72,6 +72,7 @@ enum bcm47xx_board {
|
@@ -72,6 +72,7 @@ enum bcm47xx_board {
|
||||||
@ -162,14 +132,6 @@
|
|||||||
BCM47XX_BOARD_NETGEAR_WNDR3300,
|
BCM47XX_BOARD_NETGEAR_WNDR3300,
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR3400V1,
|
BCM47XX_BOARD_NETGEAR_WNDR3400V1,
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR3400V2,
|
BCM47XX_BOARD_NETGEAR_WNDR3400V2,
|
||||||
@@ -110,6 +114,7 @@ enum bcm47xx_board {
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR4000,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR4500V1,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR4500V2,
|
|
||||||
+ BCM47XX_BOARD_NETGEAR_WNR1000_V3,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNR2000,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNR3500L,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNR3500U,
|
|
||||||
--- a/arch/mips/bcm47xx/leds.c
|
--- a/arch/mips/bcm47xx/leds.c
|
||||||
+++ b/arch/mips/bcm47xx/leds.c
|
+++ b/arch/mips/bcm47xx/leds.c
|
||||||
@@ -30,6 +30,14 @@
|
@@ -30,6 +30,14 @@
|
||||||
@ -201,7 +163,7 @@
|
|||||||
bcm47xx_leds_linksys_wrt54g_generic[] __initconst = {
|
bcm47xx_leds_linksys_wrt54g_generic[] __initconst = {
|
||||||
BCM47XX_GPIO_LED(0, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF),
|
BCM47XX_GPIO_LED(0, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON),
|
BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON),
|
||||||
@@ -550,6 +565,9 @@ void __init bcm47xx_leds_register(void)
|
@@ -556,6 +571,9 @@ void __init bcm47xx_leds_register(void)
|
||||||
enum bcm47xx_board board = bcm47xx_board_get();
|
enum bcm47xx_board board = bcm47xx_board_get();
|
||||||
|
|
||||||
switch (board) {
|
switch (board) {
|
||||||
@ -211,7 +173,7 @@
|
|||||||
case BCM47XX_BOARD_ASUS_RTN12:
|
case BCM47XX_BOARD_ASUS_RTN12:
|
||||||
bcm47xx_set_pdata(bcm47xx_leds_asus_rtn12);
|
bcm47xx_set_pdata(bcm47xx_leds_asus_rtn12);
|
||||||
break;
|
break;
|
||||||
@@ -683,6 +701,9 @@ void __init bcm47xx_leds_register(void)
|
@@ -689,6 +707,9 @@ void __init bcm47xx_leds_register(void)
|
||||||
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
||||||
bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt310nv1);
|
bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt310nv1);
|
||||||
break;
|
break;
|
||||||
|
@ -245,7 +245,7 @@ out the configuration than the in kernel cfe config reader.
|
|||||||
@@ -37,6 +37,8 @@ struct nvram_header {
|
@@ -37,6 +37,8 @@ struct nvram_header {
|
||||||
static char nvram_buf[NVRAM_SPACE];
|
static char nvram_buf[NVRAM_SPACE];
|
||||||
static size_t nvram_len;
|
static size_t nvram_len;
|
||||||
static const u32 nvram_sizes[] = {0x8000, 0xF000, 0x10000};
|
static const u32 nvram_sizes[] = {0x6000, 0x8000, 0xF000, 0x10000};
|
||||||
+static int cfe_env;
|
+static int cfe_env;
|
||||||
+extern char *cfe_env_get(char *nv_buf, const char *name);
|
+extern char *cfe_env_get(char *nv_buf, const char *name);
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
+char nvram_buf[NVRAM_SPACE];
|
+char nvram_buf[NVRAM_SPACE];
|
||||||
+EXPORT_SYMBOL(nvram_buf);
|
+EXPORT_SYMBOL(nvram_buf);
|
||||||
static size_t nvram_len;
|
static size_t nvram_len;
|
||||||
static const u32 nvram_sizes[] = {0x8000, 0xF000, 0x10000};
|
static const u32 nvram_sizes[] = {0x6000, 0x8000, 0xF000, 0x10000};
|
||||||
static int cfe_env;
|
static int cfe_env;
|
||||||
--- a/arch/mips/mm/cache.c
|
--- a/arch/mips/mm/cache.c
|
||||||
+++ b/arch/mips/mm/cache.c
|
+++ b/arch/mips/mm/cache.c
|
||||||
|
@ -0,0 +1,96 @@
|
|||||||
|
From 88b882ba0b0b7439d16d2c9df7f111cdf793443b Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Sun, 8 Apr 2018 22:39:15 +0200
|
||||||
|
Subject: [PATCH] MIPS: BCM47XX: Add support for Netgear WNR1000 V3
|
||||||
|
|
||||||
|
This adds support for detecting this model board and registers some LEDs
|
||||||
|
and buttons.
|
||||||
|
|
||||||
|
There are two uncommon things regarding this device:
|
||||||
|
1) It can use two different "board_id" ID values.
|
||||||
|
Unit I have uses "U12H139T00_NETGEAR" value. This magic is also used
|
||||||
|
in firmware file header. There are two reports (one from an OpenWrt
|
||||||
|
user) of a different "U12H139T50_NETGEAR" magic though.
|
||||||
|
2) Power LEDs share GPIOs with buttons.
|
||||||
|
Amber one seems to share GPIO 2 with WPS button and green one seems
|
||||||
|
to share GPIO 3 with reset button. It remains unknown how to support
|
||||||
|
them and handle buttons at the same time. For that reason they aren't
|
||||||
|
added to the list of supported LEDs.
|
||||||
|
---
|
||||||
|
arch/mips/bcm47xx/board.c | 2 ++
|
||||||
|
arch/mips/bcm47xx/buttons.c | 9 +++++++++
|
||||||
|
arch/mips/bcm47xx/leds.c | 9 +++++++++
|
||||||
|
arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 1 +
|
||||||
|
4 files changed, 21 insertions(+)
|
||||||
|
|
||||||
|
--- a/arch/mips/bcm47xx/board.c
|
||||||
|
+++ b/arch/mips/bcm47xx/board.c
|
||||||
|
@@ -171,6 +171,8 @@ struct bcm47xx_board_type_list1 bcm47xx_
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNDR4000, "Netgear WNDR4000"}, "U12H181T00_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNDR4500V1, "Netgear WNDR4500 V1"}, "U12H189T00_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNDR4500V2, "Netgear WNDR4500 V2"}, "U12H224T00_NETGEAR"},
|
||||||
|
+ {{BCM47XX_BOARD_NETGEAR_WNR1000_V3, "Netgear WNR1000 V3"}, "U12H139T00_NETGEAR"},
|
||||||
|
+ {{BCM47XX_BOARD_NETGEAR_WNR1000_V3, "Netgear WNR1000 V3"}, "U12H139T50_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNR2000, "Netgear WNR2000"}, "U12H114T00_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNR3500L, "Netgear WNR3500L"}, "U12H136T99_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNR3500U, "Netgear WNR3500U"}, "U12H136T00_NETGEAR"},
|
||||||
|
--- a/arch/mips/bcm47xx/buttons.c
|
||||||
|
+++ b/arch/mips/bcm47xx/buttons.c
|
||||||
|
@@ -411,6 +411,12 @@ bcm47xx_buttons_netgear_wndr4500v1[] __i
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct gpio_keys_button
|
||||||
|
+bcm47xx_buttons_netgear_wnr1000_v3[] __initconst = {
|
||||||
|
+ BCM47XX_GPIO_KEY(2, KEY_WPS_BUTTON),
|
||||||
|
+ BCM47XX_GPIO_KEY(3, KEY_RESTART),
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const struct gpio_keys_button
|
||||||
|
bcm47xx_buttons_netgear_wnr3500lv1[] __initconst = {
|
||||||
|
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
||||||
|
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
||||||
|
@@ -669,6 +675,9 @@ int __init bcm47xx_buttons_register(void
|
||||||
|
case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
|
||||||
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500v1);
|
||||||
|
break;
|
||||||
|
+ case BCM47XX_BOARD_NETGEAR_WNR1000_V3:
|
||||||
|
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr1000_v3);
|
||||||
|
+ break;
|
||||||
|
case BCM47XX_BOARD_NETGEAR_WNR3500L:
|
||||||
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr3500lv1);
|
||||||
|
break;
|
||||||
|
--- a/arch/mips/bcm47xx/leds.c
|
||||||
|
+++ b/arch/mips/bcm47xx/leds.c
|
||||||
|
@@ -497,6 +497,12 @@ bcm47xx_leds_netgear_wndr4500v1[] __init
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct gpio_led
|
||||||
|
+bcm47xx_leds_netgear_wnr1000_v3[] __initconst = {
|
||||||
|
+ BCM47XX_GPIO_LED(0, "blue", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
|
+ BCM47XX_GPIO_LED(1, "green", "wps", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const struct gpio_led
|
||||||
|
bcm47xx_leds_netgear_wnr3500lv1[] __initconst = {
|
||||||
|
BCM47XX_GPIO_LED(0, "blue", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
|
BCM47XX_GPIO_LED(1, "green", "wps", 1, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
|
@@ -757,6 +763,9 @@ void __init bcm47xx_leds_register(void)
|
||||||
|
case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
|
||||||
|
bcm47xx_set_pdata(bcm47xx_leds_netgear_wndr4500v1);
|
||||||
|
break;
|
||||||
|
+ case BCM47XX_BOARD_NETGEAR_WNR1000_V3:
|
||||||
|
+ bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr1000_v3);
|
||||||
|
+ break;
|
||||||
|
case BCM47XX_BOARD_NETGEAR_WNR3500L:
|
||||||
|
bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr3500lv1);
|
||||||
|
break;
|
||||||
|
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||||
|
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||||
|
@@ -109,6 +109,7 @@ enum bcm47xx_board {
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNDR4000,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNDR4500V1,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNDR4500V2,
|
||||||
|
+ BCM47XX_BOARD_NETGEAR_WNR1000_V3,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNR2000,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNR3500L,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNR3500U,
|
@ -0,0 +1,24 @@
|
|||||||
|
From 663beaeacf2552ed07405e69e96a18775e069eab Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Sun, 8 Apr 2018 22:51:08 +0200
|
||||||
|
Subject: [PATCH] firmware: bcm47xx_nvram: support small (0x6000 B) NVRAM
|
||||||
|
partitions
|
||||||
|
|
||||||
|
Some old devices with 4 MiB flashes were using 0x1000 block size and
|
||||||
|
could use smaller (0x6000 bytes) flash partition for storing NVRAM
|
||||||
|
content. This adds support for reading NVRAM on Netgear WNR1000 V3.
|
||||||
|
---
|
||||||
|
drivers/firmware/broadcom/bcm47xx_nvram.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/firmware/broadcom/bcm47xx_nvram.c
|
||||||
|
+++ b/drivers/firmware/broadcom/bcm47xx_nvram.c
|
||||||
|
@@ -36,7 +36,7 @@ struct nvram_header {
|
||||||
|
|
||||||
|
static char nvram_buf[NVRAM_SPACE];
|
||||||
|
static size_t nvram_len;
|
||||||
|
-static const u32 nvram_sizes[] = {0x8000, 0xF000, 0x10000};
|
||||||
|
+static const u32 nvram_sizes[] = {0x6000, 0x8000, 0xF000, 0x10000};
|
||||||
|
|
||||||
|
static u32 find_nvram_size(void __iomem *end)
|
||||||
|
{
|
@ -21,14 +21,6 @@
|
|||||||
{{BCM47XX_BOARD_NETGEAR_WNDR3300, "Netgear WNDR3300"}, "U12H093T00_NETGEAR"},
|
{{BCM47XX_BOARD_NETGEAR_WNDR3300, "Netgear WNDR3300"}, "U12H093T00_NETGEAR"},
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR3400V1, "Netgear WNDR3400 V1"}, "U12H155T00_NETGEAR"},
|
{{BCM47XX_BOARD_NETGEAR_WNDR3400V1, "Netgear WNDR3400 V1"}, "U12H155T00_NETGEAR"},
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR3400V2, "Netgear WNDR3400 V2"}, "U12H187T00_NETGEAR"},
|
{{BCM47XX_BOARD_NETGEAR_WNDR3400V2, "Netgear WNDR3400 V2"}, "U12H187T00_NETGEAR"},
|
||||||
@@ -171,6 +175,7 @@ struct bcm47xx_board_type_list1 bcm47xx_
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR4000, "Netgear WNDR4000"}, "U12H181T00_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR4500V1, "Netgear WNDR4500 V1"}, "U12H189T00_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR4500V2, "Netgear WNDR4500 V2"}, "U12H224T00_NETGEAR"},
|
|
||||||
+ {{BCM47XX_BOARD_NETGEAR_WNR1000_V3, "Netgear WNR1000 V3"}, "U12H139T50_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNR2000, "Netgear WNR2000"}, "U12H114T00_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNR3500L, "Netgear WNR3500L"}, "U12H136T99_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNR3500U, "Netgear WNR3500U"}, "U12H136T00_NETGEAR"},
|
|
||||||
--- a/arch/mips/bcm47xx/buttons.c
|
--- a/arch/mips/bcm47xx/buttons.c
|
||||||
+++ b/arch/mips/bcm47xx/buttons.c
|
+++ b/arch/mips/bcm47xx/buttons.c
|
||||||
@@ -26,6 +26,12 @@
|
@@ -26,6 +26,12 @@
|
||||||
@ -81,19 +73,7 @@
|
|||||||
bcm47xx_buttons_netgear_wndr3400v1[] __initconst = {
|
bcm47xx_buttons_netgear_wndr3400v1[] __initconst = {
|
||||||
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
||||||
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
||||||
@@ -411,6 +440,11 @@ bcm47xx_buttons_netgear_wndr4500v1[] __i
|
@@ -470,6 +499,9 @@ int __init bcm47xx_buttons_register(void
|
||||||
};
|
|
||||||
|
|
||||||
static const struct gpio_keys_button
|
|
||||||
+bcm47xx_buttons_netgear_wnr1000_v3[] __initconst = {
|
|
||||||
+ BCM47XX_GPIO_KEY(3, KEY_RESTART),
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static const struct gpio_keys_button
|
|
||||||
bcm47xx_buttons_netgear_wnr3500lv1[] __initconst = {
|
|
||||||
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
|
||||||
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
|
||||||
@@ -464,6 +498,9 @@ int __init bcm47xx_buttons_register(void
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
switch (board) {
|
switch (board) {
|
||||||
@ -103,7 +83,7 @@
|
|||||||
case BCM47XX_BOARD_ASUS_RTN12:
|
case BCM47XX_BOARD_ASUS_RTN12:
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn12);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn12);
|
||||||
break;
|
break;
|
||||||
@@ -594,6 +631,12 @@ int __init bcm47xx_buttons_register(void
|
@@ -600,6 +632,12 @@ int __init bcm47xx_buttons_register(void
|
||||||
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1);
|
||||||
break;
|
break;
|
||||||
@ -116,7 +96,7 @@
|
|||||||
case BCM47XX_BOARD_LINKSYS_WRT54G3GV2:
|
case BCM47XX_BOARD_LINKSYS_WRT54G3GV2:
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g3gv2);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g3gv2);
|
||||||
break;
|
break;
|
||||||
@@ -657,6 +700,12 @@ int __init bcm47xx_buttons_register(void
|
@@ -663,6 +701,12 @@ int __init bcm47xx_buttons_register(void
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gv2v3);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gv2v3);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -129,16 +109,6 @@
|
|||||||
case BCM47XX_BOARD_NETGEAR_WNDR3400V1:
|
case BCM47XX_BOARD_NETGEAR_WNDR3400V1:
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3400v1);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3400v1);
|
||||||
break;
|
break;
|
||||||
@@ -669,6 +718,9 @@ int __init bcm47xx_buttons_register(void
|
|
||||||
case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
|
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500v1);
|
|
||||||
break;
|
|
||||||
+ case BCM47XX_BOARD_NETGEAR_WNR1000_V3:
|
|
||||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr1000_v3);
|
|
||||||
+ break;
|
|
||||||
case BCM47XX_BOARD_NETGEAR_WNR3500L:
|
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr3500lv1);
|
|
||||||
break;
|
|
||||||
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||||
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||||
@@ -71,6 +71,7 @@ enum bcm47xx_board {
|
@@ -71,6 +71,7 @@ enum bcm47xx_board {
|
||||||
@ -162,14 +132,6 @@
|
|||||||
BCM47XX_BOARD_NETGEAR_WNDR3300,
|
BCM47XX_BOARD_NETGEAR_WNDR3300,
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR3400V1,
|
BCM47XX_BOARD_NETGEAR_WNDR3400V1,
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR3400V2,
|
BCM47XX_BOARD_NETGEAR_WNDR3400V2,
|
||||||
@@ -109,6 +113,7 @@ enum bcm47xx_board {
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR4000,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR4500V1,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR4500V2,
|
|
||||||
+ BCM47XX_BOARD_NETGEAR_WNR1000_V3,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNR2000,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNR3500L,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNR3500U,
|
|
||||||
--- a/arch/mips/bcm47xx/leds.c
|
--- a/arch/mips/bcm47xx/leds.c
|
||||||
+++ b/arch/mips/bcm47xx/leds.c
|
+++ b/arch/mips/bcm47xx/leds.c
|
||||||
@@ -29,6 +29,14 @@
|
@@ -29,6 +29,14 @@
|
||||||
@ -201,7 +163,7 @@
|
|||||||
bcm47xx_leds_linksys_wrt54g_generic[] __initconst = {
|
bcm47xx_leds_linksys_wrt54g_generic[] __initconst = {
|
||||||
BCM47XX_GPIO_LED(0, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF),
|
BCM47XX_GPIO_LED(0, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON),
|
BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON),
|
||||||
@@ -549,6 +564,9 @@ void __init bcm47xx_leds_register(void)
|
@@ -555,6 +570,9 @@ void __init bcm47xx_leds_register(void)
|
||||||
enum bcm47xx_board board = bcm47xx_board_get();
|
enum bcm47xx_board board = bcm47xx_board_get();
|
||||||
|
|
||||||
switch (board) {
|
switch (board) {
|
||||||
@ -211,7 +173,7 @@
|
|||||||
case BCM47XX_BOARD_ASUS_RTN12:
|
case BCM47XX_BOARD_ASUS_RTN12:
|
||||||
bcm47xx_set_pdata(bcm47xx_leds_asus_rtn12);
|
bcm47xx_set_pdata(bcm47xx_leds_asus_rtn12);
|
||||||
break;
|
break;
|
||||||
@@ -682,6 +700,9 @@ void __init bcm47xx_leds_register(void)
|
@@ -688,6 +706,9 @@ void __init bcm47xx_leds_register(void)
|
||||||
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
||||||
bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt310nv1);
|
bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt310nv1);
|
||||||
break;
|
break;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Some really old flashes (like AT45DB*) had smaller erasesize-s, but
|
* Some really old flashes (like AT45DB*) had smaller erasesize-s, but
|
||||||
@@ -384,12 +385,23 @@ static int bcm47xxpart_parse(struct mtd_
|
@@ -398,12 +399,23 @@ static int bcm47xxpart_parse(struct mtd_
|
||||||
if (buf[0] == NVRAM_HEADER) {
|
if (buf[0] == NVRAM_HEADER) {
|
||||||
bcm47xxpart_add_part(&parts[curr_part++], "nvram",
|
bcm47xxpart_add_part(&parts[curr_part++], "nvram",
|
||||||
master->size - blocksize, 0);
|
master->size - blocksize, 0);
|
||||||
|
@ -244,7 +244,7 @@ out the configuration than the in kernel cfe config reader.
|
|||||||
@@ -37,6 +37,8 @@ struct nvram_header {
|
@@ -37,6 +37,8 @@ struct nvram_header {
|
||||||
static char nvram_buf[NVRAM_SPACE];
|
static char nvram_buf[NVRAM_SPACE];
|
||||||
static size_t nvram_len;
|
static size_t nvram_len;
|
||||||
static const u32 nvram_sizes[] = {0x8000, 0xF000, 0x10000};
|
static const u32 nvram_sizes[] = {0x6000, 0x8000, 0xF000, 0x10000};
|
||||||
+static int cfe_env;
|
+static int cfe_env;
|
||||||
+extern char *cfe_env_get(char *nv_buf, const char *name);
|
+extern char *cfe_env_get(char *nv_buf, const char *name);
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
+char nvram_buf[NVRAM_SPACE];
|
+char nvram_buf[NVRAM_SPACE];
|
||||||
+EXPORT_SYMBOL(nvram_buf);
|
+EXPORT_SYMBOL(nvram_buf);
|
||||||
static size_t nvram_len;
|
static size_t nvram_len;
|
||||||
static const u32 nvram_sizes[] = {0x8000, 0xF000, 0x10000};
|
static const u32 nvram_sizes[] = {0x6000, 0x8000, 0xF000, 0x10000};
|
||||||
static int cfe_env;
|
static int cfe_env;
|
||||||
--- a/arch/mips/mm/cache.c
|
--- a/arch/mips/mm/cache.c
|
||||||
+++ b/arch/mips/mm/cache.c
|
+++ b/arch/mips/mm/cache.c
|
||||||
|
@ -0,0 +1,96 @@
|
|||||||
|
From 88b882ba0b0b7439d16d2c9df7f111cdf793443b Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Sun, 8 Apr 2018 22:39:15 +0200
|
||||||
|
Subject: [PATCH] MIPS: BCM47XX: Add support for Netgear WNR1000 V3
|
||||||
|
|
||||||
|
This adds support for detecting this model board and registers some LEDs
|
||||||
|
and buttons.
|
||||||
|
|
||||||
|
There are two uncommon things regarding this device:
|
||||||
|
1) It can use two different "board_id" ID values.
|
||||||
|
Unit I have uses "U12H139T00_NETGEAR" value. This magic is also used
|
||||||
|
in firmware file header. There are two reports (one from an OpenWrt
|
||||||
|
user) of a different "U12H139T50_NETGEAR" magic though.
|
||||||
|
2) Power LEDs share GPIOs with buttons.
|
||||||
|
Amber one seems to share GPIO 2 with WPS button and green one seems
|
||||||
|
to share GPIO 3 with reset button. It remains unknown how to support
|
||||||
|
them and handle buttons at the same time. For that reason they aren't
|
||||||
|
added to the list of supported LEDs.
|
||||||
|
---
|
||||||
|
arch/mips/bcm47xx/board.c | 2 ++
|
||||||
|
arch/mips/bcm47xx/buttons.c | 9 +++++++++
|
||||||
|
arch/mips/bcm47xx/leds.c | 9 +++++++++
|
||||||
|
arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 1 +
|
||||||
|
4 files changed, 21 insertions(+)
|
||||||
|
|
||||||
|
--- a/arch/mips/bcm47xx/board.c
|
||||||
|
+++ b/arch/mips/bcm47xx/board.c
|
||||||
|
@@ -171,6 +171,8 @@ struct bcm47xx_board_type_list1 bcm47xx_
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNDR4000, "Netgear WNDR4000"}, "U12H181T00_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNDR4500V1, "Netgear WNDR4500 V1"}, "U12H189T00_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNDR4500V2, "Netgear WNDR4500 V2"}, "U12H224T00_NETGEAR"},
|
||||||
|
+ {{BCM47XX_BOARD_NETGEAR_WNR1000_V3, "Netgear WNR1000 V3"}, "U12H139T00_NETGEAR"},
|
||||||
|
+ {{BCM47XX_BOARD_NETGEAR_WNR1000_V3, "Netgear WNR1000 V3"}, "U12H139T50_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNR2000, "Netgear WNR2000"}, "U12H114T00_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNR3500L, "Netgear WNR3500L"}, "U12H136T99_NETGEAR"},
|
||||||
|
{{BCM47XX_BOARD_NETGEAR_WNR3500U, "Netgear WNR3500U"}, "U12H136T00_NETGEAR"},
|
||||||
|
--- a/arch/mips/bcm47xx/buttons.c
|
||||||
|
+++ b/arch/mips/bcm47xx/buttons.c
|
||||||
|
@@ -411,6 +411,12 @@ bcm47xx_buttons_netgear_wndr4500v1[] __i
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct gpio_keys_button
|
||||||
|
+bcm47xx_buttons_netgear_wnr1000_v3[] __initconst = {
|
||||||
|
+ BCM47XX_GPIO_KEY(2, KEY_WPS_BUTTON),
|
||||||
|
+ BCM47XX_GPIO_KEY(3, KEY_RESTART),
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const struct gpio_keys_button
|
||||||
|
bcm47xx_buttons_netgear_wnr3500lv1[] __initconst = {
|
||||||
|
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
||||||
|
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
||||||
|
@@ -669,6 +675,9 @@ int __init bcm47xx_buttons_register(void
|
||||||
|
case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
|
||||||
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500v1);
|
||||||
|
break;
|
||||||
|
+ case BCM47XX_BOARD_NETGEAR_WNR1000_V3:
|
||||||
|
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr1000_v3);
|
||||||
|
+ break;
|
||||||
|
case BCM47XX_BOARD_NETGEAR_WNR3500L:
|
||||||
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr3500lv1);
|
||||||
|
break;
|
||||||
|
--- a/arch/mips/bcm47xx/leds.c
|
||||||
|
+++ b/arch/mips/bcm47xx/leds.c
|
||||||
|
@@ -497,6 +497,12 @@ bcm47xx_leds_netgear_wndr4500v1[] __init
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct gpio_led
|
||||||
|
+bcm47xx_leds_netgear_wnr1000_v3[] __initconst = {
|
||||||
|
+ BCM47XX_GPIO_LED(0, "blue", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
|
+ BCM47XX_GPIO_LED(1, "green", "wps", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const struct gpio_led
|
||||||
|
bcm47xx_leds_netgear_wnr3500lv1[] __initconst = {
|
||||||
|
BCM47XX_GPIO_LED(0, "blue", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
|
BCM47XX_GPIO_LED(1, "green", "wps", 1, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
|
@@ -757,6 +763,9 @@ void __init bcm47xx_leds_register(void)
|
||||||
|
case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
|
||||||
|
bcm47xx_set_pdata(bcm47xx_leds_netgear_wndr4500v1);
|
||||||
|
break;
|
||||||
|
+ case BCM47XX_BOARD_NETGEAR_WNR1000_V3:
|
||||||
|
+ bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr1000_v3);
|
||||||
|
+ break;
|
||||||
|
case BCM47XX_BOARD_NETGEAR_WNR3500L:
|
||||||
|
bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr3500lv1);
|
||||||
|
break;
|
||||||
|
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||||
|
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||||
|
@@ -109,6 +109,7 @@ enum bcm47xx_board {
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNDR4000,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNDR4500V1,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNDR4500V2,
|
||||||
|
+ BCM47XX_BOARD_NETGEAR_WNR1000_V3,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNR2000,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNR3500L,
|
||||||
|
BCM47XX_BOARD_NETGEAR_WNR3500U,
|
@ -0,0 +1,24 @@
|
|||||||
|
From 663beaeacf2552ed07405e69e96a18775e069eab Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Sun, 8 Apr 2018 22:51:08 +0200
|
||||||
|
Subject: [PATCH] firmware: bcm47xx_nvram: support small (0x6000 B) NVRAM
|
||||||
|
partitions
|
||||||
|
|
||||||
|
Some old devices with 4 MiB flashes were using 0x1000 block size and
|
||||||
|
could use smaller (0x6000 bytes) flash partition for storing NVRAM
|
||||||
|
content. This adds support for reading NVRAM on Netgear WNR1000 V3.
|
||||||
|
---
|
||||||
|
drivers/firmware/broadcom/bcm47xx_nvram.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/firmware/broadcom/bcm47xx_nvram.c
|
||||||
|
+++ b/drivers/firmware/broadcom/bcm47xx_nvram.c
|
||||||
|
@@ -36,7 +36,7 @@ struct nvram_header {
|
||||||
|
|
||||||
|
static char nvram_buf[NVRAM_SPACE];
|
||||||
|
static size_t nvram_len;
|
||||||
|
-static const u32 nvram_sizes[] = {0x8000, 0xF000, 0x10000};
|
||||||
|
+static const u32 nvram_sizes[] = {0x6000, 0x8000, 0xF000, 0x10000};
|
||||||
|
|
||||||
|
static u32 find_nvram_size(void __iomem *end)
|
||||||
|
{
|
@ -21,14 +21,6 @@
|
|||||||
{{BCM47XX_BOARD_NETGEAR_WNDR3300, "Netgear WNDR3300"}, "U12H093T00_NETGEAR"},
|
{{BCM47XX_BOARD_NETGEAR_WNDR3300, "Netgear WNDR3300"}, "U12H093T00_NETGEAR"},
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR3400V1, "Netgear WNDR3400 V1"}, "U12H155T00_NETGEAR"},
|
{{BCM47XX_BOARD_NETGEAR_WNDR3400V1, "Netgear WNDR3400 V1"}, "U12H155T00_NETGEAR"},
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR3400V2, "Netgear WNDR3400 V2"}, "U12H187T00_NETGEAR"},
|
{{BCM47XX_BOARD_NETGEAR_WNDR3400V2, "Netgear WNDR3400 V2"}, "U12H187T00_NETGEAR"},
|
||||||
@@ -171,6 +175,7 @@ struct bcm47xx_board_type_list1 bcm47xx_
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR4000, "Netgear WNDR4000"}, "U12H181T00_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR4500V1, "Netgear WNDR4500 V1"}, "U12H189T00_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNDR4500V2, "Netgear WNDR4500 V2"}, "U12H224T00_NETGEAR"},
|
|
||||||
+ {{BCM47XX_BOARD_NETGEAR_WNR1000_V3, "Netgear WNR1000 V3"}, "U12H139T50_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNR2000, "Netgear WNR2000"}, "U12H114T00_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNR3500L, "Netgear WNR3500L"}, "U12H136T99_NETGEAR"},
|
|
||||||
{{BCM47XX_BOARD_NETGEAR_WNR3500U, "Netgear WNR3500U"}, "U12H136T00_NETGEAR"},
|
|
||||||
--- a/arch/mips/bcm47xx/buttons.c
|
--- a/arch/mips/bcm47xx/buttons.c
|
||||||
+++ b/arch/mips/bcm47xx/buttons.c
|
+++ b/arch/mips/bcm47xx/buttons.c
|
||||||
@@ -26,6 +26,12 @@
|
@@ -26,6 +26,12 @@
|
||||||
@ -81,19 +73,7 @@
|
|||||||
bcm47xx_buttons_netgear_wndr3400v1[] __initconst = {
|
bcm47xx_buttons_netgear_wndr3400v1[] __initconst = {
|
||||||
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
||||||
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
||||||
@@ -411,6 +440,11 @@ bcm47xx_buttons_netgear_wndr4500v1[] __i
|
@@ -470,6 +499,9 @@ int __init bcm47xx_buttons_register(void
|
||||||
};
|
|
||||||
|
|
||||||
static const struct gpio_keys_button
|
|
||||||
+bcm47xx_buttons_netgear_wnr1000_v3[] __initconst = {
|
|
||||||
+ BCM47XX_GPIO_KEY(3, KEY_RESTART),
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static const struct gpio_keys_button
|
|
||||||
bcm47xx_buttons_netgear_wnr3500lv1[] __initconst = {
|
|
||||||
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
|
||||||
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
|
||||||
@@ -464,6 +498,9 @@ int __init bcm47xx_buttons_register(void
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
switch (board) {
|
switch (board) {
|
||||||
@ -103,7 +83,7 @@
|
|||||||
case BCM47XX_BOARD_ASUS_RTN12:
|
case BCM47XX_BOARD_ASUS_RTN12:
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn12);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn12);
|
||||||
break;
|
break;
|
||||||
@@ -594,6 +631,12 @@ int __init bcm47xx_buttons_register(void
|
@@ -600,6 +632,12 @@ int __init bcm47xx_buttons_register(void
|
||||||
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1);
|
||||||
break;
|
break;
|
||||||
@ -116,7 +96,7 @@
|
|||||||
case BCM47XX_BOARD_LINKSYS_WRT54G3GV2:
|
case BCM47XX_BOARD_LINKSYS_WRT54G3GV2:
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g3gv2);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g3gv2);
|
||||||
break;
|
break;
|
||||||
@@ -657,6 +700,12 @@ int __init bcm47xx_buttons_register(void
|
@@ -663,6 +701,12 @@ int __init bcm47xx_buttons_register(void
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gv2v3);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gv2v3);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -129,16 +109,6 @@
|
|||||||
case BCM47XX_BOARD_NETGEAR_WNDR3400V1:
|
case BCM47XX_BOARD_NETGEAR_WNDR3400V1:
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3400v1);
|
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3400v1);
|
||||||
break;
|
break;
|
||||||
@@ -669,6 +718,9 @@ int __init bcm47xx_buttons_register(void
|
|
||||||
case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
|
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500v1);
|
|
||||||
break;
|
|
||||||
+ case BCM47XX_BOARD_NETGEAR_WNR1000_V3:
|
|
||||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr1000_v3);
|
|
||||||
+ break;
|
|
||||||
case BCM47XX_BOARD_NETGEAR_WNR3500L:
|
|
||||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr3500lv1);
|
|
||||||
break;
|
|
||||||
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||||
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||||
@@ -71,6 +71,7 @@ enum bcm47xx_board {
|
@@ -71,6 +71,7 @@ enum bcm47xx_board {
|
||||||
@ -162,14 +132,6 @@
|
|||||||
BCM47XX_BOARD_NETGEAR_WNDR3300,
|
BCM47XX_BOARD_NETGEAR_WNDR3300,
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR3400V1,
|
BCM47XX_BOARD_NETGEAR_WNDR3400V1,
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR3400V2,
|
BCM47XX_BOARD_NETGEAR_WNDR3400V2,
|
||||||
@@ -109,6 +113,7 @@ enum bcm47xx_board {
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR4000,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR4500V1,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNDR4500V2,
|
|
||||||
+ BCM47XX_BOARD_NETGEAR_WNR1000_V3,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNR2000,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNR3500L,
|
|
||||||
BCM47XX_BOARD_NETGEAR_WNR3500U,
|
|
||||||
--- a/arch/mips/bcm47xx/leds.c
|
--- a/arch/mips/bcm47xx/leds.c
|
||||||
+++ b/arch/mips/bcm47xx/leds.c
|
+++ b/arch/mips/bcm47xx/leds.c
|
||||||
@@ -29,6 +29,14 @@
|
@@ -29,6 +29,14 @@
|
||||||
@ -201,7 +163,7 @@
|
|||||||
bcm47xx_leds_linksys_wrt54g_generic[] __initconst = {
|
bcm47xx_leds_linksys_wrt54g_generic[] __initconst = {
|
||||||
BCM47XX_GPIO_LED(0, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF),
|
BCM47XX_GPIO_LED(0, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF),
|
||||||
BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON),
|
BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON),
|
||||||
@@ -549,6 +564,9 @@ void __init bcm47xx_leds_register(void)
|
@@ -555,6 +570,9 @@ void __init bcm47xx_leds_register(void)
|
||||||
enum bcm47xx_board board = bcm47xx_board_get();
|
enum bcm47xx_board board = bcm47xx_board_get();
|
||||||
|
|
||||||
switch (board) {
|
switch (board) {
|
||||||
@ -211,7 +173,7 @@
|
|||||||
case BCM47XX_BOARD_ASUS_RTN12:
|
case BCM47XX_BOARD_ASUS_RTN12:
|
||||||
bcm47xx_set_pdata(bcm47xx_leds_asus_rtn12);
|
bcm47xx_set_pdata(bcm47xx_leds_asus_rtn12);
|
||||||
break;
|
break;
|
||||||
@@ -682,6 +700,9 @@ void __init bcm47xx_leds_register(void)
|
@@ -688,6 +706,9 @@ void __init bcm47xx_leds_register(void)
|
||||||
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
||||||
bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt310nv1);
|
bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt310nv1);
|
||||||
break;
|
break;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Some really old flashes (like AT45DB*) had smaller erasesize-s, but
|
* Some really old flashes (like AT45DB*) had smaller erasesize-s, but
|
||||||
@@ -269,12 +270,23 @@ static int bcm47xxpart_parse(struct mtd_
|
@@ -283,12 +284,23 @@ static int bcm47xxpart_parse(struct mtd_
|
||||||
if (buf[0] == NVRAM_HEADER) {
|
if (buf[0] == NVRAM_HEADER) {
|
||||||
bcm47xxpart_add_part(&parts[curr_part++], "nvram",
|
bcm47xxpart_add_part(&parts[curr_part++], "nvram",
|
||||||
master->size - blocksize, 0);
|
master->size - blocksize, 0);
|
||||||
|
@ -245,7 +245,7 @@ out the configuration than the in kernel cfe config reader.
|
|||||||
@@ -37,6 +37,8 @@ struct nvram_header {
|
@@ -37,6 +37,8 @@ struct nvram_header {
|
||||||
static char nvram_buf[NVRAM_SPACE];
|
static char nvram_buf[NVRAM_SPACE];
|
||||||
static size_t nvram_len;
|
static size_t nvram_len;
|
||||||
static const u32 nvram_sizes[] = {0x8000, 0xF000, 0x10000};
|
static const u32 nvram_sizes[] = {0x6000, 0x8000, 0xF000, 0x10000};
|
||||||
+static int cfe_env;
|
+static int cfe_env;
|
||||||
+extern char *cfe_env_get(char *nv_buf, const char *name);
|
+extern char *cfe_env_get(char *nv_buf, const char *name);
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
+char nvram_buf[NVRAM_SPACE];
|
+char nvram_buf[NVRAM_SPACE];
|
||||||
+EXPORT_SYMBOL(nvram_buf);
|
+EXPORT_SYMBOL(nvram_buf);
|
||||||
static size_t nvram_len;
|
static size_t nvram_len;
|
||||||
static const u32 nvram_sizes[] = {0x8000, 0xF000, 0x10000};
|
static const u32 nvram_sizes[] = {0x6000, 0x8000, 0xF000, 0x10000};
|
||||||
static int cfe_env;
|
static int cfe_env;
|
||||||
--- a/arch/mips/mm/cache.c
|
--- a/arch/mips/mm/cache.c
|
||||||
+++ b/arch/mips/mm/cache.c
|
+++ b/arch/mips/mm/cache.c
|
||||||
|
Loading…
Reference in New Issue
Block a user