[PATCH] board: xilinx: Store board info data in data section
Michal Simek
michal.simek at amd.com
Wed Apr 16 13:50:56 CEST 2025
On 4/9/25 18:25, Padmarao Begari wrote:
> Line 171 in README is describing that before relocation no code
> should use global variable because global variables are placed
> to BSS section which is initialized to 0 after relocation.
>
> In the case of ZynqMP, where DTB reselection is enabled, the EEPROM
> is read again after relocation. This prevents the issue from being
> observed. However, in Versal Gen 2, where DTB reselection is also
> enabled, the EEPROM is not read after relocation because it is not
> yet wired in board_init(). This leads to a situation where the code
> accesses an incorrect memory location, because none is really
> checking the board_info is valid or not. To fix, move the board_info
> into the data section and also check whether it is valid or not.
>
> Signed-off-by: Padmarao Begari <padmarao.begari at amd.com>
> ---
> board/xilinx/common/board.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c
> index deea6c71103..8ffe7429901 100644
> --- a/board/xilinx/common/board.c
> +++ b/board/xilinx/common/board.c
> @@ -80,7 +80,7 @@ struct xilinx_board_description {
> };
>
> static int highest_id = -1;
> -static struct xilinx_board_description *board_info;
> +static struct xilinx_board_description *board_info __section(".data");
>
> #define XILINX_I2C_DETECTION_BITS sizeof(struct fru_common_hdr)
>
> @@ -468,6 +468,9 @@ int board_late_init_xilinx(void)
> ret |= env_set_addr("bootm_size", (void *)bootm_size);
>
> for (id = 0; id <= highest_id; id++) {
> + if (!board_info)
> + break;
> +
> desc = &board_info[id];
> if (desc && desc->header == EEPROM_HEADER_MAGIC) {
> if (desc->manufacturer[0])
Applied.
M
More information about the U-Boot
mailing list