public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [PATCH] arch/x86/lib: implement cmdline configuration property
@ 2026-04-01 20:52 Guillaume Ranquet
  2026-04-01 23:34 ` Simon Glass
  0 siblings, 1 reply; 2+ messages in thread
From: Guillaume Ranquet @ 2026-04-01 20:52 UTC (permalink / raw)
  To: u-boot
  Cc: Simon Glass, Bin Meng, Tom Rini, Jeremy Compostella, Peng Fan,
	Yao Zi, Patrice Chotard, Quentin Schulz, Marek Vasut,
	James Hilliard, Heinrich Schuchardt, Frank Wunderlich,
	Mayuresh Chitale, Neil Armstrong, Shiji Yang, Jonas Karlman,
	Wolfgang Wallner, Guillaume Ranquet

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>
---
 arch/x86/include/asm/zimage.h |  2 +-
 arch/x86/lib/bootm.c          | 10 +++++++++-
 arch/x86/lib/zimage.c         |  4 ++--
 boot/image-fit.c              | 30 +++++++++++++++++++++++++++++-
 include/image.h               |  3 +++
 5 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/arch/x86/include/asm/zimage.h b/arch/x86/include/asm/zimage.h
index 8b5426051701c8266395afd9232eb1ff30d38304..bbcfa993761510e88610574c1c0debff519089a2 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, 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..78e4a0df89157b1cfc612ff69c533b7a1c1d6405 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, 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)) {
diff --git a/boot/image-fit.c b/boot/image-fit.c
index e7c7212195f4a291e26ed6d3440a1b42274dacab..5933c451011cfaf644b4422bc89c1e56cdbbd595 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, &len);
+	if (!cmdline) {
+		fit_get_debug(fit, noffset, FIT_CMDLINE, 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..793455d39683c1c63f5dc5e87a91d08a10cdb141 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;	/* os subimage 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			"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>


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: arch/x86/lib: implement cmdline configuration property
  2026-04-01 20:52 [PATCH] arch/x86/lib: implement cmdline configuration property Guillaume Ranquet
@ 2026-04-01 23:34 ` Simon Glass
  0 siblings, 0 replies; 2+ messages in thread
From: Simon Glass @ 2026-04-01 23:34 UTC (permalink / raw)
  To: ranquet.guillaume
  Cc: u-boot, Simon Glass, Bin Meng, Tom Rini, Jeremy Compostella,
	Peng Fan, Yao Zi, Patrice Chotard, Quentin Schulz, Marek Vasut,
	James Hilliard, Heinrich Schuchardt, Frank Wunderlich,
	Mayuresh Chitale, Neil Armstrong, Shiji Yang, Jonas Karlman,
	Wolfgang Wallner, Guillaume Ranquet

Hi Guillaume,

On 2026-04-01T20:52:14, Guillaume Ranquet <ranquet.guillaume@gmail.com> wrote:
> arch/x86/lib: implement cmdline configuration property
> arch/x86/lib: implement cmdline configuration property
>
> 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>

> diff --git 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,
> +int fit_image_get_cmdline(const void *fit, int noffset, const char **cmdline)
> +{
> +     int len;
> +
> +     *cmdline = (const char *)fdt_getprop(fit, noffset, FIT_CMDLINE, &len);
> +     if (!cmdline) {

This should be 'if (!*cmdline)', right?

> diff --git a/include/image.h b/include/image.h
> @@ -1108,6 +1109,7 @@ int booti_setup(ulong image, ulong *relocated_addr, ulong *size,
> +#define FIT_CMDLINE                  "cmdline"

Please can you rename this to FIT_CMDLINE_PROP to match the naming
convention used by all the other property macros in this list.

> diff --git a/include/image.h b/include/image.h
> @@ -365,6 +365,7 @@ struct bootm_headers {
>       const char      *fit_uname_cfg; /* configuration node unit name */
> +     int             fit_noffset_cfg;        /* os subimage node offset */

The comment is misleading - this is a configuration node offset, not
an os subimage node offset.

> diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c
> @@ -279,7 +279,7 @@ struct boot_params *load_zimage(char *image, unsigned long kernel_size,
> +              ulong initrd_addr, ulong initrd_size, char *cmdline_force)

Since the cmdline data comes from the FIT and should not be modified,
please can you use 'const char *cmdline_force'

Regards,
Simon

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-04-01 23:34 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-01 20:52 [PATCH] arch/x86/lib: implement cmdline configuration property Guillaume Ranquet
2026-04-01 23:34 ` Simon Glass

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox