[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