mailarchive of the ptxdist mailing list
 help / color / mirror / Atom feed
From: Michael Riesch <michael.riesch@wolfvision.net>
To: ptxdist@pengutronix.de
Cc: m.tretter@pengutronix.de, Michael Riesch <michael.riesch@wolfvision.net>
Subject: [ptxdist] [PATCH v3 3/3] barebox: add integration of firmware blobs
Date: Thu,  9 Dec 2021 07:10:49 +0100	[thread overview]
Message-ID: <20211209061049.2975739-4-michael.riesch@wolfvision.net> (raw)
In-Reply-To: <20211209061049.2975739-1-michael.riesch@wolfvision.net>

In some cases barebox requires firmware blobs, which may be
provided in binary form by the vendor or compiled in a
preceding step. Add the possibility to specify files which
are injected in the barebox source directory during
preparation.

Signed-off-by: Michael Riesch <michael.riesch@wolfvision.net>
---
 platforms/barebox.in                   | 35 +++++++++++++++++++++
 rules/barebox.make                     |  6 ++++
 rules/post/ptxd_make_world_inject.make | 19 ++++++++++++
 scripts/lib/ptxd_make_world_inject.sh  | 42 ++++++++++++++++++++++++++
 4 files changed, 102 insertions(+)
 create mode 100644 rules/post/ptxd_make_world_inject.make
 create mode 100644 scripts/lib/ptxd_make_world_inject.sh

diff --git a/platforms/barebox.in b/platforms/barebox.in
index d35d16501..63e9929e5 100644
--- a/platforms/barebox.in
+++ b/platforms/barebox.in
@@ -15,6 +15,7 @@ menuconfig BAREBOX
 	select HOST_IMX_CST if BAREBOX_NEEDS_HOST_IMX_CST
 	select HOST_LZOP if BAREBOX_NEEDS_HOST_LZOP
 	select CODE_SIGNING if BAREBOX_NEEDS_KEYS
+	select FIRMWARE_ROCKCHIP if BAREBOX_NEEDS_FIRMWARE_ROCKCHIP
 	prompt "barebox                       "
 	bool
 	help
@@ -55,6 +56,32 @@ config BAREBOX_CONFIG
 	  This entry specifies the .config file used to compile
 	  barebox.
 
+menuconfig BAREBOX_FIRMWARE
+	bool
+	prompt "integrate firmware blobs      "
+
+if BAREBOX_FIRMWARE
+
+config BAREBOX_FIRMWARE_PATH
+	string "path(s) to firmware blobs"
+	default "${PTXDIST_SYSROOT_TARGET}/usr/lib/firmware"
+	help
+	  Define path to the firmware blob(s). Multiple directories can
+	  be specified separated by ':'. A relative path will be expanded relative
+	  to the workspace and all other layers. Only one of the specified paths
+	  can be a relative path.
+
+config BAREBOX_FIRMWARE_FILES
+	string "firmware blob file(s)"
+	default "<vendorblob>.bin:firmware"
+	help
+	  Select the firmware blob(s) to be integrated into the barebox
+	  source before compilation. Each entry consists of <file>:<target>,
+	  where <target> is an optional path relative to the barebox source
+	  directory. Multiple entries can be specified, separated by spaces.
+
+endif
+
 config BAREBOX_EXTRA_ENV
 	prompt "extend the builtin barebox environment"
 	bool
@@ -146,4 +173,12 @@ config BAREBOX_NEEDS_HOST_LZOP
 	  lzop is used in order to compile lzop for your development
 	  host.
 
+config BAREBOX_NEEDS_FIRMWARE_ROCKCHIP
+	prompt "barebox needs firmware-rockchip"
+	bool
+	depends on ARCH_ARM64
+	help
+	  Select this if barebox needs the non-free Rockchip firmware
+	  blobs.
+
 endif
diff --git a/rules/barebox.make b/rules/barebox.make
index bea9f3adc..a81fc86b3 100644
--- a/rules/barebox.make
+++ b/rules/barebox.make
@@ -26,6 +26,8 @@ BAREBOX_BUILD_DIR	:= $(BAREBOX_DIR)-build
 BAREBOX_LICENSE		:= GPL-2.0-only
 BAREBOX_DEVPKG		:= NO
 BAREBOX_BUILD_OOT	:= KEEP
