Re: [PATCH] firmware: smccc: Support optional Arm SMC SOC_ID name

kernel test robot
2024-11-17T00:57:28Z

Hi Paul,

kernel test robot noticed the following build errors:

[auto build test ERROR on soc/for-next]
[also build test ERROR on linus/master v6.12-rc7 next-20241115]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Paul-Benoit/firmware-smccc-Support-optional-Arm-SMC-SOC_ID-name/20241114-113039
base: https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git for-next
patch link: https://lore.kernel.org/r/20241114030452.10149-1-paul%40os.amperecomputing.com
patch subject: [PATCH] firmware: smccc: Support optional Arm SMC SOC_ID name
config: arm-randconfig-003-20241117 (https://download.01.org/0day-ci/archive/20241117/202411171059.1mPeDZMS-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241117/202411171059.1mPeDZMS-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202411171059.1mPeDZMS-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

drivers/firmware/smccc/smccc.c: In function 'arm_smccc_version_init':
>> drivers/firmware/smccc/smccc.c:26:35: error: storage size of 'regs_1_2' isn't known
26 | struct arm_smccc_1_2_regs regs_1_2;
| ^~~~~~~~
>> drivers/firmware/smccc/smccc.c:50:25: error: implicit declaration of function 'arm_smccc_1_2_smc'; did you mean 'arm_smccc_1_1_smc'? [-Wimplicit-function-declaration]
50 | arm_smccc_1_2_smc(
| ^~~~~~~~~~~~~~~~~
| arm_smccc_1_1_smc
>> drivers/firmware/smccc/smccc.c:26:35: warning: unused variable 'regs_1_2' [-Wunused-variable]
26 | struct arm_smccc_1_2_regs regs_1_2;
| ^~~~~~~~

vim +26 drivers/firmware/smccc/smccc.c

22
23 void __init arm_smccc_version_init(u32 version, enum arm_smccc_conduit conduit)
24 {
25 struct arm_smccc_res res;
> 26 struct arm_smccc_1_2_regs regs_1_2;
27
28 smccc_version = version;
29 smccc_conduit = conduit;
30
31 smccc_trng_available = smccc_probe_trng();
32
33 if ((smccc_version >= ARM_SMCCC_VERSION_1_2) &&
34 (smccc_conduit != SMCCC_CONDUIT_NONE)) {
35 arm_smccc_1_1_invoke(ARM_SMCCC_ARCH_FEATURES_FUNC_ID,
36 ARM_SMCCC_ARCH_SOC_ID, &res);
37 if ((s32)res.a0 >= 0) {
38 arm_smccc_1_1_invoke(ARM_SMCCC_ARCH_SOC_ID, 0, &res);
39 smccc_soc_id_version = (s32)res.a0;
40 arm_smccc_1_1_invoke(ARM_SMCCC_ARCH_SOC_ID, 1, &res);
41 smccc_soc_id_revision = (s32)res.a0;
42
43 /* Issue Number 1.6 of the Arm SMC Calling Convention
44 * specification introduces an optional "name" string
45 * to the ARM_SMCCC_ARCH_SOC_ID function. Fetch it if
46 * available.
47 */
48 regs_1_2.a0 = ARM_SMCCC_ARCH_SOC_ID;
49 regs_1_2.a1 = 2; /* SOC_ID name */
> 50 arm_smccc_1_2_smc(
51 (const struct arm_smccc_1_2_regs *)&regs_1_2,
52 (struct arm_smccc_1_2_regs *)&regs_1_2);
53
54 if ((u32)regs_1_2.a0 == 0) {
55 unsigned long *destination =
56 (unsigned long *)smccc_soc_id_name;
57
58 /*
59 * Copy regs_1_2.a1..regs_1_2.a17 to the
60 * smccc_soc_id_name string with consideration
61 * to the endianness of the values in a1..a17.
62 * As per Issue 1.6 of the Arm SMC Calling
63 * Convention, the string will be NUL terminated
64 * and padded, from the end of the string to
65 * the end of the 136 byte buffer, with NULs.
66 */
67 *destination++ =
68 cpu_to_le64p((const __u64 *)&regs_1_2.a1);
69 *destination++ =
70 cpu_to_le64p((const __u64 *)&regs_1_2.a2);
71 *destination++ =
72 cpu_to_le64p((const __u64 *)&regs_1_2.a3);
73 *destination++ =
74 cpu_to_le64p((const __u64 *)&regs_1_2.a4);
75 *destination++ =
76 cpu_to_le64p((const __u64 *)&regs_1_2.a5);
77 *destination++ =
78 cpu_to_le64p((const __u64 *)&regs_1_2.a6);
79 *destination++ =
80 cpu_to_le64p((const __u64 *)&regs_1_2.a7);
81 *destination++ =
82 cpu_to_le64p((const __u64 *)&regs_1_2.a8);
83 *destination++ =
84 cpu_to_le64p((const __u64 *)&regs_1_2.a9);
85 *destination++ =
86 cpu_to_le64p((const __u64 *)&regs_1_2.a10);
87 *destination++ =
88 cpu_to_le64p((const __u64 *)&regs_1_2.a11);
89 *destination++ =
90 cpu_to_le64p((const __u64 *)&regs_1_2.a12);
91 *destination++ =
92 cpu_to_le64p((const __u64 *)&regs_1_2.a13);
93 *destination++ =
94 cpu_to_le64p((const __u64 *)&regs_1_2.a14);
95 *destination++ =
96 cpu_to_le64p((const __u64 *)&regs_1_2.a15);
97 *destination++ =
98 cpu_to_le64p((const __u64 *)&regs_1_2.a16);
99 *destination++ =
100 cpu_to_le64p((const __u64 *)&regs_1_2.a17);
101 }
102 }
103 }
104 }
105

--
0-DAY CI Kernel Test Service