kernel: add patch to support en25qh256a
The EN25QH256A variant of the EN25QH256 doesn't initialize correctly from SFDP alone and only accesses memory below 8m (addr_width is 4 but read_opcode takes only 3 bytes). Set SNOR_F_4B_OPCODES if the flash chip variant was detected using hwcaps. The fix submitted upstream uses the PARSE_SFDP initializer that is not available in the kernel used with Openwrt. Signed-off-by: Leon M. Busch-George <leon@georgemail.eu>
This commit is contained in:
		 Leon M. Busch-George
					Leon M. Busch-George
				
			
				
					committed by
					
						 Hauke Mehrtens
						Hauke Mehrtens
					
				
			
			
				
	
			
			
			 Hauke Mehrtens
						Hauke Mehrtens
					
				
			
						parent
						
							4965cbd259
						
					
				
				
					commit
					ed7c1a504e
				
			| @@ -0,0 +1,49 @@ | ||||
| From 6abef37d16d0c570ef5a149e63762fba2a30804b Mon Sep 17 00:00:00 2001 | ||||
| From: "Leon M. George" <leon@georgemail.eu> | ||||
| Date: Wed, 30 Mar 2022 16:16:56 +0200 | ||||
| Subject: [PATCH] mtd: spi-nor: support eon en25qh256a variant | ||||
|  | ||||
| The EN25QH256A variant of the EN25QH256 doesn't initialize correctly from SFDP | ||||
| alone and only accesses memory below 8m (addr_width is 4 but read_opcode takes | ||||
| only 3 bytes). | ||||
|  | ||||
| Set SNOR_F_4B_OPCODES if the flash chip variant was detected using hwcaps. | ||||
|  | ||||
| The fix submitted upstream uses the PARSE_SFDP initializer that is not | ||||
| available in the kernel used with Openwrt. | ||||
|  | ||||
| Signed-off-by: Leon M. George <leon@georgemail.eu> | ||||
| --- | ||||
|  drivers/mtd/spi-nor/eon.c | 11 +++++++++++ | ||||
|  1 file changed, 11 insertions(+) | ||||
|  | ||||
| --- a/drivers/mtd/spi-nor/eon.c | ||||
| +++ b/drivers/mtd/spi-nor/eon.c | ||||
| @@ -8,6 +8,16 @@ | ||||
|   | ||||
|  #include "core.h" | ||||
|   | ||||
| +static void en25qh256_post_sfdp_fixups(struct spi_nor *nor) | ||||
| +{ | ||||
| +	if (nor->params->hwcaps.mask & SNOR_HWCAPS_READ_1_1_4) | ||||
| +		nor->flags |= SNOR_F_4B_OPCODES; | ||||
| +} | ||||
| + | ||||
| +static const struct spi_nor_fixups en25qh256_fixups = { | ||||
| +	.post_sfdp = en25qh256_post_sfdp_fixups, | ||||
| +}; | ||||
| + | ||||
|  static const struct flash_info eon_parts[] = { | ||||
|  	/* EON -- en25xxx */ | ||||
|  	{ "en25f32",    INFO(0x1c3116, 0, 64 * 1024,   64, SECT_4K) }, | ||||
| @@ -23,7 +33,9 @@ static const struct flash_info eon_parts | ||||
|  	{ "en25qh64",   INFO(0x1c7017, 0, 64 * 1024,  128, | ||||
|  			     SECT_4K | SPI_NOR_DUAL_READ) }, | ||||
|  	{ "en25qh128",  INFO(0x1c7018, 0, 64 * 1024,  256, 0) }, | ||||
| -	{ "en25qh256",  INFO(0x1c7019, 0, 64 * 1024,  512, 0) }, | ||||
| +	{ "en25qh256",  INFO(0x1c7019, 0, 64 * 1024,  512, | ||||
| +		SPI_NOR_DUAL_READ) | ||||
| +		.fixups = &en25qh256_fixups }, | ||||
|  	{ "en25s64",	INFO(0x1c3817, 0, 64 * 1024,  128, SECT_4K) }, | ||||
|  }; | ||||
|   | ||||
| @@ -0,0 +1,49 @@ | ||||
| From 6abef37d16d0c570ef5a149e63762fba2a30804b Mon Sep 17 00:00:00 2001 | ||||
| From: "Leon M. George" <leon@georgemail.eu> | ||||
| Date: Wed, 30 Mar 2022 16:16:56 +0200 | ||||
| Subject: [PATCH] mtd: spi-nor: support eon en25qh256a variant | ||||
|  | ||||
| The EN25QH256A variant of the EN25QH256 doesn't initialize correctly from SFDP | ||||
| alone and only accesses memory below 8m (addr_width is 4 but read_opcode takes | ||||
| only 3 bytes). | ||||
|  | ||||
| Set SNOR_F_4B_OPCODES if the flash chip variant was detected using hwcaps. | ||||
|  | ||||
| The fix submitted upstream uses the PARSE_SFDP initializer that is not | ||||
| available in the kernel used with Openwrt. | ||||
|  | ||||
| Signed-off-by: Leon M. George <leon@georgemail.eu> | ||||
| --- | ||||
|  drivers/mtd/spi-nor/eon.c | 11 +++++++++++ | ||||
|  1 file changed, 11 insertions(+) | ||||
|  | ||||
| --- a/drivers/mtd/spi-nor/eon.c | ||||
| +++ b/drivers/mtd/spi-nor/eon.c | ||||
| @@ -8,6 +8,16 @@ | ||||
|   | ||||
|  #include "core.h" | ||||
|   | ||||
| +static void en25qh256_post_sfdp_fixups(struct spi_nor *nor) | ||||
| +{ | ||||
| +	if (nor->params->hwcaps.mask & SNOR_HWCAPS_READ_1_1_4) | ||||
| +		nor->flags |= SNOR_F_4B_OPCODES; | ||||
| +} | ||||
| + | ||||
| +static const struct spi_nor_fixups en25qh256_fixups = { | ||||
| +	.post_sfdp = en25qh256_post_sfdp_fixups, | ||||
| +}; | ||||
| + | ||||
|  static const struct flash_info eon_parts[] = { | ||||
|  	/* EON -- en25xxx */ | ||||
|  	{ "en25f32",    INFO(0x1c3116, 0, 64 * 1024,   64, SECT_4K) }, | ||||
| @@ -23,7 +33,9 @@ static const struct flash_info eon_parts | ||||
|  	{ "en25qh64",   INFO(0x1c7017, 0, 64 * 1024,  128, | ||||
|  			     SECT_4K | SPI_NOR_DUAL_READ) }, | ||||
|  	{ "en25qh128",  INFO(0x1c7018, 0, 64 * 1024,  256, 0) }, | ||||
| -	{ "en25qh256",  INFO(0x1c7019, 0, 64 * 1024,  512, 0) }, | ||||
| +	{ "en25qh256",  INFO(0x1c7019, 0, 64 * 1024,  512, | ||||
| +		SPI_NOR_DUAL_READ) | ||||
| +		.fixups = &en25qh256_fixups }, | ||||
|  	{ "en25s64",	INFO(0x1c3817, 0, 64 * 1024,  128, SECT_4K) }, | ||||
|  }; | ||||
|   | ||||
| @@ -8,7 +8,7 @@ Signed-off-by: Piotr Dymacz <pepe2k@gmail.com> | ||||
|  | ||||
| --- a/drivers/mtd/spi-nor/eon.c | ||||
| +++ b/drivers/mtd/spi-nor/eon.c | ||||
| @@ -15,6 +15,7 @@ static const struct flash_info eon_parts | ||||
| @@ -25,6 +25,7 @@ static const struct flash_info eon_parts | ||||
|  	{ "en25q32b",   INFO(0x1c3016, 0, 64 * 1024,   64, 0) }, | ||||
|  	{ "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128, 0) }, | ||||
|  	{ "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128, SECT_4K) }, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> | ||||
|  | ||||
| --- a/drivers/mtd/spi-nor/eon.c | ||||
| +++ b/drivers/mtd/spi-nor/eon.c | ||||
| @@ -16,6 +16,7 @@ static const struct flash_info eon_parts | ||||
| @@ -26,6 +26,7 @@ static const struct flash_info eon_parts | ||||
|  	{ "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128, 0) }, | ||||
|  	{ "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128, SECT_4K) }, | ||||
|  	{ "en25q128",   INFO(0x1c3018, 0, 64 * 1024,  256, SECT_4K) }, | ||||
|   | ||||
| @@ -8,7 +8,7 @@ Signed-off-by: Piotr Dymacz <pepe2k@gmail.com> | ||||
|  | ||||
| --- a/drivers/mtd/spi-nor/eon.c | ||||
| +++ b/drivers/mtd/spi-nor/eon.c | ||||
| @@ -15,6 +15,7 @@ static const struct flash_info eon_parts | ||||
| @@ -25,6 +25,7 @@ static const struct flash_info eon_parts | ||||
|  	{ "en25q32b",   INFO(0x1c3016, 0, 64 * 1024,   64, 0) }, | ||||
|  	{ "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128, 0) }, | ||||
|  	{ "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128, SECT_4K) }, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> | ||||
|  | ||||
| --- a/drivers/mtd/spi-nor/eon.c | ||||
| +++ b/drivers/mtd/spi-nor/eon.c | ||||
| @@ -16,6 +16,7 @@ static const struct flash_info eon_parts | ||||
| @@ -26,6 +26,7 @@ static const struct flash_info eon_parts | ||||
|  	{ "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128, 0) }, | ||||
|  	{ "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128, SECT_4K) }, | ||||
|  	{ "en25q128",   INFO(0x1c3018, 0, 64 * 1024,  256, SECT_4K) }, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user