[PATCH v2] arm64: zynqmp: Do not assing MIO34 that early on zcu100

Michal Simek monstr at monstr.eu
Thu Jan 16 08:29:31 CET 2020


Ășt 3. 12. 2019 v 16:33 odesĂ­latel Michal Simek <michal.simek at xilinx.com> napsal:
>
> MIO34 is connected to POWER_KILL signal. When MIO configuration is done in
> psu_init() and this pin is assigned to PMU but PMU configuration is not
> loaded yet. PMU gpio output is high that means board is powered off
> immediately.
> The patch is fixing this sequence that MIO34 stays assing to ps gpio IP.
> PMU config is loaded in SPL and then pin assigned to PMU through
> psu_post_config_data().
>
> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
> ---
>
> Changes in v2:
> - add missing declaration in header
>
>  arch/arm/mach-zynqmp/include/mach/psu_init_gpl.h      | 1 +
>  arch/arm/mach-zynqmp/psu_spl_init.c                   | 9 +++++++++
>  arch/arm/mach-zynqmp/spl.c                            | 1 +
>  board/xilinx/zynqmp/zynqmp-zcu100-revC/psu_init_gpl.c | 7 ++++++-
>  4 files changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/mach-zynqmp/include/mach/psu_init_gpl.h b/arch/arm/mach-zynqmp/include/mach/psu_init_gpl.h
> index 15e54c049387..e37acda2f89e 100644
> --- a/arch/arm/mach-zynqmp/include/mach/psu_init_gpl.h
> +++ b/arch/arm/mach-zynqmp/include/mach/psu_init_gpl.h
> @@ -21,5 +21,6 @@ void prog_reg(unsigned long addr, unsigned long mask,
>               unsigned long shift, unsigned long value);
>
>  int psu_init(void);
> +unsigned long psu_post_config_data(void);
>
>  #endif /* _PSU_INIT_GPL_H_ */
> diff --git a/arch/arm/mach-zynqmp/psu_spl_init.c b/arch/arm/mach-zynqmp/psu_spl_init.c
> index b357de32358c..b6abdfd608ee 100644
> --- a/arch/arm/mach-zynqmp/psu_spl_init.c
> +++ b/arch/arm/mach-zynqmp/psu_spl_init.c
> @@ -77,3 +77,12 @@ __weak int psu_init(void)
>          */
>         return -1;
>  }
> +
> +__weak unsigned long psu_post_config_data(void)
> +{
> +       /*
> +        * This function is overridden by the one in
> +        * board/xilinx/zynqmp/(platform)/psu_init_gpl.c, if it exists.
> +        */
> +       return 0;
> +}
> diff --git a/arch/arm/mach-zynqmp/spl.c b/arch/arm/mach-zynqmp/spl.c
> index 6ba42bb42f62..6551b33f42d0 100644
> --- a/arch/arm/mach-zynqmp/spl.c
> +++ b/arch/arm/mach-zynqmp/spl.c
> @@ -60,6 +60,7 @@ void spl_board_init(void)
>         preloader_console_init();
>         ps_mode_reset(MODE_RESET);
>         board_init();
> +       psu_post_config_data();
>  }
>  #endif
>
> diff --git a/board/xilinx/zynqmp/zynqmp-zcu100-revC/psu_init_gpl.c b/board/xilinx/zynqmp/zynqmp-zcu100-revC/psu_init_gpl.c
> index e1fdabaeb9d1..585b3afc218a 100644
> --- a/board/xilinx/zynqmp/zynqmp-zcu100-revC/psu_init_gpl.c
> +++ b/board/xilinx/zynqmp/zynqmp-zcu100-revC/psu_init_gpl.c
> @@ -409,7 +409,6 @@ static unsigned long psu_mio_init_data(void)
>         psu_mask_write(0xFF18007C, 0x000000FEU, 0x00000000U);
>         psu_mask_write(0xFF180080, 0x000000FEU, 0x00000008U);
>         psu_mask_write(0xFF180084, 0x000000FEU, 0x00000008U);
> -       psu_mask_write(0xFF180088, 0x000000FEU, 0x00000008U);
>         psu_mask_write(0xFF18008C, 0x000000FEU, 0x00000000U);
>         psu_mask_write(0xFF180090, 0x000000FEU, 0x00000000U);
>         psu_mask_write(0xFF180094, 0x000000FEU, 0x00000000U);
> @@ -990,3 +989,9 @@ int psu_init(void)
>                 return 1;
>         return 0;
>  }
> +
> +unsigned long psu_post_config_data(void)
> +{
> +       psu_mask_write(0xFF180088, 0x000000FEU, 0x00000008U);
> +       return 0;
> +}
> --
> 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