[PATCH RFC u-boot-mvebu 57/59] arm: mvebu: Define env_sf_get_env_addr() also for Proper U-Boot

Tony Dinh mibodhi at gmail.com
Sat Feb 25 04:58:37 CET 2023


Hi Pali,

On Tue, Feb 21, 2023 at 12:22 PM Pali Rohár <pali at kernel.org> wrote:
>
> Proper U-Boot moves SPI0 CS0 Flash mapping from 0xD4000000 to 0xF4000000
> and change its size from 64 MB to 8 MB. Definitions are already in
> MBUS_SPI_BASE/MBUS_SPI_SIZE macros. So define these macros also for SPL
> build, use them in env_sf_get_env_addr() function and move this function
> from spl.c to cpu.c to be available in Proper U-Boot too.

Interesting! So would it  affect the board that has a 4MB SPI flash ?
I know there is a bug somewhere, because I need to set both
CONFIG_ENV_OFFSET and CONFIG_ENV_ADDR. One or the other is not enough.

I'm debugging an error that seemingly has something to do with the SPI
envs area: how u-boot set envs and recalculate checksum, and Linux
fw_setenv() seems to not be doing the same thing. This is on a 4MB SPI
mx25l3205d flash (Thecus N2350 board).

It might also have something to do with a SPI flash being set to some
protected  blocks (in the Status Register upon boot).

Thanks,
Tony

>
> Signed-off-by: Pali Rohár <pali at kernel.org>
> ---
>  arch/arm/mach-mvebu/cpu.c              |  9 +++++++++
>  arch/arm/mach-mvebu/include/mach/cpu.h |  5 +++++
>  arch/arm/mach-mvebu/spl.c              | 13 -------------
>  3 files changed, 14 insertions(+), 13 deletions(-)
>
> diff --git a/arch/arm/mach-mvebu/cpu.c b/arch/arm/mach-mvebu/cpu.c
> index c5089a91c747..97154aaa2a7e 100644
> --- a/arch/arm/mach-mvebu/cpu.c
> +++ b/arch/arm/mach-mvebu/cpu.c
> @@ -35,6 +35,15 @@ static const struct mbus_win windows[] = {
>  #endif
>  };
>
> +/* SPI0 CS0 Flash of size MBUS_SPI_SIZE is mapped to address MBUS_SPI_BASE */
> +#if CONFIG_ENV_SPI_BUS == 0 && CONFIG_ENV_SPI_CS == 0 && \
> +    CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE <= MBUS_SPI_SIZE
> +void *env_sf_get_env_addr(void)
> +{
> +       return (void *)MBUS_SPI_BASE + CONFIG_ENV_OFFSET;
> +}
> +#endif
> +
>  void lowlevel_init(void)
>  {
>         /*
> diff --git a/arch/arm/mach-mvebu/include/mach/cpu.h b/arch/arm/mach-mvebu/include/mach/cpu.h
> index c17c2440f1b1..906a8737a401 100644
> --- a/arch/arm/mach-mvebu/include/mach/cpu.h
> +++ b/arch/arm/mach-mvebu/include/mach/cpu.h
> @@ -71,8 +71,13 @@ enum cpu_attrib {
>  #define MBUS_PCI_MEM_SIZE      ((MBUS_PCI_MAX_PORTS * 128) << 20)
>  #define MBUS_PCI_IO_BASE       0xF1100000
>  #define MBUS_PCI_IO_SIZE       ((MBUS_PCI_MAX_PORTS * 64) << 10)
> +#ifdef CONFIG_SPL_BUILD
> +#define MBUS_SPI_BASE          0xD4000000
> +#define MBUS_SPI_SIZE          (64 << 20)
> +#else
>  #define MBUS_SPI_BASE          0xF4000000
>  #define MBUS_SPI_SIZE          (8 << 20)
> +#endif
>  #define MBUS_DFX_BASE          0xF6000000
>  #define MBUS_DFX_SIZE          (1 << 20)
>  #define MBUS_BOOTROM_BASE      0xF8000000
> diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
> index 02528e025d8c..6b8c72a71dab 100644
> --- a/arch/arm/mach-mvebu/spl.c
> +++ b/arch/arm/mach-mvebu/spl.c
> @@ -308,19 +308,6 @@ int board_return_to_bootrom(struct spl_image_info *spl_image,
>         hang();
>  }
>
> -/*
> - * SPI0 CS0 Flash is mapped to address range 0xD4000000 - 0xD7FFFFFF by BootROM.
> - * Proper U-Boot removes this direct mapping. So it is available only in SPL.
> - */
> -#if defined(CONFIG_SPL_ENV_IS_IN_SPI_FLASH) && \
> -    CONFIG_ENV_SPI_BUS == 0 && CONFIG_ENV_SPI_CS == 0 && \
> -    CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE <= 64*1024*1024
> -void *env_sf_get_env_addr(void)
> -{
> -       return (void *)0xD4000000 + CONFIG_ENV_OFFSET;
> -}
> -#endif
> -
>  void board_init_f(ulong dummy)
>  {
>         int ret;
> --
> 2.20.1
>


More information about the U-Boot mailing list