mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
cdbc44dbb2
This patch allows accessing the upper 16m on the A variant (EN25QH256A) of the EN25QH256 that shares same JEDEC ID. Without this patch, addr_with is detected to be '4' but the read_opcode is a plain READ (supporting only 3 byte addresses). Setting PARSE_SFDP is enough to detect the read_opcode READ_4B on the A variant. READ_4B is not available on the no-A variant. Both variants support 4-byte address mode (spi_nor_set_4byte_addr_mode) but that is prone to breaking on unexpected reboots if the reset pin isn't connected (broken-flash-reset). The no-A variant supports a 'high bank latch mode' that affects read, program, and erase commands - similar to the extended address register (EAR). The HBL bit is manipulated using the ENHBL (0x67) and EXHBL (0x98) opcodes. Should it become necessary to distinguish the two variants in the future, the A variant sets the SNOR_HWCAPS_READ_1_1_4 SFDP param - the no-A variant doesn't. Tested with and without fast read on the A variant only. Signed-off-by: Leon M. George <leon@georgemail.eu> Signed-off-by: Pratyush Yadav <p.yadav@ti.com> Reviewed-by: Michael Walle <michael@walle.cc> Link: https://lore.kernel.org/r/20220502233310.791565-2-leon@georgemail.eu
39 lines
1.3 KiB
C
39 lines
1.3 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Copyright (C) 2005, Intec Automation Inc.
|
|
* Copyright (C) 2014, Freescale Semiconductor, Inc.
|
|
*/
|
|
|
|
#include <linux/mtd/spi-nor.h>
|
|
|
|
#include "core.h"
|
|
|
|
static const struct flash_info eon_nor_parts[] = {
|
|
/* EON -- en25xxx */
|
|
{ "en25f32", INFO(0x1c3116, 0, 64 * 1024, 64)
|
|
NO_SFDP_FLAGS(SECT_4K) },
|
|
{ "en25p32", INFO(0x1c2016, 0, 64 * 1024, 64) },
|
|
{ "en25q32b", INFO(0x1c3016, 0, 64 * 1024, 64) },
|
|
{ "en25p64", INFO(0x1c2017, 0, 64 * 1024, 128) },
|
|
{ "en25q64", INFO(0x1c3017, 0, 64 * 1024, 128)
|
|
NO_SFDP_FLAGS(SECT_4K) },
|
|
{ "en25q80a", INFO(0x1c3014, 0, 64 * 1024, 16)
|
|
NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ) },
|
|
{ "en25qh16", INFO(0x1c7015, 0, 64 * 1024, 32)
|
|
NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ) },
|
|
{ "en25qh32", INFO(0x1c7016, 0, 64 * 1024, 64) },
|
|
{ "en25qh64", INFO(0x1c7017, 0, 64 * 1024, 128)
|
|
NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ) },
|
|
{ "en25qh128", INFO(0x1c7018, 0, 64 * 1024, 256) },
|
|
{ "en25qh256", INFO(0x1c7019, 0, 64 * 1024, 512)
|
|
PARSE_SFDP },
|
|
{ "en25s64", INFO(0x1c3817, 0, 64 * 1024, 128)
|
|
NO_SFDP_FLAGS(SECT_4K) },
|
|
};
|
|
|
|
const struct spi_nor_manufacturer spi_nor_eon = {
|
|
.name = "eon",
|
|
.parts = eon_nor_parts,
|
|
.nparts = ARRAY_SIZE(eon_nor_parts),
|
|
};
|