Browse Source

bcm63xx: Simplify CFE detection.

Check bootloader argument in mtd.

Signed-off-by: Álvaro Fernández Rojas <[email protected]>
[[email protected]: split into two patches, one for detection,
                   one letting bcm63xxpart use it.]
Signed-off-by: Jonas Gorski <[email protected]>

SVN-Revision: 36659
Jonas Gorski 12 years ago
parent
commit
1f4e5f77a0

+ 0 - 15
target/linux/brcm63xx/patches-3.8/309-cfe_version_mod.patch

@@ -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;

+ 20 - 0
target/linux/brcm63xx/patches-3.8/323-cfe_simplify_detection.patch

@@ -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_ */

+ 51 - 0
target/linux/brcm63xx/patches-3.8/324-bcm63xxpart_use_cfedetection.patch

@@ -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,

+ 1 - 1
target/linux/brcm63xx/patches-3.8/401-bcm963xx_real_rootfs_length.patch

@@ -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;

+ 5 - 5
target/linux/brcm63xx/patches-3.8/417-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
-@@ -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++;
  	}
  

+ 1 - 1
target/linux/brcm63xx/patches-3.8/534-board_hw556.patch

@@ -433,7 +433,7 @@
  
 --- 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;