[PATCH] board: zynqmp: Fix for wrong AMS setting by ROM

From: Mike Looijmans mike.looijmans@topic.nl
A bug in the ZynqMP bootrom sets the PS_SYSMON_ANALOG_BUS register at 0xFFA50914 to the wrong value 0x3201. This causes the AMS to exchange the PS supply voltages 0 and 1. On Xilinx boards this is not noticeable since these are tied together, it's only really noticeable if banks 500 and 501 have different supplies. Xilinx' tech support reported this undocumented register to be the cause, and this patch applies a fix for all boards by programming the correct value.
Signed-off-by: Mike Looijmans mike.looijmans@topic.nl Signed-off-by: Michal Simek michal.simek@xilinx.com ---
board/xilinx/zynqmp/zynqmp.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index cb72914adb3c..a6cd41af1a09 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -359,6 +359,9 @@ static int multi_boot(void) return 0; }
+#define PS_SYSMON_ANALOG_BUS_VAL 0x3210 +#define PS_SYSMON_ANALOG_BUS_REG 0xFFA50914 + int board_init(void) { #if defined(CONFIG_ZYNQMP_FIRMWARE) @@ -378,6 +381,9 @@ int board_init(void)
printf("EL Level:\tEL%d\n", current_el());
+ /* Bug in ROM sets wrong value in this register */ + writel(PS_SYSMON_ANALOG_BUS_VAL, PS_SYSMON_ANALOG_BUS_REG); + #if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_ZYNQMPPL) && \ !defined(CONFIG_SPL_BUILD) || (defined(CONFIG_SPL_FPGA_SUPPORT) && \ defined(CONFIG_SPL_BUILD))

pá 5. 6. 2020 v 10:09 odesílatel Michal Simek michal.simek@xilinx.com napsal:
From: Mike Looijmans mike.looijmans@topic.nl
A bug in the ZynqMP bootrom sets the PS_SYSMON_ANALOG_BUS register at 0xFFA50914 to the wrong value 0x3201. This causes the AMS to exchange the PS supply voltages 0 and 1. On Xilinx boards this is not noticeable since these are tied together, it's only really noticeable if banks 500 and 501 have different supplies. Xilinx' tech support reported this undocumented register to be the cause, and this patch applies a fix for all boards by programming the correct value.
Signed-off-by: Mike Looijmans mike.looijmans@topic.nl Signed-off-by: Michal Simek michal.simek@xilinx.com
board/xilinx/zynqmp/zynqmp.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index cb72914adb3c..a6cd41af1a09 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -359,6 +359,9 @@ static int multi_boot(void) return 0; }
+#define PS_SYSMON_ANALOG_BUS_VAL 0x3210 +#define PS_SYSMON_ANALOG_BUS_REG 0xFFA50914
int board_init(void) { #if defined(CONFIG_ZYNQMP_FIRMWARE) @@ -378,6 +381,9 @@ int board_init(void)
printf("EL Level:\tEL%d\n", current_el());
/* Bug in ROM sets wrong value in this register */
writel(PS_SYSMON_ANALOG_BUS_VAL, PS_SYSMON_ANALOG_BUS_REG);
#if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_ZYNQMPPL) && \ !defined(CONFIG_SPL_BUILD) || (defined(CONFIG_SPL_FPGA_SUPPORT) && \ defined(CONFIG_SPL_BUILD)) -- 2.27.0
Applied. M
participants (2)
-
Michal Simek
-
Michal Simek