[PATCH] board: xilinx: Add support for user configurable boot script offset

From: T Karthik Reddy t.karthik.reddy@xilinx.com
Currently "script_offset_f" env variable is hardcoded, this variable specifies from which offset of the flash boot.scr should be read/write. As flashes are of different sizes having a fixed offset makes it difficult to load other images into the flash which may overwrite the boot script or cannot utilize the full memory. This current fix creates a new config "CONFIG_BOOT_SCRIPT_OFFSET" which holds the offset address, overwrites the "script_offset_f" variable. Also removed existing variable with default values, as the default values are held by CONFIG_BOOT_SCRIPT_OFFSET
Signed-off-by: T Karthik Reddy t.karthik.reddy@xilinx.com Signed-off-by: Michal Simek michal.simek@xilinx.com ---
board/xilinx/Kconfig | 9 +++++++++ board/xilinx/versal/board.c | 2 ++ board/xilinx/zynq/board.c | 2 ++ board/xilinx/zynqmp/zynqmp.c | 2 ++ include/configs/xilinx_versal.h | 1 - include/configs/xilinx_zynqmp.h | 1 - include/configs/zynq-common.h | 1 - 7 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/board/xilinx/Kconfig b/board/xilinx/Kconfig index cb272eafda7a..7833b11767c4 100644 --- a/board/xilinx/Kconfig +++ b/board/xilinx/Kconfig @@ -47,3 +47,12 @@ config XILINX_OF_BOARD_DTB_ADDR depends on OF_BOARD help Offset in the memory where the board configuration DTB is placed. + +config BOOT_SCRIPT_OFFSET + hex "Boot script offset" + depends on ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_VERSAL + default 0xFC0000 if ARCH_ZYNQ + default 0x3E80000 if ARCH_ZYNQMP + default 0x7F80000 if ARCH_VERSAL + help + Specifies distro boot script offset in NAND/NOR flash. diff --git a/board/xilinx/versal/board.c b/board/xilinx/versal/board.c index 45724478a25e..9fa9e76e6663 100644 --- a/board/xilinx/versal/board.c +++ b/board/xilinx/versal/board.c @@ -203,6 +203,8 @@ int board_late_init(void) initrd_hi = round_down(initrd_hi, SZ_16M); env_set_addr("initrd_high", (void *)initrd_hi);
+ env_set_hex("script_offset_f", CONFIG_BOOT_SCRIPT_OFFSET); + return 0; }
diff --git a/board/xilinx/zynq/board.c b/board/xilinx/zynq/board.c index 8929b6c5d22d..420a5ca66311 100644 --- a/board/xilinx/zynq/board.c +++ b/board/xilinx/zynq/board.c @@ -76,6 +76,8 @@ int board_late_init(void)
env_set("boot_targets", new_targets);
+ env_set_hex("script_offset_f", CONFIG_BOOT_SCRIPT_OFFSET); + return 0; }
diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index b72eade43eea..8bdc67748ec2 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -667,6 +667,8 @@ int board_late_init(void) initrd_hi = round_down(initrd_hi, SZ_16M); env_set_addr("initrd_high", (void *)initrd_hi);
+ env_set_hex("script_offset_f", CONFIG_BOOT_SCRIPT_OFFSET); + reset_reason();
return 0; diff --git a/include/configs/xilinx_versal.h b/include/configs/xilinx_versal.h index f426127edcff..dec5001b5fe4 100644 --- a/include/configs/xilinx_versal.h +++ b/include/configs/xilinx_versal.h @@ -92,7 +92,6 @@ "kernel_size_r=0x10000000\0" \ "scriptaddr=0x20000000\0" \ "ramdisk_addr_r=0x02100000\0" \ - "script_offset_f=0x7F80000\0" \ "script_size_f=0x80000\0"
#if defined(CONFIG_MMC_SDHCI_ZYNQ) diff --git a/include/configs/xilinx_zynqmp.h b/include/configs/xilinx_zynqmp.h index b13765e17593..010738363d13 100644 --- a/include/configs/xilinx_zynqmp.h +++ b/include/configs/xilinx_zynqmp.h @@ -113,7 +113,6 @@ "kernel_addr_r=0x18000000\0" \ "scriptaddr=0x20000000\0" \ "ramdisk_addr_r=0x02100000\0" \ - "script_offset_f=0x3e80000\0" \ "script_size_f=0x80000\0" \
#if defined(CONFIG_MMC_SDHCI_ZYNQ) diff --git a/include/configs/zynq-common.h b/include/configs/zynq-common.h index 4dbd30054643..fe4679a90b2c 100644 --- a/include/configs/zynq-common.h +++ b/include/configs/zynq-common.h @@ -203,7 +203,6 @@ "fdt_high=0x20000000\0" \ "initrd_high=0x20000000\0" \ "scriptaddr=0x20000\0" \ - "script_offset_f=0xFC0000\0" \ "script_size_f=0x40000\0" \ "fdt_addr_r=0x1f00000\0" \ "pxefile_addr_r=0x2000000\0" \

