arm64: zynqmp: Do not assing MIO34 that early on zcu100

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@xilinx.com>
This commit is contained in:
Michal Simek 2019-12-03 15:02:50 +01:00
parent fc274a5932
commit e82024def6
4 changed files with 18 additions and 1 deletions

View File

@ -21,5 +21,6 @@ void prog_reg(unsigned long addr, unsigned long mask,
unsigned long shift, unsigned long value); unsigned long shift, unsigned long value);
int psu_init(void); int psu_init(void);
unsigned long psu_post_config_data(void);
#endif /* _PSU_INIT_GPL_H_ */ #endif /* _PSU_INIT_GPL_H_ */

View File

@ -77,3 +77,12 @@ __weak int psu_init(void)
*/ */
return -1; 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;
}

View File

@ -13,6 +13,7 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/spl.h> #include <asm/spl.h>
#include <asm/arch/hardware.h> #include <asm/arch/hardware.h>
#include <asm/arch/psu_init_gpl.h>
#include <asm/arch/sys_proto.h> #include <asm/arch/sys_proto.h>
void board_init_f(ulong dummy) void board_init_f(ulong dummy)
@ -53,6 +54,7 @@ void spl_board_init(void)
preloader_console_init(); preloader_console_init();
ps_mode_reset(MODE_RESET); ps_mode_reset(MODE_RESET);
board_init(); board_init();
psu_post_config_data();
} }
#endif #endif

View File

@ -409,7 +409,6 @@ static unsigned long psu_mio_init_data(void)
psu_mask_write(0xFF18007C, 0x000000FEU, 0x00000000U); psu_mask_write(0xFF18007C, 0x000000FEU, 0x00000000U);
psu_mask_write(0xFF180080, 0x000000FEU, 0x00000008U); psu_mask_write(0xFF180080, 0x000000FEU, 0x00000008U);
psu_mask_write(0xFF180084, 0x000000FEU, 0x00000008U); psu_mask_write(0xFF180084, 0x000000FEU, 0x00000008U);
psu_mask_write(0xFF180088, 0x000000FEU, 0x00000008U);
psu_mask_write(0xFF18008C, 0x000000FEU, 0x00000000U); psu_mask_write(0xFF18008C, 0x000000FEU, 0x00000000U);
psu_mask_write(0xFF180090, 0x000000FEU, 0x00000000U); psu_mask_write(0xFF180090, 0x000000FEU, 0x00000000U);
psu_mask_write(0xFF180094, 0x000000FEU, 0x00000000U); psu_mask_write(0xFF180094, 0x000000FEU, 0x00000000U);
@ -990,3 +989,9 @@ int psu_init(void)
return 1; return 1;
return 0; return 0;
} }
unsigned long psu_post_config_data(void)
{
psu_mask_write(0xFF180088, 0x000000FEU, 0x00000008U);
return 0;
}