mirror of https://github.com/hak5/openwrt-owl.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: 36659owl
parent
6e2b85b401
commit
1f4e5f77a0
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
--- 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;
|
||||
|
|
|
@ -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++;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue