[PATCH 1/2] imx9: soc: Reuse and export low_drive_freq_update()

Primoz Fiser primoz.fiser at norik.com
Thu Aug 7 15:13:53 CEST 2025


Reuse and export low_drive_freq_update() function. This way global imx9
board_fix_fdt() doesn't duplicate code. While low_drive_freq_update()
can be reused on boards such as phyCORE-i.MX93 (TARGET_PHYCORE_IMX93)
which is not using the global imx9 board_fix_fdt() implementation.

While at it, make printout logic less verbose by only outputting on the
error condition and not on each successful clock fixup. Also drop now
invalid comment (low_drive_freq_update() now does fixup for internal and
kernel device-tree).

Signed-off-by: Primoz Fiser <primoz.fiser at norik.com>
---
 arch/arm/include/asm/arch-imx9/sys_proto.h |  1 +
 arch/arm/mach-imx/imx9/soc.c               | 29 +++++-----------------
 2 files changed, 7 insertions(+), 23 deletions(-)

diff --git a/arch/arm/include/asm/arch-imx9/sys_proto.h b/arch/arm/include/asm/arch-imx9/sys_proto.h
index df2148a53c7e..455aa95339e9 100644
--- a/arch/arm/include/asm/arch-imx9/sys_proto.h
+++ b/arch/arm/include/asm/arch-imx9/sys_proto.h
@@ -18,6 +18,7 @@ enum imx9_soc_voltage_mode {
 void soc_power_init(void);
 bool m33_is_rom_kicked(void);
 int m33_prepare(void);
+int low_drive_freq_update(void *blob);
 
 enum imx9_soc_voltage_mode soc_target_voltage_mode(void);
 
diff --git a/arch/arm/mach-imx/imx9/soc.c b/arch/arm/mach-imx/imx9/soc.c
index bb13ca742e3a..7e7a39d46c35 100644
--- a/arch/arm/mach-imx/imx9/soc.c
+++ b/arch/arm/mach-imx/imx9/soc.c
@@ -641,12 +641,10 @@ static int low_drive_fdt_fix_clock(void *fdt, int node_off, u32 clk_index, u32 n
 	return -ENOENT;
 }
 
-static int low_drive_freq_update(void *blob)
+int low_drive_freq_update(void *blob)
 {
-	int nodeoff, ret;
-	int i;
+	int nodeoff, ret, i;
 
-	/* Update kernel dtb clocks for low drive mode */
 	struct low_drive_freq_entry table[] = {
 		{"/soc at 0/bus at 42800000/mmc at 42850000", 0, 266666667},
 		{"/soc at 0/bus at 42800000/mmc at 42860000", 0, 266666667},
@@ -658,8 +656,8 @@ static int low_drive_freq_update(void *blob)
 		if (nodeoff >= 0) {
 			ret = low_drive_fdt_fix_clock(blob, nodeoff, table[i].clk,
 						      table[i].new_rate);
-			if (!ret)
-				printf("%s freq updated\n", table[i].node_path);
+			if (ret)
+				printf("freq update failed for %s\n", table[i].node_path);
 		}
 	}
 
@@ -671,23 +669,8 @@ static int low_drive_freq_update(void *blob)
 int board_fix_fdt(void *fdt)
 {
 	/* Update dtb clocks for low drive mode */
-	if (is_voltage_mode(VOLT_LOW_DRIVE)) {
-		int nodeoff;
-		int i;
-
-		struct low_drive_freq_entry table[] = {
-			{"/soc at 0/bus at 42800000/mmc at 42850000", 0, 266666667},
-			{"/soc at 0/bus at 42800000/mmc at 42860000", 0, 266666667},
-			{"/soc at 0/bus at 42800000/mmc at 428b0000", 0, 266666667},
-		};
-
-		for (i = 0; i < ARRAY_SIZE(table); i++) {
-			nodeoff = fdt_path_offset(fdt, table[i].node_path);
-			if (nodeoff >= 0)
-				low_drive_fdt_fix_clock(fdt, nodeoff, table[i].clk,
-							table[i].new_rate);
-		}
-	}
+	if (is_voltage_mode(VOLT_LOW_DRIVE))
+		low_drive_freq_update(fdt);
 
 	return 0;
 }
-- 
2.34.1



More information about the U-Boot mailing list