+BAREBOX_INJECT_PATH	:=$(call remove_quotes,$(PTXCONF_BAREBOX_FIRMWARE_PATH))
+BAREBOX_INJECT_FILES	:=$(call remove_quotes,$(PTXCONF_BAREBOX_FIRMWARE_FILES))
 
 BAREBOX_CONFIG		:= $(call ptx/in-platformconfigdir, \
 		$(call remove_quotes, $(PTXCONF_BAREBOX_CONFIG)))
@@ -94,6 +96,10 @@ ifdef PTXCONF_BAREBOX_EXTRA_ENV
 	@rm -rf $(BAREBOX_BUILD_DIR)/defaultenv/barebox_default_env
 endif
 
+ifdef PTXCONF_BAREBOX_FIRMWARE
+	@$(call world/inject, BAREBOX)
+endif
+
 	@$(call touch)
 
 # ----------------------------------------------------------------------------
diff --git a/rules/post/ptxd_make_world_inject.make b/rules/post/ptxd_make_world_inject.make
new file mode 100644
index 000000000..b7d28e92f
--- /dev/null
+++ b/rules/post/ptxd_make_world_inject.make
@@ -0,0 +1,19 @@
+# -*-makefile-*-
+#
+# Copyright (C) 2021 by Michael Riesch <michael.riesch@wolfvision.net>
+#
+# For further information about the PTXdist project and license conditions
+# see the README file.
+#
+
+world/inject/env = \
+	$(call world/env, $(1)) \
+	pkg_inject_path="$($(1)_INJECT_PATH)" \
+	pkg_inject_files="$($(1)_INJECT_FILES)" \
+	pkg_source="$($(1)_DIR)"
+
+world/inject = \
+	$(call world/inject/env,$(strip $(1))) \
+	ptxd_make_world_inject
+
+# vim: syntax=make
diff --git a/scripts/lib/ptxd_make_world_inject.sh b/scripts/lib/ptxd_make_world_inject.sh
new file mode 100644
index 000000000..c2e45ad42
--- /dev/null
+++ b/scripts/lib/ptxd_make_world_inject.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+#
+# Copyright (C) 2021 by Michael Riesch <michael.riesch@wolfvision.net>
+#
+# For further information about the PTXdist project and license conditions
+# see the README file.
+#
+
+ptxd_make_inject() {
+    local source target
+
+    source="$(echo ${inject_file} | cut -d ":" -f 1)"
+    target="${pkg_source}/$(echo ${inject_file} | cut -d ":" -f 2)"
+    if [ -z "${target}" ]; then
+	target="${source}"
+    fi
+
+    if [[ "${source}" =~ ^/.* ]]; then
+	ptxd_bailout "'${source}' must not be an absolute path!" \
+	    "Use <PKG>_INJECT_PATH to specify the search path."
+    fi
+
+    if ! ptxd_in_path pkg_inject_path "${source}"; then
+	ptxd_bailout "Blob '${source}' not found in '${pkg_inject_path}'."
+    fi
+    source="${ptxd_reply}"
+
+    echo -e "\nInject file $(ptxd_print_path ${source}) into" \
+	 "$(ptxd_print_path ${target})..."
+    cp ${source} ${target}
+}
+export -f ptxd_make_inject
+
+
+ptxd_make_world_inject() {
+    ptxd_make_world_init || break
+
+    for inject_file in ${pkg_inject_files}; do
+	ptxd_make_inject || break
+    done
+}
+export -f ptxd_make_world_inject
-- 
2.30.2


_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de
To unsubscribe, send a mail with subject "unsubscribe" to ptxdist-request@pengutronix.de


  parent reply	other threads:[~2021-12-09  6:11 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-09  6:10 [ptxdist] [PATCH v3 0/3] Add support for Rockchip " Michael Riesch
2021-12-09  6:10 ` [ptxdist] [PATCH v3 1/3] platforms: add section for non-free " Michael Riesch
2021-12-09  6:10 ` [ptxdist] [PATCH v3 2/3] add package for rockchip firmware binaries Michael Riesch
2021-12-09  6:10 ` Michael Riesch [this message]
2021-12-10 15:03   ` [ptxdist] [PATCH v3 3/3] barebox: add integration of firmware blobs Michael Olbrich
2021-12-11  7:03     ` Michael Riesch
2021-12-17  7:35       ` Michael Olbrich
2021-12-20 11:02         ` Michael Riesch

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211209061049.2975739-4-michael.riesch@wolfvision.net \
    --to=michael.riesch@wolfvision.net \
    --cc=m.tretter@pengutronix.de \
    --cc=ptxdist@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox