Commit 4e4fb639 authored by Jonas Gorski's avatar Jonas Gorski Committed by Artem Bityutskiy
Browse files

mtd: bcm63xxpart: make fixed part length calculation more generic



The CFE does not use 4K sectors even if the flash supports it, so
for the fixed partitions like CFE itself or NVRAM the erase block
size is always 64k or bigger.

Signed-off-by: default avatarJonas Gorski <jonas.gorski@gmail.com>
Reviewed-by: default avatarFlorian Fainelli <florian@openwrt.org>
Signed-off-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
parent e190401b
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -37,8 +37,7 @@

#define BCM63XX_EXTENDED_SIZE	0xBFC00000	/* Extended flash address */

#define BCM63XX_MIN_CFE_SIZE	0x10000		/* always at least 64KiB */
#define BCM63XX_MIN_NVRAM_SIZE	0x10000		/* always at least 64KiB */
#define BCM63XX_CFE_BLOCK_SIZE	0x10000		/* always at least 64KiB */

#define BCM63XX_CFE_MAGIC_OFFSET 0x4e0

@@ -79,6 +78,7 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
	unsigned int rootfsaddr, kerneladdr, spareaddr;
	unsigned int rootfslen, kernellen, sparelen, totallen;
	unsigned int cfelen, nvramlen;
	unsigned int cfe_erasesize;
	int i;
	u32 computed_crc;
	bool rootfs_first = false;
@@ -86,8 +86,11 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
	if (bcm63xx_detect_cfe(master))
		return -EINVAL;

	cfelen = max_t(uint32_t, master->erasesize, BCM63XX_MIN_CFE_SIZE);
	nvramlen = max_t(uint32_t, master->erasesize, BCM63XX_MIN_NVRAM_SIZE);
	cfe_erasesize = max_t(uint32_t, master->erasesize,
			      BCM63XX_CFE_BLOCK_SIZE);

	cfelen = cfe_erasesize;
	nvramlen = cfe_erasesize;

	/* Allocate memory for buffer */
	buf = vmalloc(sizeof(struct bcm_tag));