[PATCH] xilinx: zynqmp: Add support for saving variables

Michal Simek monstr at monstr.eu
Wed Sep 23 14:24:44 CEST 2020


čt 30. 7. 2020 v 14:42 odesílatel Michal Simek <michal.simek at xilinx.com> napsal:
>
> Enabling saving variables to MMC(FAT), NAND, SPI based on primary bootmode.
> Maybe that logic can be tuned for more complicated use cases and better
> tested for different bootmodes.
>
> Tested on zcu104 to SD(FAT) and JTAG(NOWHERE).
>
> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
> ---
>
> SPI is not tested and tuning is required.
> ---
>  board/xilinx/zynqmp/zynqmp.c         | 35 ++++++++++++++++++++++++++++
>  configs/xilinx_zynqmp_virt_defconfig |  6 +++++
>  2 files changed, 41 insertions(+)
>
> diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c
> index 8a4df6fc1ab6..b11abd0e7d04 100644
> --- a/board/xilinx/zynqmp/zynqmp.c
> +++ b/board/xilinx/zynqmp/zynqmp.c
> @@ -9,6 +9,7 @@
>  #include <cpu_func.h>
>  #include <debug_uart.h>
>  #include <env.h>
> +#include <env_internal.h>
>  #include <init.h>
>  #include <log.h>
>  #include <net.h>
> @@ -732,3 +733,37 @@ int checkboard(void)
>         puts("Board: Xilinx ZynqMP\n");
>         return 0;
>  }
> +
> +enum env_location env_get_location(enum env_operation op, int prio)
> +{
> +       u32 bootmode = zynqmp_get_bootmode();
> +
> +       if (prio)
> +               return ENVL_UNKNOWN;
> +
> +       switch (bootmode) {
> +       case EMMC_MODE:
> +       case SD_MODE:
> +       case SD1_LSHFT_MODE:
> +       case SD_MODE1:
> +               if (IS_ENABLED(CONFIG_ENV_IS_IN_FAT))
> +                       return ENVL_FAT;
> +               if (IS_ENABLED(CONFIG_ENV_IS_IN_EXT4))
> +                       return ENVL_EXT4;
> +               return ENVL_UNKNOWN;
> +       case NAND_MODE:
> +               if (IS_ENABLED(CONFIG_ENV_IS_IN_NAND))
> +                       return ENVL_NAND;
> +               if (IS_ENABLED(CONFIG_ENV_IS_IN_UBI))
> +                       return ENVL_UBI;
> +               return ENVL_UNKNOWN;
> +       case QSPI_MODE_24BIT:
> +       case QSPI_MODE_32BIT:
> +               if (IS_ENABLED(CONFIG_ENV_IS_IN_SPI_FLASH))
> +                       return ENVL_SPI_FLASH;
> +               return ENVL_UNKNOWN;
> +       case JTAG_MODE:
> +       default:
> +               return ENVL_NOWHERE;
> +       }
> +}
> diff --git a/configs/xilinx_zynqmp_virt_defconfig b/configs/xilinx_zynqmp_virt_defconfig
> index c84bf2008a19..53cc0c3bf475 100644
> --- a/configs/xilinx_zynqmp_virt_defconfig
> +++ b/configs/xilinx_zynqmp_virt_defconfig
> @@ -57,6 +57,12 @@ CONFIG_CMD_UBI=y
>  CONFIG_SPL_OF_CONTROL=y
>  CONFIG_DEFAULT_DEVICE_TREE="zynqmp-zcu100-revC"
>  CONFIG_OF_LIST="avnet-ultra96-rev1 zynqmp-a2197-revA zynqmp-e-a2197-00-revA zynqmp-g-a2197-00-revA zynqmp-m-a2197-01-revA zynqmp-m-a2197-02-revA zynqmp-m-a2197-03-revA zynqmp-p-a2197-00-revA zynqmp-zc1232-revA zynqmp-zc1254-revA zynqmp-zc1751-xm015-dc1 zynqmp-zc1751-xm016-dc2 zynqmp-zc1751-xm017-dc3 zynqmp-zc1751-xm018-dc4 zynqmp-zc1751-xm019-dc5 zynqmp-zcu100-revC zynqmp-zcu102-rev1.1 zynqmp-zcu102-rev1.0 zynqmp-zcu102-revA zynqmp-zcu102-revB zynqmp-zcu104-revA zynqmp-zcu104-revC zynqmp-zcu106-revA zynqmp-zcu111-revA zynqmp-zcu1275-revA zynqmp-zcu1275-revB zynqmp-zcu1285-revA zynqmp-zcu208-revA zynqmp-zcu216-revA zynqmp-topic-miamimp-xilinx-xdp-v1r1"
> +CONFIG_ENV_IS_NOWHERE=y
> +CONFIG_ENV_IS_IN_FAT=y
> +CONFIG_ENV_IS_IN_NAND=y
> +CONFIG_ENV_IS_IN_SPI_FLASH=y
> +CONFIG_ENV_EXT4_INTERFACE="mmc"
> +CONFIG_ENV_EXT4_DEVICE_AND_PART="1:auto"
>  CONFIG_SYS_RELOC_GD_ENV_ADDR=y
>  CONFIG_NET_RANDOM_ETHADDR=y
>  CONFIG_NETCONSOLE=y
> --
> 2.27.0
>

Applied with defconfig sync up.

M


-- 
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Xilinx Microblaze
Maintainer of Linux kernel - Xilinx Zynq ARM and ZynqMP ARM64 SoCs
U-Boot custodian - Xilinx Microblaze/Zynq/ZynqMP/Versal SoCs


More information about the U-Boot mailing list