From: Guillaume Ranquet <ranquet.guillaume@gmail.com>
To: u-boot@lists.denx.de
Cc: Simon Glass <sjg@chromium.org>, Bin Meng <bmeng.cn@gmail.com>,
Tom Rini <trini@konsulko.com>,
Jeremy Compostella <jeremy.compostella@intel.com>,
Peng Fan <peng.fan@nxp.com>, Yao Zi <me@ziyao.cc>,
Patrice Chotard <patrice.chotard@foss.st.com>,
Quentin Schulz <quentin.schulz@cherry.de>,
Marek Vasut <marek.vasut+renesas@mailbox.org>,
James Hilliard <james.hilliard1@gmail.com>,
Heinrich Schuchardt <xypron.glpk@gmx.de>,
Frank Wunderlich <frank-w@public-files.de>,
Mayuresh Chitale <mchitale@ventanamicro.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Shiji Yang <yangshiji66@outlook.com>,
Jonas Karlman <jonas@kwiboo.se>,
Wolfgang Wallner <wolfgang.wallner@at.abb.com>,
Guillaume Ranquet <granquet@missingno.tech>
Subject: [PATCH v2] arch/x86/lib: implement cmdline configuration property
Date: Fri, 03 Apr 2026 16:28:23 +0200 [thread overview]
Message-ID: <20260403-cmdline-v2-1-83e22c82f02f@missingno.tech> (raw)
Implement the cmdline configuration property as described in the spec
[1]
[1]: https://fitspec.osfw.foundation/#id10
Signed-off-by: Guillaume Ranquet <granquet@missingno.tech>
---
Changes in v2:
- EDITME: describe what is new in this series revision.
- EDITME: use bulletpoints and terse descriptions.
- Link to v1: https://lore.kernel.org/r/20260401-cmdline-v1-1-c56577f82960@missingno.tech
---
arch/x86/include/asm/zimage.h | 2 +-
arch/x86/lib/bootm.c | 10 +++++++++-
arch/x86/lib/zimage.c | 6 +++---
boot/image-fit.c | 30 +++++++++++++++++++++++++++++-
include/image.h | 3 +++
5 files changed, 45 insertions(+), 6 deletions(-)
diff --git a/arch/x86/include/asm/zimage.h b/arch/x86/include/asm/zimage.h
index 8b5426051701c8266395afd9232eb1ff30d38304..ee0114a227a2b067a3a3126d7d80ab0cc89cea6e 100644
--- a/arch/x86/include/asm/zimage.h
+++ b/arch/x86/include/asm/zimage.h
@@ -132,7 +132,7 @@ struct boot_params *load_zimage(char *image, unsigned long kernel_size,
* Return: 0 (always)
*/
int setup_zimage(struct boot_params *setup_base, char *cmd_line, int auto_boot,
- ulong initrd_addr, ulong initrd_size, ulong cmdline_force);
+ ulong initrd_addr, ulong initrd_size, const char *cmdline_force);
/**
* zboot_start() - Prepare to boot a zimage
diff --git a/arch/x86/lib/bootm.c b/arch/x86/lib/bootm.c
index cde4fbf35574a267b856a668659ece7e0a36367f..e029cc1ff18bd53eb873c0e56fd9d3b0a331b4c2 100644
--- a/arch/x86/lib/bootm.c
+++ b/arch/x86/lib/bootm.c
@@ -61,6 +61,7 @@ int arch_fixup_memory_node(void *blob)
static int boot_prep_linux(struct bootm_headers *images)
{
char *cmd_line_dest = NULL;
+ const char *cmd_line_override = NULL;
struct legacy_img_hdr *hdr;
int is_zimage = 0;
void *data = NULL;
@@ -99,6 +100,13 @@ static int boot_prep_linux(struct bootm_headers *images)
puts("Can't get image data/size!\n");
goto error;
}
+
+ ret = fit_image_get_cmdline(images->fit_hdr_os,
+ images->fit_noffset_cfg,
+ &cmd_line_override);
+ if (ret)
+ debug("unable to retrieve cmdline for zimage\n");
+
is_zimage = 1;
#endif
}
@@ -125,7 +133,7 @@ static int boot_prep_linux(struct bootm_headers *images)
printf("Setup at %#08lx\n", images->ep);
ret = setup_zimage((void *)images->ep, cmd_line_dest,
0, images->rd_start,
- images->rd_end - images->rd_start, 0);
+ images->rd_end - images->rd_start, cmd_line_override);
if (ret) {
printf("## Setting up boot parameters failed ...\n");
diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c
index a5f2231aa523356de93368338b5fd249b8abad6e..af7ee8dbcf3e8f402cb0c76767b8a587f205ad5d 100644
--- a/arch/x86/lib/zimage.c
+++ b/arch/x86/lib/zimage.c
@@ -276,7 +276,7 @@ struct boot_params *load_zimage(char *image, unsigned long kernel_size,
}
int setup_zimage(struct boot_params *setup_base, char *cmd_line, int auto_boot,
- ulong initrd_addr, ulong initrd_size, ulong cmdline_force)
+ ulong initrd_addr, ulong initrd_size, const char *cmdline_force)
{
struct setup_header *hdr = &setup_base->hdr;
int bootproto = get_boot_protocol(hdr, false);
@@ -333,7 +333,7 @@ int setup_zimage(struct boot_params *setup_base, char *cmd_line, int auto_boot,
/* build command line at COMMAND_LINE_OFFSET */
if (cmdline_force)
- strcpy(cmd_line, (char *)cmdline_force);
+ strcpy(cmd_line, cmdline_force);
else
build_command_line(cmd_line, auto_boot);
if (IS_ENABLED(CONFIG_CMD_BOOTM)) {
@@ -404,7 +404,7 @@ int zboot_setup(void)
ret = setup_zimage(base_ptr, (char *)base_ptr + COMMAND_LINE_OFFSET,
0, state.initrd_addr, state.initrd_size,
- (ulong)state.cmdline);
+ state.cmdline);
if (ret)
return -EINVAL;
diff --git a/boot/image-fit.c b/boot/image-fit.c
index e7c7212195f4a291e26ed6d3440a1b42274dacab..1790af4a8e5a9c7d11f7dee5f67226071f8f057e 100644
--- a/boot/image-fit.c
+++ b/boot/image-fit.c
@@ -1096,6 +1096,32 @@ int fit_image_get_data(const void *fit, int noffset, const void **data,
return ret;
}
+/**
+ * fit_image_get_cmdline - get image configuration command line
+ * @fit: pointer to the FIT format image header
+ * @cfg_noffset: configuration node offset
+ * @cmdline: double pointer to char, will hold pointer to the cmdline
+ *
+ * fit_image_get_cmdline() gets the cmdline from the configuration node.
+ * If the property is found its data start address is returned to the caller.
+ *
+ * returns:
+ * 0, on success
+ * -1, on failure
+ */
+int fit_image_get_cmdline(const void *fit, int noffset, const char **cmdline)
+{
+ int len;
+
+ *cmdline = (const char *)fdt_getprop(fit, noffset, FIT_CMDLINE_PROP, &len);
+ if (!*cmdline) {
+ fit_get_debug(fit, noffset, FIT_CMDLINE_PROP, len);
+ return -1;
+ }
+
+ return 0;
+}
+
/**
* fit_image_hash_get_algo - get hash algorithm name
* @fit: pointer to the FIT format image header
@@ -2136,8 +2162,10 @@ int fit_image_load(struct bootm_headers *images, ulong addr,
fit_base_uname_config = fdt_get_name(fit, cfg_noffset, NULL);
printf(" Using '%s' configuration\n", fit_base_uname_config);
/* Remember this config */
- if (image_type == IH_TYPE_KERNEL)
+ if (image_type == IH_TYPE_KERNEL) {
images->fit_uname_cfg = fit_base_uname_config;
+ images->fit_noffset_cfg = cfg_noffset;
+ }
if (FIT_IMAGE_ENABLE_VERIFY && images->verify) {
puts(" Verifying Hash Integrity ... ");
diff --git a/include/image.h b/include/image.h
index 34efac6056dd29307df359dce21e4f94d5fcbf2d..9916e67168e3a4f5412fc26d318af32047c239e2 100644
--- a/include/image.h
+++ b/include/image.h
@@ -365,6 +365,7 @@ struct bootm_headers {
* format, even for SPL, this extra data size seems worth it.
*/
const char *fit_uname_cfg; /* configuration node unit name */
+ int fit_noffset_cfg; /* configuration node offset */
void *fit_hdr_os; /* os FIT image header */
const char *fit_uname_os; /* os subimage node unit name */
@@ -1108,6 +1109,7 @@ int booti_setup(ulong image, ulong *relocated_addr, ulong *size,
#define FIT_TFA_BL31_PROP "tfa-bl31"
#define FIT_TEE_PROP "tee"
#define FIT_COMPAT_PROP "compatible"
+#define FIT_CMDLINE_PROP "cmdline"
#define FIT_MAX_HASH_LEN HASH_MAX_DIGEST_SIZE
@@ -1259,6 +1261,7 @@ int fit_get_data_node(const void *fit, const char *image_uname,
int fit_get_data_conf_prop(const void *fit, const char *prop_name,
const void **data, size_t *size);
+int fit_image_get_cmdline(const void *fit, int noffset, const char **cmdline);
int fit_image_hash_get_algo(const void *fit, int noffset, const char **algo);
int fit_image_hash_get_value(const void *fit, int noffset, uint8_t **value,
int *value_len);
---
base-commit: 98cf83d81617f489d7ff7bf78d33e693e2799254
change-id: 20260401-cmdline-ab954a4e8828
Best regards,
--
Guillaume Ranquet <granquet@missingno.tech>
next reply other threads:[~2026-04-03 14:28 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-03 14:28 Guillaume Ranquet [this message]
2026-04-10 22:19 ` [PATCH v2] arch/x86/lib: implement cmdline configuration property Simon Glass
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=20260403-cmdline-v2-1-83e22c82f02f@missingno.tech \
--to=ranquet.guillaume@gmail.com \
--cc=bmeng.cn@gmail.com \
--cc=frank-w@public-files.de \
--cc=granquet@missingno.tech \
--cc=james.hilliard1@gmail.com \
--cc=jeremy.compostella@intel.com \
--cc=jonas@kwiboo.se \
--cc=marek.vasut+renesas@mailbox.org \
--cc=mchitale@ventanamicro.com \
--cc=me@ziyao.cc \
--cc=neil.armstrong@linaro.org \
--cc=patrice.chotard@foss.st.com \
--cc=peng.fan@nxp.com \
--cc=quentin.schulz@cherry.de \
--cc=sjg@chromium.org \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=wolfgang.wallner@at.abb.com \
--cc=xypron.glpk@gmx.de \
--cc=yangshiji66@outlook.com \
/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