mirror of https://github.com/hak5/openwrt.git
bcm63xx: Simplify CFE detection.
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: 36659lede-17.01
parent
6e2b85b401
commit
1f4e5f77a0
|
@ -9,18 +9,3 @@
|
||||||
else
|
else
|
||||||
strcpy(cfe_version, "unknown");
|
strcpy(cfe_version, "unknown");
|
||||||
printk(KERN_INFO PFX "CFE version: %s\n", cfe_version);
|
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;
|
|
||||||
|
|
|
@ -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_ */
|
|
@ -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,
|
|
@ -15,7 +15,7 @@
|
||||||
/* 240-255: Unused at present */
|
/* 240-255: Unused at present */
|
||||||
--- a/drivers/mtd/bcm63xxpart.c
|
--- a/drivers/mtd/bcm63xxpart.c
|
||||||
+++ b/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 {
|
} else {
|
||||||
/* OpenWrt layout */
|
/* OpenWrt layout */
|
||||||
rootfsaddr = kerneladdr + kernellen;
|
rootfsaddr = kerneladdr + kernellen;
|
||||||
|
|
|
@ -7,7 +7,7 @@ contained in flash.
|
||||||
|
|
||||||
--- a/drivers/mtd/bcm63xxpart.c
|
--- a/drivers/mtd/bcm63xxpart.c
|
||||||
+++ b/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;
|
struct mtd_partition *parts;
|
||||||
int ret;
|
int ret;
|
||||||
size_t retlen;
|
size_t retlen;
|
||||||
|
@ -21,7 +21,7 @@ contained in flash.
|
||||||
int i;
|
int i;
|
||||||
u32 computed_crc;
|
u32 computed_crc;
|
||||||
bool rootfs_first = false;
|
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;
|
cfelen = cfe_erasesize;
|
||||||
nvramlen = bcm63xx_nvram_get_psi_size();
|
nvramlen = bcm63xx_nvram_get_psi_size();
|
||||||
nvramlen = roundup(nvramlen, cfe_erasesize);
|
nvramlen = roundup(nvramlen, cfe_erasesize);
|
||||||
|
@ -46,7 +46,7 @@ contained in flash.
|
||||||
|
|
||||||
/* Allocate memory for buffer */
|
/* Allocate memory for buffer */
|
||||||
buf = vmalloc(sizeof(struct bcm_tag));
|
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;
|
rootfsaddr = 0;
|
||||||
spareaddr = cfelen;
|
spareaddr = cfelen;
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ contained in flash.
|
||||||
|
|
||||||
/* Determine number of partitions */
|
/* Determine number of partitions */
|
||||||
if (rootfslen > 0)
|
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)
|
if (kernellen > 0)
|
||||||
nrparts++;
|
nrparts++;
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ contained in flash.
|
||||||
/* Ask kernel for more memory */
|
/* Ask kernel for more memory */
|
||||||
parts = kzalloc(sizeof(*parts) * nrparts + 10 * nrparts, GFP_KERNEL);
|
parts = kzalloc(sizeof(*parts) * nrparts + 10 * nrparts, GFP_KERNEL);
|
||||||
if (!parts) {
|
if (!parts) {
|
||||||
@@ -191,15 +217,32 @@ static int bcm63xx_parse_cfe_partitions(
|
@@ -167,15 +193,32 @@ static int bcm63xx_parse_cfe_partitions(
|
||||||
curpart++;
|
curpart++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -433,7 +433,7 @@
|
||||||
|
|
||||||
--- a/drivers/mtd/bcm63xxpart.c
|
--- a/drivers/mtd/bcm63xxpart.c
|
||||||
+++ b/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);
|
BCM63XX_CFE_BLOCK_SIZE);
|
||||||
|
|
||||||
cfelen = cfe_erasesize;
|
cfelen = cfe_erasesize;
|
||||||
|
|
Loading…
Reference in New Issue