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

Commit 5c9c11e1 authored by Mike Rapoport's avatar Mike Rapoport Committed by David Woodhouse
Browse files

[MTD] [NOR] Add support for flash chips with ID in bank other than 0

According to JEDEC "Standard Manufacturer's Identification Code"
(http://www.jedec.org/download/search/jep106W.pdf

)
several first banks of NOR flash can contain 0x7f instead of actual ID.
This patch adds support for reading manufacturer ID from banks other than 0.

Signed-off-by: default avatarMike Rapoport <mike@compulab.co.il>
Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
parent 8fd310a1
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
#define MANUFACTURER_ST		0x0020
#define MANUFACTURER_TOSHIBA	0x0098
#define MANUFACTURER_WINBOND	0x00da
#define CONTINUATION_CODE	0x007f


/* AMD */
@@ -1760,9 +1761,21 @@ static inline u32 jedec_read_mfr(struct map_info *map, uint32_t base,
{
	map_word result;
	unsigned long mask;
	u32 ofs = cfi_build_cmd_addr(0, cfi_interleave(cfi), cfi->device_type);
	int bank = 0;

	/* According to JEDEC "Standard Manufacturer's Identification Code"
	 * (http://www.jedec.org/download/search/jep106W.pdf)
	 * several first banks can contain 0x7f instead of actual ID
	 */
	do {
		uint32_t ofs = cfi_build_cmd_addr(0 + (bank << 8),
						  cfi_interleave(cfi),
						  cfi->device_type);
		mask = (1 << (cfi->device_type * 8)) - 1;
		result = map_read(map, base + ofs);
		bank++;
	} while ((result.x[0] & mask) == CONTINUATION_CODE);

	return result.x[0] & mask;
}