Remove redundant CFE check in mtd parser.
Fix "cfe-" string length copy and mtd read size.
Add last byte on "cfe-v" versions a.b.c-d.e -> a.b.c-d.e-f.
Add support for Huawei CFE versions ("cfe-vd").

Signed-off-by: Álvaro Fernández Rojas <[email protected]>
---
V2: Changed to remove redundant check in mtd parser.

diff --git a/target/linux/brcm63xx/patches-3.7/311-cfe_version_mod.patch 
b/target/linux/brcm63xx/patches-3.7/311-cfe_version_mod.patch
index b9edc23..7117a6d 100644
--- a/target/linux/brcm63xx/patches-3.7/311-cfe_version_mod.patch
+++ b/target/linux/brcm63xx/patches-3.7/311-cfe_version_mod.patch
@@ -1,26 +1,115 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -796,6 +796,8 @@ void __init board_prom_init(void)
-       if (!memcmp(cfe, "cfe-v", 5))
-               snprintf(cfe_version, sizeof(cfe_version), "%u.%u.%u-%u.%u",
-                        cfe[5], cfe[6], cfe[7], cfe[8], cfe[9]);
-+      else if (!memcmp(cfe, "cfe-", 4))
-+              snprintf(cfe_version, 16, "%s", (char *) &cfe[4]);
-       else
+@@ -745,6 +745,11 @@ const char *board_get_name(void)
+       return board.name;
+ }
+ 
++int bcm63xx_cfe_present = 0;
++int bcm63xx_is_cfe_present(void) {
++      return bcm63xx_cfe_present;
++}
++
+ static void __init boardid_fixup(u8 *boot_addr)
+ {
+       struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
+@@ -793,11 +798,26 @@ void __init board_prom_init(void)
+ 
+       /* dump cfe version */
+       cfe = boot_addr + BCM963XX_CFE_VERSION_OFFSET;
+-      if (!memcmp(cfe, "cfe-v", 5))
+-              snprintf(cfe_version, sizeof(cfe_version), "%u.%u.%u-%u.%u",
+-                       cfe[5], cfe[6], cfe[7], cfe[8], cfe[9]);
+-      else
++      if (!memcmp(cfe, "cfe-vd", 6)) {
++              bcm63xx_cfe_present = 1;
++              snprintf(cfe_version, 11, "%s", (char *) &cfe[5]);
++      }
++      else if (!memcmp(cfe, "cfe-v", 5)) {
++              bcm63xx_cfe_present = 1;
++              snprintf(cfe_version, sizeof(cfe_version), "%u.%u.%u-%u.%u-%u",
++                      cfe[5], cfe[6], cfe[7], cfe[8], cfe[9], cfe[10]);
++      }
++      else if (!memcmp(cfe, "cfe-", 4)) {
++              bcm63xx_cfe_present = 1;
++              snprintf(cfe_version, 12, "%s", (char *) &cfe[4]);
++      }
++      else {
                strcpy(cfe_version, "unknown");
++
++              cfe = boot_addr + BCM963XX_CFE_MAGIC_OFFSET;
++              if(!memcmp(cfe, "CFE1CFE1", 8))
++                      bcm63xx_cfe_present = 1;
++      }
        printk(KERN_INFO PFX "CFE version: %s\n", cfe_version);
+ 
+       bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET);
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_board.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_board.h
+@@ -9,4 +9,6 @@ void board_setup(void);
+ 
+ int board_register_devices(void);
+ 
++int bcm63xx_is_cfe_present(void);
++
+ #endif /* ! BCM63XX_BOARD_H_ */
+--- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
++++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
+@@ -12,6 +12,7 @@
+ /*
+  * flash mapping
+  */
++#define BCM963XX_CFE_MAGIC_OFFSET     0x4e0
+ #define BCM963XX_CFE_VERSION_OFFSET   0x570
+ #define BCM963XX_NVRAM_OFFSET         0x580
+ 
 --- a/drivers/mtd/bcm63xxpart.c
 +++ b/drivers/mtd/bcm63xxpart.c
