
On 05/28/2017 12:55 PM, Vikas Manocha wrote:
Enable support for XIP (execute in place) of U-Boot or kernel image. There is no need to copy image from flash to ram if flash supports execute in place.
Signed-off-by: Vikas Manocha vikas.manocha@st.com
Changed in v2:
- removed v7m thumb mode for entry point, added separate patch.
- removed extra blank line.
arch/arm/include/asm/spl.h | 1 + common/spl/Kconfig | 9 +++++++++ common/spl/Makefile | 1 + common/spl/spl_xip.c | 28 ++++++++++++++++++++++++++++ 4 files changed, 39 insertions(+) create mode 100644 common/spl/spl_xip.c
diff --git a/arch/arm/include/asm/spl.h b/arch/arm/include/asm/spl.h index a0bda28..0a3536b 100644 --- a/arch/arm/include/asm/spl.h +++ b/arch/arm/include/asm/spl.h @@ -29,6 +29,7 @@ enum { BOOT_DEVICE_I2C, BOOT_DEVICE_BOARD, BOOT_DEVICE_DFU,
- BOOT_DEVICE_XIP, BOOT_DEVICE_NONE
}; #endif diff --git a/common/spl/Kconfig b/common/spl/Kconfig index f51ae2c..52a5271 100644 --- a/common/spl/Kconfig +++ b/common/spl/Kconfig @@ -459,6 +459,15 @@ config SPL_NOR_SUPPORT a memory-mapped device makes it very easy to access. Loading from NOR is typically achieved with just a memcpy().
+config SPL_XIP_SUPPORT
- bool "Support XIP"
- depends on SPL
- help
Enable support for execute in place of U-Boot or kernel image. There
is no need to copy image from flash to ram if flash supports execute
in place. Its very useful in systems having enough flash but not
enough ram to load the image.
config SPL_ONENAND_SUPPORT bool "Support OneNAND flash" depends on SPL diff --git a/common/spl/Makefile b/common/spl/Makefile index 1933cbd..88deeaf 100644 --- a/common/spl/Makefile +++ b/common/spl/Makefile @@ -12,6 +12,7 @@ ifdef CONFIG_SPL_BUILD obj-$(CONFIG_SPL_FRAMEWORK) += spl.o obj-$(CONFIG_SPL_LOAD_FIT) += spl_fit.o obj-$(CONFIG_SPL_NOR_SUPPORT) += spl_nor.o +obj-$(CONFIG_SPL_XIP_SUPPORT) += spl_xip.o obj-$(CONFIG_SPL_YMODEM_SUPPORT) += spl_ymodem.o ifndef CONFIG_SPL_UBI obj-$(CONFIG_SPL_NAND_SUPPORT) += spl_nand.o diff --git a/common/spl/spl_xip.c b/common/spl/spl_xip.c new file mode 100644 index 0000000..18c7d11 --- /dev/null +++ b/common/spl/spl_xip.c @@ -0,0 +1,28 @@ +/*
- Copyright (C) 2017 Vikas Manocha vikas.manocha@st.com
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <spl.h>
+static int spl_xip(struct spl_image_info *spl_image,
struct spl_boot_device *bootdev)
+{ +#ifdef CONFIG_SPL_OS_BOOT
- if (!spl_start_uboot()) {
spl_image->arg = (void *)CONFIG_SYS_FDT_BASE;
spl_image->name = "Linux";
spl_image->os = IH_OS_LINUX;
spl_image->load_addr = CONFIG_SYS_LOAD_ADDR;
spl_image->entry_point = CONFIG_SYS_LOAD_ADDR;
debug("spl: payload xipImage, load addr: 0x%lx\n",
spl_image->load_addr);
return 0;
- }
+#endif
- return(spl_parse_image_header(spl_image, (const struct image_header *)
CONFIG_SYS_UBOOT_BASE));
+} +SPL_LOAD_IMAGE_METHOD("XIP", 0, BOOT_DEVICE_XIP, spl_xip);
Reviewed-by: Alexandru Gagniuc alex.g@adaptrum.com