board: zynqmp: Fix for wrong AMS setting by ROM
authorMike Looijmans <mike.looijmans@topic.nl>
Fri, 18 Oct 2019 05:34:13 +0000 (07:34 +0200)
committerMichal Simek <michal.simek@xilinx.com>
Wed, 24 Jun 2020 11:11:08 +0000 (13:11 +0200)
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

index cb72914adb3c112238faf8a5c8b9a2677cbe53d6..a6cd41af1a0926fd84cbc830008fd438ecb975b1 100644 (file)
@@ -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))