Message ID | 20190708215353.9107-1-alistair.francis@wdc.com |
---|---|
State | Changes Requested |
Headers | show |
Series | [1/2] boot/opensbi: Add support for including Linux payload | expand |
Hello Alistair On 08/07/2019 22:53, Alistair Francis wrote: > Signed-off-by: Alistair Francis <alistair.francis@wdc.com> > --- > boot/opensbi/Config.in | 9 +++++++++ > boot/opensbi/opensbi.mk | 22 +++++++++++++++++++--- > 2 files changed, 28 insertions(+), 3 deletions(-) > > diff --git a/boot/opensbi/Config.in b/boot/opensbi/Config.in > index 5f3cc13312..5cb8aace3e 100644 > --- a/boot/opensbi/Config.in > +++ b/boot/opensbi/Config.in > @@ -22,4 +22,13 @@ config BR2_TARGET_OPENSBI_PLAT > library libsbi.a is built. If a platform is specified then > the platform specific static library libplatsbi.a and firmware > examples are built. > + > +if BR2_TARGET_OPENSBI_PLAT != "" > +config BR2_TARGET_OPENSBI_LINUX_PAYLOAD > + bool "Include Linux as OpenSBI Payload" > + depends on BR2_LINUX_KERNEL > + depends on BR2_LINUX_KERNEL_IMAGE > + help > + Build OpenSBI with the Linux kernel as a Payload. > +endif I've tested this patch and it works okay with my HiFive Unleashed board, but I'm still not a great fan of using a free-form string to specify the OpenSBI platform (BR2_TARGET_OPENSBI_PLAT). I think that a) this always increases the chance of errors due to typos and b) it doesn't let me see what other options are available for my build without looking at the OpenSBI source tree. Perhaps a list of options would be better (similar to the current grub2 implementation)? There are only 5 OpenSBI platforms at the moment and I don't think that it would be a big deal to add others as they appear (We only actually need to add 3 platforms to support QEMU and HiFive Unleashed - plus a default library only mode). So with, for example, the following options: BR2_TARGET_OPENSBI_LIBRARY_ONLY BR2_TARGET_OPENSBI_QEMU_VIRT BR2_TARGET_OPENSBI_QEMU_SIFIVE_U BR2_TARGET_OPENSBI_HIFIVE_UNLEASHED The configuration snippet above for BR2_TARGET_OPENSBI_LINUX_PAYLOAD would become: config BR2_TARGET_OPENSBI_LINUX_PAYLOAD bool "Include Linux as OpenSBI Payload" depends on BR2_LINUX_KERNEL depends on BR2_LINUX_KERNEL_IMAGE depends on !BR2_TARGET_OPENSBI_LIBRARY_ONLY i.e. it loses the ' if BR2_TARGET_OPENSBI_PLAT != "" ' Thoughts? Mark > endif > diff --git a/boot/opensbi/opensbi.mk b/boot/opensbi/opensbi.mk > index 45a3fc4859..2179d846e3 100644 > --- a/boot/opensbi/opensbi.mk > +++ b/boot/opensbi/opensbi.mk > @@ -19,18 +19,34 @@ ifneq ($(OPENSBI_PLAT),) > OPENSBI_MAKE_ENV += PLATFORM=$(OPENSBI_PLAT) > endif > > +OPENSBI_LINUX_PAYLOAD = $(call qstrip,$(BR2_TARGET_OPENSBI_LINUX_PAYLOAD)) > +ifeq ($(OPENSBI_LINUX_PAYLOAD), y) > +OPENSBI_DEPENDENCIES = linux > +OPENSBI_MAKE_ENV += FW_PAYLOAD_PATH="$(BINARIES_DIR)/Image" > +endif > + > define OPENSBI_BUILD_CMDS > $(TARGET_MAKE_ENV) $(OPENSBI_MAKE_ENV) $(MAKE) -C $(@D) > endef > > ifneq ($(OPENSBI_PLAT),) > OPENSBI_INSTALL_IMAGES = YES > -define OPENSBI_INSTALL_IMAGES_CMDS > - $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.bin $(BINARIES_DIR)/fw_jump.bin > +OPENSBI_INSTALL_IMAGES_CMDS_PLAT = \ > + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.bin $(BINARIES_DIR)/fw_jump.bin; \ > $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.elf $(BINARIES_DIR)/fw_jump.elf > -endef > endif > > +ifeq ($(OPENSBI_LINUX_PAYLOAD), y) > +OPENSBI_INSTALL_IMAGES_CMDS_PAYLOAD = \ > + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_payload.bin $(BINARIES_DIR)/fw_payload.bin; \ > + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_payload.elf $(BINARIES_DIR)/fw_payload.elf > +endif > + > +define OPENSBI_INSTALL_IMAGES_CMDS > + $(OPENSBI_INSTALL_IMAGES_CMDS_PLAT) > + $(OPENSBI_INSTALL_IMAGES_CMDS_PAYLOAD) > +endef > + > # libsbi.a is not a library meant to be linked in user-space code, but > # with bare metal code, which is why we don't install it in > # $(STAGING_DIR)/usr/lib
On 09/07/2019 17:27, Mark Corbin wrote: > Hello Alistair > > On 08/07/2019 22:53, Alistair Francis wrote: >> Signed-off-by: Alistair Francis <alistair.francis@wdc.com> >> --- >> boot/opensbi/Config.in | 9 +++++++++ >> boot/opensbi/opensbi.mk | 22 +++++++++++++++++++--- >> 2 files changed, 28 insertions(+), 3 deletions(-) >> >> diff --git a/boot/opensbi/Config.in b/boot/opensbi/Config.in >> index 5f3cc13312..5cb8aace3e 100644 >> --- a/boot/opensbi/Config.in >> +++ b/boot/opensbi/Config.in >> @@ -22,4 +22,13 @@ config BR2_TARGET_OPENSBI_PLAT >> library libsbi.a is built. If a platform is specified then >> the platform specific static library libplatsbi.a and firmware >> examples are built. >> + >> +if BR2_TARGET_OPENSBI_PLAT != "" >> +config BR2_TARGET_OPENSBI_LINUX_PAYLOAD >> + bool "Include Linux as OpenSBI Payload" >> + depends on BR2_LINUX_KERNEL >> + depends on BR2_LINUX_KERNEL_IMAGE >> + help >> + Build OpenSBI with the Linux kernel as a Payload. >> +endif > > I've tested this patch and it works okay with my HiFive Unleashed board, > but I'm still not a great fan of using a free-form string to specify the > OpenSBI platform (BR2_TARGET_OPENSBI_PLAT). I think that a) this always > increases the chance of errors due to typos and b) it doesn't let me see > what other options are available for my build without looking at the > OpenSBI source tree. > > Perhaps a list of options would be better (similar to the current grub2 > implementation)? There are only 5 OpenSBI platforms at the moment and I > don't think that it would be a big deal to add others as they appear (We Depends on how successful you expect RiscV to become, I guess... Is there a vision in OpenSBI upstream how this will be handled going forward? More and more in-tree firmware binaries, or support for pulling in an external binary, or ...? Of course, for now we could turn it into a choice, and we can revisit later when things change upstream. Regards, Arnout > only actually need to add 3 platforms to support QEMU and HiFive > Unleashed - plus a default library only mode). > > So with, for example, the following options: > BR2_TARGET_OPENSBI_LIBRARY_ONLY > BR2_TARGET_OPENSBI_QEMU_VIRT > BR2_TARGET_OPENSBI_QEMU_SIFIVE_U > BR2_TARGET_OPENSBI_HIFIVE_UNLEASHED > > The configuration snippet above for BR2_TARGET_OPENSBI_LINUX_PAYLOAD > would become: > > config BR2_TARGET_OPENSBI_LINUX_PAYLOAD > bool "Include Linux as OpenSBI Payload" > depends on BR2_LINUX_KERNEL > depends on BR2_LINUX_KERNEL_IMAGE > depends on !BR2_TARGET_OPENSBI_LIBRARY_ONLY > > i.e. it loses the ' if BR2_TARGET_OPENSBI_PLAT != "" ' > > Thoughts? > > Mark >> endif >> diff --git a/boot/opensbi/opensbi.mk b/boot/opensbi/opensbi.mk >> index 45a3fc4859..2179d846e3 100644 >> --- a/boot/opensbi/opensbi.mk >> +++ b/boot/opensbi/opensbi.mk >> @@ -19,18 +19,34 @@ ifneq ($(OPENSBI_PLAT),) >> OPENSBI_MAKE_ENV += PLATFORM=$(OPENSBI_PLAT) >> endif >> >> +OPENSBI_LINUX_PAYLOAD = $(call qstrip,$(BR2_TARGET_OPENSBI_LINUX_PAYLOAD)) >> +ifeq ($(OPENSBI_LINUX_PAYLOAD), y) >> +OPENSBI_DEPENDENCIES = linux >> +OPENSBI_MAKE_ENV += FW_PAYLOAD_PATH="$(BINARIES_DIR)/Image" >> +endif >> + >> define OPENSBI_BUILD_CMDS >> $(TARGET_MAKE_ENV) $(OPENSBI_MAKE_ENV) $(MAKE) -C $(@D) >> endef >> >> ifneq ($(OPENSBI_PLAT),) >> OPENSBI_INSTALL_IMAGES = YES >> -define OPENSBI_INSTALL_IMAGES_CMDS >> - $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.bin $(BINARIES_DIR)/fw_jump.bin >> +OPENSBI_INSTALL_IMAGES_CMDS_PLAT = \ >> + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.bin $(BINARIES_DIR)/fw_jump.bin; \ >> $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.elf $(BINARIES_DIR)/fw_jump.elf >> -endef >> endif >> >> +ifeq ($(OPENSBI_LINUX_PAYLOAD), y) >> +OPENSBI_INSTALL_IMAGES_CMDS_PAYLOAD = \ >> + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_payload.bin $(BINARIES_DIR)/fw_payload.bin; \ >> + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_payload.elf $(BINARIES_DIR)/fw_payload.elf >> +endif >> + >> +define OPENSBI_INSTALL_IMAGES_CMDS >> + $(OPENSBI_INSTALL_IMAGES_CMDS_PLAT) >> + $(OPENSBI_INSTALL_IMAGES_CMDS_PAYLOAD) >> +endef >> + >> # libsbi.a is not a library meant to be linked in user-space code, but >> # with bare metal code, which is why we don't install it in >> # $(STAGING_DIR)/usr/lib >
On Tue, Jul 9, 2019 at 10:33 AM Arnout Vandecappelle <arnout@mind.be> wrote: > > > > On 09/07/2019 17:27, Mark Corbin wrote: > > Hello Alistair > > > > On 08/07/2019 22:53, Alistair Francis wrote: > >> Signed-off-by: Alistair Francis <alistair.francis@wdc.com> > >> --- > >> boot/opensbi/Config.in | 9 +++++++++ > >> boot/opensbi/opensbi.mk | 22 +++++++++++++++++++--- > >> 2 files changed, 28 insertions(+), 3 deletions(-) > >> > >> diff --git a/boot/opensbi/Config.in b/boot/opensbi/Config.in > >> index 5f3cc13312..5cb8aace3e 100644 > >> --- a/boot/opensbi/Config.in > >> +++ b/boot/opensbi/Config.in > >> @@ -22,4 +22,13 @@ config BR2_TARGET_OPENSBI_PLAT > >> library libsbi.a is built. If a platform is specified then > >> the platform specific static library libplatsbi.a and firmware > >> examples are built. > >> + > >> +if BR2_TARGET_OPENSBI_PLAT != "" > >> +config BR2_TARGET_OPENSBI_LINUX_PAYLOAD > >> + bool "Include Linux as OpenSBI Payload" > >> + depends on BR2_LINUX_KERNEL > >> + depends on BR2_LINUX_KERNEL_IMAGE > >> + help > >> + Build OpenSBI with the Linux kernel as a Payload. > >> +endif > > > > I've tested this patch and it works okay with my HiFive Unleashed board, > > but I'm still not a great fan of using a free-form string to specify the > > OpenSBI platform (BR2_TARGET_OPENSBI_PLAT). I think that a) this always > > increases the chance of errors due to typos and b) it doesn't let me see > > what other options are available for my build without looking at the > > OpenSBI source tree. > > > > Perhaps a list of options would be better (similar to the current grub2 > > implementation)? There are only 5 OpenSBI platforms at the moment and I > > don't think that it would be a big deal to add others as they appear (We > > Depends on how successful you expect RiscV to become, I guess... That is why I went with strings in the first place as I worry platform options limit us to only a handful of platforms and as OpenSBI platforms are added we will required a buildroot patch. > > Is there a vision in OpenSBI upstream how this will be handled going forward? > More and more in-tree firmware binaries, or support for pulling in an external > binary, or ...? AFAIK the current vision is to have users specify the platform they want to build. > > Of course, for now we could turn it into a choice, and we can revisit later > when things change upstream. Yeah, I think that's the best option. I'll update this patch. Alistair > > Regards, > Arnout > > > > only actually need to add 3 platforms to support QEMU and HiFive > > Unleashed - plus a default library only mode). > > > > So with, for example, the following options: > > BR2_TARGET_OPENSBI_LIBRARY_ONLY > > BR2_TARGET_OPENSBI_QEMU_VIRT > > BR2_TARGET_OPENSBI_QEMU_SIFIVE_U > > BR2_TARGET_OPENSBI_HIFIVE_UNLEASHED > > > > The configuration snippet above for BR2_TARGET_OPENSBI_LINUX_PAYLOAD > > would become: > > > > config BR2_TARGET_OPENSBI_LINUX_PAYLOAD > > bool "Include Linux as OpenSBI Payload" > > depends on BR2_LINUX_KERNEL > > depends on BR2_LINUX_KERNEL_IMAGE > > depends on !BR2_TARGET_OPENSBI_LIBRARY_ONLY > > > > i.e. it loses the ' if BR2_TARGET_OPENSBI_PLAT != "" ' > > > > Thoughts? > > > > Mark > >> endif > >> diff --git a/boot/opensbi/opensbi.mk b/boot/opensbi/opensbi.mk > >> index 45a3fc4859..2179d846e3 100644 > >> --- a/boot/opensbi/opensbi.mk > >> +++ b/boot/opensbi/opensbi.mk > >> @@ -19,18 +19,34 @@ ifneq ($(OPENSBI_PLAT),) > >> OPENSBI_MAKE_ENV += PLATFORM=$(OPENSBI_PLAT) > >> endif > >> > >> +OPENSBI_LINUX_PAYLOAD = $(call qstrip,$(BR2_TARGET_OPENSBI_LINUX_PAYLOAD)) > >> +ifeq ($(OPENSBI_LINUX_PAYLOAD), y) > >> +OPENSBI_DEPENDENCIES = linux > >> +OPENSBI_MAKE_ENV += FW_PAYLOAD_PATH="$(BINARIES_DIR)/Image" > >> +endif > >> + > >> define OPENSBI_BUILD_CMDS > >> $(TARGET_MAKE_ENV) $(OPENSBI_MAKE_ENV) $(MAKE) -C $(@D) > >> endef > >> > >> ifneq ($(OPENSBI_PLAT),) > >> OPENSBI_INSTALL_IMAGES = YES > >> -define OPENSBI_INSTALL_IMAGES_CMDS > >> - $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.bin $(BINARIES_DIR)/fw_jump.bin > >> +OPENSBI_INSTALL_IMAGES_CMDS_PLAT = \ > >> + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.bin $(BINARIES_DIR)/fw_jump.bin; \ > >> $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.elf $(BINARIES_DIR)/fw_jump.elf > >> -endef > >> endif > >> > >> +ifeq ($(OPENSBI_LINUX_PAYLOAD), y) > >> +OPENSBI_INSTALL_IMAGES_CMDS_PAYLOAD = \ > >> + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_payload.bin $(BINARIES_DIR)/fw_payload.bin; \ > >> + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_payload.elf $(BINARIES_DIR)/fw_payload.elf > >> +endif > >> + > >> +define OPENSBI_INSTALL_IMAGES_CMDS > >> + $(OPENSBI_INSTALL_IMAGES_CMDS_PLAT) > >> + $(OPENSBI_INSTALL_IMAGES_CMDS_PAYLOAD) > >> +endef > >> + > >> # libsbi.a is not a library meant to be linked in user-space code, but > >> # with bare metal code, which is why we don't install it in > >> # $(STAGING_DIR)/usr/lib > > > _______________________________________________ > buildroot mailing list > buildroot@busybox.net > http://lists.busybox.net/mailman/listinfo/buildroot
On Tue, Jul 9, 2019 at 10:48 AM Alistair Francis <alistair23@gmail.com> wrote: > > On Tue, Jul 9, 2019 at 10:33 AM Arnout Vandecappelle <arnout@mind.be> wrote: > > > > > > > > On 09/07/2019 17:27, Mark Corbin wrote: > > > Hello Alistair > > > > > > On 08/07/2019 22:53, Alistair Francis wrote: > > >> Signed-off-by: Alistair Francis <alistair.francis@wdc.com> > > >> --- > > >> boot/opensbi/Config.in | 9 +++++++++ > > >> boot/opensbi/opensbi.mk | 22 +++++++++++++++++++--- > > >> 2 files changed, 28 insertions(+), 3 deletions(-) > > >> > > >> diff --git a/boot/opensbi/Config.in b/boot/opensbi/Config.in > > >> index 5f3cc13312..5cb8aace3e 100644 > > >> --- a/boot/opensbi/Config.in > > >> +++ b/boot/opensbi/Config.in > > >> @@ -22,4 +22,13 @@ config BR2_TARGET_OPENSBI_PLAT > > >> library libsbi.a is built. If a platform is specified then > > >> the platform specific static library libplatsbi.a and firmware > > >> examples are built. > > >> + > > >> +if BR2_TARGET_OPENSBI_PLAT != "" > > >> +config BR2_TARGET_OPENSBI_LINUX_PAYLOAD > > >> + bool "Include Linux as OpenSBI Payload" > > >> + depends on BR2_LINUX_KERNEL > > >> + depends on BR2_LINUX_KERNEL_IMAGE > > >> + help > > >> + Build OpenSBI with the Linux kernel as a Payload. > > >> +endif > > > > > > I've tested this patch and it works okay with my HiFive Unleashed board, > > > but I'm still not a great fan of using a free-form string to specify the > > > OpenSBI platform (BR2_TARGET_OPENSBI_PLAT). I think that a) this always > > > increases the chance of errors due to typos and b) it doesn't let me see > > > what other options are available for my build without looking at the > > > OpenSBI source tree. > > > > > > Perhaps a list of options would be better (similar to the current grub2 > > > implementation)? There are only 5 OpenSBI platforms at the moment and I > > > don't think that it would be a big deal to add others as they appear (We > > > > Depends on how successful you expect RiscV to become, I guess... > > That is why I went with strings in the first place as I worry platform > options limit us to only a handful of platforms and as OpenSBI > platforms are added we will required a buildroot patch. > > > > > Is there a vision in OpenSBI upstream how this will be handled going forward? > > More and more in-tree firmware binaries, or support for pulling in an external > > binary, or ...? > > AFAIK the current vision is to have users specify the platform they > want to build. > > > > > Of course, for now we could turn it into a choice, and we can revisit later > > when things change upstream. > > Yeah, I think that's the best option. I'll update this patch. I just sent a series to update OpenSBI and add the platform support. Once that is merged I'll update this series on top of it. Alistair > > Alistair > > > > > Regards, > > Arnout > > > > > > > only actually need to add 3 platforms to support QEMU and HiFive > > > Unleashed - plus a default library only mode). > > > > > > So with, for example, the following options: > > > BR2_TARGET_OPENSBI_LIBRARY_ONLY > > > BR2_TARGET_OPENSBI_QEMU_VIRT > > > BR2_TARGET_OPENSBI_QEMU_SIFIVE_U > > > BR2_TARGET_OPENSBI_HIFIVE_UNLEASHED > > > > > > The configuration snippet above for BR2_TARGET_OPENSBI_LINUX_PAYLOAD > > > would become: > > > > > > config BR2_TARGET_OPENSBI_LINUX_PAYLOAD > > > bool "Include Linux as OpenSBI Payload" > > > depends on BR2_LINUX_KERNEL > > > depends on BR2_LINUX_KERNEL_IMAGE > > > depends on !BR2_TARGET_OPENSBI_LIBRARY_ONLY > > > > > > i.e. it loses the ' if BR2_TARGET_OPENSBI_PLAT != "" ' > > > > > > Thoughts? > > > > > > Mark > > >> endif > > >> diff --git a/boot/opensbi/opensbi.mk b/boot/opensbi/opensbi.mk > > >> index 45a3fc4859..2179d846e3 100644 > > >> --- a/boot/opensbi/opensbi.mk > > >> +++ b/boot/opensbi/opensbi.mk > > >> @@ -19,18 +19,34 @@ ifneq ($(OPENSBI_PLAT),) > > >> OPENSBI_MAKE_ENV += PLATFORM=$(OPENSBI_PLAT) > > >> endif > > >> > > >> +OPENSBI_LINUX_PAYLOAD = $(call qstrip,$(BR2_TARGET_OPENSBI_LINUX_PAYLOAD)) > > >> +ifeq ($(OPENSBI_LINUX_PAYLOAD), y) > > >> +OPENSBI_DEPENDENCIES = linux > > >> +OPENSBI_MAKE_ENV += FW_PAYLOAD_PATH="$(BINARIES_DIR)/Image" > > >> +endif > > >> + > > >> define OPENSBI_BUILD_CMDS > > >> $(TARGET_MAKE_ENV) $(OPENSBI_MAKE_ENV) $(MAKE) -C $(@D) > > >> endef > > >> > > >> ifneq ($(OPENSBI_PLAT),) > > >> OPENSBI_INSTALL_IMAGES = YES > > >> -define OPENSBI_INSTALL_IMAGES_CMDS > > >> - $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.bin $(BINARIES_DIR)/fw_jump.bin > > >> +OPENSBI_INSTALL_IMAGES_CMDS_PLAT = \ > > >> + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.bin $(BINARIES_DIR)/fw_jump.bin; \ > > >> $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.elf $(BINARIES_DIR)/fw_jump.elf > > >> -endef > > >> endif > > >> > > >> +ifeq ($(OPENSBI_LINUX_PAYLOAD), y) > > >> +OPENSBI_INSTALL_IMAGES_CMDS_PAYLOAD = \ > > >> + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_payload.bin $(BINARIES_DIR)/fw_payload.bin; \ > > >> + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_payload.elf $(BINARIES_DIR)/fw_payload.elf > > >> +endif > > >> + > > >> +define OPENSBI_INSTALL_IMAGES_CMDS > > >> + $(OPENSBI_INSTALL_IMAGES_CMDS_PLAT) > > >> + $(OPENSBI_INSTALL_IMAGES_CMDS_PAYLOAD) > > >> +endef > > >> + > > >> # libsbi.a is not a library meant to be linked in user-space code, but > > >> # with bare metal code, which is why we don't install it in > > >> # $(STAGING_DIR)/usr/lib > > > > > _______________________________________________ > > buildroot mailing list > > buildroot@busybox.net > > http://lists.busybox.net/mailman/listinfo/buildroot
diff --git a/boot/opensbi/Config.in b/boot/opensbi/Config.in index 5f3cc13312..5cb8aace3e 100644 --- a/boot/opensbi/Config.in +++ b/boot/opensbi/Config.in @@ -22,4 +22,13 @@ config BR2_TARGET_OPENSBI_PLAT library libsbi.a is built. If a platform is specified then the platform specific static library libplatsbi.a and firmware examples are built. + +if BR2_TARGET_OPENSBI_PLAT != "" +config BR2_TARGET_OPENSBI_LINUX_PAYLOAD + bool "Include Linux as OpenSBI Payload" + depends on BR2_LINUX_KERNEL + depends on BR2_LINUX_KERNEL_IMAGE + help + Build OpenSBI with the Linux kernel as a Payload. +endif endif diff --git a/boot/opensbi/opensbi.mk b/boot/opensbi/opensbi.mk index 45a3fc4859..2179d846e3 100644 --- a/boot/opensbi/opensbi.mk +++ b/boot/opensbi/opensbi.mk @@ -19,18 +19,34 @@ ifneq ($(OPENSBI_PLAT),) OPENSBI_MAKE_ENV += PLATFORM=$(OPENSBI_PLAT) endif +OPENSBI_LINUX_PAYLOAD = $(call qstrip,$(BR2_TARGET_OPENSBI_LINUX_PAYLOAD)) +ifeq ($(OPENSBI_LINUX_PAYLOAD), y) +OPENSBI_DEPENDENCIES = linux +OPENSBI_MAKE_ENV += FW_PAYLOAD_PATH="$(BINARIES_DIR)/Image" +endif + define OPENSBI_BUILD_CMDS $(TARGET_MAKE_ENV) $(OPENSBI_MAKE_ENV) $(MAKE) -C $(@D) endef ifneq ($(OPENSBI_PLAT),) OPENSBI_INSTALL_IMAGES = YES -define OPENSBI_INSTALL_IMAGES_CMDS - $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.bin $(BINARIES_DIR)/fw_jump.bin +OPENSBI_INSTALL_IMAGES_CMDS_PLAT = \ + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.bin $(BINARIES_DIR)/fw_jump.bin; \ $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_jump.elf $(BINARIES_DIR)/fw_jump.elf -endef endif +ifeq ($(OPENSBI_LINUX_PAYLOAD), y) +OPENSBI_INSTALL_IMAGES_CMDS_PAYLOAD = \ + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_payload.bin $(BINARIES_DIR)/fw_payload.bin; \ + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_payload.elf $(BINARIES_DIR)/fw_payload.elf +endif + +define OPENSBI_INSTALL_IMAGES_CMDS + $(OPENSBI_INSTALL_IMAGES_CMDS_PLAT) + $(OPENSBI_INSTALL_IMAGES_CMDS_PAYLOAD) +endef + # libsbi.a is not a library meant to be linked in user-space code, but # with bare metal code, which is why we don't install it in # $(STAGING_DIR)/usr/lib
Signed-off-by: Alistair Francis <alistair.francis@wdc.com> --- boot/opensbi/Config.in | 9 +++++++++ boot/opensbi/opensbi.mk | 22 +++++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-)