Message ID | e3e027d7718e4e68c48562fed1e8860aeff4e400.1591344584.git.michal.simek@xilinx.com |
---|---|
State | Accepted |
Commit | dfbe492edef421de09617dc26805fc428440924e |
Headers | show |
Series | board: zynqmp: Fix for wrong AMS setting by ROM | expand |
p? 5. 6. 2020 v 10:09 odes?latel Michal Simek <michal.simek at xilinx.com> napsal: > > From: Mike Looijmans <mike.looijmans at 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 at topic.nl> > Signed-off-by: Michal Simek <michal.simek at 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
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))