[U-Boot] [PATCH] sf: Set current flash bank to 0 in clean_bar()

Jagan Teki jagannadh.teki at gmail.com
Mon Jun 4 13:27:35 UTC 2018


On Fri, May 25, 2018 at 1:28 AM, Marek Vasut <marex at denx.de> wrote:
> The clean_bar() function resets the SPI NOR BAR register to 0, but
> does not set the flash->curr_bar to 0 , therefore those two can get
> out of sync, which could ultimatelly result in corrupted flash content.
>
> The simplest test case is this:
>
>   => mw 0x10000000 0x1234abcd 0x4000
>   => sf probe
>   => sf erase 0x1000000 0x10000
>   => sf write 0x10000000 0x1000000 0x10000
>
>   => sf probe ; sf read 0x12000000 0 0x10000 ; md 0x12000000
>
> That is, erase a sector above the 16 MiB boundary and write it with
> random pre-configured data. What will actually happen without this
> patch is the sector will be erased, but the data will be written to
> BAR 0 offset 0x0 in the flash.

Why it would write it at 0x0

write ops -> write_bar -> identifies bank sel (here it's 1) -> write
bank register -> flash->bank_curr

then actual data will written from 16MB offset and call clean_bar

Jagan.


More information about the U-Boot mailing list