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

Ɓukasz Majewski lukma at denx.de
Tue Sep 26 08:01:45 UTC 2017


Hi Jagan,

> On 09/26/2017 07:40 AM, Jagan Teki wrote:
>> On Mon, Sep 25, 2017 at 4:10 PM, Lukasz Majewski <lukma at denx.de> wrote:
>>> The content of Bank Address Register (BAR) is volatile. It is cleared
>>> after power cycle or reset command (RESET F0h).
>>>
>>> Some memories (like e.g. s25fl256s) use it to access memory larger than
>>> 0x1000000 (16 MiB).
>>>
>>> The problem shows up when one:
>>>
>>> 1. Reads/writes/erases memory > 16 MiB
>>> 2. Calls "reset" u-boot command (which is not causing BAR to be cleared)
>>>
>>> In the above scenario, the SoC ROM sends 0x000000 address to read SPL.
>>> Unfortunately, the BA24 bit is still set and hence it receives content
>>> from 0x1000000 (16 MiB) memory address.
>>> As a result the SoC aborts and we hang. Only power cycle can take the
>>> SoC out of this state.
>>>
>>> How to reproduce/test:
>>>
>>> sf probe; sf erase 0x1200000 0x800000; reset
>>> sf probe; sf erase 0x1200000 0x800000; sf write 0x11000000 0x1200000 
>>> 0x800000; reset
>>> sf probe; sf read 0x11000000 0x1200000 0x800000; reset
>>
>> Sorry, I didn't follow this test.. are you writing on at 18MiB offset
>> and doing reset how it will reproduce? 
> 
> Please start with erase test case first.
> 
> The problem shows up when you try to access SPI-NOR memory > 16 MiB.
> It works with current code, since BAR is adjusted properly.
> 
> Then after this access (without removing power), please type 'reset' 
> command.
> 
> You will observe, that the board will not boot (if SPI-NOR is a booting 
> device).
> 
> The problem is that ROM bootloader tries to access 0x0 address, but BA24 
> (in the SPI-NOR controller)  is programmed from last operation (to 0x1). 
> Hence, the ROM Boot reads from 0x1000000 address.

And maybe some explanation why and how it was discovered.

I was storing in u-boot rootfs on SPI-NOR. This data crossed 16 MiB 
boundary on my Spansion memory.
After this operation I wanted to move forward with factory setup 
procedure and executed "reset".

The board hanged and I had to power cycle it to have it working again.

> 
> 
>> because we can write it 0x0 and
>> after reset the ROM look for 16MiB on this flash this is what you
>> concern about right?
> 
> The problem is with not clearing bit BA24 after each operation. This 
> causes hangs after "reset" command.
> 
> 
>>
>> thanks!
>>
> 
> 


-- 
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