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

Commit 5ca1088f authored by Rafał Miłecki's avatar Rafał Miłecki Committed by David Woodhouse
Browse files

Revert "mtd: bcm47xxpart: improve probing of nvram partition"



This reverts commit be3781b7.

Some CFE bootloaders have NVRAM at offset 0x1000. With that patch we
were detecting such a bootloaders as a standard NVRAM partition.
Changing anything in this pseudo-NVRAM resulted in corrupted bootloader
and bricked device!

Signed-off-by: default avatarRafał Miłecki <zajec5@gmail.com>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent 48476df9
Loading
Loading
Loading
Loading
+9 −13
Original line number Diff line number Diff line
@@ -19,6 +19,12 @@
/* 10 parts were found on sflash on Netgear WNDR4500 */
#define BCM47XXPART_MAX_PARTS		12

/*
 * Amount of bytes we read when analyzing each block of flash memory.
 * Set it big enough to allow detecting partition and reading important data.
 */
#define BCM47XXPART_BYTES_TO_READ	0x404

/* Magics */
#define BOARD_DATA_MAGIC		0x5246504D	/* MPFR */
#define POT_MAGIC1			0x54544f50	/* POTT */
@@ -57,17 +63,14 @@ static int bcm47xxpart_parse(struct mtd_info *master,
	struct trx_header *trx;
	int trx_part = -1;
	int last_trx_part = -1;
	int max_bytes_to_read = 0x8004;

	if (blocksize <= 0x10000)
		blocksize = 0x10000;
	if (blocksize == 0x20000)
		max_bytes_to_read = 0x18004;

	/* Alloc */
	parts = kzalloc(sizeof(struct mtd_partition) * BCM47XXPART_MAX_PARTS,
			GFP_KERNEL);
	buf = kzalloc(max_bytes_to_read, GFP_KERNEL);
	buf = kzalloc(BCM47XXPART_BYTES_TO_READ, GFP_KERNEL);

	/* Parse block by block looking for magics */
	for (offset = 0; offset <= master->size - blocksize;
@@ -82,7 +85,7 @@ static int bcm47xxpart_parse(struct mtd_info *master,
		}

		/* Read beginning of the block */
		if (mtd_read(master, offset, max_bytes_to_read,
		if (mtd_read(master, offset, BCM47XXPART_BYTES_TO_READ,
			     &bytes_read, (uint8_t *)buf) < 0) {
			pr_err("mtd_read error while parsing (offset: 0x%X)!\n",
			       offset);
@@ -97,16 +100,9 @@ static int bcm47xxpart_parse(struct mtd_info *master,
		}

		/* Standard NVRAM */
		if (buf[0x000 / 4] == NVRAM_HEADER ||
		    buf[0x1000 / 4] == NVRAM_HEADER ||
		    buf[0x8000 / 4] == NVRAM_HEADER ||
		    (blocksize == 0x20000 && (
		      buf[0x10000 / 4] == NVRAM_HEADER ||
		      buf[0x11000 / 4] == NVRAM_HEADER ||
		      buf[0x18000 / 4] == NVRAM_HEADER))) {
		if (buf[0x000 / 4] == NVRAM_HEADER) {
			bcm47xxpart_add_part(&parts[curr_part++], "nvram",
					     offset, 0);
			offset = rounddown(offset, blocksize);
			continue;
		}