]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
firmware: smccc: Fix Arm SMCCC SOC_ID name call
authorAndre Przywara <andre.przywara@arm.com>
Tue, 2 Sep 2025 17:20:53 +0000 (18:20 +0100)
committerSudeep Holla <sudeep.holla@kernel.org>
Wed, 20 May 2026 08:41:44 +0000 (09:41 +0100)
Commit 5f9c23abc477 ("firmware: smccc: Support optional Arm SMCCC SOC_ID
name") introduced the SOC_ID name string call, which reports a human
readable string describing the SoC, as returned by firmware.

The SMCCC spec v1.6 describes this feature as AArch64 only, since we rely
on 8 characters to be transmitted per register. Consequently the SMCCC
call must use the AArch64 calling convention, which requires bit 30 of
the FID to be set. The spec is a bit confusing here, since it mentions
that in the parameter description ("2: SoC name (optionally implemented for
SMC64 calls, ..."), but still prints the FID explicitly as 0x80000002.

But as this FID is using the SMC32 calling convention (correct for the
other two calls), it will not match what any SMCCC conformant firmware is
expecting, so any call would return NOT_SUPPORTED.

Add a 64-bit version of the ARCH_SOC_ID FID macro, and use that for the
SoC name version of the call to fix the issue.

Fixes: 5f9c23abc477 ("firmware: smccc: Support optional Arm SMCCC SOC_ID name")
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Link: https://patch.msgid.link/20250902172053.304911-1-andre.przywara@arm.com
Signed-off-by: Sudeep Holla <sudeep.holla@kernel.org>
drivers/firmware/smccc/soc_id.c
include/linux/arm-smccc.h

index 2f7475e66b3ca9a5cdc512c1ed0895abbdc5ab7f..a909d5e6dee5097b4ee8a8c4423868dd0b861820 100644 (file)
@@ -60,7 +60,7 @@ static char __init *smccc_soc_name_init(void)
         * to the ARM_SMCCC_ARCH_SOC_ID function.  Fetch it if
         * available.
         */
-       args.a0 = ARM_SMCCC_ARCH_SOC_ID;
+       args.a0 = ARM_SMCCC_ARCH_SOC_ID64;
        args.a1 = 2;    /* SOC_ID name */
        arm_smccc_1_2_invoke(&args, &res);
 
index 50b47eba7d01520e8d27552cd8249e7796d227fc..976c5f8001ff272974ce09171fc9b167cb034892 100644 (file)
                           ARM_SMCCC_SMC_32,                            \
                           0, 2)
 
+#define ARM_SMCCC_ARCH_SOC_ID64                                                \
+       ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,                         \
+                          ARM_SMCCC_SMC_64,                            \
+                          0, 2)
+
 #define ARM_SMCCC_ARCH_WORKAROUND_1                                    \
        ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,                         \
                           ARM_SMCCC_SMC_32,                            \