[PATCH v4 1/2] mtd: spi-nor: Fix whole chip erasing for stacked chips.

mar.krzeminski mar.krzeminski at gmail.com
Sat Jan 7 14:33:43 PST 2017


W dniu 07.01.2017 o 00:45, Marek Vasut pisze:
> On 01/06/2017 06:19 PM, Marcin Krzeminski wrote:
>> Currently it is possible to disable chip erase for spi-nor driver.
>> Some modern stacked (multi die) flash chips do not support chip
>> erase opcode at all but spi-nor framework needs to cope with them too.
>> This commit extends existing functionality to allow disable
>> chip erase for a single flash chip.
> I wonder whether this should really be opt-out flag. Since we'll see
> more multi-die chips (and chips with different die sizes), I'd say this
> should rather be opt-in flag.
Multi-die does not mean that chip will not support chip erase (we have 
already a multi-die
chips that still do chip erase). Please think about this patch more like 
a bug-fix not a feature.
More likely this will be flag kinda similar to eg. USE_FSR - for some 
manufacturers only.

We are far away for real die erase functionality in spi-nor framework 
(due to 4byte mode bootloaders issue).
Die erase could be covered in different series -  maybe with more advanced
erase procedure that takes biggest available erase size?

Thanks,
Marcin
>
>> Signed-off-by: Marcin Krzeminski <mar.krzeminski at gmail.com>
>> ---
>>   drivers/mtd/spi-nor/spi-nor.c | 3 +++
>>   1 file changed, 3 insertions(+)
>>
>> diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
>> index 2a643a1..595de54 100644
>> --- a/drivers/mtd/spi-nor/spi-nor.c
>> +++ b/drivers/mtd/spi-nor/spi-nor.c
>> @@ -85,6 +85,7 @@ struct flash_info {
>>   					 * Use dedicated 4byte address op codes
>>   					 * to support memory size above 128Mib.
>>   					 */
>> +#define NO_CHIP_ERASE		BIT(12) /* Chip does not support chip erase */
>>   };
>>   
>>   #define JEDEC_MFR(info)	((info)->id[0])
>> @@ -1621,6 +1622,8 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
>>   		nor->flags |= SNOR_F_USE_FSR;
>>   	if (info->flags & SPI_NOR_HAS_TB)
>>   		nor->flags |= SNOR_F_HAS_SR_TB;
>> +	if (info->flags & NO_CHIP_ERASE)
>> +		nor->flags |= SNOR_F_NO_OP_CHIP_ERASE;
>>   
>>   #ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
>>   	/* prefer "small sector" erase if possible */
>>
>




More information about the linux-mtd mailing list