[PATCH] arm64: zynqmp: Add board_boot_order for MMC boot extension

Michal Simek monstr at monstr.eu
Thu Jan 16 08:26:48 CET 2020


po 9. 12. 2019 v 15:58 odesílatel Michal Simek <michal.simek at xilinx.com> napsal:
>
> In past SPL_ZYNQMP_TWO_SDHCI symbol was introduced to handle boards with
> two sdhci controllers. The problem was that U-Boot is registering
> controllers based on aliases in DT but bootmode targets specific controller
> ID. That's why on boards with one "second" sdhci controller bootmode was
> pointing to second controller(MMC2) but alias was setup to mmc0 (the first
> controller). And SPL requires to point to mmc0 in this case.
>
> Long time ago commit f101e4bd3703
> ("spl: add support for alternative boot device") added support for handling
> multiple bootmodes in SPL. Use this functionality and setup second sdhci
> controller as backup boot device.
>
> Below is table with behavior:
> HW/bootmode  bootorder
> sd0/sd0      mmc0/mmc1 (mmc1 never called)
> sd1/sd1      mmc1/mmc0 (mmc0 fails and mmc1 is called)
> sd0+sd1/sd0  mmc0/mmc1 (mmc1 never called)
> sd0+sd1/sd1  mmc1/mmc0 (mmc0 never called)
>
> All other bootmodes are not affected but order can be extended to cover
> advance boot flows.
>
> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
> ---
>
>  arch/arm/mach-zynqmp/Kconfig                       | 11 -----------
>  arch/arm/mach-zynqmp/spl.c                         | 14 ++++++++++----
>  ...ltrazedev_cc_v1_0_ultrazedev_som_v1_0_defconfig |  1 -
>  configs/xilinx_zynqmp_p_a2197_00_revA_defconfig    |  1 -
>  configs/xilinx_zynqmp_zc1751_xm015_dc1_defconfig   |  1 -
>  5 files changed, 10 insertions(+), 18 deletions(-)
>
> diff --git a/arch/arm/mach-zynqmp/Kconfig b/arch/arm/mach-zynqmp/Kconfig
> index 6cf17eb94e11..d82a737a699e 100644
> --- a/arch/arm/mach-zynqmp/Kconfig
> +++ b/arch/arm/mach-zynqmp/Kconfig
> @@ -117,17 +117,6 @@ config SPL_ZYNQMP_ALT_BOOTMODE_ENABLED
>  config ZYNQ_SDHCI_MAX_FREQ
>         default 200000000
>
> -config SPL_ZYNQMP_TWO_SDHCI
> -       bool "Enable booting from both SDHCIs"
> -       depends on SPL
> -       help
> -         This option reflects that board has two SDHCI controllers which
> -         platform can use as boot device. This option ensures that SPL will
> -         setup BOOT_DEVICE_MMC2 for SDHCI1 controller and BOOT_DEVICE_MMC1 for
> -         SDHCI0 controller. Platforms which have only one SDHCI controller
> -         shouldn't enable this option because it for software SDHCI0 or SDHCI1
> -         are both covered by BOOT_DEVICE_MMC1.
> -
>  config SPL_ZYNQMP_ALT_BOOTMODE
>         hex
>         default 0x0 if JTAG_MODE
> diff --git a/arch/arm/mach-zynqmp/spl.c b/arch/arm/mach-zynqmp/spl.c
> index 8bb1cdf69e1b..37f690d9b958 100644
> --- a/arch/arm/mach-zynqmp/spl.c
> +++ b/arch/arm/mach-zynqmp/spl.c
> @@ -65,6 +65,16 @@ void spl_board_init(void)
>  }
>  #endif
>
> +void board_boot_order(u32 *spl_boot_list)
> +{
> +       spl_boot_list[0] = spl_boot_device();
> +
> +       if (spl_boot_list[0] == BOOT_DEVICE_MMC1)
> +               spl_boot_list[1] = BOOT_DEVICE_MMC2;
> +       if (spl_boot_list[0] == BOOT_DEVICE_MMC2)
> +               spl_boot_list[1] = BOOT_DEVICE_MMC1;
> +}
> +
>  u32 spl_boot_device(void)
>  {
>         u32 reg = 0;
> @@ -88,11 +98,7 @@ u32 spl_boot_device(void)
>  #ifdef CONFIG_SPL_MMC_SUPPORT
>         case SD_MODE1:
>         case SD1_LSHFT_MODE: /* not working on silicon v1 */
> -/* if both controllers enabled, then these two are the second controller */
> -#ifdef CONFIG_SPL_ZYNQMP_TWO_SDHCI
>                 return BOOT_DEVICE_MMC2;
> -/* else, fall through, the one SDHCI controller that is enabled is number 1 */
> -#endif
>         case SD_MODE:
>         case EMMC_MODE:
>                 return BOOT_DEVICE_MMC1;
> diff --git a/configs/avnet_ultrazedev_cc_v1_0_ultrazedev_som_v1_0_defconfig b/configs/avnet_ultrazedev_cc_v1_0_ultrazedev_som_v1_0_defconfig
> index 177558db4198..280983d187a1 100644
> --- a/configs/avnet_ultrazedev_cc_v1_0_ultrazedev_som_v1_0_defconfig
> +++ b/configs/avnet_ultrazedev_cc_v1_0_ultrazedev_som_v1_0_defconfig
> @@ -7,7 +7,6 @@ CONFIG_DEBUG_UART_BASE=0xff000000
>  CONFIG_DEBUG_UART_CLOCK=100000000
>  CONFIG_SPL_SPI_FLASH_SUPPORT=y
>  CONFIG_SPL_SPI_SUPPORT=y
> -CONFIG_SPL_ZYNQMP_TWO_SDHCI=y
>  CONFIG_DEBUG_UART=y
>  CONFIG_DISTRO_DEFAULTS=y
>  CONFIG_FIT=y
> diff --git a/configs/xilinx_zynqmp_p_a2197_00_revA_defconfig b/configs/xilinx_zynqmp_p_a2197_00_revA_defconfig
> index ba2cbaba58e9..f206be8a3145 100644
> --- a/configs/xilinx_zynqmp_p_a2197_00_revA_defconfig
> +++ b/configs/xilinx_zynqmp_p_a2197_00_revA_defconfig
> @@ -9,7 +9,6 @@ CONFIG_IDENT_STRING=" Xilinx ZynqMP SC for Versal"
>  CONFIG_SPL_SPI_FLASH_SUPPORT=y
>  CONFIG_SPL_SPI_SUPPORT=y
>  CONFIG_ZYNQMP_USB=y
> -CONFIG_SPL_ZYNQMP_TWO_SDHCI=y
>  CONFIG_DEBUG_UART=y
>  CONFIG_AHCI=y
>  CONFIG_DISTRO_DEFAULTS=y
> diff --git a/configs/xilinx_zynqmp_zc1751_xm015_dc1_defconfig b/configs/xilinx_zynqmp_zc1751_xm015_dc1_defconfig
> index 65ce1ff2d337..c7524f630788 100644
> --- a/configs/xilinx_zynqmp_zc1751_xm015_dc1_defconfig
> +++ b/configs/xilinx_zynqmp_zc1751_xm015_dc1_defconfig
> @@ -7,7 +7,6 @@ CONFIG_DEBUG_UART_BASE=0xff000000
>  CONFIG_DEBUG_UART_CLOCK=100000000
>  CONFIG_PMUFW_INIT_FILE="/mnt/disk/u-boot-bins/zynqmp/zynqmp-zc1751-xm015-dc1/pmufw.bin"
>  CONFIG_ZYNQMP_USB=y
> -CONFIG_SPL_ZYNQMP_TWO_SDHCI=y
>  CONFIG_DEBUG_UART=y
>  CONFIG_AHCI=y
>  CONFIG_DISTRO_DEFAULTS=y
> --
> 2.24.0
>

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