[PATCH 2/2] xilinx: Move bootmode detection to separate function

Michal Simek monstr at monstr.eu
Thu Apr 30 09:35:57 CEST 2020


po 13. 4. 2020 v 10:01 odesílatel Michal Simek <michal.simek at xilinx.com> napsal:
>
> Create special function for reading bootmode on Versal and ZynqMP.
> Zynq is using specific function (without mask) already.
> Future patches will be calling this function from different location too.
>
> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
> ---
>
>  board/xilinx/versal/board.c  | 23 ++++++++++++++++-------
>  board/xilinx/zynqmp/zynqmp.c | 28 +++++++++++++++++++---------
>  2 files changed, 35 insertions(+), 16 deletions(-)
>
> diff --git a/board/xilinx/versal/board.c b/board/xilinx/versal/board.c
> index 2900dfb44e93..483e3ce2f79a 100644
> --- a/board/xilinx/versal/board.c
> +++ b/board/xilinx/versal/board.c
> @@ -82,9 +82,23 @@ int board_early_init_r(void)
>         return 0;
>  }
>
> -int board_late_init(void)
> +static u8 versal_get_bootmode(void)
>  {
> +       u8 bootmode;
>         u32 reg = 0;
> +
> +       reg = readl(&crp_base->boot_mode_usr);
> +
> +       if (reg >> BOOT_MODE_ALT_SHIFT)
> +               reg >>= BOOT_MODE_ALT_SHIFT;
> +
> +       bootmode = reg & BOOT_MODES_MASK;
> +
> +       return bootmode;
> +}
> +
> +int board_late_init(void)
> +{
>         u8 bootmode;
>         struct udevice *dev;
>         int bootseq = -1;
> @@ -99,12 +113,7 @@ int board_late_init(void)
>                 return 0;
>         }
>
> -       reg = readl(&crp_base->boot_mode_usr);
> -
> -       if (reg >> BOOT_MODE_ALT_SHIFT)
> -               reg >>= BOOT_MODE_ALT_SHIFT;
> -
> -       bootmode = reg & BOOT_MODES_MASK;
> +       bootmode = versal_get_bootmode();
>
>         puts("Bootmode: ");
>         switch (bootmode) {
> diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c
> index 66a43974e68d..a2a0d563318e 100644
> --- a/board/xilinx/zynqmp/zynqmp.c
> +++ b/board/xilinx/zynqmp/zynqmp.c
> @@ -552,9 +552,26 @@ static int set_fdtfile(void)
>         return 0;
>  }
>
> -int board_late_init(void)
> +static u8 zynqmp_get_bootmode(void)
>  {
> +       u8 bootmode;
>         u32 reg = 0;
> +       int ret;
> +
> +       ret = zynqmp_mmio_read((ulong)&crlapb_base->boot_mode, &reg);
> +       if (ret)
> +               return -EINVAL;
> +
> +       if (reg >> BOOT_MODE_ALT_SHIFT)
> +               reg >>= BOOT_MODE_ALT_SHIFT;
> +
> +       bootmode = reg & BOOT_MODES_MASK;
> +
> +       return bootmode;
> +}
> +
> +int board_late_init(void)
> +{
>         u8 bootmode;
>         struct udevice *dev;
>         int bootseq = -1;
> @@ -578,14 +595,7 @@ int board_late_init(void)
>         if (ret)
>                 return ret;
>
> -       ret = zynqmp_mmio_read((ulong)&crlapb_base->boot_mode, &reg);
> -       if (ret)
> -               return -EINVAL;
> -
> -       if (reg >> BOOT_MODE_ALT_SHIFT)
> -               reg >>= BOOT_MODE_ALT_SHIFT;
> -
> -       bootmode = reg & BOOT_MODES_MASK;
> +       bootmode = zynqmp_get_bootmode();
>
>         puts("Bootmode: ");
>         switch (bootmode) {
> --
> 2.26.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