xen/arch/arm/Makefile | 5 ++--- xen/arch/arm/arm32/head.S | 4 ++-- xen/arch/arm/arm64/head.S | 4 ++-- xen/arch/arm/xen.lds.S | 2 +- xen/common/Kconfig | 8 ++++++++ 5 files changed, 15 insertions(+), 8 deletions(-)
Currently in order to link existing DTB into Xen image
we need to either specify option CONFIG_DTB_FILE on the
command line or manually add it into .config.
Add Kconfig entry: CONFIG_DTB_FILE
to be able to provide the path to DTB we want to embed
into Xen image. If no path provided - the dtb will not
be embedded.
Remove the line: AFLAGS-y += -DCONFIG_DTB_FILE=\"$(CONFIG_DTB_FILE)\"
as it is not needed since Kconfig will define it in a header
with all the other config options.
Make a change in the linker script from:
_sdtb = .;
to:
PROVIDE(_sdtb = .);
to avoid creation of _sdtb if there is no reference to it.
Signed-off-by: Michal Orzel <michal.orzel@arm.com>
---
xen/arch/arm/Makefile | 5 ++---
xen/arch/arm/arm32/head.S | 4 ++--
xen/arch/arm/arm64/head.S | 4 ++--
xen/arch/arm/xen.lds.S | 2 +-
xen/common/Kconfig | 8 ++++++++
5 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 16e6523e2c..46e6a95fec 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -68,9 +68,8 @@ extra-y += $(TARGET_SUBARCH)/head.o
#obj-bin-y += ....o
-ifdef CONFIG_DTB_FILE
+ifneq ($(CONFIG_DTB_FILE),"")
obj-y += dtb.o
-AFLAGS-y += -DCONFIG_DTB_FILE=\"$(CONFIG_DTB_FILE)\"
endif
ALL_OBJS := $(TARGET_SUBARCH)/head.o $(ALL_OBJS)
@@ -137,7 +136,7 @@ asm-offsets.s: $(TARGET_SUBARCH)/asm-offsets.c
xen.lds: xen.lds.S
$(CPP) -P $(a_flags) -MQ $@ -o $@ $<
-dtb.o: $(CONFIG_DTB_FILE)
+dtb.o: $(patsubst "%",%,$(CONFIG_DTB_FILE))
.PHONY: clean
clean::
diff --git a/xen/arch/arm/arm32/head.S b/xen/arch/arm/arm32/head.S
index c404fa973e..50f019ed98 100644
--- a/xen/arch/arm/arm32/head.S
+++ b/xen/arch/arm/arm32/head.S
@@ -156,10 +156,10 @@ past_zImage:
sub r10, r9, r0 /* r10 := phys-offset */
/* Using the DTB in the .dtb section? */
-#ifdef CONFIG_DTB_FILE
+.ifnes CONFIG_DTB_FILE,""
ldr r8, =_sdtb
add r8, r10 /* r8 := paddr(DTB) */
-#endif
+.endif
/* Initialize the UART if earlyprintk has been enabled. */
#ifdef CONFIG_EARLY_PRINTK
diff --git a/xen/arch/arm/arm64/head.S b/xen/arch/arm/arm64/head.S
index 5d44667bd8..f38a8dfca7 100644
--- a/xen/arch/arm/arm64/head.S
+++ b/xen/arch/arm/arm64/head.S
@@ -296,9 +296,9 @@ real_start_efi:
sub x20, x19, x0 /* x20 := phys-offset */
/* Using the DTB in the .dtb section? */
-#ifdef CONFIG_DTB_FILE
+.ifnes CONFIG_DTB_FILE,""
load_paddr x21, _sdtb
-#endif
+.endif
/* Initialize the UART if earlyprintk has been enabled. */
#ifdef CONFIG_EARLY_PRINTK
diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S
index 004b182acb..78af2af504 100644
--- a/xen/arch/arm/xen.lds.S
+++ b/xen/arch/arm/xen.lds.S
@@ -222,7 +222,7 @@ SECTIONS
#ifdef CONFIG_DTB_FILE
/* Section for the device tree blob (if any). */
- _sdtb = .;
+ PROVIDE(_sdtb = .);
.dtb : { *(.dtb) } :text
#endif
diff --git a/xen/common/Kconfig b/xen/common/Kconfig
index eb953d171e..71fc9e00cb 100644
--- a/xen/common/Kconfig
+++ b/xen/common/Kconfig
@@ -400,6 +400,14 @@ config DOM0_MEM
Leave empty if you are not sure what to specify.
+config DTB_FILE
+ string "Absolute path to device tree blob"
+ depends on HAS_DEVICE_TREE
+ help
+ When using a bootloader that has no device tree support or when there
+ is no bootloader at all, use this option to specify the absolute path
+ to a device tree that will be linked directly inside Xen binary.
+
config TRACEBUFFER
bool "Enable tracing infrastructure" if EXPERT
default y
--
2.29.0
On 11.03.2021 15:22, Michal Orzel wrote: > Currently in order to link existing DTB into Xen image > we need to either specify option CONFIG_DTB_FILE on the > command line or manually add it into .config. > Add Kconfig entry: CONFIG_DTB_FILE > to be able to provide the path to DTB we want to embed > into Xen image. If no path provided - the dtb will not > be embedded. > > Remove the line: AFLAGS-y += -DCONFIG_DTB_FILE=\"$(CONFIG_DTB_FILE)\" > as it is not needed since Kconfig will define it in a header > with all the other config options. > > Make a change in the linker script from: > _sdtb = .; > to: > PROVIDE(_sdtb = .); > to avoid creation of _sdtb if there is no reference to it. > > Signed-off-by: Michal Orzel <michal.orzel@arm.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> albeit I think that, as suggested, ... > --- a/xen/arch/arm/xen.lds.S > +++ b/xen/arch/arm/xen.lds.S > @@ -222,7 +222,7 @@ SECTIONS > > #ifdef CONFIG_DTB_FILE > /* Section for the device tree blob (if any). */ > - _sdtb = .; > + PROVIDE(_sdtb = .); > .dtb : { *(.dtb) } :text > #endif .. the now pointless (always true) #ifdef here should also go away. Jan
On 11.03.2021 15:50, Jan Beulich wrote: > On 11.03.2021 15:22, Michal Orzel wrote: >> Currently in order to link existing DTB into Xen image >> we need to either specify option CONFIG_DTB_FILE on the >> command line or manually add it into .config. >> Add Kconfig entry: CONFIG_DTB_FILE >> to be able to provide the path to DTB we want to embed >> into Xen image. If no path provided - the dtb will not >> be embedded. >> >> Remove the line: AFLAGS-y += -DCONFIG_DTB_FILE=\"$(CONFIG_DTB_FILE)\" >> as it is not needed since Kconfig will define it in a header >> with all the other config options. >> >> Make a change in the linker script from: >> _sdtb = .; >> to: >> PROVIDE(_sdtb = .); >> to avoid creation of _sdtb if there is no reference to it. >> >> Signed-off-by: Michal Orzel <michal.orzel@arm.com> > > Reviewed-by: Jan Beulich <jbeulich@suse.com> > albeit I think that, as suggested, ... > >> --- a/xen/arch/arm/xen.lds.S >> +++ b/xen/arch/arm/xen.lds.S >> @@ -222,7 +222,7 @@ SECTIONS >> >> #ifdef CONFIG_DTB_FILE >> /* Section for the device tree blob (if any). */ >> - _sdtb = .; >> + PROVIDE(_sdtb = .); >> .dtb : { *(.dtb) } :text >> #endif > > .. the now pointless (always true) #ifdef here should also go > away. > Will be done in v6. > Jan > Michal
© 2016 - 2024 Red Hat, Inc.