[PATCH 1/2] arm: mediatek: add SIP platform bininfo lookups

David Lechner dlechner at baylibre.com
Mon Mar 30 22:23:18 CEST 2026


Add a couple of functions to look up the segment and part name using SIP
calls. These will be used to print more accurate CPU information in
print_cpuinfo().

Signed-off-by: David Lechner <dlechner at baylibre.com>
---
 arch/arm/mach-mediatek/cpu.c | 55 ++++++++++++++++++++++++++++++++++++++++++++
 arch/arm/mach-mediatek/cpu.h | 14 +++++++++++
 2 files changed, 69 insertions(+)

diff --git a/arch/arm/mach-mediatek/cpu.c b/arch/arm/mach-mediatek/cpu.c
index 8e8bc4f9cea..56a41e42df6 100644
--- a/arch/arm/mach-mediatek/cpu.c
+++ b/arch/arm/mach-mediatek/cpu.c
@@ -8,6 +8,11 @@
 #include <init.h>
 #include <wdt.h>
 #include <dm/uclass-internal.h>
+#include <linux/arm-smccc.h>
+#include <linux/types.h>
+
+#define MTK_SIP_PLAT_BINFO ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, ARM_SMCCC_SMC_64, \
+					      ARM_SMCCC_OWNER_SIP, 0x529)
 
 int arch_cpu_init(void)
 {
@@ -21,3 +26,53 @@ void enable_caches(void)
 	/* Enable D-cache. I-cache is already enabled in start.S */
 	dcache_enable();
 }
+
+/**
+ * mediatek_sip_part_name - get the part name
+ *
+ * Retrieve the part name of platform description.
+ *
+ * This only applicable to SoCs that support SIP plat binfo SMC call.
+ *
+ * Returns: the part name or 0 if error or no part name
+ */
+u32 mediatek_sip_part_name(void)
+{
+	if (CONFIG_IS_ENABLED(TARGET_MT8188) || CONFIG_IS_ENABLED(TARGET_MT8189) ||
+	    CONFIG_IS_ENABLED(TARGET_MT8195) || CONFIG_IS_ENABLED(TARGET_MT8365)) {
+		struct arm_smccc_res res __maybe_unused;
+
+		arm_smccc_smc(MTK_SIP_PLAT_BINFO, 0, 0, 0, 0, 0, 0, 0, &res);
+		if (res.a0)
+			return 0;
+
+		return res.a1;
+	}
+
+	return 0;
+}
+
+/**
+ * mediatek_sip_segment_name - get the segment name
+ *
+ * Retrieve the segment name of platform description.
+ *
+ * This only applicable to SoCs that support SIP plat binfo SMC call.
+ *
+ * Returns: the segment name or 0 if error or no segment name
+ */
+u32 mediatek_sip_segment_name(void)
+{
+	if (CONFIG_IS_ENABLED(TARGET_MT8188) || CONFIG_IS_ENABLED(TARGET_MT8189) ||
+	    CONFIG_IS_ENABLED(TARGET_MT8195) || CONFIG_IS_ENABLED(TARGET_MT8365)) {
+		struct arm_smccc_res res __maybe_unused;
+
+		arm_smccc_smc(MTK_SIP_PLAT_BINFO, 1, 0, 0, 0, 0, 0, 0, &res);
+		if (res.a0)
+			return 0;
+
+		return res.a1;
+	}
+
+	return 0;
+}
diff --git a/arch/arm/mach-mediatek/cpu.h b/arch/arm/mach-mediatek/cpu.h
new file mode 100644
index 00000000000..768284e487f
--- /dev/null
+++ b/arch/arm/mach-mediatek/cpu.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2026 MediaTek Inc.
+ */
+
+#ifndef _MACH_MEDIATEK_CPU_H_
+#define _MACH_MEDIATEK_CPU_H_
+
+#include <linux/types.h>
+
+u32 mediatek_sip_segment_name(void);
+u32 mediatek_sip_part_name(void);
+
+#endif /* _MACH_MEDIATEK_CPU_H_ */

-- 
2.43.0



More information about the U-Boot mailing list