bcm63xx: Simplify CFE detection.
authorJonas Gorski <jogo@openwrt.org>
Sun, 19 May 2013 18:32:02 +0000 (18:32 +0000)
committerJonas Gorski <jogo@openwrt.org>
Sun, 19 May 2013 18:32:02 +0000 (18:32 +0000)
Check bootloader argument in mtd.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
[jogo@openwrt.org: split into two patches, one for detection,
                   one letting bcm63xxpart use it.]
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
SVN-Revision: 36659

target/linux/brcm63xx/patches-3.8/309-cfe_version_mod.patch
target/linux/brcm63xx/patches-3.8/323-cfe_simplify_detection.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.8/324-bcm63xxpart_use_cfedetection.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.8/401-bcm963xx_real_rootfs_length.patch
target/linux/brcm63xx/patches-3.8/417-MTD-bcm63xxpart-allow-passing-a-caldata-offset.patch
target/linux/brcm63xx/patches-3.8/534-board_hw556.patch

index f350d21ac40de9a8a6342c923c31feba463e85bc..9482b6b56ff3772882374b61576b98fa9299923f 100644 (file)
@@ -9,18 +9,3 @@
        else
                strcpy(cfe_version, "unknown");
        printk(KERN_INFO PFX "CFE version: %s\n", cfe_version);
---- a/drivers/mtd/bcm63xxpart.c
-+++ b/drivers/mtd/bcm63xxpart.c
-@@ -56,10 +56,10 @@ static int bcm63xx_detect_cfe(struct mtd
-       if (ret)
-               return ret;
--      if (strncmp("cfe-v", buf, 5) == 0)
-+      if (strncmp("cfe-", buf, 4) == 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;
diff --git a/target/linux/brcm63xx/patches-3.8/323-cfe_simplify_detection.patch b/target/linux/brcm63xx/patches-3.8/323-cfe_simplify_detection.patch
new file mode 100644 (file)
index 0000000..e05c91d
--- /dev/null
@@ -0,0 +1,20 @@
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_board.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_board.h
+@@ -1,6 +1,8 @@
+ #ifndef BCM63XX_BOARD_H_
+ #define BCM63XX_BOARD_H_
++#include <asm/bootinfo.h>
++
+ const char *board_get_name(void);
+ void board_prom_init(void);
+@@ -9,4 +11,8 @@ void board_setup(void);
+ int board_register_devices(void);
++static inline bool bcm63xx_is_cfe_present(void) {
++      return fw_arg3 == 0x43464531;
++}
++
+ #endif /* ! BCM63XX_BOARD_H_ */
diff --git a/target/linux/brcm63xx/patches-3.8/324-bcm63xxpart_use_cfedetection.patch b/target/linux/brcm63xx/patches-3.8/324-bcm63xxpart_use_cfedetection.patch
new file mode 100644 (file)
index 0000000..fd7d08a
--- /dev/null
@@ -0,0 +1,51 @@
+--- a/drivers/mtd/bcm63xxpart.c
++++ b/drivers/mtd/bcm63xxpart.c
+@@ -35,7 +35,7 @@
+ #include <linux/bcm963xx_tag.h>
+ #include <asm/mach-bcm63xx/bcm63xx_nvram.h>
+-#include <asm/mach-bcm63xx/board_bcm963xx.h>
++#include <asm/mach-bcm63xx/bcm63xx_board.h>
+ #define BCM63XX_EXTENDED_SIZE 0xBFC00000      /* Extended flash address */
+@@ -43,30 +43,6 @@
+ #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 */
+-      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)
+@@ -85,7 +61,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,
index e5d02086594ad366277d163eee723ddbe3ff0092..caf8b9514d0a39b3f552fa7de8a3c6a6b61896ed 100644 (file)
@@ -15,7 +15,7 @@
        /* 240-255: Unused at present */
 --- a/drivers/mtd/bcm63xxpart.c
 +++ b/drivers/mtd/bcm63xxpart.c
-@@ -134,7 +134,8 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -110,7 +110,8 @@ static int bcm63xx_parse_cfe_partitions(
                } else {
                        /* OpenWrt layout */
                        rootfsaddr = kerneladdr + kernellen;
index d33f8991940607869d23692423846355f1d99f67..5ce822339f77f01cce88a19aa540d2e4182fe095 100644 (file)
@@ -7,7 +7,7 @@ contained in flash.
 
 --- a/drivers/mtd/bcm63xxpart.c
 +++ b/drivers/mtd/bcm63xxpart.c
-@@ -77,10 +77,12 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -53,10 +53,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;
-@@ -94,6 +96,24 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -70,6 +72,24 @@ static int bcm63xx_parse_cfe_partitions(
        cfelen = cfe_erasesize;
        nvramlen = bcm63xx_nvram_get_psi_size();
        nvramlen = roundup(nvramlen, cfe_erasesize);
@@ -46,7 +46,7 @@ contained in flash.
  
        /* Allocate memory for buffer */
        buf = vmalloc(sizeof(struct bcm_tag));
-@@ -145,7 +165,7 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -121,7 +141,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)
-@@ -154,6 +174,12 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -130,6 +150,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) {
-@@ -191,15 +217,32 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -167,15 +193,32 @@ static int bcm63xx_parse_cfe_partitions(
                curpart++;
        }
  
index e0a1542ad4c5dbd712a026cd9b7ca962d4db3075..fb0afa4493c921c64e813f1c01b81a94f583a294 100644 (file)
  
 --- a/drivers/mtd/bcm63xxpart.c
 +++ b/drivers/mtd/bcm63xxpart.c
-@@ -94,6 +94,11 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -70,6 +70,11 @@ static int bcm63xx_parse_cfe_partitions(
                              BCM63XX_CFE_BLOCK_SIZE);
  
        cfelen = cfe_erasesize;