[U-Boot] [PATCH] sf: bar: Clean BA24 Bank Address Register bit after read/write/erase operation

Ɓukasz Majewski lukma at denx.de
Wed Sep 13 16:06:58 UTC 2017


Hi Fabio,

> Hi Lukasz,
> 
> On Wed, Sep 13, 2017 at 6:39 AM, Lukasz Majewski <lukma at denx.de> wrote:
> 
>>   #ifdef CONFIG_SPI_FLASH_BAR
>> +/*
>> + * This "cleanup" is necessary in a situation when one was accessing
>> + * spi flash memory > 16 MiB by using Bank Address Register's BA24 bit.
>> + *
>> + * After it the BA24 bit shall be cleared to allow access to correct
>> + * memory region after SW reset (by calling "reset" command).
>> + *
>> + * Otherwise, the BA24 bit may be left set and then after reset, the
>> + * ROM would seek for SPL from 0x1000000, not 0x0.
>> + */
>> +static int cleanup_bar(struct spi_flash *flash)
>> +{
>> +       u8 cmd, bank_sel = 0;
>> +
>> +       if (flash->bank_curr == 0)
>> +               return 0;
>> +       cmd = flash->bank_write_cmd;
>> +
>> +       return spi_flash_write_common(flash, &cmd, 1, &bank_sel, 1);
>> +}
>> +
> 
> What about defining an empty stub for this function when
> CONFIG_SPI_FLASH_BAR is not defined?
> 
>>   static int write_bar(struct spi_flash *flash, u32 offset)
>>   {
>>          u8 cmd, bank_sel;
>> @@ -339,6 +360,10 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len)
>>                  len -= erase_size;
>>          }
>>
>> +#ifdef CONFIG_SPI_FLASH_BAR
>> +       ret = cleanup_bar(flash);
>> +#endif
> 
> Then you don't need to add the ifdefs when calling cleanup_bar().

I took the approach already used in this file, so I would prefer to 
leave it is in this patch (to be in sync with the rest).

> 


-- 
Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de


More information about the U-Boot mailing list