From 717c746a4511cffdb199ef5b18cfc5fbdc55c057 Mon Sep 17 00:00:00 2001 From: Jonas Gorski Date: Sat, 17 Dec 2011 13:58:14 +0100 Subject: [PATCH] --- yaml --- r: 282854 b: refs/heads/master c: f2d9739b8e0bc9bdcc972950dd433b5083edf72f h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/mtd/bcm63xxpart.c | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 39f6d00c92f2..d810ffb0dda5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f9fbcdc357f37d6c82a75a89c64efbe8bd5274e1 +refs/heads/master: f2d9739b8e0bc9bdcc972950dd433b5083edf72f diff --git a/trunk/drivers/mtd/bcm63xxpart.c b/trunk/drivers/mtd/bcm63xxpart.c index ac7d3c823949..9933b347a555 100644 --- a/trunk/drivers/mtd/bcm63xxpart.c +++ b/trunk/drivers/mtd/bcm63xxpart.c @@ -32,22 +32,34 @@ #include #include +#include #define BCM63XX_EXTENDED_SIZE 0xBFC00000 /* Extended flash address */ +#define BCM63XX_CFE_MAGIC_OFFSET 0x4e0 + static int bcm63xx_detect_cfe(struct mtd_info *master) { - int idoffset = 0x4e0; - static char idstring[8] = "CFE1CFE1"; char buf[9]; int ret; size_t retlen; - ret = master->read(master, idoffset, 8, &retlen, (void *)buf); + ret = master->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 = master->read(master, BCM63XX_CFE_MAGIC_OFFSET, 8, &retlen, + (void *)buf); buf[retlen] = 0; - pr_info("Read Signature value of %s\n", buf); - return strncmp(idstring, buf, 8); + return strncmp("CFE1CFE1", buf, 8); } static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,