[brcm63xx] add neufbox 4 board support, thx Miguel & Florian
authorRaphaël Huck <rhk@cksum.org>
Tue, 27 Apr 2010 13:49:31 +0000 (13:49 +0000)
committerRaphaël Huck <rhk@cksum.org>
Tue, 27 Apr 2010 13:49:31 +0000 (13:49 +0000)
SVN-Revision: 21193

target/linux/brcm63xx/config-2.6.32
target/linux/brcm63xx/patches-2.6.32/221-board-NB4.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-2.6.33/221-board-NB4.patch [new file with mode: 0644]

index d435f329d7b0095dd50091f8f1e53f51417252d5..f308e2f2ba27917151af0aa3776ea71d489b3551 100644 (file)
@@ -82,6 +82,7 @@ CONFIG_GENERIC_GPIO=y
 CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
 CONFIG_GPIOLIB=y
 CONFIG_GPIO_DEVICE=y
+CONFIG_GPIO_NXP_74HC164=y
 CONFIG_GPIO_SYSFS=y
 # CONFIG_HAMRADIO is not set
 CONFIG_HARDWARE_WATCHPOINTS=y
diff --git a/target/linux/brcm63xx/patches-2.6.32/221-board-NB4.patch b/target/linux/brcm63xx/patches-2.6.32/221-board-NB4.patch
new file mode 100644 (file)
index 0000000..6e58b5f
--- /dev/null
@@ -0,0 +1,517 @@
+--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
+@@ -17,6 +17,7 @@
+ #include <linux/ssb/ssb.h>
+ #include <linux/gpio_buttons.h>
+ #include <linux/input.h>
++#include <linux/nxp_74hc164.h>
+ #include <asm/addrspace.h>
+ #include <bcm63xx_board.h>
+ #include <bcm63xx_cpu.h>
+@@ -33,6 +34,12 @@
+ #define PFX   "board_bcm963xx: "
++#define NEUFBOX4_PID_OFFSET           0xff80
++#define NEUFBOX4_EXP_GPIO_BASE                64
++#define NEUFBOX4_GPIO_74HC164_DATA    7
++#define NEUFBOX4_GPIO_74HC164_CLK     6
++#define NXP_74HC64_GPIO(X)            (NEUFBOX4_EXP_GPIO_BASE + (X))
++
+ static struct bcm963xx_nvram nvram;
+ static unsigned int mac_addr_used;
+ static struct board_info board;
+@@ -713,6 +720,441 @@ static struct board_info __initdata boar
+       .has_ohci0 = 1,
+ };
++
++static struct nxp_74hc164_platform_data neufbox4_74hc164_data = {
++      .gpio_base      = NEUFBOX4_EXP_GPIO_BASE,
++      .gpio_pin_data  = NEUFBOX4_GPIO_74HC164_DATA,
++      .gpio_pin_clk   = NEUFBOX4_GPIO_74HC164_CLK,
++
++};
++
++static struct platform_device neufbox4_74hc164 = {
++      .name           = NXP_74HC164_DRIVER_NAME,
++      .id             = -1,
++      .dev = {
++              .platform_data  = &neufbox4_74hc164_data,
++      }
++};
++
++static struct platform_device * __initdata neufbox4_devices[] = {
++      &neufbox4_74hc164,
++};
++
++static struct board_info __initdata board_nb4_ser_r0 = {
++      .name                           = "NB4-SER-r0",
++      .expected_cpu_id                = 0x6358,
++
++      .has_enet0                      = 1,
++      .has_enet1                      = 1,
++      .has_pci                        = 1,
++
++      .enet0 = {
++              .has_phy                = 1,
++              .use_internal_phy       = 1,
++      },
++
++      .enet1 = {
++              .force_speed_100        = 1,
++              .force_duplex_full      = 1,
++      },
++
++
++      .has_ohci0 = 1,
++      .has_pccard = 1,
++      .has_ehci0 = 1,
++
++      .has_udc0                       = 1,
++
++      .leds = {
++              {
++                      .name           = "adsl",
++                      .gpio           = NXP_74HC64_GPIO(4),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "traffic",
++                      .gpio           = 2,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tel",
++                      .gpio           = NXP_74HC64_GPIO(3),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tv",
++                      .gpio           = NXP_74HC64_GPIO(2),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "wifi",
++                      .gpio           = 15,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "alarm",
++                      .gpio           = NXP_74HC64_GPIO(0),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:red",
++                      .gpio           = 29,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:green",
++                      .gpio           = 30,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:blue",
++                      .gpio           = 4,
++                      .active_low     = 1,
++              },
++      },
++      .reset_buttons = {
++              {
++                      .desc           = "reset",
++                      .gpio           = 34,
++                      .active_low     = 1,
++                      .type           = EV_KEY,
++                      .code           = BTN_0,
++                      .threshold      = 3,
++              },
++      },
++      .devs = neufbox4_devices,
++      .num_devs = ARRAY_SIZE(neufbox4_devices),
++};
++
++static struct board_info __initdata board_nb4_ser_r1 = {
++      .name                           = "NB4-SER-r1",
++      .expected_cpu_id                = 0x6358,
++
++      .has_enet0                      = 1,
++      .has_enet1                      = 1,
++      .has_pci                        = 1,
++
++      .enet0 = {
++              .has_phy                = 1,
++              .use_internal_phy       = 1,
++      },
++
++      .enet1 = {
++              .force_speed_100        = 1,
++              .force_duplex_full      = 1,
++      },
++
++
++      .has_ohci0 = 1,
++      .has_pccard = 1,
++      .has_ehci0 = 1,
++
++      .has_udc0                       = 1,
++
++      .leds = {
++              {
++                      .name           = "adsl",
++                      .gpio           = NXP_74HC64_GPIO(4),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "traffic",
++                      .gpio           = 2,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tel",
++                      .gpio           = NXP_74HC64_GPIO(3),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tv",
++                      .gpio           = NXP_74HC64_GPIO(2),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "wifi",
++                      .gpio           = 15,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "alarm",
++                      .gpio           = NXP_74HC64_GPIO(0),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:red",
++                      .gpio           = 29,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:green",
++                      .gpio           = 30,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:blue",
++                      .gpio           = 4,
++                      .active_low     = 1,
++              },
++      },
++      .reset_buttons = {
++              {
++                      .desc           = "reset",
++                      .gpio           = 34,
++                      .active_low     = 1,
++                      .type           = EV_KEY,
++                      .code           = BTN_0,
++                      .threshold      = 3,
++              },
++      },
++      .devs = neufbox4_devices,
++      .num_devs = ARRAY_SIZE(neufbox4_devices),
++};
++
++static struct board_info __initdata board_nb4_ser_r2 = {
++      .name                           = "NB4-SER-r2",
++      .expected_cpu_id                = 0x6358,
++
++      .has_enet0                      = 1,
++      .has_enet1                      = 1,
++      .has_pci                        = 1,
++
++      .enet0 = {
++              .has_phy                = 1,
++              .use_internal_phy       = 1,
++      },
++
++      .enet1 = {
++              .force_speed_100        = 1,
++              .force_duplex_full      = 1,
++      },
++
++
++      .has_ohci0 = 1,
++      .has_pccard = 1,
++      .has_ehci0 = 1,
++
++      .leds = {
++              {
++                      .name           = "adsl",
++                      .gpio           = NXP_74HC64_GPIO(4),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "traffic",
++                      .gpio           = 2,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tel",
++                      .gpio           = NXP_74HC64_GPIO(3),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tv",
++                      .gpio           = NXP_74HC64_GPIO(2),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "wifi",
++                      .gpio           = 15,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "alarm",
++                      .gpio           = NXP_74HC64_GPIO(0),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:red",
++                      .gpio           = 29,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:green",
++                      .gpio           = 30,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:blue",
++                      .gpio           = 4,
++                      .active_low     = 1,
++              },
++      },
++      .reset_buttons = {
++              {
++                      .desc           = "reset",
++                      .gpio           = 34,
++                      .active_low     = 1,
++                      .type           = EV_KEY,
++                      .code           = BTN_0,
++                      .threshold      = 3,
++              },
++      },
++      .devs = neufbox4_devices,
++      .num_devs = ARRAY_SIZE(neufbox4_devices),
++};
++
++static struct board_info __initdata board_nb4_fxc_r1 = {
++      .name                           = "NB4-FXC-r1",
++      .expected_cpu_id                = 0x6358,
++
++      .has_enet0                      = 1,
++      .has_enet1                      = 1,
++      .has_pci                        = 1,
++
++      .enet0 = {
++              .has_phy                = 1,
++              .use_internal_phy       = 1,
++      },
++
++      .enet1 = {
++              .force_speed_100        = 1,
++              .force_duplex_full      = 1,
++      },
++
++
++      .has_ohci0 = 1,
++      .has_pccard = 1,
++      .has_ehci0 = 1,
++
++      .has_udc0                       = 1,
++
++      .leds = {
++              {
++                      .name           = "adsl",
++                      .gpio           = NXP_74HC64_GPIO(4),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "traffic",
++                      .gpio           = 2,
++              },
++              {
++                      .name           = "tel",
++                      .gpio           = NXP_74HC64_GPIO(3),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tv",
++                      .gpio           = NXP_74HC64_GPIO(2),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "wifi",
++                      .gpio           = 15,
++              },
++              {
++                      .name           = "alarm",
++                      .gpio           = NXP_74HC64_GPIO(0),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:red",
++                      .gpio           = 29,
++              },
++              {
++                      .name           = "service:green",
++                      .gpio           = 30,
++              },
++              {
++                      .name           = "service:blue",
++                      .gpio           = 4,
++              },
++      },
++      .reset_buttons = {
++              {
++                      .desc           = "reset",
++                      .gpio           = 34,
++                      .active_low     = 1,
++                      .type           = EV_KEY,
++                      .code           = BTN_0,
++                      .threshold      = 3,
++              },
++      },
++      .devs = neufbox4_devices,
++      .num_devs = ARRAY_SIZE(neufbox4_devices),
++};
++
++static struct board_info __initdata board_nb4_fxc_r2 = {
++      .name                           = "NB4-FXC-r2",
++      .expected_cpu_id                = 0x6358,
++
++      .has_enet0                      = 1,
++      .has_enet1                      = 1,
++      .has_pci                        = 1,
++
++      .enet0 = {
++              .has_phy                = 1,
++              .use_internal_phy       = 1,
++      },
++
++      .enet1 = {
++              .force_speed_100        = 1,
++              .force_duplex_full      = 1,
++      },
++
++
++      .has_ohci0 = 1,
++      .has_pccard = 1,
++      .has_ehci0 = 1,
++
++      .leds = {
++              {
++                      .name           = "adsl",
++                      .gpio           = NXP_74HC64_GPIO(4),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "traffic",
++                      .gpio           = 2,
++              },
++              {
++                      .name           = "tel",
++                      .gpio           = NXP_74HC64_GPIO(3),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tv",
++                      .gpio           = NXP_74HC64_GPIO(2),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "wifi",
++                      .gpio           = 15,
++              },
++              {
++                      .name           = "alarm",
++                      .gpio           = NXP_74HC64_GPIO(0),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:red",
++                      .gpio           = 29,
++              },
++              {
++                      .name           = "service:green",
++                      .gpio           = 30,
++              },
++              {
++                      .name           = "service:blue",
++                      .gpio           = 4,
++              },
++      },
++      .reset_buttons = {
++              {
++                      .desc           = "reset",
++                      .gpio           = 34,
++                      .active_low     = 1,
++                      .type           = EV_KEY,
++                      .code           = BTN_0,
++                      .threshold      = 3,
++              },
++      },
++      .devs = neufbox4_devices,
++      .num_devs = ARRAY_SIZE(neufbox4_devices),
++};
+ #endif
+ /*
+@@ -743,9 +1185,30 @@ static const struct board_info __initdat
+       &board_96358vw2,
+       &board_AGPFS0,
+       &board_DWVS0,
++      &board_nb4_ser_r0,
++      &board_nb4_ser_r1,
++      &board_nb4_ser_r2,
++      &board_nb4_fxc_r1,
++      &board_nb4_fxc_r2,
+ #endif
+ };
++static void __init neufbox4_nvram_fixup(void)
++{
++      u8 *boot_addr, *p;
++      u32 val;
++
++      if (BCMCPU_IS_6358() && (!strcmp(nvram.name, "96358VW"))) {
++              val = bcm_mpi_readl(MPI_CSBASE_REG(0));
++              val &= MPI_CSBASE_BASE_MASK;
++              boot_addr = (u8 *)KSEG1ADDR(val);
++              /* Extract neufbox4 PID */
++              p = boot_addr + NEUFBOX4_PID_OFFSET;
++              if (!memcmp(p, "NB4-", 4))
++                      memcpy(nvram.name, p, sizeof("NB4-XXX-rX"));
++      }
++}
++
+ /*
+  * early init callback, read nvram data from flash and checksum it
+  */
+@@ -793,6 +1256,9 @@ void __init board_prom_init(void)
+               return;
+       }
++      /* Fixup broken neufbox4 board name */
++      neufbox4_nvram_fixup();
++
+       /* find board by name */
+       for (i = 0; i < ARRAY_SIZE(bcm963xx_boards); i++) {
+               if (strncmp(nvram.name, bcm963xx_boards[i]->name,
+--- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
++++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
+@@ -55,7 +55,7 @@ struct board_info {
+       struct bcm63xx_dsp_platform_data dsp;
+       /* GPIO LEDs */
+-      struct gpio_led leds[8];
++      struct gpio_led leds[9];
+       /* Reset button */
+       struct gpio_button reset_buttons[1];
diff --git a/target/linux/brcm63xx/patches-2.6.33/221-board-NB4.patch b/target/linux/brcm63xx/patches-2.6.33/221-board-NB4.patch
new file mode 100644 (file)
index 0000000..6e58b5f
--- /dev/null
@@ -0,0 +1,517 @@
+--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
+@@ -17,6 +17,7 @@
+ #include <linux/ssb/ssb.h>
+ #include <linux/gpio_buttons.h>
+ #include <linux/input.h>
++#include <linux/nxp_74hc164.h>
+ #include <asm/addrspace.h>
+ #include <bcm63xx_board.h>
+ #include <bcm63xx_cpu.h>
+@@ -33,6 +34,12 @@
+ #define PFX   "board_bcm963xx: "
++#define NEUFBOX4_PID_OFFSET           0xff80
++#define NEUFBOX4_EXP_GPIO_BASE                64
++#define NEUFBOX4_GPIO_74HC164_DATA    7
++#define NEUFBOX4_GPIO_74HC164_CLK     6
++#define NXP_74HC64_GPIO(X)            (NEUFBOX4_EXP_GPIO_BASE + (X))
++
+ static struct bcm963xx_nvram nvram;
+ static unsigned int mac_addr_used;
+ static struct board_info board;
+@@ -713,6 +720,441 @@ static struct board_info __initdata boar
+       .has_ohci0 = 1,
+ };
++
++static struct nxp_74hc164_platform_data neufbox4_74hc164_data = {
++      .gpio_base      = NEUFBOX4_EXP_GPIO_BASE,
++      .gpio_pin_data  = NEUFBOX4_GPIO_74HC164_DATA,
++      .gpio_pin_clk   = NEUFBOX4_GPIO_74HC164_CLK,
++
++};
++
++static struct platform_device neufbox4_74hc164 = {
++      .name           = NXP_74HC164_DRIVER_NAME,
++      .id             = -1,
++      .dev = {
++              .platform_data  = &neufbox4_74hc164_data,
++      }
++};
++
++static struct platform_device * __initdata neufbox4_devices[] = {
++      &neufbox4_74hc164,
++};
++
++static struct board_info __initdata board_nb4_ser_r0 = {
++      .name                           = "NB4-SER-r0",
++      .expected_cpu_id                = 0x6358,
++
++      .has_enet0                      = 1,
++      .has_enet1                      = 1,
++      .has_pci                        = 1,
++
++      .enet0 = {
++              .has_phy                = 1,
++              .use_internal_phy       = 1,
++      },
++
++      .enet1 = {
++              .force_speed_100        = 1,
++              .force_duplex_full      = 1,
++      },
++
++
++      .has_ohci0 = 1,
++      .has_pccard = 1,
++      .has_ehci0 = 1,
++
++      .has_udc0                       = 1,
++
++      .leds = {
++              {
++                      .name           = "adsl",
++                      .gpio           = NXP_74HC64_GPIO(4),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "traffic",
++                      .gpio           = 2,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tel",
++                      .gpio           = NXP_74HC64_GPIO(3),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tv",
++                      .gpio           = NXP_74HC64_GPIO(2),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "wifi",
++                      .gpio           = 15,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "alarm",
++                      .gpio           = NXP_74HC64_GPIO(0),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:red",
++                      .gpio           = 29,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:green",
++                      .gpio           = 30,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:blue",
++                      .gpio           = 4,
++                      .active_low     = 1,
++              },
++      },
++      .reset_buttons = {
++              {
++                      .desc           = "reset",
++                      .gpio           = 34,
++                      .active_low     = 1,
++                      .type           = EV_KEY,
++                      .code           = BTN_0,
++                      .threshold      = 3,
++              },
++      },
++      .devs = neufbox4_devices,
++      .num_devs = ARRAY_SIZE(neufbox4_devices),
++};
++
++static struct board_info __initdata board_nb4_ser_r1 = {
++      .name                           = "NB4-SER-r1",
++      .expected_cpu_id                = 0x6358,
++
++      .has_enet0                      = 1,
++      .has_enet1                      = 1,
++      .has_pci                        = 1,
++
++      .enet0 = {
++              .has_phy                = 1,
++              .use_internal_phy       = 1,
++      },
++
++      .enet1 = {
++              .force_speed_100        = 1,
++              .force_duplex_full      = 1,
++      },
++
++
++      .has_ohci0 = 1,
++      .has_pccard = 1,
++      .has_ehci0 = 1,
++
++      .has_udc0                       = 1,
++
++      .leds = {
++              {
++                      .name           = "adsl",
++                      .gpio           = NXP_74HC64_GPIO(4),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "traffic",
++                      .gpio           = 2,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tel",
++                      .gpio           = NXP_74HC64_GPIO(3),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tv",
++                      .gpio           = NXP_74HC64_GPIO(2),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "wifi",
++                      .gpio           = 15,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "alarm",
++                      .gpio           = NXP_74HC64_GPIO(0),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:red",
++                      .gpio           = 29,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:green",
++                      .gpio           = 30,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:blue",
++                      .gpio           = 4,
++                      .active_low     = 1,
++              },
++      },
++      .reset_buttons = {
++              {
++                      .desc           = "reset",
++                      .gpio           = 34,
++                      .active_low     = 1,
++                      .type           = EV_KEY,
++                      .code           = BTN_0,
++                      .threshold      = 3,
++              },
++      },
++      .devs = neufbox4_devices,
++      .num_devs = ARRAY_SIZE(neufbox4_devices),
++};
++
++static struct board_info __initdata board_nb4_ser_r2 = {
++      .name                           = "NB4-SER-r2",
++      .expected_cpu_id                = 0x6358,
++
++      .has_enet0                      = 1,
++      .has_enet1                      = 1,
++      .has_pci                        = 1,
++
++      .enet0 = {
++              .has_phy                = 1,
++              .use_internal_phy       = 1,
++      },
++
++      .enet1 = {
++              .force_speed_100        = 1,
++              .force_duplex_full      = 1,
++      },
++
++
++      .has_ohci0 = 1,
++      .has_pccard = 1,
++      .has_ehci0 = 1,
++
++      .leds = {
++              {
++                      .name           = "adsl",
++                      .gpio           = NXP_74HC64_GPIO(4),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "traffic",
++                      .gpio           = 2,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tel",
++                      .gpio           = NXP_74HC64_GPIO(3),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tv",
++                      .gpio           = NXP_74HC64_GPIO(2),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "wifi",
++                      .gpio           = 15,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "alarm",
++                      .gpio           = NXP_74HC64_GPIO(0),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:red",
++                      .gpio           = 29,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:green",
++                      .gpio           = 30,
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:blue",
++                      .gpio           = 4,
++                      .active_low     = 1,
++              },
++      },
++      .reset_buttons = {
++              {
++                      .desc           = "reset",
++                      .gpio           = 34,
++                      .active_low     = 1,
++                      .type           = EV_KEY,
++                      .code           = BTN_0,
++                      .threshold      = 3,
++              },
++      },
++      .devs = neufbox4_devices,
++      .num_devs = ARRAY_SIZE(neufbox4_devices),
++};
++
++static struct board_info __initdata board_nb4_fxc_r1 = {
++      .name                           = "NB4-FXC-r1",
++      .expected_cpu_id                = 0x6358,
++
++      .has_enet0                      = 1,
++      .has_enet1                      = 1,
++      .has_pci                        = 1,
++
++      .enet0 = {
++              .has_phy                = 1,
++              .use_internal_phy       = 1,
++      },
++
++      .enet1 = {
++              .force_speed_100        = 1,
++              .force_duplex_full      = 1,
++      },
++
++
++      .has_ohci0 = 1,
++      .has_pccard = 1,
++      .has_ehci0 = 1,
++
++      .has_udc0                       = 1,
++
++      .leds = {
++              {
++                      .name           = "adsl",
++                      .gpio           = NXP_74HC64_GPIO(4),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "traffic",
++                      .gpio           = 2,
++              },
++              {
++                      .name           = "tel",
++                      .gpio           = NXP_74HC64_GPIO(3),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tv",
++                      .gpio           = NXP_74HC64_GPIO(2),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "wifi",
++                      .gpio           = 15,
++              },
++              {
++                      .name           = "alarm",
++                      .gpio           = NXP_74HC64_GPIO(0),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:red",
++                      .gpio           = 29,
++              },
++              {
++                      .name           = "service:green",
++                      .gpio           = 30,
++              },
++              {
++                      .name           = "service:blue",
++                      .gpio           = 4,
++              },
++      },
++      .reset_buttons = {
++              {
++                      .desc           = "reset",
++                      .gpio           = 34,
++                      .active_low     = 1,
++                      .type           = EV_KEY,
++                      .code           = BTN_0,
++                      .threshold      = 3,
++              },
++      },
++      .devs = neufbox4_devices,
++      .num_devs = ARRAY_SIZE(neufbox4_devices),
++};
++
++static struct board_info __initdata board_nb4_fxc_r2 = {
++      .name                           = "NB4-FXC-r2",
++      .expected_cpu_id                = 0x6358,
++
++      .has_enet0                      = 1,
++      .has_enet1                      = 1,
++      .has_pci                        = 1,
++
++      .enet0 = {
++              .has_phy                = 1,
++              .use_internal_phy       = 1,
++      },
++
++      .enet1 = {
++              .force_speed_100        = 1,
++              .force_duplex_full      = 1,
++      },
++
++
++      .has_ohci0 = 1,
++      .has_pccard = 1,
++      .has_ehci0 = 1,
++
++      .leds = {
++              {
++                      .name           = "adsl",
++                      .gpio           = NXP_74HC64_GPIO(4),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "traffic",
++                      .gpio           = 2,
++              },
++              {
++                      .name           = "tel",
++                      .gpio           = NXP_74HC64_GPIO(3),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "tv",
++                      .gpio           = NXP_74HC64_GPIO(2),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "wifi",
++                      .gpio           = 15,
++              },
++              {
++                      .name           = "alarm",
++                      .gpio           = NXP_74HC64_GPIO(0),
++                      .active_low     = 1,
++              },
++              {
++                      .name           = "service:red",
++                      .gpio           = 29,
++              },
++              {
++                      .name           = "service:green",
++                      .gpio           = 30,
++              },
++              {
++                      .name           = "service:blue",
++                      .gpio           = 4,
++              },
++      },
++      .reset_buttons = {
++              {
++                      .desc           = "reset",
++                      .gpio           = 34,
++                      .active_low     = 1,
++                      .type           = EV_KEY,
++                      .code           = BTN_0,
++                      .threshold      = 3,
++              },
++      },
++      .devs = neufbox4_devices,
++      .num_devs = ARRAY_SIZE(neufbox4_devices),
++};
+ #endif
+ /*
+@@ -743,9 +1185,30 @@ static const struct board_info __initdat
+       &board_96358vw2,
+       &board_AGPFS0,
+       &board_DWVS0,
++      &board_nb4_ser_r0,
++      &board_nb4_ser_r1,
++      &board_nb4_ser_r2,
++      &board_nb4_fxc_r1,
++      &board_nb4_fxc_r2,
+ #endif
+ };
++static void __init neufbox4_nvram_fixup(void)
++{
++      u8 *boot_addr, *p;
++      u32 val;
++
++      if (BCMCPU_IS_6358() && (!strcmp(nvram.name, "96358VW"))) {
++              val = bcm_mpi_readl(MPI_CSBASE_REG(0));
++              val &= MPI_CSBASE_BASE_MASK;
++              boot_addr = (u8 *)KSEG1ADDR(val);
++              /* Extract neufbox4 PID */
++              p = boot_addr + NEUFBOX4_PID_OFFSET;
++              if (!memcmp(p, "NB4-", 4))
++                      memcpy(nvram.name, p, sizeof("NB4-XXX-rX"));
++      }
++}
++
+ /*
+  * early init callback, read nvram data from flash and checksum it
+  */
+@@ -793,6 +1256,9 @@ void __init board_prom_init(void)
+               return;
+       }
++      /* Fixup broken neufbox4 board name */
++      neufbox4_nvram_fixup();
++
+       /* find board by name */
+       for (i = 0; i < ARRAY_SIZE(bcm963xx_boards); i++) {
+               if (strncmp(nvram.name, bcm963xx_boards[i]->name,
+--- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
++++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
+@@ -55,7 +55,7 @@ struct board_info {
+       struct bcm63xx_dsp_platform_data dsp;
+       /* GPIO LEDs */
+-      struct gpio_led leds[8];
++      struct gpio_led leds[9];
+       /* Reset button */
+       struct gpio_button reset_buttons[1];