Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f2d9739b authored by Jonas Gorski's avatar Jonas Gorski Committed by David Woodhouse
Browse files

mtd: bcm63xxpart: check version marker string for newer CFEs



Recent CFEs do not contain the CFE1CFE1 magic anymore, so check for the
"cfe-v" version marker string instead. As very old CFEs do not have
this string, leave the CFE1CFE1 magic as a fallback for detection.

Signed-off-by: default avatarJonas Gorski <jonas.gorski@gmail.com>
Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@linux.intel.com>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent f9fbcdc3
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -32,22 +32,34 @@
#include <linux/mtd/partitions.h>

#include <asm/mach-bcm63xx/bcm963xx_tag.h>
#include <asm/mach-bcm63xx/board_bcm963xx.h>

#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,