]> git.baikalelectronics.ru Git - uboot.git/commit
ARM: zynq: Replace board specific with generic memory bank decoding
authorNathan Rossi <nathan@nathanrossi.com>
Sun, 18 Dec 2016 14:03:34 +0000 (00:03 +1000)
committerMichal Simek <michal.simek@xilinx.com>
Tue, 20 Dec 2016 08:15:28 +0000 (09:15 +0100)
commit4047b387f01d29adc8abc80c026f0a534ddba83a
treebb35e0536d8903acca368a6b078776767e2bd3b5
parent90f1f15189960af2136d95d3e1048718e79e6dfb
ARM: zynq: Replace board specific with generic memory bank decoding

The dram_init and dram_init_banksize functions were using a board
specific implementation for decoding the memory banks from the fdt. This
board specific implementation uses a static variable 'tmp' which makes
these functions unsafe for execution from within the board_init_f
context.

This unsafe use of a static variable was causing a specific bug when
using the zynq_zybo configuration, U-Boot would generate the following
error during image load. This was caused due to dram_init overwriting
the relocations for the 'image' variable within the do_bootm function.
Out of coincidence the un-initialized memory has a compression type
which is the same as the value for the relocation type R_ARM_RELATIVE.

   Uncompressing Invalid Image ... Unimplemented compression type 23

It should be noted that this is just one way the issue could surface,
other cases my not be observed in normal boot flow. Depending on the
size of various sections, and location of relocations within __rel_dyn
and the compiler/linker the outcome of this bug can differ greatly.

This change makes the dram_init* functions use a generic implementation
of decoding and populating memory bank and size data.

Signed-off-by: Nathan Rossi <nathan@nathanrossi.com>
Fixes: 758f29d0f8 ("ARM: zynq: Support systems with more memory banks")
Cc: Michal Simek <monstr@monstr.eu>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
board/xilinx/zynq/board.c