[PATCH] mach-k3: move k3_falcon_fdt_fixup out of r5/common.c
Anshul Dalal
anshuld at ti.com
Thu Mar 12 13:04:17 CET 2026
k3_falcon_fdt_fixup is used to perform fdt fixups at runtime in falcon
mode such as adding bootargs. Currently the function is only accessible
to the R5 SPL but could be useful for A53 SPL based falcon mode setups
as well.
Therefore this patch moves the function from r5/common.c to common.c.
Signed-off-by: Anshul Dalal <anshuld at ti.com>
---
arch/arm/mach-k3/common.c | 80 ++++++++++++++++++++++++++++++++++++++++++++
arch/arm/mach-k3/common.h | 5 ++-
arch/arm/mach-k3/r5/common.c | 77 ------------------------------------------
3 files changed, 84 insertions(+), 78 deletions(-)
diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c
index 2f3df5519c5..b0a75988714 100644
--- a/arch/arm/mach-k3/common.c
+++ b/arch/arm/mach-k3/common.c
@@ -457,6 +457,83 @@ static __maybe_unused void k3_dma_remove(void)
pr_warn("DMA Device not found (err=%d)\n", rc);
}
+static int k3_falcon_fdt_add_bootargs(void *fdt)
+{
+ struct disk_partition info;
+ struct blk_desc *dev_desc;
+ char bootmedia[32];
+ char bootpart[32];
+ char str[256];
+ int ret;
+
+ strlcpy(bootmedia, env_get("boot"), sizeof(bootmedia));
+ strlcpy(bootpart, env_get("bootpart"), sizeof(bootpart));
+ ret = blk_get_device_part_str(bootmedia, bootpart, &dev_desc, &info, 0);
+ if (ret < 0) {
+ printf("%s: Failed to get part details for %s %s [%d]\n",
+ __func__, bootmedia, bootpart, ret);
+ return ret;
+ }
+
+ if (!CONFIG_IS_ENABLED(PARTITION_UUIDS)) {
+ printf("ERROR: Failed to find rootfs PARTUUID\n");
+ printf("%s: CONFIG_SPL_PARTITION_UUIDS not enabled\n",
+ __func__);
+ return -EOPNOTSUPP;
+ }
+
+ snprintf(str, sizeof(str), "console=%s root=PARTUUID=%s rootwait",
+ env_get("console"), disk_partition_uuid(&info));
+
+ ret = fdt_find_and_setprop(fdt, "/chosen", "bootargs", str,
+ strlen(str) + 1, 1);
+ if (ret) {
+ printf("%s: Could not set bootargs: %s\n", __func__,
+ fdt_strerror(ret));
+ return ret;
+ }
+
+ debug("%s: Set bootargs to: %s\n", __func__, str);
+ return 0;
+}
+
+int k3_falcon_fdt_fixup(void *fdt)
+{
+ int ret;
+
+ if (!fdt)
+ return -EINVAL;
+
+ fdt_set_totalsize(fdt, fdt_totalsize(fdt) + CONFIG_SYS_FDT_PAD);
+
+ if (fdt_path_offset(fdt, "/chosen/bootargs") < 0) {
+ ret = k3_falcon_fdt_add_bootargs(fdt);
+
+ if (ret)
+ return ret;
+ }
+
+ if (IS_ENABLED(CONFIG_OF_BOARD_SETUP)) {
+ ret = ft_board_setup(fdt, gd->bd);
+ if (ret) {
+ printf("%s: Failed in board setup: %s\n", __func__,
+ fdt_strerror(ret));
+ return ret;
+ }
+ }
+
+ if (IS_ENABLED(CONFIG_OF_SYSTEM_SETUP)) {
+ ret = ft_system_setup(fdt, gd->bd);
+ if (ret) {
+ printf("%s: Failed in system setup: %s\n", __func__,
+ fdt_strerror(ret));
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
void spl_perform_arch_fixups(struct spl_image_info *spl_image)
{
void *fdt = spl_image_fdt_addr(spl_image);
@@ -465,6 +542,9 @@ void spl_perform_arch_fixups(struct spl_image_info *spl_image)
return;
fdt_fixup_reserved(fdt);
+
+ if (IS_ENABLED(CONFIG_SPL_OS_BOOT))
+ k3_falcon_fdt_fixup(fdt);
}
void spl_board_prepare_for_boot(void)
diff --git a/arch/arm/mach-k3/common.h b/arch/arm/mach-k3/common.h
index e970076d08e..466ad22f895 100644
--- a/arch/arm/mach-k3/common.h
+++ b/arch/arm/mach-k3/common.h
@@ -61,10 +61,13 @@ void do_board_detect(void);
void ti_secure_image_check_binary(void **p_image, size_t *p_size);
int shutdown_mcu_r5_core1(void);
-#if IS_ENABLED(CONFIG_SPL_OS_BOOT_SECURE) && !IS_ENABLED(CONFIG_ARM64)
+#if IS_ENABLED(CONFIG_SPL_OS_BOOT_SECURE)
+int k3_falcon_fdt_fixup(void *fdt);
+#if !IS_ENABLED(CONFIG_ARM64)
int k3_r5_falcon_bootmode(void);
int k3_r5_falcon_prep(void);
#endif
+#endif
#if (IS_ENABLED(CONFIG_K3_QOS))
void setup_qos(void);
diff --git a/arch/arm/mach-k3/r5/common.c b/arch/arm/mach-k3/r5/common.c
index 03638366046..484d96f9536 100644
--- a/arch/arm/mach-k3/r5/common.c
+++ b/arch/arm/mach-k3/r5/common.c
@@ -406,83 +406,6 @@ int k3_r5_falcon_bootmode(void)
return BOOT_DEVICE_NOBOOT;
}
-static int k3_falcon_fdt_add_bootargs(void *fdt)
-{
- struct disk_partition info;
- struct blk_desc *dev_desc;
- char bootmedia[32];
- char bootpart[32];
- char str[256];
- int ret;
-
- strlcpy(bootmedia, env_get("boot"), sizeof(bootmedia));
- strlcpy(bootpart, env_get("bootpart"), sizeof(bootpart));
- ret = blk_get_device_part_str(bootmedia, bootpart, &dev_desc, &info, 0);
- if (ret < 0) {
- printf("%s: Failed to get part details for %s %s [%d]\n",
- __func__, bootmedia, bootpart, ret);
- return ret;
- }
-
- if (!CONFIG_IS_ENABLED(PARTITION_UUIDS)) {
- printf("ERROR: Failed to find rootfs PARTUUID\n");
- printf("%s: CONFIG_SPL_PARTITION_UUIDS not enabled\n",
- __func__);
- return -EOPNOTSUPP;
- }
-
- snprintf(str, sizeof(str), "console=%s root=PARTUUID=%s rootwait",
- env_get("console"), disk_partition_uuid(&info));
-
- ret = fdt_find_and_setprop(fdt, "/chosen", "bootargs", str,
- strlen(str) + 1, 1);
- if (ret) {
- printf("%s: Could not set bootargs: %s\n", __func__,
- fdt_strerror(ret));
- return ret;
- }
-
- debug("%s: Set bootargs to: %s\n", __func__, str);
- return 0;
-}
-
-static int k3_falcon_fdt_fixup(void *fdt)
-{
- int ret;
-
- if (!fdt)
- return -EINVAL;
-
- fdt_set_totalsize(fdt, fdt_totalsize(fdt) + CONFIG_SYS_FDT_PAD);
-
- if (fdt_path_offset(fdt, "/chosen/bootargs") < 0) {
- ret = k3_falcon_fdt_add_bootargs(fdt);
-
- if (ret)
- return ret;
- }
-
- if (IS_ENABLED(CONFIG_OF_BOARD_SETUP)) {
- ret = ft_board_setup(fdt, gd->bd);
- if (ret) {
- printf("%s: Failed in board setup: %s\n", __func__,
- fdt_strerror(ret));
- return ret;
- }
- }
-
- if (IS_ENABLED(CONFIG_OF_SYSTEM_SETUP)) {
- ret = ft_system_setup(fdt, gd->bd);
- if (ret) {
- printf("%s: Failed in system setup: %s\n", __func__,
- fdt_strerror(ret));
- return ret;
- }
- }
-
- return 0;
-}
-
int k3_r5_falcon_prep(void)
{
struct spl_image_loader *loader, *drv;
---
base-commit: 8bc2a5196c1c0bb5dbdaca073323da0015a0de37
change-id: 20260312-move_falcon_fixups_to_common-34b602114608
Best regards,
--
Anshul Dalal <anshuld at ti.com>
More information about the U-Boot
mailing list