-@@ -54,10 +54,10 @@ static int bcm63xx_detect_cfe(struct mtd
-       if (ret)
-               return ret;
+@@ -33,38 +33,12 @@
+ #include <linux/mtd/partitions.h>
  
--      if (strncmp("cfe-v", buf, 5) == 0)
-+      if (strncmp("cfe-", buf, 4) == 0)
-               return 0;
+ #include <linux/bcm963xx_tag.h>
+-#include <asm/mach-bcm63xx/board_bcm963xx.h>
++#include <asm/mach-bcm63xx/bcm63xx_board.h>
+ 
+ #define BCM63XX_EXTENDED_SIZE 0xBFC00000      /* Extended flash address */
+ 
+ #define BCM63XX_CFE_BLOCK_SIZE        0x10000         /* always at least 
64KiB */
  
+-#define BCM63XX_CFE_MAGIC_OFFSET 0x4e0
+-
+-static int bcm63xx_detect_cfe(struct mtd_info *master)
+-{
+-      char buf[9];
+-      int ret;
+-      size_t retlen;
+-
+-      ret = mtd_read(master, BCM963XX_CFE_VERSION_OFFSET, 5, &retlen,
+-                     (void *)buf);
+-      buf[retlen] = 0;
+-
+-      if (ret)
+-              return ret;
+-
+-      if (strncmp("cfe-v", buf, 5) == 0)
+-              return 0;
+-
 -      /* very old CFE's do not have the cfe-v string, so check for magic */
-+      /* very old CFE's do not have the cfe- string, so check for magic */
-       ret = mtd_read(master, BCM63XX_CFE_MAGIC_OFFSET, 8, &retlen,
-                      (void *)buf);
-       buf[retlen] = 0;
+-      ret = mtd_read(master, BCM63XX_CFE_MAGIC_OFFSET, 8, &retlen,
+-                     (void *)buf);
+-      buf[retlen] = 0;
+-
+-      return strncmp("CFE1CFE1", buf, 8);
+-}
+-
+ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
+                                       struct mtd_partition **pparts,
+                                       struct mtd_part_parser_data *data)
+@@ -83,7 +57,7 @@ static int bcm63xx_parse_cfe_partitions(
+       u32 computed_crc;
+       bool rootfs_first = false;
+ 
+-      if (bcm63xx_detect_cfe(master))
++      if (!bcm63xx_is_cfe_present())
+               return -EINVAL;
+ 
+       cfe_erasesize = max_t(uint32_t, master->erasesize,
diff --git 
a/target/linux/brcm63xx/patches-3.7/312-MIPS-BCM63XX-add-basic-BCM6362-support.patch
 
b/target/linux/brcm63xx/patches-3.7/312-MIPS-BCM63XX-add-basic-BCM6362-support.patch
index f8dc7a4..df58031 100644
--- 
a/target/linux/brcm63xx/patches-3.7/312-MIPS-BCM63XX-add-basic-BCM6362-support.patch
+++ 
b/target/linux/brcm63xx/patches-3.7/312-MIPS-BCM63XX-add-basic-BCM6362-support.patch
@@ -33,7 +33,7 @@ Signed-off-by: Jonas Gorski <[email protected]>
        select HW_HAS_PCI
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -783,7 +783,7 @@ void __init board_prom_init(void)
+@@ -788,7 +788,7 @@ void __init board_prom_init(void)
        /* read base address of boot chip select (0)
         * 6328 does not have MPI but boots from a fixed address
         */
diff --git 
a/target/linux/brcm63xx/patches-3.7/401-MIPS-BCM63XX-register-ohci-device.patch 
b/target/linux/brcm63xx/patches-3.7/401-MIPS-BCM63XX-register-ohci-device.patch
index 80ff1c2..f8a0ab9 100644
--- 
a/target/linux/brcm63xx/patches-3.7/401-MIPS-BCM63XX-register-ohci-device.patch
+++ 
b/target/linux/brcm63xx/patches-3.7/401-MIPS-BCM63XX-register-ohci-device.patch
@@ -71,7 +71,7 @@ Subject: [PATCH 31/72] MIPS: BCM63XX: register ohci device.
  #include <bcm63xx_dev_usb_usbd.h>
  #include <board_bcm963xx.h>
  
-@@ -923,6 +924,9 @@ int __init board_register_devices(void)
+@@ -941,6 +942,9 @@ int __init board_register_devices(void)
        if (board.has_usbd)
                bcm63xx_usbd_register(&board.usbd);
  
diff --git 
a/target/linux/brcm63xx/patches-3.7/403-MIPS-BCM63XX-register-ehci-device.patch 
b/target/linux/brcm63xx/patches-3.7/403-MIPS-BCM63XX-register-ehci-device.patch
index 10af689..ada7ed6 100644
--- 
a/target/linux/brcm63xx/patches-3.7/403-MIPS-BCM63XX-register-ehci-device.patch
+++ 
b/target/linux/brcm63xx/patches-3.7/403-MIPS-BCM63XX-register-ehci-device.patch
@@ -52,7 +52,7 @@ Subject: [PATCH 33/72] MIPS: BCM63XX: register ehci device.
  #include <bcm63xx_dev_usb_usbd.h>
  #include <board_bcm963xx.h>
  
-@@ -924,6 +925,9 @@ int __init board_register_devices(void)
+@@ -942,6 +943,9 @@ int __init board_register_devices(void)
        if (board.has_usbd)
                bcm63xx_usbd_register(&board.usbd);
  
diff --git 
a/target/linux/brcm63xx/patches-3.7/405-bcm963xx_real_rootfs_length.patch 
b/target/linux/brcm63xx/patches-3.7/405-bcm963xx_real_rootfs_length.patch
index 955c32f..f17751e 100644
--- a/target/linux/brcm63xx/patches-3.7/405-bcm963xx_real_rootfs_length.patch
+++ b/target/linux/brcm63xx/patches-3.7/405-bcm963xx_real_rootfs_length.patch
@@ -15,7 +15,7 @@
        /* 240-255: Unused at present */
 --- a/drivers/mtd/bcm63xxpart.c
 +++ b/drivers/mtd/bcm63xxpart.c
-@@ -131,7 +131,8 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -105,7 +105,8 @@ static int bcm63xx_parse_cfe_partitions(
                } else {
                        /* OpenWrt layout */
                        rootfsaddr = kerneladdr + kernellen;
diff --git 
a/target/linux/brcm63xx/patches-3.7/408-6358-enet1-external-mii-clk.patch 
b/target/linux/brcm63xx/patches-3.7/408-6358-enet1-external-mii-clk.patch
index 6b4886d..3b639fa 100644
--- a/target/linux/brcm63xx/patches-3.7/408-6358-enet1-external-mii-clk.patch
+++ b/target/linux/brcm63xx/patches-3.7/408-6358-enet1-external-mii-clk.patch
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -859,6 +859,8 @@ void __init board_prom_init(void)
+@@ -877,6 +877,8 @@ void __init board_prom_init(void)
                if (BCMCPU_IS_6348())
                        val |= GPIO_MODE_6348_G3_EXT_MII |
                                GPIO_MODE_6348_G0_EXT_MII;
diff --git 
a/target/linux/brcm63xx/patches-3.7/415-bcm63xx_enet-add-support-for-bcm6368-internal-ethern.patch
 
b/target/linux/brcm63xx/patches-3.7/415-bcm63xx_enet-add-support-for-bcm6368-internal-ethern.patch
index 5dec825..84a8027 100644
--- 
a/target/linux/brcm63xx/patches-3.7/415-bcm63xx_enet-add-support-for-bcm6368-internal-ethern.patch
+++ 
b/target/linux/brcm63xx/patches-3.7/415-bcm63xx_enet-add-support-for-bcm6368-internal-ethern.patch
@@ -13,7 +13,7 @@ Subject: [PATCH 31/63] bcm63xx_enet: add support for bcm6368 
internal ethernet s
 
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -927,6 +927,10 @@ int __init board_register_devices(void)
+@@ -945,6 +945,10 @@ int __init board_register_devices(void)
        if (board.has_usbd)
                bcm63xx_usbd_register(&board.usbd);
  
@@ -26,7 +26,7 @@ Subject: [PATCH 31/63] bcm63xx_enet: add support for bcm6368 
internal ethernet s
  
 --- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-@@ -25,6 +25,7 @@ struct board_info {
+@@ -26,6 +26,7 @@ struct board_info {
        /* enabled feature/device */
        unsigned int    has_enet0:1;
        unsigned int    has_enet1:1;
@@ -34,7 +34,7 @@ Subject: [PATCH 31/63] bcm63xx_enet: add support for bcm6368 
internal ethernet s
        unsigned int    has_pci:1;
        unsigned int    has_pccard:1;
        unsigned int    has_ohci0:1;
-@@ -37,6 +38,7 @@ struct board_info {
+@@ -38,6 +39,7 @@ struct board_info {
        /* ethernet config */
        struct bcm63xx_enet_platform_data enet0;
        struct bcm63xx_enet_platform_data enet1;
diff --git 
a/target/linux/brcm63xx/patches-3.7/425-MIPS-BCM63XX-add-HS-SPI-platform-device-and-register.patch
 
b/target/linux/brcm63xx/patches-3.7/425-MIPS-BCM63XX-add-HS-SPI-platform-device-and-register.patch
index 15240ce..1c29a43 100644
--- 
a/target/linux/brcm63xx/patches-3.7/425-MIPS-BCM63XX-add-HS-SPI-platform-device-and-register.patch
+++ 
b/target/linux/brcm63xx/patches-3.7/425-MIPS-BCM63XX-add-HS-SPI-platform-device-and-register.patch
@@ -36,7 +36,7 @@ Signed-off-by: Jonas Gorski <[email protected]>
  #include <bcm63xx_dev_pcmcia.h>
  #include <bcm63xx_dev_spi.h>
  #include <bcm63xx_dev_usb_ohci.h>
-@@ -952,6 +953,7 @@ int __init board_register_devices(void)
+@@ -970,6 +971,7 @@ int __init board_register_devices(void)
                        pr_err(PFX "failed to register fallback SPROM\n");
        }
  #endif
diff --git 
a/target/linux/brcm63xx/patches-3.7/430-MTD-bcm63xxpart-use-nvram-for-PSI-size.patch
 
b/target/linux/brcm63xx/patches-3.7/430-MTD-bcm63xxpart-use-nvram-for-PSI-size.patch
index fd1bfc4..910a5af 100644
--- 
a/target/linux/brcm63xx/patches-3.7/430-MTD-bcm63xxpart-use-nvram-for-PSI-size.patch
+++ 
b/target/linux/brcm63xx/patches-3.7/430-MTD-bcm63xxpart-use-nvram-for-PSI-size.patch
@@ -15,9 +15,9 @@ Subject: [PATCH 62/79] MTD: bcm63xxpart: use nvram for PSI 
size
  
 +#include <asm/mach-bcm63xx/bcm63xx_nvram.h>
  #include <linux/bcm963xx_tag.h>
- #include <asm/mach-bcm63xx/board_bcm963xx.h>
+ #include <asm/mach-bcm63xx/bcm63xx_board.h>
  
-@@ -90,7 +91,8 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -64,7 +65,8 @@ static int bcm63xx_parse_cfe_partitions(
                              BCM63XX_CFE_BLOCK_SIZE);
  
        cfelen = cfe_erasesize;
diff --git 
a/target/linux/brcm63xx/patches-3.7/432-BCM63XX-allow-providing-fixup-data-in-board-data.patch
 
b/target/linux/brcm63xx/patches-3.7/432-BCM63XX-allow-providing-fixup-data-in-board-data.patch
index 033a8a5..077c996 100644
--- 
a/target/linux/brcm63xx/patches-3.7/432-BCM63XX-allow-providing-fixup-data-in-board-data.patch
+++ 
b/target/linux/brcm63xx/patches-3.7/432-BCM63XX-allow-providing-fixup-data-in-board-data.patch
@@ -18,7 +18,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in 
board data
  
  #include <uapi/linux/bcm963xx_tag.h>
  
-@@ -907,6 +908,7 @@ int __init board_register_devices(void)
+@@ -925,6 +926,7 @@ int __init board_register_devices(void)
  {
        int button_count = 0;
        int led_count = 0;
@@ -26,7 +26,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in 
board data
  
        if (board.has_uart0)
                bcm63xx_uart_register(0);
-@@ -945,7 +947,8 @@ int __init board_register_devices(void)
+@@ -963,7 +965,8 @@ int __init board_register_devices(void)
         * do this after registering enet devices
         */
  #ifdef CONFIG_SSB_PCIHOST
@@ -36,7 +36,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in 
board data
                memcpy(bcm63xx_sprom.et0mac, bcm63xx_sprom.il0mac, ETH_ALEN);
                memcpy(bcm63xx_sprom.et1mac, bcm63xx_sprom.il0mac, ETH_ALEN);
                if (ssb_arch_register_fallback_sprom(
-@@ -987,5 +990,9 @@ int __init board_register_devices(void)
+@@ -1005,5 +1008,9 @@ int __init board_register_devices(void)
                platform_device_register(&bcm63xx_gpio_keys_device);
        }
  
@@ -56,7 +56,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in 
board data
  
  /*
   * flash mapping
-@@ -15,6 +16,11 @@
+@@ -16,6 +17,11 @@
  #define BCM963XX_CFE_VERSION_OFFSET   0x570
  #define BCM963XX_NVRAM_OFFSET         0x580
  
@@ -68,7 +68,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in 
board data
  /*
   * board definition
   */
-@@ -34,6 +40,10 @@ struct board_info {
+@@ -35,6 +41,10 @@ struct board_info {
        unsigned int    has_dsp:1;
        unsigned int    has_uart0:1;
        unsigned int    has_uart1:1;
diff --git 
a/target/linux/brcm63xx/patches-3.7/436-MTD-bcm63xxpart-allow-passing-a-caldata-offset.patch
 
b/target/linux/brcm63xx/patches-3.7/436-MTD-bcm63xxpart-allow-passing-a-caldata-offset.patch
index af2bb75..1c14989 100644
--- 
a/target/linux/brcm63xx/patches-3.7/436-MTD-bcm63xxpart-allow-passing-a-caldata-offset.patch
+++ 
b/target/linux/brcm63xx/patches-3.7/436-MTD-bcm63xxpart-allow-passing-a-caldata-offset.patch
@@ -8,7 +8,7 @@ contained in flash.
 
 --- a/drivers/mtd/bcm63xxpart.c
 +++ b/drivers/mtd/bcm63xxpart.c
-@@ -76,10 +76,12 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -50,10 +50,12 @@ static int bcm63xx_parse_cfe_partitions(
        struct mtd_partition *parts;
        int ret;
        size_t retlen;
@@ -22,7 +22,7 @@ contained in flash.
        int i;
        u32 computed_crc;
        bool rootfs_first = false;
-@@ -93,6 +95,24 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -67,6 +69,24 @@ static int bcm63xx_parse_cfe_partitions(
        cfelen = cfe_erasesize;
        nvramlen = bcm63xx_nvram_get_psi_size() * 1024;
        nvramlen = roundup(nvramlen, cfe_erasesize);
@@ -47,7 +47,7 @@ contained in flash.
  
        /* Allocate memory for buffer */
        buf = vmalloc(sizeof(struct bcm_tag));
-@@ -144,7 +164,7 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -118,7 +138,7 @@ static int bcm63xx_parse_cfe_partitions(
                rootfsaddr = 0;
                spareaddr = cfelen;
        }
@@ -56,7 +56,7 @@ contained in flash.
  
        /* Determine number of partitions */
        if (rootfslen > 0)
-@@ -153,6 +173,12 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -127,6 +147,12 @@ static int bcm63xx_parse_cfe_partitions(
        if (kernellen > 0)
                nrparts++;
  
@@ -69,7 +69,7 @@ contained in flash.
        /* Ask kernel for more memory */
        parts = kzalloc(sizeof(*parts) * nrparts + 10 * nrparts, GFP_KERNEL);
        if (!parts) {
-@@ -190,15 +216,32 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -164,15 +190,32 @@ static int bcm63xx_parse_cfe_partitions(
                curpart++;
        }
  
diff --git 
a/target/linux/brcm63xx/patches-3.7/437-MIPS-BCM63XX-pass-caldata-info-to-flash.patch
 
b/target/linux/brcm63xx/patches-3.7/437-MIPS-BCM63XX-pass-caldata-info-to-flash.patch
index fb3b4f0..92b448f 100644
--- 
a/target/linux/brcm63xx/patches-3.7/437-MIPS-BCM63XX-pass-caldata-info-to-flash.patch
+++ 
b/target/linux/brcm63xx/patches-3.7/437-MIPS-BCM63XX-pass-caldata-info-to-flash.patch
@@ -11,7 +11,7 @@ Subject: [PATCH 69/80] MIPS: BCM63XX: pass caldata info to 
flash
 
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -966,7 +966,7 @@ int __init board_register_devices(void)
+@@ -984,7 +984,7 @@ int __init board_register_devices(void)
        if (board.num_spis)
                spi_register_board_info(board.spis, board.num_spis);
  
diff --git 
a/target/linux/brcm63xx/patches-3.7/444-BCM63XX-add-endian-check-for-ath9k.patch
 
b/target/linux/brcm63xx/patches-3.7/444-BCM63XX-add-endian-check-for-ath9k.patch
index 2127bf3..fb571cd 100644
--- 
a/target/linux/brcm63xx/patches-3.7/444-BCM63XX-add-endian-check-for-ath9k.patch
+++ 
b/target/linux/brcm63xx/patches-3.7/444-BCM63XX-add-endian-check-for-ath9k.patch
@@ -13,7 +13,7 @@ Subject: [PATCH] BCM63XX: add endian check for ath9k
  #endif /* _PCI_ATH9K_FIXUP */
 --- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-@@ -19,6 +19,7 @@
+@@ -20,6 +20,7 @@
  struct ath9k_caldata {
        unsigned int    slot;
        u32             caldata_offset;
@@ -41,7 +41,7 @@ Subject: [PATCH] BCM63XX: add endian check for ath9k
                return;
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -992,7 +992,8 @@ int __init board_register_devices(void)
+@@ -1010,7 +1010,8 @@ int __init board_register_devices(void)
  
        /* register any fixups */
        for (i = 0; i < board.has_caldata; i++)
diff --git 
a/target/linux/brcm63xx/patches-3.7/445-BCM63XX-add-led-pin-for-ath9k.patch 
b/target/linux/brcm63xx/patches-3.7/445-BCM63XX-add-led-pin-for-ath9k.patch
index cb724e6..18dd4e3 100644
--- a/target/linux/brcm63xx/patches-3.7/445-BCM63XX-add-led-pin-for-ath9k.patch
+++ b/target/linux/brcm63xx/patches-3.7/445-BCM63XX-add-led-pin-for-ath9k.patch
@@ -2,7 +2,7 @@ From: Álvaro Fernández Rojas <[email protected]>
 Subject: BCM63XX: add led pin for ath9k
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -993,7 +993,7 @@ int __init board_register_devices(void)
+@@ -1011,7 +1011,7 @@ int __init board_register_devices(void)
        /* register any fixups */
        for (i = 0; i < board.has_caldata; i++)
                pci_enable_ath9k_fixup(board.caldata[i].slot, 
board.caldata[i].caldata_offset,
@@ -31,7 +31,7 @@ Subject: BCM63XX: add led pin for ath9k
                return;
 --- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-@@ -20,6 +20,7 @@ struct ath9k_caldata {
+@@ -21,6 +21,7 @@ struct ath9k_caldata {
        unsigned int    slot;
        u32             caldata_offset;
        unsigned int    endian_check:1;
diff --git 
a/target/linux/brcm63xx/patches-3.7/446-BCM63XX-add-a-fixup-for-rt2x00-devices.patch
 
b/target/linux/brcm63xx/patches-3.7/446-BCM63XX-add-a-fixup-for-rt2x00-devices.patch
index 033cdb4..8966c0b 100644
--- 
a/target/linux/brcm63xx/patches-3.7/446-BCM63XX-add-a-fixup-for-rt2x00-devices.patch
+++ 
b/target/linux/brcm63xx/patches-3.7/446-BCM63XX-add-a-fixup-for-rt2x00-devices.patch
@@ -36,7 +36,7 @@ Subject: [PATCH 72/72] 
446-BCM63XX-add-a-fixup-for-rt2x00-devices
  
  #include <uapi/linux/bcm963xx_tag.h>
  
-@@ -991,9 +992,19 @@ int __init board_register_devices(void)
+@@ -1009,9 +1010,19 @@ int __init board_register_devices(void)
        }
  
        /* register any fixups */
@@ -165,7 +165,7 @@ Subject: [PATCH 72/72] 
446-BCM63XX-add-a-fixup-for-rt2x00-devices
  
  /*
   * flash mapping
-@@ -16,11 +17,15 @@
+@@ -17,11 +18,15 @@
  #define BCM963XX_CFE_VERSION_OFFSET   0x570
  #define BCM963XX_NVRAM_OFFSET         0x580
  
@@ -182,7 +182,7 @@ Subject: [PATCH 72/72] 
446-BCM63XX-add-a-fixup-for-rt2x00-devices
  };
  
  /*
-@@ -45,7 +50,7 @@ struct board_info {
+@@ -46,7 +51,7 @@ struct board_info {
        unsigned int    has_caldata:2;
  
        /* wifi calibration data config */
diff --git a/target/linux/brcm63xx/patches-3.7/501-board-NB4.patch 
b/target/linux/brcm63xx/patches-3.7/501-board-NB4.patch
index 99b7e43..e1afda3 100644
--- a/target/linux/brcm63xx/patches-3.7/501-board-NB4.patch
+++ b/target/linux/brcm63xx/patches-3.7/501-board-NB4.patch
@@ -631,7 +631,7 @@
  #endif
  };
  
-@@ -806,6 +1409,16 @@ static void __init boardid_fixup(u8 *boo
+@@ -811,6 +1414,16 @@ static void __init boardid_fixup(u8 *boo
        struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
        char *board_name = (char *)bcm63xx_nvram_get_name();
  
diff --git a/target/linux/brcm63xx/patches-3.7/511-board_V2500V.patch 
b/target/linux/brcm63xx/patches-3.7/511-board_V2500V.patch
index 20ce84c..5558b6f 100644
--- a/target/linux/brcm63xx/patches-3.7/511-board_V2500V.patch
+++ b/target/linux/brcm63xx/patches-3.7/511-board_V2500V.patch
@@ -74,7 +74,7 @@
  #endif
  
  #ifdef CONFIG_BCM63XX_CPU_6358
-@@ -2070,6 +2130,22 @@ void __init board_prom_init(void)
+@@ -2075,6 +2135,22 @@ void __init board_prom_init(void)
                val &= MPI_CSBASE_BASE_MASK;
        }
        boot_addr = (u8 *)KSEG1ADDR(val);
diff --git 
a/target/linux/brcm63xx/patches-3.7/520-bcm63xx-add-support-for-96368MVWG-board.patch
 
b/target/linux/brcm63xx/patches-3.7/520-bcm63xx-add-support-for-96368MVWG-board.patch
index c3b2c16..02ad31f 100644
--- 
a/target/linux/brcm63xx/patches-3.7/520-bcm63xx-add-support-for-96368MVWG-board.patch
+++ 
b/target/linux/brcm63xx/patches-3.7/520-bcm63xx-add-support-for-96368MVWG-board.patch
@@ -100,7 +100,7 @@ Subject: [PATCH 32/63] bcm63xx: add support for 96368MVWG 
board.
  };
  
  /*
-@@ -2409,12 +2485,25 @@ void __init board_prom_init(void)
+@@ -2427,12 +2503,25 @@ void __init board_prom_init(void)
                bcm63xx_pci_enabled = 1;
                if (BCMCPU_IS_6348())
                        val |= GPIO_MODE_6348_G2_PCI;
diff --git a/target/linux/brcm63xx/patches-3.7/528-board_nb6.patch 
b/target/linux/brcm63xx/patches-3.7/528-board_nb6.patch
index e565b8e..e031af0 100644
--- a/target/linux/brcm63xx/patches-3.7/528-board_nb6.patch
+++ b/target/linux/brcm63xx/patches-3.7/528-board_nb6.patch
@@ -132,7 +132,7 @@
  #ifdef CONFIG_BCM63XX_CPU_6368
        &board_96368mvwg,
        &board_96368mvngr,
-@@ -2893,6 +2997,11 @@ static void __init boardid_fixup(u8 *boo
+@@ -2898,6 +3002,11 @@ static void __init boardid_fixup(u8 *boo
                }
        }
  
diff --git a/target/linux/brcm63xx/patches-3.7/554-board_hw556.patch 
b/target/linux/brcm63xx/patches-3.7/554-board_hw556.patch
index 55aadee..45103e2 100644
--- a/target/linux/brcm63xx/patches-3.7/554-board_hw556.patch
+++ b/target/linux/brcm63xx/patches-3.7/554-board_hw556.patch
@@ -386,7 +386,7 @@
        &board_spw303v,
        &board_DVAG3810BN,
  #endif
-@@ -3466,13 +3838,37 @@ static void __init boardid_fixup(u8 *boo
+@@ -3471,13 +3843,37 @@ static void __init boardid_fixup(u8 *boo
        struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
        char *board_name = (char *)bcm63xx_nvram_get_name();
  
@@ -433,7 +433,7 @@
  
 --- a/drivers/mtd/bcm63xxpart.c
 +++ b/drivers/mtd/bcm63xxpart.c
-@@ -93,6 +93,11 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -67,6 +67,11 @@ static int bcm63xx_parse_cfe_partitions(
                              BCM63XX_CFE_BLOCK_SIZE);
  
        cfelen = cfe_erasesize;
diff --git a/target/linux/brcm63xx/patches-3.8/311-cfe_version_mod.patch 
b/target/linux/brcm63xx/patches-3.8/311-cfe_version_mod.patch
index a05b9a5..55d5aea 100644
--- a/target/linux/brcm63xx/patches-3.8/311-cfe_version_mod.patch
+++ b/target/linux/brcm63xx/patches-3.8/311-cfe_version_mod.patch
@@ -1,26 +1,115 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -798,6 +798,8 @@ void __init board_prom_init(void)
-       if (!memcmp(cfe, "cfe-v", 5))
-               snprintf(cfe_version, sizeof(cfe_version), "%u.%u.%u-%u.%u",
-                        cfe[5], cfe[6], cfe[7], cfe[8], cfe[9]);
-+      else if (!memcmp(cfe, "cfe-", 4))
-+              snprintf(cfe_version, 16, "%s", (char *) &cfe[4]);
-       else
+@@ -747,6 +747,11 @@ const char *board_get_name(void)
+       return board.name;
+ }
+ 
++int bcm63xx_cfe_present = 0;
++int bcm63xx_is_cfe_present(void) {
++      return bcm63xx_cfe_present;
++}
++
+ static void __init boardid_fixup(u8 *boot_addr)
+ {
+       struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
+@@ -795,11 +800,26 @@ void __init board_prom_init(void)
+ 
+       /* dump cfe version */
+       cfe = boot_addr + BCM963XX_CFE_VERSION_OFFSET;
+-      if (!memcmp(cfe, "cfe-v", 5))
+-              snprintf(cfe_version, sizeof(cfe_version), "%u.%u.%u-%u.%u",
+-                       cfe[5], cfe[6], cfe[7], cfe[8], cfe[9]);
+-      else
++      if (!memcmp(cfe, "cfe-vd", 6)) {
++              bcm63xx_cfe_present = 1;
++              snprintf(cfe_version, 11, "%s", (char *) &cfe[5]);
++      }
++      else if (!memcmp(cfe, "cfe-v", 5)) {
++              bcm63xx_cfe_present = 1;
++              snprintf(cfe_version, sizeof(cfe_version), "%u.%u.%u-%u.%u-%u",
++                      cfe[5], cfe[6], cfe[7], cfe[8], cfe[9], cfe[10]);
++      }
++      else if (!memcmp(cfe, "cfe-", 4)) {
++              bcm63xx_cfe_present = 1;
++              snprintf(cfe_version, 12, "%s", (char *) &cfe[4]);
++      }
++      else {
                strcpy(cfe_version, "unknown");
++
++              cfe = boot_addr + BCM963XX_CFE_MAGIC_OFFSET;
++              if(!memcmp(cfe, "CFE1CFE1", 8))
++                      bcm63xx_cfe_present = 1;
++      }
        printk(KERN_INFO PFX "CFE version: %s\n", cfe_version);
+ 
+       bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET);
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_board.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_board.h
+@@ -9,4 +9,6 @@ void board_setup(void);
+ 
+ int board_register_devices(void);
+ 
++int bcm63xx_is_cfe_present(void);
++
+ #endif /* ! BCM63XX_BOARD_H_ */
+--- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
++++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
+@@ -12,6 +12,7 @@
+ /*
+  * flash mapping
+  */
++#define BCM963XX_CFE_MAGIC_OFFSET     0x4e0
+ #define BCM963XX_CFE_VERSION_OFFSET   0x570
+ #define BCM963XX_NVRAM_OFFSET         0x580
+ 
 --- a/drivers/mtd/bcm63xxpart.c
 +++ b/drivers/mtd/bcm63xxpart.c
-@@ -54,10 +54,10 @@ static int bcm63xx_detect_cfe(struct mtd
-       if (ret)
-               return ret;
+@@ -33,38 +33,12 @@
+ #include <linux/mtd/partitions.h>
  
--      if (strncmp("cfe-v", buf, 5) == 0)
-+      if (strncmp("cfe-", buf, 4) == 0)
-               return 0;
+ #include <linux/bcm963xx_tag.h>
+-#include <asm/mach-bcm63xx/board_bcm963xx.h>
++#include <asm/mach-bcm63xx/bcm63xx_board.h>
+ 
+ #define BCM63XX_EXTENDED_SIZE 0xBFC00000      /* Extended flash address */
+ 
+ #define BCM63XX_CFE_BLOCK_SIZE        0x10000         /* always at least 
64KiB */
  
+-#define BCM63XX_CFE_MAGIC_OFFSET 0x4e0
+-
+-static int bcm63xx_detect_cfe(struct mtd_info *master)
+-{
+-      char buf[9];
+-      int ret;
+-      size_t retlen;
+-
+-      ret = mtd_read(master, BCM963XX_CFE_VERSION_OFFSET, 5, &retlen,
+-                     (void *)buf);
+-      buf[retlen] = 0;
+-
+-      if (ret)
+-              return ret;
+-
+-      if (strncmp("cfe-v", buf, 5) == 0)
+-              return 0;
+-
 -      /* very old CFE's do not have the cfe-v string, so check for magic */
-+      /* very old CFE's do not have the cfe- string, so check for magic */
-       ret = mtd_read(master, BCM63XX_CFE_MAGIC_OFFSET, 8, &retlen,
-                      (void *)buf);
-       buf[retlen] = 0;
+-      ret = mtd_read(master, BCM63XX_CFE_MAGIC_OFFSET, 8, &retlen,
+-                     (void *)buf);
+-      buf[retlen] = 0;
+-
+-      return strncmp("CFE1CFE1", buf, 8);
+-}
+-
+ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
+                                       struct mtd_partition **pparts,
+                                       struct mtd_part_parser_data *data)
+@@ -83,7 +57,7 @@ static int bcm63xx_parse_cfe_partitions(
+       u32 computed_crc;
+       bool rootfs_first = false;
+ 
+-      if (bcm63xx_detect_cfe(master))
++      if (!bcm63xx_is_cfe_present())
+               return -EINVAL;
+ 
+       cfe_erasesize = max_t(uint32_t, master->erasesize,
diff --git 
a/target/linux/brcm63xx/patches-3.8/312-MIPS-BCM63XX-add-basic-BCM6362-support.patch
 
b/target/linux/brcm63xx/patches-3.8/312-MIPS-BCM63XX-add-basic-BCM6362-support.patch
index 9068590..7e7e0d8 100644
--- 
a/target/linux/brcm63xx/patches-3.8/312-MIPS-BCM63XX-add-basic-BCM6362-support.patch
+++ 
b/target/linux/brcm63xx/patches-3.8/312-MIPS-BCM63XX-add-basic-BCM6362-support.patch
@@ -33,7 +33,7 @@ Signed-off-by: Jonas Gorski <[email protected]>
        select HW_HAS_PCI
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -785,7 +785,7 @@ void __init board_prom_init(void)
+@@ -790,7 +790,7 @@ void __init board_prom_init(void)
        /* read base address of boot chip select (0)
         * 6328 does not have MPI but boots from a fixed address
         */
diff --git 
a/target/linux/brcm63xx/patches-3.8/405-bcm963xx_real_rootfs_length.patch 
b/target/linux/brcm63xx/patches-3.8/405-bcm963xx_real_rootfs_length.patch
index 955c32f..f17751e 100644
--- a/target/linux/brcm63xx/patches-3.8/405-bcm963xx_real_rootfs_length.patch
+++ b/target/linux/brcm63xx/patches-3.8/405-bcm963xx_real_rootfs_length.patch
@@ -15,7 +15,7 @@
        /* 240-255: Unused at present */
 --- a/drivers/mtd/bcm63xxpart.c
 +++ b/drivers/mtd/bcm63xxpart.c
-@@ -131,7 +131,8 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -105,7 +105,8 @@ static int bcm63xx_parse_cfe_partitions(
                } else {
                        /* OpenWrt layout */
                        rootfsaddr = kerneladdr + kernellen;
diff --git 
a/target/linux/brcm63xx/patches-3.8/408-6358-enet1-external-mii-clk.patch 
b/target/linux/brcm63xx/patches-3.8/408-6358-enet1-external-mii-clk.patch
index 4ead53f..bc11fb4 100644
--- a/target/linux/brcm63xx/patches-3.8/408-6358-enet1-external-mii-clk.patch
+++ b/target/linux/brcm63xx/patches-3.8/408-6358-enet1-external-mii-clk.patch
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -859,6 +859,8 @@ void __init board_prom_init(void)
+@@ -877,6 +877,8 @@ void __init board_prom_init(void)
                if (BCMCPU_IS_6348())
                        val |= GPIO_MODE_6348_G3_EXT_MII |
                                GPIO_MODE_6348_G0_EXT_MII;
diff --git 
a/target/linux/brcm63xx/patches-3.8/415-bcm63xx_enet-add-support-for-bcm6368-internal-ethern.patch
 
b/target/linux/brcm63xx/patches-3.8/415-bcm63xx_enet-add-support-for-bcm6368-internal-ethern.patch
index ef61519..e4b63ae 100644
--- 
a/target/linux/brcm63xx/patches-3.8/415-bcm63xx_enet-add-support-for-bcm6368-internal-ethern.patch
+++ 
b/target/linux/brcm63xx/patches-3.8/415-bcm63xx_enet-add-support-for-bcm6368-internal-ethern.patch
@@ -13,7 +13,7 @@ Subject: [PATCH 31/63] bcm63xx_enet: add support for bcm6368 
internal ethernet s
 
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -927,6 +927,10 @@ int __init board_register_devices(void)
+@@ -945,6 +945,10 @@ int __init board_register_devices(void)
        if (board.has_usbd)
                bcm63xx_usbd_register(&board.usbd);
  
@@ -26,7 +26,7 @@ Subject: [PATCH 31/63] bcm63xx_enet: add support for bcm6368 
internal ethernet s
  
 --- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-@@ -25,6 +25,7 @@ struct board_info {
+@@ -26,6 +26,7 @@ struct board_info {
        /* enabled feature/device */
        unsigned int    has_enet0:1;
        unsigned int    has_enet1:1;
@@ -34,7 +34,7 @@ Subject: [PATCH 31/63] bcm63xx_enet: add support for bcm6368 
internal ethernet s
        unsigned int    has_pci:1;
        unsigned int    has_pccard:1;
        unsigned int    has_ohci0:1;
-@@ -37,6 +38,7 @@ struct board_info {
+@@ -38,6 +39,7 @@ struct board_info {
        /* ethernet config */
        struct bcm63xx_enet_platform_data enet0;
        struct bcm63xx_enet_platform_data enet1;
diff --git 
a/target/linux/brcm63xx/patches-3.8/425-MIPS-BCM63XX-add-HS-SPI-platform-device-and-register.patch
 
b/target/linux/brcm63xx/patches-3.8/425-MIPS-BCM63XX-add-HS-SPI-platform-device-and-register.patch
index babe04a..7b6dc71 100644
--- 
a/target/linux/brcm63xx/patches-3.8/425-MIPS-BCM63XX-add-HS-SPI-platform-device-and-register.patch
+++ 
b/target/linux/brcm63xx/patches-3.8/425-MIPS-BCM63XX-add-HS-SPI-platform-device-and-register.patch
@@ -37,7 +37,7 @@ Signed-off-by: Jonas Gorski <[email protected]>
  #include <bcm63xx_dev_pcmcia.h>
  #include <bcm63xx_dev_spi.h>
  #include <bcm63xx_dev_usb_ehci.h>
-@@ -952,6 +953,7 @@ int __init board_register_devices(void)
+@@ -970,6 +971,7 @@ int __init board_register_devices(void)
                        pr_err(PFX "failed to register fallback SPROM\n");
        }
  #endif
diff --git 
a/target/linux/brcm63xx/patches-3.8/430-MTD-bcm63xxpart-use-nvram-for-PSI-size.patch
 
b/target/linux/brcm63xx/patches-3.8/430-MTD-bcm63xxpart-use-nvram-for-PSI-size.patch
index fd1bfc4..910a5af 100644
--- 
a/target/linux/brcm63xx/patches-3.8/430-MTD-bcm63xxpart-use-nvram-for-PSI-size.patch
+++ 
b/target/linux/brcm63xx/patches-3.8/430-MTD-bcm63xxpart-use-nvram-for-PSI-size.patch
@@ -15,9 +15,9 @@ Subject: [PATCH 62/79] MTD: bcm63xxpart: use nvram for PSI 
size
  
 +#include <asm/mach-bcm63xx/bcm63xx_nvram.h>
  #include <linux/bcm963xx_tag.h>
- #include <asm/mach-bcm63xx/board_bcm963xx.h>
+ #include <asm/mach-bcm63xx/bcm63xx_board.h>
  
-@@ -90,7 +91,8 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -64,7 +65,8 @@ static int bcm63xx_parse_cfe_partitions(
                              BCM63XX_CFE_BLOCK_SIZE);
  
        cfelen = cfe_erasesize;
diff --git 
a/target/linux/brcm63xx/patches-3.8/432-BCM63XX-allow-providing-fixup-data-in-board-data.patch
 
b/target/linux/brcm63xx/patches-3.8/432-BCM63XX-allow-providing-fixup-data-in-board-data.patch
index 06d0b1b..83ff699 100644
--- 
a/target/linux/brcm63xx/patches-3.8/432-BCM63XX-allow-providing-fixup-data-in-board-data.patch
+++ 
b/target/linux/brcm63xx/patches-3.8/432-BCM63XX-allow-providing-fixup-data-in-board-data.patch
@@ -18,7 +18,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in 
board data
  
  #include <uapi/linux/bcm963xx_tag.h>
  
-@@ -907,6 +908,7 @@ int __init board_register_devices(void)
+@@ -925,6 +926,7 @@ int __init board_register_devices(void)
  {
        int button_count = 0;
        int led_count = 0;
@@ -26,7 +26,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in 
board data
  
        if (board.has_uart0)
                bcm63xx_uart_register(0);
-@@ -945,7 +947,8 @@ int __init board_register_devices(void)
+@@ -963,7 +965,8 @@ int __init board_register_devices(void)
         * do this after registering enet devices
         */
  #ifdef CONFIG_SSB_PCIHOST
@@ -36,7 +36,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in 
board data
                memcpy(bcm63xx_sprom.et0mac, bcm63xx_sprom.il0mac, ETH_ALEN);
                memcpy(bcm63xx_sprom.et1mac, bcm63xx_sprom.il0mac, ETH_ALEN);
                if (ssb_arch_register_fallback_sprom(
-@@ -987,5 +990,9 @@ int __init board_register_devices(void)
+@@ -1005,5 +1008,9 @@ int __init board_register_devices(void)
                platform_device_register(&bcm63xx_gpio_keys_device);
        }
  
@@ -56,7 +56,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in 
board data
  
  /*
   * flash mapping
-@@ -15,6 +16,11 @@
+@@ -16,6 +17,11 @@
  #define BCM963XX_CFE_VERSION_OFFSET   0x570
  #define BCM963XX_NVRAM_OFFSET         0x580
  
@@ -68,7 +68,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in 
board data
  /*
   * board definition
   */
-@@ -34,6 +40,10 @@ struct board_info {
+@@ -35,6 +41,10 @@ struct board_info {
        unsigned int    has_dsp:1;
        unsigned int    has_uart0:1;
        unsigned int    has_uart1:1;
diff --git 
a/target/linux/brcm63xx/patches-3.8/436-MTD-bcm63xxpart-allow-passing-a-caldata-offset.patch
 
b/target/linux/brcm63xx/patches-3.8/436-MTD-bcm63xxpart-allow-passing-a-caldata-offset.patch
index 3b34eec..0ed688f 100644
--- 
a/target/linux/brcm63xx/patches-3.8/436-MTD-bcm63xxpart-allow-passing-a-caldata-offset.patch
+++ 
b/target/linux/brcm63xx/patches-3.8/436-MTD-bcm63xxpart-allow-passing-a-caldata-offset.patch
@@ -7,7 +7,7 @@ contained in flash.
 
 --- a/drivers/mtd/bcm63xxpart.c
 +++ b/drivers/mtd/bcm63xxpart.c
-@@ -76,10 +76,12 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -50,10 +50,12 @@ static int bcm63xx_parse_cfe_partitions(
        struct mtd_partition *parts;
        int ret;
        size_t retlen;
@@ -21,7 +21,7 @@ contained in flash.
        int i;
        u32 computed_crc;
        bool rootfs_first = false;
-@@ -93,6 +95,24 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -67,6 +69,24 @@ static int bcm63xx_parse_cfe_partitions(
        cfelen = cfe_erasesize;
        nvramlen = bcm63xx_nvram_get_psi_size() * 1024;
        nvramlen = roundup(nvramlen, cfe_erasesize);
@@ -46,7 +46,7 @@ contained in flash.
  
        /* Allocate memory for buffer */
        buf = vmalloc(sizeof(struct bcm_tag));
-@@ -144,7 +164,7 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -118,7 +138,7 @@ static int bcm63xx_parse_cfe_partitions(
                rootfsaddr = 0;
                spareaddr = cfelen;
        }
@@ -55,7 +55,7 @@ contained in flash.
  
        /* Determine number of partitions */
        if (rootfslen > 0)
-@@ -153,6 +173,12 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -127,6 +147,12 @@ static int bcm63xx_parse_cfe_partitions(
        if (kernellen > 0)
                nrparts++;
  
@@ -68,7 +68,7 @@ contained in flash.
        /* Ask kernel for more memory */
        parts = kzalloc(sizeof(*parts) * nrparts + 10 * nrparts, GFP_KERNEL);
        if (!parts) {
-@@ -190,15 +216,32 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -164,15 +190,32 @@ static int bcm63xx_parse_cfe_partitions(
                curpart++;
        }
  
diff --git 
a/target/linux/brcm63xx/patches-3.8/437-MIPS-BCM63XX-pass-caldata-info-to-flash.patch
 
b/target/linux/brcm63xx/patches-3.8/437-MIPS-BCM63XX-pass-caldata-info-to-flash.patch
index fb3b4f0..92b448f 100644
--- 
a/target/linux/brcm63xx/patches-3.8/437-MIPS-BCM63XX-pass-caldata-info-to-flash.patch
+++ 
b/target/linux/brcm63xx/patches-3.8/437-MIPS-BCM63XX-pass-caldata-info-to-flash.patch
@@ -11,7 +11,7 @@ Subject: [PATCH 69/80] MIPS: BCM63XX: pass caldata info to 
flash
 
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -966,7 +966,7 @@ int __init board_register_devices(void)
+@@ -984,7 +984,7 @@ int __init board_register_devices(void)
        if (board.num_spis)
                spi_register_board_info(board.spis, board.num_spis);
  
diff --git 
a/target/linux/brcm63xx/patches-3.8/444-BCM63XX-add-endian-check-for-ath9k.patch
 
b/target/linux/brcm63xx/patches-3.8/444-BCM63XX-add-endian-check-for-ath9k.patch
index bdcb3e0..6dd5574 100644
--- 
a/target/linux/brcm63xx/patches-3.8/444-BCM63XX-add-endian-check-for-ath9k.patch
+++ 
b/target/linux/brcm63xx/patches-3.8/444-BCM63XX-add-endian-check-for-ath9k.patch
@@ -11,7 +11,7 @@
  #endif /* _PCI_ATH9K_FIXUP */
 --- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-@@ -19,6 +19,7 @@
+@@ -20,6 +20,7 @@
  struct ath9k_caldata {
        unsigned int    slot;
        u32             caldata_offset;
@@ -39,7 +39,7 @@
                return;
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -992,7 +992,8 @@ int __init board_register_devices(void)
+@@ -1010,7 +1010,8 @@ int __init board_register_devices(void)
  
        /* register any fixups */
        for (i = 0; i < board.has_caldata; i++)
diff --git 
a/target/linux/brcm63xx/patches-3.8/445-BCM63XX-add-led-pin-for-ath9k.patch 
b/target/linux/brcm63xx/patches-3.8/445-BCM63XX-add-led-pin-for-ath9k.patch
index 4f77179..aa6200f 100644
--- a/target/linux/brcm63xx/patches-3.8/445-BCM63XX-add-led-pin-for-ath9k.patch
+++ b/target/linux/brcm63xx/patches-3.8/445-BCM63XX-add-led-pin-for-ath9k.patch
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -993,7 +993,7 @@ int __init board_register_devices(void)
+@@ -1011,7 +1011,7 @@ int __init board_register_devices(void)
        /* register any fixups */
        for (i = 0; i < board.has_caldata; i++)
                pci_enable_ath9k_fixup(board.caldata[i].slot, 
board.caldata[i].caldata_offset,
@@ -29,7 +29,7 @@
                return;
 --- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-@@ -20,6 +20,7 @@ struct ath9k_caldata {
+@@ -21,6 +21,7 @@ struct ath9k_caldata {
        unsigned int    slot;
        u32             caldata_offset;
        unsigned int    endian_check:1;
diff --git 
a/target/linux/brcm63xx/patches-3.8/446-BCM63XX-add-a-fixup-for-rt2x00-devices.patch
 
b/target/linux/brcm63xx/patches-3.8/446-BCM63XX-add-a-fixup-for-rt2x00-devices.patch
index 039e988..dfe1bf9 100644
--- 
a/target/linux/brcm63xx/patches-3.8/446-BCM63XX-add-a-fixup-for-rt2x00-devices.patch
+++ 
b/target/linux/brcm63xx/patches-3.8/446-BCM63XX-add-a-fixup-for-rt2x00-devices.patch
@@ -36,7 +36,7 @@ Subject: [PATCH 72/72] 
446-BCM63XX-add-a-fixup-for-rt2x00-devices
  
  #include <uapi/linux/bcm963xx_tag.h>
  
-@@ -991,9 +992,19 @@ int __init board_register_devices(void)
+@@ -1009,9 +1010,19 @@ int __init board_register_devices(void)
        }
  
        /* register any fixups */
@@ -165,7 +165,7 @@ Subject: [PATCH 72/72] 
446-BCM63XX-add-a-fixup-for-rt2x00-devices
  
  /*
   * flash mapping
-@@ -16,11 +17,15 @@
+@@ -17,11 +18,15 @@
  #define BCM963XX_CFE_VERSION_OFFSET   0x570
  #define BCM963XX_NVRAM_OFFSET         0x580
  
@@ -182,7 +182,7 @@ Subject: [PATCH 72/72] 
446-BCM63XX-add-a-fixup-for-rt2x00-devices
  };
  
  /*
-@@ -45,7 +50,7 @@ struct board_info {
+@@ -46,7 +51,7 @@ struct board_info {
        unsigned int    has_caldata:2;
  
        /* wifi calibration data config */
diff --git a/target/linux/brcm63xx/patches-3.8/501-board-NB4.patch 
b/target/linux/brcm63xx/patches-3.8/501-board-NB4.patch
index 99b7e43..e1afda3 100644
--- a/target/linux/brcm63xx/patches-3.8/501-board-NB4.patch
+++ b/target/linux/brcm63xx/patches-3.8/501-board-NB4.patch
@@ -631,7 +631,7 @@
  #endif
  };
  
-@@ -806,6 +1409,16 @@ static void __init boardid_fixup(u8 *boo
+@@ -811,6 +1414,16 @@ static void __init boardid_fixup(u8 *boo
        struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
        char *board_name = (char *)bcm63xx_nvram_get_name();
  
diff --git a/target/linux/brcm63xx/patches-3.8/511-board_V2500V.patch 
b/target/linux/brcm63xx/patches-3.8/511-board_V2500V.patch
index 899a894..24e6162 100644
--- a/target/linux/brcm63xx/patches-3.8/511-board_V2500V.patch
+++ b/target/linux/brcm63xx/patches-3.8/511-board_V2500V.patch
@@ -74,7 +74,7 @@
  #endif
  
  #ifdef CONFIG_BCM63XX_CPU_6358
-@@ -2070,6 +2130,22 @@ void __init board_prom_init(void)
+@@ -2075,6 +2135,22 @@ void __init board_prom_init(void)
                val &= MPI_CSBASE_BASE_MASK;
        }
        boot_addr = (u8 *)KSEG1ADDR(val);
diff --git 
a/target/linux/brcm63xx/patches-3.8/520-bcm63xx-add-support-for-96368MVWG-board.patch
 
b/target/linux/brcm63xx/patches-3.8/520-bcm63xx-add-support-for-96368MVWG-board.patch
index c3b2c16..02ad31f 100644
--- 
a/target/linux/brcm63xx/patches-3.8/520-bcm63xx-add-support-for-96368MVWG-board.patch
+++ 
b/target/linux/brcm63xx/patches-3.8/520-bcm63xx-add-support-for-96368MVWG-board.patch
@@ -100,7 +100,7 @@ Subject: [PATCH 32/63] bcm63xx: add support for 96368MVWG 
board.
  };
  
  /*
-@@ -2409,12 +2485,25 @@ void __init board_prom_init(void)
+@@ -2427,12 +2503,25 @@ void __init board_prom_init(void)
                bcm63xx_pci_enabled = 1;
                if (BCMCPU_IS_6348())
                        val |= GPIO_MODE_6348_G2_PCI;
diff --git a/target/linux/brcm63xx/patches-3.8/528-board_nb6.patch 
b/target/linux/brcm63xx/patches-3.8/528-board_nb6.patch
index e565b8e..e031af0 100644
--- a/target/linux/brcm63xx/patches-3.8/528-board_nb6.patch
+++ b/target/linux/brcm63xx/patches-3.8/528-board_nb6.patch
@@ -132,7 +132,7 @@
  #ifdef CONFIG_BCM63XX_CPU_6368
        &board_96368mvwg,
        &board_96368mvngr,
-@@ -2893,6 +2997,11 @@ static void __init boardid_fixup(u8 *boo
+@@ -2898,6 +3002,11 @@ static void __init boardid_fixup(u8 *boo
                }
        }
  
diff --git a/target/linux/brcm63xx/patches-3.8/554-board_hw556.patch 
b/target/linux/brcm63xx/patches-3.8/554-board_hw556.patch
index 55aadee..45103e2 100644
--- a/target/linux/brcm63xx/patches-3.8/554-board_hw556.patch
+++ b/target/linux/brcm63xx/patches-3.8/554-board_hw556.patch
@@ -386,7 +386,7 @@
        &board_spw303v,
        &board_DVAG3810BN,
  #endif
-@@ -3466,13 +3838,37 @@ static void __init boardid_fixup(u8 *boo
+@@ -3471,13 +3843,37 @@ static void __init boardid_fixup(u8 *boo
        struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
        char *board_name = (char *)bcm63xx_nvram_get_name();
  
@@ -433,7 +433,7 @@
  
 --- a/drivers/mtd/bcm63xxpart.c
 +++ b/drivers/mtd/bcm63xxpart.c
-@@ -93,6 +93,11 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -67,6 +67,11 @@ static int bcm63xx_parse_cfe_partitions(
                              BCM63XX_CFE_BLOCK_SIZE);
  
        cfelen = cfe_erasesize;

_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to