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: 36659master
parent
6e2b85b401
commit
1f4e5f77a0
@ -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,
|
Loading…
Reference in new issue