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

Fabio Estevam festevam at gmail.com
Wed Sep 13 16:02:59 UTC 2017


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().


More information about the U-Boot mailing list