[U-Boot] [PATCH 11/11] cfi_flash: return device into read array mode after reading status

Stefan Roese sr at denx.de
Mon Mar 21 17:19:35 CET 2016


Hi Vasily,

On 21.03.2016 02:54, Marek Vasut wrote:
> On 03/21/2016 02:37 AM, Vasily Khoruzhick wrote:
>> Otherwise flash remains in read status mode and it's not possible
>> to access data on flash.
>>
>> Signed-off-by: Vasily Khoruzhick <anarsoul at gmail.com>
> 
> CCing Stefan and Scott on this one.
> 
>> ---
>>   drivers/mtd/cfi_flash.c | 2 ++
>>   1 file changed, 2 insertions(+)
>>
>> diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
>> index 39932f4..18831c6 100644
>> --- a/drivers/mtd/cfi_flash.c
>> +++ b/drivers/mtd/cfi_flash.c
>> @@ -2203,6 +2203,8 @@ ulong flash_get_size (phys_addr_t base, int banknum)
>>   						flash_isset (info, sect_cnt,
>>   							     FLASH_OFFSET_PROTECT,
>>   							     FLASH_STATUS_PROTECT);
>> +					flash_write_cmd(info, sect_cnt, 0,
>> +							FLASH_CMD_RESET);
>>   					break;
>>   				case CFI_CMDSET_AMD_EXTENDED:
>>   				case CFI_CMDSET_AMD_STANDARD:
>>

I can't test this patch, since I don't have such a board here
available right now any more. But I'm wondering if this is really
necessary. The driver used to work just fine on Intel Strata
flash chips without this patch.

And looking at the code, a bit later (after the loop) the flash 
is actually reset:

...
		/* round up when converting to ms */
		info->write_tout = (tmp + 999) / 1000;
		info->flash_id = FLASH_MAN_CFI;
		if ((info->interface == FLASH_CFI_X8X16) &&
		    (info->chipwidth == FLASH_CFI_BY8)) {
			/* XXX - Need to test on x8/x16 in parallel. */
			info->portwidth >>= 1;
		}

		flash_write_cmd (info, 0, 0, info->cmd_reset);
	}
...

So what exactly does not work for you with the current version?
Which flash chip are you using?

Thanks,
Stefan



More information about the U-Boot mailing list