Skip to content

Commit

Permalink
mtd: parsers: bcm63xx: simplify CFE detection
Browse files Browse the repository at this point in the history
Instead of trying to parse CFE version string, which is customized by some
vendors, let's just check that "CFE1" was passed on argument 3.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20200615091740.2958303-1-noltari@gmail.com
  • Loading branch information
Álvaro Fernández Rojas authored and Miquel Raynal committed Jun 26, 2020
1 parent 4551e78 commit 91e8115
Showing 1 changed file with 12 additions and 20 deletions.
32 changes: 12 additions & 20 deletions drivers/mtd/parsers/bcm63xxpart.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@
#include <linux/mtd/partitions.h>
#include <linux/of.h>

#ifdef CONFIG_MIPS
#include <asm/bootinfo.h>
#include <asm/fw/cfe/cfe_api.h>
#endif /* CONFIG_MIPS */

#define BCM963XX_CFE_BLOCK_SIZE SZ_64K /* always at least 64KiB */

#define BCM963XX_CFE_MAGIC_OFFSET 0x4e0
Expand All @@ -32,28 +37,15 @@
#define STR_NULL_TERMINATE(x) \
do { char *_str = (x); _str[sizeof(x) - 1] = 0; } while (0)

static int bcm63xx_detect_cfe(struct mtd_info *master)
static inline int bcm63xx_detect_cfe(void)
{
char buf[9];
int ret;
size_t retlen;
int ret = 0;

ret = mtd_read(master, BCM963XX_CFE_VERSION_OFFSET, 5, &retlen,
(void *)buf);
buf[retlen] = 0;
#ifdef CONFIG_MIPS
ret = (fw_arg3 == CFE_EPTSEAL);
#endif /* CONFIG_MIPS */

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, BCM963XX_CFE_MAGIC_OFFSET, 8, &retlen,
(void *)buf);
buf[retlen] = 0;

return strncmp("CFE1CFE1", buf, 8);
return ret;
}

static int bcm63xx_read_nvram(struct mtd_info *master,
Expand Down Expand Up @@ -138,7 +130,7 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
struct bcm963xx_nvram *nvram = NULL;
int ret;

if (bcm63xx_detect_cfe(master))
if (!bcm63xx_detect_cfe())
return -EINVAL;

nvram = vzalloc(sizeof(*nvram));
Expand Down

0 comments on commit 91e8115

Please sign in to comment.