[U-Boot] [PATCH] mtd: cfi: Fix checking status register feature

Marek Vasut marek.vasut at gmail.com
Thu Nov 30 12:47:50 UTC 2017


On 11/30/2017 08:23 AM, Stefan Roese wrote:
> On 21.11.2017 10:54, Marek Vasut wrote:
>> On 11/21/2017 03:52 AM, York Sun wrote:
>>> On 11/18/2017 11:09 AM, York Sun wrote:
>>>> Commit 72443c7f7d21 ("mtd: cfi: Add support for status register
>>>> polling") added a feature check to determine if status register
>>>> is available for certain flash chips. The "lower software bits"
>>>> register used to determine this feature is not backward compati-
>>>> ble. Older flash chips without this feature has reserved value
>>>> 0xff. Instead of checking "lower software bits" register, use
>>>> CFI primary vendor-specific extended query. Since CFI version
>>>> 1.4, software features can be read from offset 0x53 according to
>>>> document AN201168 from Cypress.
>>>>
>>>> Signed-off-by: York Sun <york.sun at nxp.com>
>>>> CC: Marek Vasut <marek.vasut at gmail.com>
>>>> ---
>>>>
>>>>   drivers/mtd/cfi_flash.c | 12 +++++++++---
>>>>   1 file changed, 9 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
>>>> index 8a5babe..f096e03 100644
>>>> --- a/drivers/mtd/cfi_flash.c
>>>> +++ b/drivers/mtd/cfi_flash.c
>>>> @@ -1694,7 +1694,7 @@ static void
>>>> cmdset_amd_read_jedec_ids(flash_info_t *info)
>>>>   {
>>>>       ushort bankId = 0;
>>>>       uchar  manuId;
>>>> -    uchar  lsbits;
>>>> +    uchar  feature;
>>>>         flash_write_cmd(info, 0, 0, AMD_CMD_RESET);
>>>>       flash_unlock_seq(info, 0);
>>>> @@ -1710,8 +1710,14 @@ static void
>>>> cmdset_amd_read_jedec_ids(flash_info_t *info)
>>>>       }
>>>>       info->manufacturer_id = manuId;
>>>>   -    lsbits = flash_read_uchar(info, FLASH_OFFSET_LOWER_SW_BITS);
>>>> -    info->sr_supported = lsbits & BIT(0);
>>>> +    debug("info->ext_addr = 0x%x, cfi_version = 0x%x\n",
>>>> +          info->ext_addr, info->cfi_version);
>>>> +    if (info->ext_addr && info->cfi_version >= 0x3134) {
>>>> +        /* read software feature (at 0x53) */
>>>> +        feature = flash_read_uchar(info, info->ext_addr + 0x13);
>>>> +        debug("feature = 0x%x\n", feature);
>>>> +        info->sr_supported = feature & 0x1;
>>>> +    }
>>>>         switch (info->chipwidth){
>>>>       case FLASH_CFI_8BIT:
>>>>
>>>
>>> Mark,
>>>
>>> Can you test this patch on your platforms? I verified on my boards.
>>
>> Yes, I am getting to it ... will do this week.
> 
> Marek, did you find some time to test this patch on your platform?

Not yet, but it's on my list.

-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list