st 18. 12. 2019 v 11:54 odesÃlatel Michal Simek michal.simek@xilinx.com napsal:
From: T Karthik Reddy t.karthik.reddy@xilinx.com
Currently "script_offset_f" env variable is hardcoded, this variable specifies from which offset of the flash boot.scr should be read/write. As flashes are of different sizes having a fixed offset makes it difficult to load other images into the flash which may overwrite the boot script or cannot utilize the full memory. This current fix creates a new config "CONFIG_BOOT_SCRIPT_OFFSET" which holds the offset address, overwrites the "script_offset_f" variable. Also removed existing variable with default values, as the default values are held by CONFIG_BOOT_SCRIPT_OFFSET
Signed-off-by: T Karthik Reddy t.karthik.reddy@xilinx.com Signed-off-by: Michal Simek michal.simek@xilinx.com
board/xilinx/Kconfig | 9 +++++++++ board/xilinx/versal/board.c | 2 ++ board/xilinx/zynq/board.c | 2 ++ board/xilinx/zynqmp/zynqmp.c | 2 ++ include/configs/xilinx_versal.h | 1 - include/configs/xilinx_zynqmp.h | 1 - include/configs/zynq-common.h | 1 - 7 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/board/xilinx/Kconfig b/board/xilinx/Kconfig index cb272eafda7a..7833b11767c4 100644 --- a/board/xilinx/Kconfig +++ b/board/xilinx/Kconfig @@ -47,3 +47,12 @@ config XILINX_OF_BOARD_DTB_ADDR depends on OF_BOARD help Offset in the memory where the board configuration DTB is placed.
+config BOOT_SCRIPT_OFFSET
hex "Boot script offset"
depends on ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_VERSAL
default 0xFC0000 if ARCH_ZYNQ
default 0x3E80000 if ARCH_ZYNQMP
default 0x7F80000 if ARCH_VERSAL
help
Specifies distro boot script offset in NAND/NOR flash.
diff --git a/board/xilinx/versal/board.c b/board/xilinx/versal/board.c index 45724478a25e..9fa9e76e6663 100644 --- a/board/xilinx/versal/board.c +++ b/board/xilinx/versal/board.c @@ -203,6 +203,8 @@ int board_late_init(void) initrd_hi = round_down(initrd_hi, SZ_16M); env_set_addr("initrd_high", (void *)initrd_hi);
env_set_hex("script_offset_f", CONFIG_BOOT_SCRIPT_OFFSET);
return 0;
}
diff --git a/board/xilinx/zynq/board.c b/board/xilinx/zynq/board.c index 8929b6c5d22d..420a5ca66311 100644 --- a/board/xilinx/zynq/board.c +++ b/board/xilinx/zynq/board.c @@ -76,6 +76,8 @@ int board_late_init(void)
env_set("boot_targets", new_targets);
env_set_hex("script_offset_f", CONFIG_BOOT_SCRIPT_OFFSET);
return 0;
}
diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index b72eade43eea..8bdc67748ec2 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -667,6 +667,8 @@ int board_late_init(void) initrd_hi = round_down(initrd_hi, SZ_16M); env_set_addr("initrd_high", (void *)initrd_hi);
env_set_hex("script_offset_f", CONFIG_BOOT_SCRIPT_OFFSET);
reset_reason(); return 0;
diff --git a/include/configs/xilinx_versal.h b/include/configs/xilinx_versal.h index f426127edcff..dec5001b5fe4 100644 --- a/include/configs/xilinx_versal.h +++ b/include/configs/xilinx_versal.h @@ -92,7 +92,6 @@ "kernel_size_r=0x10000000\0" \ "scriptaddr=0x20000000\0" \ "ramdisk_addr_r=0x02100000\0" \
"script_offset_f=0x7F80000\0" \ "script_size_f=0x80000\0"
#if defined(CONFIG_MMC_SDHCI_ZYNQ) diff --git a/include/configs/xilinx_zynqmp.h b/include/configs/xilinx_zynqmp.h index b13765e17593..010738363d13 100644 --- a/include/configs/xilinx_zynqmp.h +++ b/include/configs/xilinx_zynqmp.h @@ -113,7 +113,6 @@ "kernel_addr_r=0x18000000\0" \ "scriptaddr=0x20000000\0" \ "ramdisk_addr_r=0x02100000\0" \
"script_offset_f=0x3e80000\0" \ "script_size_f=0x80000\0" \
#if defined(CONFIG_MMC_SDHCI_ZYNQ) diff --git a/include/configs/zynq-common.h b/include/configs/zynq-common.h index 4dbd30054643..fe4679a90b2c 100644 --- a/include/configs/zynq-common.h +++ b/include/configs/zynq-common.h @@ -203,7 +203,6 @@ "fdt_high=0x20000000\0" \ "initrd_high=0x20000000\0" \ "scriptaddr=0x20000\0" \
"script_offset_f=0xFC0000\0" \ "script_size_f=0x40000\0" \ "fdt_addr_r=0x1f00000\0" \ "pxefile_addr_r=0x2000000\0" \
-- 2.24.0
Applied. M
participants (2)
-
Michal Simek
-
Michal Simek