* [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here @ 2026-10-06 22:25 kernel test robot 2026-10-07 6:58 ` Aneesh Kumar K.V 0 siblings, 1 reply; 14+ messages in thread From: kernel test robot @ 2026-10-06 22:25 UTC (permalink / raw) To: Aneesh Kumar K.V (Arm) Cc: oe-kbuild-all, Catalin Marinas, Jonathan Cameron, Jason Gunthorpe, Sudeep Holla tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: eea3fef32a9cf36abcb5975a5a594e4135a6b026 commit: d8263a131bb05398faa72ac32be54a03e48fa197 [8264/14724] firmware: hwrng: arm_smccc_trng: Register as an SMCCC device config: arm-randconfig-1001-20261007 (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-lkp@intel.com/config) compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-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/202610070641.B8hxBJcf-lkp@intel.com/ All errors (new ones prefixed by >>): drivers/firmware/smccc/smccc.c: In function 'smccc_devices_init': >> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here } ^ >> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here vim +141 drivers/firmware/smccc/smccc.c d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 122) b83c2d92be719bf Andre Przywara 2021-07-31 123 static int __init smccc_devices_init(void) b83c2d92be719bf Andre Przywara 2021-07-31 124 { d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 125) struct arm_smccc_device *sdev; d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 126) const struct smccc_device_info *smccc_dev; d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 127) d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 128) for (int i = 0; i < ARRAY_SIZE(smccc_devices); i++) { d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 129) smccc_dev = &smccc_devices[i]; d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 130) d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 131) if (!smccc_probe_smccc_device(smccc_dev)) d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 132) continue; d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 133) d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 134) sdev = arm_smccc_device_register(smccc_dev->device_name, smccc_dev->func_id); d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 135) if (IS_ERR(sdev)) d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 136) pr_err("%s: could not register device: %pe\n", d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 137) smccc_dev->device_name, sdev); b83c2d92be719bf Andre Przywara 2021-07-31 138 } b83c2d92be719bf Andre Przywara 2021-07-31 139 b83c2d92be719bf Andre Przywara 2021-07-31 140 return 0; b83c2d92be719bf Andre Przywara 2021-07-31 @141 } :::::: The code at line 141 was first introduced by commit :::::: b83c2d92be719bf7b1d24ac02aaa53db3991ea58 firmware: smccc: Register smccc_trng platform device :::::: TO: Andre Przywara <andre.przywara@arm.com> :::::: CC: Herbert Xu <herbert@gondor.apana.org.au> -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here 2026-10-06 22:25 [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here kernel test robot @ 2026-10-07 6:58 ` Aneesh Kumar K.V 2026-10-07 8:44 ` Sudeep Holla 2026-10-07 8:48 ` Aneesh Kumar K.V 0 siblings, 2 replies; 14+ messages in thread From: Aneesh Kumar K.V @ 2026-10-07 6:58 UTC (permalink / raw) To: kernel test robot Cc: oe-kbuild-all, Catalin Marinas, Jonathan Cameron, Jason Gunthorpe, Sudeep Holla kernel test robot <lkp@intel.com> writes: > tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master > head: eea3fef32a9cf36abcb5975a5a594e4135a6b026 > commit: d8263a131bb05398faa72ac32be54a03e48fa197 [8264/14724] firmware: hwrng: arm_smccc_trng: Register as an SMCCC device > config: arm-randconfig-1001-20261007 (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-lkp@intel.com/config) > compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0 > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-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/202610070641.B8hxBJcf-lkp@intel.com/ > > All errors (new ones prefixed by >>): > > drivers/firmware/smccc/smccc.c: In function 'smccc_devices_init': >>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here > } > ^ >>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here > > > vim +141 drivers/firmware/smccc/smccc.c > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 122) > b83c2d92be719bf Andre Przywara 2021-07-31 123 static int __init smccc_devices_init(void) > b83c2d92be719bf Andre Przywara 2021-07-31 124 { > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 125) struct arm_smccc_device *sdev; > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 126) const struct smccc_device_info *smccc_dev; > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 127) > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 128) for (int i = 0; i < ARRAY_SIZE(smccc_devices); i++) { > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 129) smccc_dev = &smccc_devices[i]; > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 130) > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 131) if (!smccc_probe_smccc_device(smccc_dev)) > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 132) continue; > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 133) > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 134) sdev = arm_smccc_device_register(smccc_dev->device_name, smccc_dev->func_id); > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 135) if (IS_ERR(sdev)) > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 136) pr_err("%s: could not register device: %pe\n", > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 137) smccc_dev->device_name, sdev); > b83c2d92be719bf Andre Przywara 2021-07-31 138 } > b83c2d92be719bf Andre Przywara 2021-07-31 139 > b83c2d92be719bf Andre Przywara 2021-07-31 140 return 0; > b83c2d92be719bf Andre Przywara 2021-07-31 @141 } > This is with: CONFIG_ARM_THUMB=y CONFIG_ARM_THUMBEE=y where there are restrictions on the use of r7. IMHO, this needs to be addressed in the implementation of arm_smccc_1_1_invoke(), rather than worked around in this patch? -aneesh ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here 2026-10-07 6:58 ` Aneesh Kumar K.V @ 2026-10-07 8:44 ` Sudeep Holla 2026-10-07 9:10 ` Catalin Marinas 2026-10-07 9:39 ` Aneesh Kumar K.V 2026-10-07 8:48 ` Aneesh Kumar K.V 1 sibling, 2 replies; 14+ messages in thread From: Sudeep Holla @ 2026-10-07 8:44 UTC (permalink / raw) To: Aneesh Kumar K.V Cc: kernel test robot, oe-kbuild-all, Sudeep Holla, Marc Zyngier, Mark Rutland, Catalin Marinas, Jonathan Cameron, Jason Gunthorpe (+ Marc, Mark) On Wed, Oct 07, 2026 at 12:28:54PM +0530, Aneesh Kumar K.V wrote: > kernel test robot <lkp@intel.com> writes: > > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master > > head: eea3fef32a9cf36abcb5975a5a594e4135a6b026 > > commit: d8263a131bb05398faa72ac32be54a03e48fa197 [8264/14724] firmware: hwrng: arm_smccc_trng: Register as an SMCCC device > > config: arm-randconfig-1001-20261007 (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-lkp@intel.com/config) > > compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0 > > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-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/202610070641.B8hxBJcf-lkp@intel.com/ > > > > All errors (new ones prefixed by >>): > > > > drivers/firmware/smccc/smccc.c: In function 'smccc_devices_init': > >>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here > > } > > ^ > >>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here > > > > > > vim +141 drivers/firmware/smccc/smccc.c > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 122) > > b83c2d92be719bf Andre Przywara 2021-07-31 123 static int __init smccc_devices_init(void) > > b83c2d92be719bf Andre Przywara 2021-07-31 124 { > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 125) struct arm_smccc_device *sdev; > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 126) const struct smccc_device_info *smccc_dev; > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 127) > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 128) for (int i = 0; i < ARRAY_SIZE(smccc_devices); i++) { > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 129) smccc_dev = &smccc_devices[i]; > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 130) > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 131) if (!smccc_probe_smccc_device(smccc_dev)) > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 132) continue; > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 133) > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 134) sdev = arm_smccc_device_register(smccc_dev->device_name, smccc_dev->func_id); > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 135) if (IS_ERR(sdev)) > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 136) pr_err("%s: could not register device: %pe\n", > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 137) smccc_dev->device_name, sdev); > > b83c2d92be719bf Andre Przywara 2021-07-31 138 } > > b83c2d92be719bf Andre Przywara 2021-07-31 139 > > b83c2d92be719bf Andre Przywara 2021-07-31 140 return 0; > > b83c2d92be719bf Andre Przywara 2021-07-31 @141 } > > > > > This is with: > > CONFIG_ARM_THUMB=y > CONFIG_ARM_THUMBEE=y > > where there are restrictions on the use of r7. IMHO, this needs to be > addressed in the implementation of arm_smccc_1_1_invoke(), rather than > worked around in this patch? > We can even drop the extra arguments set 0 as it was original used in TRNG or just use 4 arguments. That shouldn't impact <FEAT>_VERSION ABIs. I think there is a precedent here with `SMCCC_ARCH_WORKAROUND_*` calls. `__arm_smccc_1_1()` is deliberately variadic: it sets up only the input registers supplied by the caller. Not sure if it is trivial to meddle with the macro to handle this as workaround. Regards, Sudeep -->8 diff --git i/drivers/firmware/smccc/smccc.c w/drivers/firmware/smccc/smccc.c index afc2e4d602ba..dfbd04c8eeac 100644 --- i/drivers/firmware/smccc/smccc.c +++ w/drivers/firmware/smccc/smccc.c @@ -116,8 +116,7 @@ static bool __init smccc_probe_smccc_device(const struct smccc_device_info *smcc if (IS_ENABLED(CONFIG_ARM) && ARM_SMCCC_IS_64(smccc_dev->func_id)) return false; - arm_smccc_1_1_invoke(smccc_dev->func_id, - 0, 0, 0, 0, 0, 0, 0, &res); + arm_smccc_1_1_invoke(smccc_dev->func_id, &res); ret = res.a0; if (ret == SMCCC_RET_NOT_SUPPORTED) ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here 2026-10-07 8:44 ` Sudeep Holla @ 2026-10-07 9:10 ` Catalin Marinas 2026-10-07 9:18 ` Sudeep Holla 2026-10-07 9:46 ` Aneesh Kumar K.V 2026-10-07 9:39 ` Aneesh Kumar K.V 1 sibling, 2 replies; 14+ messages in thread From: Catalin Marinas @ 2026-10-07 9:10 UTC (permalink / raw) To: Sudeep Holla Cc: Aneesh Kumar K.V, kernel test robot, oe-kbuild-all, Marc Zyngier, Mark Rutland, Jonathan Cameron, Jason Gunthorpe On Wed, Oct 07, 2026 at 09:44:29AM +0100, Sudeep Holla wrote: > On Wed, Oct 07, 2026 at 12:28:54PM +0530, Aneesh Kumar K.V wrote: > > kernel test robot <lkp@intel.com> writes: > > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master > > > head: eea3fef32a9cf36abcb5975a5a594e4135a6b026 > > > commit: d8263a131bb05398faa72ac32be54a03e48fa197 [8264/14724] firmware: hwrng: arm_smccc_trng: Register as an SMCCC device > > > config: arm-randconfig-1001-20261007 (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-lkp@intel.com/config) > > > compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0 > > > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-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/202610070641.B8hxBJcf-lkp@intel.com/ > > > > > > All errors (new ones prefixed by >>): > > > > > > drivers/firmware/smccc/smccc.c: In function 'smccc_devices_init': > > >>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here > > > } > > > ^ > > >>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here > > > > > > > > > vim +141 drivers/firmware/smccc/smccc.c > > > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 122) > > > b83c2d92be719bf Andre Przywara 2021-07-31 123 static int __init smccc_devices_init(void) > > > b83c2d92be719bf Andre Przywara 2021-07-31 124 { > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 125) struct arm_smccc_device *sdev; > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 126) const struct smccc_device_info *smccc_dev; > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 127) > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 128) for (int i = 0; i < ARRAY_SIZE(smccc_devices); i++) { > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 129) smccc_dev = &smccc_devices[i]; > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 130) > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 131) if (!smccc_probe_smccc_device(smccc_dev)) > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 132) continue; > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 133) > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 134) sdev = arm_smccc_device_register(smccc_dev->device_name, smccc_dev->func_id); > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 135) if (IS_ERR(sdev)) > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 136) pr_err("%s: could not register device: %pe\n", > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 137) smccc_dev->device_name, sdev); > > > b83c2d92be719bf Andre Przywara 2021-07-31 138 } > > > b83c2d92be719bf Andre Przywara 2021-07-31 139 > > > b83c2d92be719bf Andre Przywara 2021-07-31 140 return 0; > > > b83c2d92be719bf Andre Przywara 2021-07-31 @141 } > > > > This is with: > > > > CONFIG_ARM_THUMB=y > > CONFIG_ARM_THUMBEE=y > > > > where there are restrictions on the use of r7. IMHO, this needs to be > > addressed in the implementation of arm_smccc_1_1_invoke(), rather than > > We can even drop the extra arguments set 0 as it was original used in > TRNG or just use 4 arguments. That shouldn't impact <FEAT>_VERSION ABIs. > > I think there is a precedent here with `SMCCC_ARCH_WORKAROUND_*` calls. > `__arm_smccc_1_1()` is deliberately variadic: it sets up only the input > registers supplied by the caller. Not sure if it is trivial to meddle with > the macro to handle this as workaround. > > Regards, > Sudeep > > -->8 > > diff --git i/drivers/firmware/smccc/smccc.c w/drivers/firmware/smccc/smccc.c > index afc2e4d602ba..dfbd04c8eeac 100644 > --- i/drivers/firmware/smccc/smccc.c > +++ w/drivers/firmware/smccc/smccc.c > @@ -116,8 +116,7 @@ static bool __init smccc_probe_smccc_device(const struct smccc_device_info *smcc > if (IS_ENABLED(CONFIG_ARM) && ARM_SMCCC_IS_64(smccc_dev->func_id)) > return false; > > - arm_smccc_1_1_invoke(smccc_dev->func_id, > - 0, 0, 0, 0, 0, 0, 0, &res); > + arm_smccc_1_1_invoke(smccc_dev->func_id, &res); I think that's going in the right direction and works for TRNG. However, the RSI_ABI_VERSION func_id requires another argument (I think requested interface revision). We could pass (func_id, 0, &res) but I wonder whether this probe function is generic enough to always assume all arguments are 0. -- Catalin ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here 2026-10-07 9:10 ` Catalin Marinas @ 2026-10-07 9:18 ` Sudeep Holla 2026-10-07 10:19 ` Catalin Marinas 2026-10-07 9:46 ` Aneesh Kumar K.V 1 sibling, 1 reply; 14+ messages in thread From: Sudeep Holla @ 2026-10-07 9:18 UTC (permalink / raw) To: Catalin Marinas Cc: Aneesh Kumar K.V, kernel test robot, oe-kbuild-all, Sudeep Holla, Marc Zyngier, Mark Rutland, Jonathan Cameron, Jason Gunthorpe On Wed, Oct 07, 2026 at 10:10:42AM +0100, Catalin Marinas wrote: > On Wed, Oct 07, 2026 at 09:44:29AM +0100, Sudeep Holla wrote: > > On Wed, Oct 07, 2026 at 12:28:54PM +0530, Aneesh Kumar K.V wrote: > > > kernel test robot <lkp@intel.com> writes: > > > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master > > > > head: eea3fef32a9cf36abcb5975a5a594e4135a6b026 > > > > commit: d8263a131bb05398faa72ac32be54a03e48fa197 [8264/14724] firmware: hwrng: arm_smccc_trng: Register as an SMCCC device > > > > config: arm-randconfig-1001-20261007 (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-lkp@intel.com/config) > > > > compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0 > > > > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-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/202610070641.B8hxBJcf-lkp@intel.com/ > > > > > > > > All errors (new ones prefixed by >>): > > > > > > > > drivers/firmware/smccc/smccc.c: In function 'smccc_devices_init': > > > >>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here > > > > } > > > > ^ > > > >>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here > > > > > > > > > > > > vim +141 drivers/firmware/smccc/smccc.c > > > > > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 122) > > > > b83c2d92be719bf Andre Przywara 2021-07-31 123 static int __init smccc_devices_init(void) > > > > b83c2d92be719bf Andre Przywara 2021-07-31 124 { > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 125) struct arm_smccc_device *sdev; > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 126) const struct smccc_device_info *smccc_dev; > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 127) > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 128) for (int i = 0; i < ARRAY_SIZE(smccc_devices); i++) { > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 129) smccc_dev = &smccc_devices[i]; > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 130) > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 131) if (!smccc_probe_smccc_device(smccc_dev)) > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 132) continue; > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 133) > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 134) sdev = arm_smccc_device_register(smccc_dev->device_name, smccc_dev->func_id); > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 135) if (IS_ERR(sdev)) > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 136) pr_err("%s: could not register device: %pe\n", > > > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 137) smccc_dev->device_name, sdev); > > > > b83c2d92be719bf Andre Przywara 2021-07-31 138 } > > > > b83c2d92be719bf Andre Przywara 2021-07-31 139 > > > > b83c2d92be719bf Andre Przywara 2021-07-31 140 return 0; > > > > b83c2d92be719bf Andre Przywara 2021-07-31 @141 } > > > > > > This is with: > > > > > > CONFIG_ARM_THUMB=y > > > CONFIG_ARM_THUMBEE=y > > > > > > where there are restrictions on the use of r7. IMHO, this needs to be > > > addressed in the implementation of arm_smccc_1_1_invoke(), rather than > > > > We can even drop the extra arguments set 0 as it was original used in > > TRNG or just use 4 arguments. That shouldn't impact <FEAT>_VERSION ABIs. > > > > I think there is a precedent here with `SMCCC_ARCH_WORKAROUND_*` calls. > > `__arm_smccc_1_1()` is deliberately variadic: it sets up only the input > > registers supplied by the caller. Not sure if it is trivial to meddle with > > the macro to handle this as workaround. > > > > Regards, > > Sudeep > > > > -->8 > > > > diff --git i/drivers/firmware/smccc/smccc.c w/drivers/firmware/smccc/smccc.c > > index afc2e4d602ba..dfbd04c8eeac 100644 > > --- i/drivers/firmware/smccc/smccc.c > > +++ w/drivers/firmware/smccc/smccc.c > > @@ -116,8 +116,7 @@ static bool __init smccc_probe_smccc_device(const struct smccc_device_info *smcc > > if (IS_ENABLED(CONFIG_ARM) && ARM_SMCCC_IS_64(smccc_dev->func_id)) > > return false; > > > > - arm_smccc_1_1_invoke(smccc_dev->func_id, > > - 0, 0, 0, 0, 0, 0, 0, &res); > > + arm_smccc_1_1_invoke(smccc_dev->func_id, &res); > > I think that's going in the right direction and works for TRNG. However, > the RSI_ABI_VERSION func_id requires another argument (I think requested > interface revision). We could pass (func_id, 0, &res) but I wonder > whether this probe function is generic enough to always assume all > arguments are 0. > Agreed, one other thought I had initially was to see if we can simply use SMCCC_ARCH_FEATURES(FID) but the spec states "Function ID of an Arm Architecture Service Function" which could soon become restrictive but IIUC it is not as per the uses today in this driver. We could move to that as it is purely SMCCC spec and doesn't rely on other SMCCC based specs. I don't recall if we discussed this angle much or if I didn't even propose it 😢. -- Regards, Sudeep ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here 2026-10-07 9:18 ` Sudeep Holla @ 2026-10-07 10:19 ` Catalin Marinas 2026-10-07 10:25 ` Sudeep Holla 0 siblings, 1 reply; 14+ messages in thread From: Catalin Marinas @ 2026-10-07 10:19 UTC (permalink / raw) To: Sudeep Holla Cc: Aneesh Kumar K.V, kernel test robot, oe-kbuild-all, Marc Zyngier, Mark Rutland, Jonathan Cameron, Jason Gunthorpe On Wed, Oct 07, 2026 at 10:18:16AM +0100, Sudeep Holla wrote: > On Wed, Oct 07, 2026 at 10:10:42AM +0100, Catalin Marinas wrote: > > On Wed, Oct 07, 2026 at 09:44:29AM +0100, Sudeep Holla wrote: > > > diff --git i/drivers/firmware/smccc/smccc.c w/drivers/firmware/smccc/smccc.c > > > index afc2e4d602ba..dfbd04c8eeac 100644 > > > --- i/drivers/firmware/smccc/smccc.c > > > +++ w/drivers/firmware/smccc/smccc.c > > > @@ -116,8 +116,7 @@ static bool __init smccc_probe_smccc_device(const struct smccc_device_info *smcc > > > if (IS_ENABLED(CONFIG_ARM) && ARM_SMCCC_IS_64(smccc_dev->func_id)) > > > return false; > > > > > > - arm_smccc_1_1_invoke(smccc_dev->func_id, > > > - 0, 0, 0, 0, 0, 0, 0, &res); > > > + arm_smccc_1_1_invoke(smccc_dev->func_id, &res); > > > > I think that's going in the right direction and works for TRNG. However, > > the RSI_ABI_VERSION func_id requires another argument (I think requested > > interface revision). We could pass (func_id, 0, &res) but I wonder > > whether this probe function is generic enough to always assume all > > arguments are 0. > > Agreed, one other thought I had initially was to see if we can simply use > SMCCC_ARCH_FEATURES(FID) but the spec states > "Function ID of an Arm Architecture Service Function" > which could soon become restrictive but IIUC it is not as per the uses > today in this driver. We could move to that as it is purely SMCCC spec > and doesn't rely on other SMCCC based specs. The spec I have around (DEN0028 1.6 G) limits arch_func_id to: - Arm Architecture Service range: 0x80000000-0x8000FFFF and 0xC0000000-0xC000FFFF - Standard Hypervisor Service range: 0x85000000-0x8500FFFF and 0xC5000000-0xC500FFFF Any arch_func_id values outside of these ranges are invalid. Both TRNG_VERSION (0x84000050) and RSI_ABI_VERSION (0xC4000190) are Standard Secure Service calls, so outside those ranges. So, if I got this correctly, it wouldn't work in this case (or I need a newer spec). -- Catalin ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here 2026-10-07 10:19 ` Catalin Marinas @ 2026-10-07 10:25 ` Sudeep Holla 0 siblings, 0 replies; 14+ messages in thread From: Sudeep Holla @ 2026-10-07 10:25 UTC (permalink / raw) To: Catalin Marinas Cc: Aneesh Kumar K.V, kernel test robot, oe-kbuild-all, Sudeep Holla, Marc Zyngier, Mark Rutland, Jonathan Cameron, Jason Gunthorpe On Wed, Oct 07, 2026 at 11:19:26AM +0100, Catalin Marinas wrote: > On Wed, Oct 07, 2026 at 10:18:16AM +0100, Sudeep Holla wrote: > > On Wed, Oct 07, 2026 at 10:10:42AM +0100, Catalin Marinas wrote: > > > On Wed, Oct 07, 2026 at 09:44:29AM +0100, Sudeep Holla wrote: > > > > diff --git i/drivers/firmware/smccc/smccc.c w/drivers/firmware/smccc/smccc.c > > > > index afc2e4d602ba..dfbd04c8eeac 100644 > > > > --- i/drivers/firmware/smccc/smccc.c > > > > +++ w/drivers/firmware/smccc/smccc.c > > > > @@ -116,8 +116,7 @@ static bool __init smccc_probe_smccc_device(const struct smccc_device_info *smcc > > > > if (IS_ENABLED(CONFIG_ARM) && ARM_SMCCC_IS_64(smccc_dev->func_id)) > > > > return false; > > > > > > > > - arm_smccc_1_1_invoke(smccc_dev->func_id, > > > > - 0, 0, 0, 0, 0, 0, 0, &res); > > > > + arm_smccc_1_1_invoke(smccc_dev->func_id, &res); > > > > > > I think that's going in the right direction and works for TRNG. However, > > > the RSI_ABI_VERSION func_id requires another argument (I think requested > > > interface revision). We could pass (func_id, 0, &res) but I wonder > > > whether this probe function is generic enough to always assume all > > > arguments are 0. > > > > Agreed, one other thought I had initially was to see if we can simply use > > SMCCC_ARCH_FEATURES(FID) but the spec states > > "Function ID of an Arm Architecture Service Function" > > which could soon become restrictive but IIUC it is not as per the uses > > today in this driver. We could move to that as it is purely SMCCC spec > > and doesn't rely on other SMCCC based specs. > > The spec I have around (DEN0028 1.6 G) limits arch_func_id to: > > - Arm Architecture Service range: > 0x80000000-0x8000FFFF and 0xC0000000-0xC000FFFF > > - Standard Hypervisor Service range: > 0x85000000-0x8500FFFF and 0xC5000000-0xC500FFFF > > Any arch_func_id values outside of these ranges are invalid. Both > TRNG_VERSION (0x84000050) and RSI_ABI_VERSION (0xC4000190) are Standard > Secure Service calls, so outside those ranges. So, if I got this > correctly, it wouldn't work in this case (or I need a newer spec). > No, you are right. My bad, I assumed "Standard Secure Service" is part of "Arm Architecture Service". I should have looked at the table. So yes, that can't be used. That could be the reason I didn't make that suggestion and completely forgot about the ranges. Sorry for the noise. -- Regards, Sudeep ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here 2026-10-07 9:10 ` Catalin Marinas 2026-10-07 9:18 ` Sudeep Holla @ 2026-10-07 9:46 ` Aneesh Kumar K.V 1 sibling, 0 replies; 14+ messages in thread From: Aneesh Kumar K.V @ 2026-10-07 9:46 UTC (permalink / raw) To: Catalin Marinas, Sudeep Holla Cc: kernel test robot, oe-kbuild-all, Marc Zyngier, Mark Rutland, Jonathan Cameron, Jason Gunthorpe Catalin Marinas <catalin.marinas@arm.com> writes: > On Wed, Oct 07, 2026 at 09:44:29AM +0100, Sudeep Holla wrote: >> On Wed, Oct 07, 2026 at 12:28:54PM +0530, Aneesh Kumar K.V wrote: >> > kernel test robot <lkp@intel.com> writes: >> > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master >> > > head: eea3fef32a9cf36abcb5975a5a594e4135a6b026 >> > > commit: d8263a131bb05398faa72ac32be54a03e48fa197 [8264/14724] firmware: hwrng: arm_smccc_trng: Register as an SMCCC device >> > > config: arm-randconfig-1001-20261007 (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-lkp@intel.com/config) >> > > compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0 >> > > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-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/202610070641.B8hxBJcf-lkp@intel.com/ >> > > >> > > All errors (new ones prefixed by >>): >> > > >> > > drivers/firmware/smccc/smccc.c: In function 'smccc_devices_init': >> > >>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here >> > > } >> > > ^ >> > >>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here >> > > >> > > >> > > vim +141 drivers/firmware/smccc/smccc.c >> > > >> > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 122) >> > > b83c2d92be719bf Andre Przywara 2021-07-31 123 static int __init smccc_devices_init(void) >> > > b83c2d92be719bf Andre Przywara 2021-07-31 124 { >> > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 125) struct arm_smccc_device *sdev; >> > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 126) const struct smccc_device_info *smccc_dev; >> > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 127) >> > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 128) for (int i = 0; i < ARRAY_SIZE(smccc_devices); i++) { >> > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 129) smccc_dev = &smccc_devices[i]; >> > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 130) >> > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 131) if (!smccc_probe_smccc_device(smccc_dev)) >> > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 132) continue; >> > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 133) >> > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 134) sdev = arm_smccc_device_register(smccc_dev->device_name, smccc_dev->func_id); >> > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 135) if (IS_ERR(sdev)) >> > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 136) pr_err("%s: could not register device: %pe\n", >> > > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 137) smccc_dev->device_name, sdev); >> > > b83c2d92be719bf Andre Przywara 2021-07-31 138 } >> > > b83c2d92be719bf Andre Przywara 2021-07-31 139 >> > > b83c2d92be719bf Andre Przywara 2021-07-31 140 return 0; >> > > b83c2d92be719bf Andre Przywara 2021-07-31 @141 } >> > >> > This is with: >> > >> > CONFIG_ARM_THUMB=y >> > CONFIG_ARM_THUMBEE=y >> > >> > where there are restrictions on the use of r7. IMHO, this needs to be >> > addressed in the implementation of arm_smccc_1_1_invoke(), rather than >> >> We can even drop the extra arguments set 0 as it was original used in >> TRNG or just use 4 arguments. That shouldn't impact <FEAT>_VERSION ABIs. >> >> I think there is a precedent here with `SMCCC_ARCH_WORKAROUND_*` calls. >> `__arm_smccc_1_1()` is deliberately variadic: it sets up only the input >> registers supplied by the caller. Not sure if it is trivial to meddle with >> the macro to handle this as workaround. >> >> Regards, >> Sudeep >> >> -->8 >> >> diff --git i/drivers/firmware/smccc/smccc.c w/drivers/firmware/smccc/smccc.c >> index afc2e4d602ba..dfbd04c8eeac 100644 >> --- i/drivers/firmware/smccc/smccc.c >> +++ w/drivers/firmware/smccc/smccc.c >> @@ -116,8 +116,7 @@ static bool __init smccc_probe_smccc_device(const struct smccc_device_info *smcc >> if (IS_ENABLED(CONFIG_ARM) && ARM_SMCCC_IS_64(smccc_dev->func_id)) >> return false; >> >> - arm_smccc_1_1_invoke(smccc_dev->func_id, >> - 0, 0, 0, 0, 0, 0, 0, &res); >> + arm_smccc_1_1_invoke(smccc_dev->func_id, &res); > > I think that's going in the right direction and works for TRNG. However, > the RSI_ABI_VERSION func_id requires another argument (I think requested > interface revision). We could pass (func_id, 0, &res) but I wonder > whether this probe function is generic enough to always assume all > arguments are 0. > We are only checking whether the result is SMCCC_RET_NOT_SUPPORTED. The assumption was that the argument register values therefore did not matter. If a function expects a value within a specific range, it may return an error for an invalid value, but not SMCCC_RET_NOT_SUPPORTED. We passed zeroes to avoid exposing stale register contents to components that are not supposed to read them. In particular, if an SMC is forwarded to a non-secure host, we do not want that host to see those register contents. However, this concern does not apply to the two version-query function IDs used here. We could therefore use: arm_smccc_1_1_invoke(smccc_dev->func_id, &res); and note that this table must not contain function IDs that are forwarded to another component. Alternatively, we can retain the seven-argument form and fix the macro as proposed here?: https://lore.kernel.org/all/yq5a8q49522f.fsf@kernel.org/ -aneesh ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here 2026-10-07 8:44 ` Sudeep Holla 2026-10-07 9:10 ` Catalin Marinas @ 2026-10-07 9:39 ` Aneesh Kumar K.V 2026-10-07 9:47 ` Sudeep Holla 1 sibling, 1 reply; 14+ messages in thread From: Aneesh Kumar K.V @ 2026-10-07 9:39 UTC (permalink / raw) To: Sudeep Holla Cc: kernel test robot, oe-kbuild-all, Sudeep Holla, Marc Zyngier, Mark Rutland, Catalin Marinas, Jonathan Cameron, Jason Gunthorpe Sudeep Holla <sudeep.holla@kernel.org> writes: > (+ Marc, Mark) > > On Wed, Oct 07, 2026 at 12:28:54PM +0530, Aneesh Kumar K.V wrote: >> kernel test robot <lkp@intel.com> writes: >> >> > tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master >> > head: eea3fef32a9cf36abcb5975a5a594e4135a6b026 >> > commit: d8263a131bb05398faa72ac32be54a03e48fa197 [8264/14724] firmware: hwrng: arm_smccc_trng: Register as an SMCCC device >> > config: arm-randconfig-1001-20261007 (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-lkp@intel.com/config) >> > compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0 >> > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-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/202610070641.B8hxBJcf-lkp@intel.com/ >> > >> > All errors (new ones prefixed by >>): >> > >> > drivers/firmware/smccc/smccc.c: In function 'smccc_devices_init': >> >>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here >> > } >> > ^ >> >>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here >> > >> > >> > vim +141 drivers/firmware/smccc/smccc.c >> > >> > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 122) >> > b83c2d92be719bf Andre Przywara 2021-07-31 123 static int __init smccc_devices_init(void) >> > b83c2d92be719bf Andre Przywara 2021-07-31 124 { >> > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 125) struct arm_smccc_device *sdev; >> > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 126) const struct smccc_device_info *smccc_dev; >> > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 127) >> > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 128) for (int i = 0; i < ARRAY_SIZE(smccc_devices); i++) { >> > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 129) smccc_dev = &smccc_devices[i]; >> > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 130) >> > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 131) if (!smccc_probe_smccc_device(smccc_dev)) >> > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 132) continue; >> > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 133) >> > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 134) sdev = arm_smccc_device_register(smccc_dev->device_name, smccc_dev->func_id); >> > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 135) if (IS_ERR(sdev)) >> > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 136) pr_err("%s: could not register device: %pe\n", >> > d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 137) smccc_dev->device_name, sdev); >> > b83c2d92be719bf Andre Przywara 2021-07-31 138 } >> > b83c2d92be719bf Andre Przywara 2021-07-31 139 >> > b83c2d92be719bf Andre Przywara 2021-07-31 140 return 0; >> > b83c2d92be719bf Andre Przywara 2021-07-31 @141 } >> > >> >> >> This is with: >> >> CONFIG_ARM_THUMB=y >> CONFIG_ARM_THUMBEE=y >> >> where there are restrictions on the use of r7. IMHO, this needs to be >> addressed in the implementation of arm_smccc_1_1_invoke(), rather than >> worked around in this patch? >> > > We can even drop the extra arguments set 0 as it was original used in > TRNG or just use 4 arguments. That shouldn't impact <FEAT>_VERSION ABIs. > > I think there is a precedent here with `SMCCC_ARCH_WORKAROUND_*` calls. > `__arm_smccc_1_1()` is deliberately variadic: it sets up only the input > registers supplied by the caller. Not sure if it is trivial to meddle with > the macro to handle this as workaround. > > Regards, > Sudeep > > -->8 > > diff --git i/drivers/firmware/smccc/smccc.c w/drivers/firmware/smccc/smccc.c > index afc2e4d602ba..dfbd04c8eeac 100644 > --- i/drivers/firmware/smccc/smccc.c > +++ w/drivers/firmware/smccc/smccc.c > @@ -116,8 +116,7 @@ static bool __init smccc_probe_smccc_device(const struct smccc_device_info *smcc > if (IS_ENABLED(CONFIG_ARM) && ARM_SMCCC_IS_64(smccc_dev->func_id)) > return false; > > - arm_smccc_1_1_invoke(smccc_dev->func_id, > - 0, 0, 0, 0, 0, 0, 0, &res); > + arm_smccc_1_1_invoke(smccc_dev->func_id, &res); > ret = res.a0; > However, we used the seven-argument form here because we do not know which input registers a particular SMCCC function may use. -aneesh ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here 2026-10-07 9:39 ` Aneesh Kumar K.V @ 2026-10-07 9:47 ` Sudeep Holla 0 siblings, 0 replies; 14+ messages in thread From: Sudeep Holla @ 2026-10-07 9:47 UTC (permalink / raw) To: Aneesh Kumar K.V Cc: kernel test robot, oe-kbuild-all, Marc Zyngier, Mark Rutland, Sudeep Holla, Catalin Marinas, Jonathan Cameron, Jason Gunthorpe On Wed, Oct 07, 2026 at 03:09:27PM +0530, Aneesh Kumar K.V wrote: > Sudeep Holla <sudeep.holla@kernel.org> writes: > [...] > > However, we used the seven-argument form here because we do not know > which input registers a particular SMCCC function may use. > Agreed, but as Catalin mentioned, it raises question on how generic can this call be by passing all other arguments as 0s. I did mention some alternative there. -- Regards, Sudeep ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here 2026-10-07 6:58 ` Aneesh Kumar K.V 2026-10-07 8:44 ` Sudeep Holla @ 2026-10-07 8:48 ` Aneesh Kumar K.V 2026-10-07 9:51 ` Aneesh Kumar K.V 2026-10-09 13:42 ` Jason Gunthorpe 1 sibling, 2 replies; 14+ messages in thread From: Aneesh Kumar K.V @ 2026-10-07 8:48 UTC (permalink / raw) To: kernel test robot Cc: oe-kbuild-all, Catalin Marinas, Jonathan Cameron, Jason Gunthorpe, Sudeep Holla Aneesh Kumar K.V <aneesh.kumar@kernel.org> writes: > kernel test robot <lkp@intel.com> writes: > >> tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master >> head: eea3fef32a9cf36abcb5975a5a594e4135a6b026 >> commit: d8263a131bb05398faa72ac32be54a03e48fa197 [8264/14724] firmware: hwrng: arm_smccc_trng: Register as an SMCCC device >> config: arm-randconfig-1001-20261007 (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-lkp@intel.com/config) >> compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0 >> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-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/202610070641.B8hxBJcf-lkp@intel.com/ >> >> All errors (new ones prefixed by >>): >> >> drivers/firmware/smccc/smccc.c: In function 'smccc_devices_init': >>>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here >> } >> ^ >>>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here >> >> >> vim +141 drivers/firmware/smccc/smccc.c >> >> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 122) >> b83c2d92be719bf Andre Przywara 2021-07-31 123 static int __init smccc_devices_init(void) >> b83c2d92be719bf Andre Przywara 2021-07-31 124 { >> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 125) struct arm_smccc_device *sdev; >> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 126) const struct smccc_device_info *smccc_dev; >> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 127) >> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 128) for (int i = 0; i < ARRAY_SIZE(smccc_devices); i++) { >> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 129) smccc_dev = &smccc_devices[i]; >> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 130) >> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 131) if (!smccc_probe_smccc_device(smccc_dev)) >> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 132) continue; >> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 133) >> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 134) sdev = arm_smccc_device_register(smccc_dev->device_name, smccc_dev->func_id); >> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 135) if (IS_ERR(sdev)) >> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 136) pr_err("%s: could not register device: %pe\n", >> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 137) smccc_dev->device_name, sdev); >> b83c2d92be719bf Andre Przywara 2021-07-31 138 } >> b83c2d92be719bf Andre Przywara 2021-07-31 139 >> b83c2d92be719bf Andre Przywara 2021-07-31 140 return 0; >> b83c2d92be719bf Andre Przywara 2021-07-31 @141 } >> > > > This is with: > > CONFIG_ARM_THUMB=y > CONFIG_ARM_THUMBEE=y > > where there are restrictions on the use of r7. IMHO, this needs to be > addressed in the implementation of arm_smccc_1_1_invoke(), rather than > worked around in this patch? > Something like this? The -fno-omit-frame-pointer compiler option is required to reproduce the build error. firmware: smccc: Avoid inline r7 constraints for Thumb-2 calls The SMCCC device probe passes eight register arguments to arm_smccc_1_1_invoke(). With GCC 8.5 and CONFIG_THUMB2_KERNEL=y, the kernel test robot reports "r7 cannot be used in asm here" while compiling smccc_devices_init(). The eight-input inline helpers bind the final argument to r7, which GCC cannot allocate in this function. Use the existing out-of-line SMC and HVC helpers for eight-input calls on ARM32 Thumb-2. The helpers load the stack arguments into r4-r7 before entering firmware and save and restore the caller's registers. Preserve all input arguments and provide a temporary result buffer when the caller supplies NULL. Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202610070641.B8hxBJcf-lkp@intel.com/ Assisted-by: LLM Signed-off-by: Aneesh Kumar K.V (Arm) <aneesh.kumar@kernel.org> 1 file changed, 70 insertions(+), 3 deletions(-) include/linux/arm-smccc.h | 73 +++++++++++++++++++++++++++++++++++++++++++++-- modified include/linux/arm-smccc.h @@ -640,6 +640,39 @@ asmlinkage void __arm_smccc_hvc(unsigned long a0, unsigned long a1, *___res = (typeof(*___res)){r0, r1, r2, r3}; \ } while (0) +#if defined(CONFIG_ARM) && defined(CONFIG_THUMB2_KERNEL) +/* + * GCC may reserve r7 in Thumb-2 functions. Calls with eight inputs must + * therefore use the assembly helpers, which save and restore r7 themselves. + */ +#define __arm_smccc_1_1_out_of_line(fn, inst, a0, a1, a2, a3, a4, a5, a6, a7, res) \ + do {\ + struct arm_smccc_res __res;\ + struct arm_smccc_res *__res_ptr = (res);\ +\ + fn((u32)(a0), a1, a2, a3, a4, a5, a6, a7,\ + __res_ptr ? __res_ptr : &__res);\ + } while (0) + +#define __arm_smccc_1_1_inline(fn, inst, ...) \ + __arm_smccc_1_1(inst, __VA_ARGS__) + +#define __arm_smccc_1_1_call_2 __arm_smccc_1_1_inline +#define __arm_smccc_1_1_call_3 __arm_smccc_1_1_inline +#define __arm_smccc_1_1_call_4 __arm_smccc_1_1_inline +#define __arm_smccc_1_1_call_5 __arm_smccc_1_1_inline +#define __arm_smccc_1_1_call_6 __arm_smccc_1_1_inline +#define __arm_smccc_1_1_call_7 __arm_smccc_1_1_inline +#define __arm_smccc_1_1_call_8 __arm_smccc_1_1_inline +#define __arm_smccc_1_1_call_9 __arm_smccc_1_1_out_of_line + +#define __arm_smccc_1_1_call(fn, inst, ...) \ + CONCATENATE(__arm_smccc_1_1_call_, COUNT_ARGS(__VA_ARGS__))(fn, inst, __VA_ARGS__) +#else +#define __arm_smccc_1_1_call(fn, inst, ...) \ + __arm_smccc_1_1(inst, __VA_ARGS__) +#endif + /* * arm_smccc_1_1_smc() - make an SMCCC v1.1 compliant SMC call * @@ -654,7 +687,8 @@ asmlinkage void __arm_smccc_hvc(unsigned long a0, unsigned long a1, * to the SMC instruction. The return values are updated with the content * from register 0 to 3 on return from the SMC instruction if not NULL. */ -#define arm_smccc_1_1_smc(...) __arm_smccc_1_1(SMCCC_SMC_INST, __VA_ARGS__) +#define arm_smccc_1_1_smc(...) \ + __arm_smccc_1_1_call(arm_smccc_smc, SMCCC_SMC_INST, __VA_ARGS__) /* * arm_smccc_1_1_hvc() - make an SMCCC v1.1 compliant HVC call @@ -670,14 +704,15 @@ asmlinkage void __arm_smccc_hvc(unsigned long a0, unsigned long a1, * to the HVC instruction. The return values are updated with the content * from register 0 to 3 on return from the HVC instruction if not NULL. */ -#define arm_smccc_1_1_hvc(...) __arm_smccc_1_1(SMCCC_HVC_INST, __VA_ARGS__) +#define arm_smccc_1_1_hvc(...) \ + __arm_smccc_1_1_call(arm_smccc_hvc, SMCCC_HVC_INST, __VA_ARGS__) /* * Like arm_smccc_1_1* but always returns SMCCC_RET_NOT_SUPPORTED. * Used when the SMCCC conduit is not defined. The empty asm statement * avoids compiler warnings about unused variables. */ -#define __fail_smccc_1_1(...) \ +#define __fail_smccc_1_1_inline(...) \ do { \ CONCATENATE(__declare_arg_, \ COUNT_ARGS(__VA_ARGS__))(__VA_ARGS__); \ @@ -689,6 +724,38 @@ asmlinkage void __arm_smccc_hvc(unsigned long a0, unsigned long a1, ___res->a0 = SMCCC_RET_NOT_SUPPORTED; \ } while (0) +#if defined(CONFIG_ARM) && defined(CONFIG_THUMB2_KERNEL) +#define __fail_smccc_1_1_no_regs(_a0, _a1, _a2, _a3, _a4, _a5, _a6, _a7, res) \ + do {\ + struct arm_smccc_res *__res_ptr = (res);\ +\ + (void)(_a0);\ + (void)(_a1);\ + (void)(_a2);\ + (void)(_a3);\ + (void)(_a4);\ + (void)(_a5);\ + (void)(_a6);\ + (void)(_a7);\ + if (__res_ptr)\ + __res_ptr->a0 = SMCCC_RET_NOT_SUPPORTED;\ + } while (0) + +#define __fail_smccc_1_1_2 __fail_smccc_1_1_inline +#define __fail_smccc_1_1_3 __fail_smccc_1_1_inline +#define __fail_smccc_1_1_4 __fail_smccc_1_1_inline +#define __fail_smccc_1_1_5 __fail_smccc_1_1_inline +#define __fail_smccc_1_1_6 __fail_smccc_1_1_inline +#define __fail_smccc_1_1_7 __fail_smccc_1_1_inline +#define __fail_smccc_1_1_8 __fail_smccc_1_1_inline +#define __fail_smccc_1_1_9 __fail_smccc_1_1_no_regs + +#define __fail_smccc_1_1(...) \ + CONCATENATE(__fail_smccc_1_1_, COUNT_ARGS(__VA_ARGS__))(__VA_ARGS__) +#else +#define __fail_smccc_1_1(...) __fail_smccc_1_1_inline(__VA_ARGS__) +#endif + /* * arm_smccc_1_1_invoke() - make an SMCCC v1.1 compliant call * ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here 2026-10-07 8:48 ` Aneesh Kumar K.V @ 2026-10-07 9:51 ` Aneesh Kumar K.V 2026-10-09 13:42 ` Jason Gunthorpe 1 sibling, 0 replies; 14+ messages in thread From: Aneesh Kumar K.V @ 2026-10-07 9:51 UTC (permalink / raw) To: kernel test robot Cc: oe-kbuild-all, Catalin Marinas, Jonathan Cameron, Jason Gunthorpe, Sudeep Holla, Marc Zyngier, Mark Rutland Adding Marc Zyngier and Mark Rutland to the reply. Aneesh Kumar K.V <aneesh.kumar@kernel.org> writes: > Aneesh Kumar K.V <aneesh.kumar@kernel.org> writes: > >> kernel test robot <lkp@intel.com> writes: >> >>> tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master >>> head: eea3fef32a9cf36abcb5975a5a594e4135a6b026 >>> commit: d8263a131bb05398faa72ac32be54a03e48fa197 [8264/14724] firmware: hwrng: arm_smccc_trng: Register as an SMCCC device >>> config: arm-randconfig-1001-20261007 (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-lkp@intel.com/config) >>> compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0 >>> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261007/202610070641.B8hxBJcf-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/202610070641.B8hxBJcf-lkp@intel.com/ >>> >>> All errors (new ones prefixed by >>): >>> >>> drivers/firmware/smccc/smccc.c: In function 'smccc_devices_init': >>>>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here >>> } >>> ^ >>>>> drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here >>> >>> >>> vim +141 drivers/firmware/smccc/smccc.c >>> >>> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 122) >>> b83c2d92be719bf Andre Przywara 2021-07-31 123 static int __init smccc_devices_init(void) >>> b83c2d92be719bf Andre Przywara 2021-07-31 124 { >>> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 125) struct arm_smccc_device *sdev; >>> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 126) const struct smccc_device_info *smccc_dev; >>> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 127) >>> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 128) for (int i = 0; i < ARRAY_SIZE(smccc_devices); i++) { >>> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 129) smccc_dev = &smccc_devices[i]; >>> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 130) >>> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 131) if (!smccc_probe_smccc_device(smccc_dev)) >>> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 132) continue; >>> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 133) >>> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 134) sdev = arm_smccc_device_register(smccc_dev->device_name, smccc_dev->func_id); >>> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 135) if (IS_ERR(sdev)) >>> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 136) pr_err("%s: could not register device: %pe\n", >>> d8263a131bb0539 Aneesh Kumar K.V (Arm 2026-09-23 137) smccc_dev->device_name, sdev); >>> b83c2d92be719bf Andre Przywara 2021-07-31 138 } >>> b83c2d92be719bf Andre Przywara 2021-07-31 139 >>> b83c2d92be719bf Andre Przywara 2021-07-31 140 return 0; >>> b83c2d92be719bf Andre Przywara 2021-07-31 @141 } >>> >> >> >> This is with: >> >> CONFIG_ARM_THUMB=y >> CONFIG_ARM_THUMBEE=y >> >> where there are restrictions on the use of r7. IMHO, this needs to be >> addressed in the implementation of arm_smccc_1_1_invoke(), rather than >> worked around in this patch? >> > > Something like this? The -fno-omit-frame-pointer compiler option is > required to reproduce the build error. > > firmware: smccc: Avoid inline r7 constraints for Thumb-2 calls > > The SMCCC device probe passes eight register arguments to > arm_smccc_1_1_invoke(). With GCC 8.5 and CONFIG_THUMB2_KERNEL=y, the > kernel test robot reports "r7 cannot be used in asm here" while > compiling smccc_devices_init(). The eight-input inline helpers bind > the final argument to r7, which GCC cannot allocate in this function. > > Use the existing out-of-line SMC and HVC helpers for eight-input calls > on ARM32 Thumb-2. The helpers load the stack arguments into r4-r7 > before entering firmware and save and restore the caller's registers. > Preserve all input arguments and provide a temporary result buffer > when the caller supplies NULL. > > Reported-by: kernel test robot <lkp@intel.com> > Closes: https://lore.kernel.org/oe-kbuild-all/202610070641.B8hxBJcf-lkp@intel.com/ > Assisted-by: LLM > Signed-off-by: Aneesh Kumar K.V (Arm) <aneesh.kumar@kernel.org> > > 1 file changed, 70 insertions(+), 3 deletions(-) > include/linux/arm-smccc.h | 73 +++++++++++++++++++++++++++++++++++++++++++++-- > > modified include/linux/arm-smccc.h > @@ -640,6 +640,39 @@ asmlinkage void __arm_smccc_hvc(unsigned long a0, unsigned long a1, > *___res = (typeof(*___res)){r0, r1, r2, r3}; \ > } while (0) > > +#if defined(CONFIG_ARM) && defined(CONFIG_THUMB2_KERNEL) > +/* > + * GCC may reserve r7 in Thumb-2 functions. Calls with eight inputs must > + * therefore use the assembly helpers, which save and restore r7 themselves. > + */ > +#define __arm_smccc_1_1_out_of_line(fn, inst, a0, a1, a2, a3, a4, a5, a6, a7, res) \ > + do {\ > + struct arm_smccc_res __res;\ > + struct arm_smccc_res *__res_ptr = (res);\ > +\ > + fn((u32)(a0), a1, a2, a3, a4, a5, a6, a7,\ > + __res_ptr ? __res_ptr : &__res);\ > + } while (0) > + > +#define __arm_smccc_1_1_inline(fn, inst, ...) \ > + __arm_smccc_1_1(inst, __VA_ARGS__) > + > +#define __arm_smccc_1_1_call_2 __arm_smccc_1_1_inline > +#define __arm_smccc_1_1_call_3 __arm_smccc_1_1_inline > +#define __arm_smccc_1_1_call_4 __arm_smccc_1_1_inline > +#define __arm_smccc_1_1_call_5 __arm_smccc_1_1_inline > +#define __arm_smccc_1_1_call_6 __arm_smccc_1_1_inline > +#define __arm_smccc_1_1_call_7 __arm_smccc_1_1_inline > +#define __arm_smccc_1_1_call_8 __arm_smccc_1_1_inline > +#define __arm_smccc_1_1_call_9 __arm_smccc_1_1_out_of_line > + > +#define __arm_smccc_1_1_call(fn, inst, ...) \ > + CONCATENATE(__arm_smccc_1_1_call_, COUNT_ARGS(__VA_ARGS__))(fn, inst, __VA_ARGS__) > +#else > +#define __arm_smccc_1_1_call(fn, inst, ...) \ > + __arm_smccc_1_1(inst, __VA_ARGS__) > +#endif > + > /* > * arm_smccc_1_1_smc() - make an SMCCC v1.1 compliant SMC call > * > @@ -654,7 +687,8 @@ asmlinkage void __arm_smccc_hvc(unsigned long a0, unsigned long a1, > * to the SMC instruction. The return values are updated with the content > * from register 0 to 3 on return from the SMC instruction if not NULL. > */ > -#define arm_smccc_1_1_smc(...) __arm_smccc_1_1(SMCCC_SMC_INST, __VA_ARGS__) > +#define arm_smccc_1_1_smc(...) \ > + __arm_smccc_1_1_call(arm_smccc_smc, SMCCC_SMC_INST, __VA_ARGS__) > > /* > * arm_smccc_1_1_hvc() - make an SMCCC v1.1 compliant HVC call > @@ -670,14 +704,15 @@ asmlinkage void __arm_smccc_hvc(unsigned long a0, unsigned long a1, > * to the HVC instruction. The return values are updated with the content > * from register 0 to 3 on return from the HVC instruction if not NULL. > */ > -#define arm_smccc_1_1_hvc(...) __arm_smccc_1_1(SMCCC_HVC_INST, __VA_ARGS__) > +#define arm_smccc_1_1_hvc(...) \ > + __arm_smccc_1_1_call(arm_smccc_hvc, SMCCC_HVC_INST, __VA_ARGS__) > > /* > * Like arm_smccc_1_1* but always returns SMCCC_RET_NOT_SUPPORTED. > * Used when the SMCCC conduit is not defined. The empty asm statement > * avoids compiler warnings about unused variables. > */ > -#define __fail_smccc_1_1(...) \ > +#define __fail_smccc_1_1_inline(...) \ > do { \ > CONCATENATE(__declare_arg_, \ > COUNT_ARGS(__VA_ARGS__))(__VA_ARGS__); \ > @@ -689,6 +724,38 @@ asmlinkage void __arm_smccc_hvc(unsigned long a0, unsigned long a1, > ___res->a0 = SMCCC_RET_NOT_SUPPORTED; \ > } while (0) > > +#if defined(CONFIG_ARM) && defined(CONFIG_THUMB2_KERNEL) > +#define __fail_smccc_1_1_no_regs(_a0, _a1, _a2, _a3, _a4, _a5, _a6, _a7, res) \ > + do {\ > + struct arm_smccc_res *__res_ptr = (res);\ > +\ > + (void)(_a0);\ > + (void)(_a1);\ > + (void)(_a2);\ > + (void)(_a3);\ > + (void)(_a4);\ > + (void)(_a5);\ > + (void)(_a6);\ > + (void)(_a7);\ > + if (__res_ptr)\ > + __res_ptr->a0 = SMCCC_RET_NOT_SUPPORTED;\ > + } while (0) > + > +#define __fail_smccc_1_1_2 __fail_smccc_1_1_inline > +#define __fail_smccc_1_1_3 __fail_smccc_1_1_inline > +#define __fail_smccc_1_1_4 __fail_smccc_1_1_inline > +#define __fail_smccc_1_1_5 __fail_smccc_1_1_inline > +#define __fail_smccc_1_1_6 __fail_smccc_1_1_inline > +#define __fail_smccc_1_1_7 __fail_smccc_1_1_inline > +#define __fail_smccc_1_1_8 __fail_smccc_1_1_inline > +#define __fail_smccc_1_1_9 __fail_smccc_1_1_no_regs > + > +#define __fail_smccc_1_1(...) \ > + CONCATENATE(__fail_smccc_1_1_, COUNT_ARGS(__VA_ARGS__))(__VA_ARGS__) > +#else > +#define __fail_smccc_1_1(...) __fail_smccc_1_1_inline(__VA_ARGS__) > +#endif > + > /* > * arm_smccc_1_1_invoke() - make an SMCCC v1.1 compliant call > * ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here 2026-10-07 8:48 ` Aneesh Kumar K.V 2026-10-07 9:51 ` Aneesh Kumar K.V @ 2026-10-09 13:42 ` Jason Gunthorpe 2026-10-10 9:57 ` Aneesh Kumar K.V 1 sibling, 1 reply; 14+ messages in thread From: Jason Gunthorpe @ 2026-10-09 13:42 UTC (permalink / raw) To: Aneesh Kumar K.V Cc: kernel test robot, oe-kbuild-all, Catalin Marinas, Jonathan Cameron, Sudeep Holla On Wed, Oct 07, 2026 at 02:18:08PM +0530, Aneesh Kumar K.V wrote: > @@ -640,6 +640,39 @@ asmlinkage void __arm_smccc_hvc(unsigned long a0, unsigned long a1, > *___res = (typeof(*___res)){r0, r1, r2, r3}; \ > } while (0) > > +#if defined(CONFIG_ARM) && defined(CONFIG_THUMB2_KERNEL) > +/* > + * GCC may reserve r7 in Thumb-2 functions. Calls with eight inputs must > + * therefore use the assembly helpers, which save and restore r7 themselves. > + */ > +#define __arm_smccc_1_1_out_of_line(fn, inst, a0, a1, a2, a3, a4, a5, a6, a7, res) \ > + do {\ > + struct arm_smccc_res __res;\ > + struct arm_smccc_res *__res_ptr = (res);\ > +\ > + fn((u32)(a0), a1, a2, a3, a4, a5, a6, a7,\ > + __res_ptr ? __res_ptr : &__res);\ > + } while (0) > + > +#define __arm_smccc_1_1_inline(fn, inst, ...) \ > + __arm_smccc_1_1(inst, __VA_ARGS__) > + > +#define __arm_smccc_1_1_call_2 __arm_smccc_1_1_inline > +#define __arm_smccc_1_1_call_3 __arm_smccc_1_1_inline > +#define __arm_smccc_1_1_call_4 __arm_smccc_1_1_inline > +#define __arm_smccc_1_1_call_5 __arm_smccc_1_1_inline > +#define __arm_smccc_1_1_call_6 __arm_smccc_1_1_inline > +#define __arm_smccc_1_1_call_7 __arm_smccc_1_1_inline > +#define __arm_smccc_1_1_call_8 __arm_smccc_1_1_inline > +#define __arm_smccc_1_1_call_9 __arm_smccc_1_1_out_of_line > + > +#define __arm_smccc_1_1_call(fn, inst, ...) \ > + CONCATENATE(__arm_smccc_1_1_call_, COUNT_ARGS(__VA_ARGS__))(fn, inst, __VA_ARGS__) > +#else > +#define __arm_smccc_1_1_call(fn, inst, ...) \ > + __arm_smccc_1_1(inst, __VA_ARGS__) > +#endif I wonder if this could just be something simpler like #define __arm_smccc_1_1_call(fn, inst, ...) \ ({ \ if (COUNT_ARGS(__VA_ARGS__) >= 7 && \ IS_ENABLED(CONFIG_THUMB2_KERNEL)) \ __arm_smccc_1_1_call_(inst, __VA_ARGS__); \ else \ __arm_smccc_1_1(inst, __VA_ARGS__); \ }) ? (still needs to take care of the NULL res) Jason ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here 2026-10-09 13:42 ` Jason Gunthorpe @ 2026-10-10 9:57 ` Aneesh Kumar K.V 0 siblings, 0 replies; 14+ messages in thread From: Aneesh Kumar K.V @ 2026-10-10 9:57 UTC (permalink / raw) To: Jason Gunthorpe Cc: kernel test robot, oe-kbuild-all, Catalin Marinas, Jonathan Cameron, Sudeep Holla Jason Gunthorpe <jgg@nvidia.com> writes: > On Wed, Oct 07, 2026 at 02:18:08PM +0530, Aneesh Kumar K.V wrote: >> @@ -640,6 +640,39 @@ asmlinkage void __arm_smccc_hvc(unsigned long a0, unsigned long a1, >> *___res = (typeof(*___res)){r0, r1, r2, r3}; \ >> } while (0) >> >> +#if defined(CONFIG_ARM) && defined(CONFIG_THUMB2_KERNEL) >> +/* >> + * GCC may reserve r7 in Thumb-2 functions. Calls with eight inputs must >> + * therefore use the assembly helpers, which save and restore r7 themselves. >> + */ >> +#define __arm_smccc_1_1_out_of_line(fn, inst, a0, a1, a2, a3, a4, a5, a6, a7, res) \ >> + do {\ >> + struct arm_smccc_res __res;\ >> + struct arm_smccc_res *__res_ptr = (res);\ >> +\ >> + fn((u32)(a0), a1, a2, a3, a4, a5, a6, a7,\ >> + __res_ptr ? __res_ptr : &__res);\ >> + } while (0) >> + >> +#define __arm_smccc_1_1_inline(fn, inst, ...) \ >> + __arm_smccc_1_1(inst, __VA_ARGS__) >> + >> +#define __arm_smccc_1_1_call_2 __arm_smccc_1_1_inline >> +#define __arm_smccc_1_1_call_3 __arm_smccc_1_1_inline >> +#define __arm_smccc_1_1_call_4 __arm_smccc_1_1_inline >> +#define __arm_smccc_1_1_call_5 __arm_smccc_1_1_inline >> +#define __arm_smccc_1_1_call_6 __arm_smccc_1_1_inline >> +#define __arm_smccc_1_1_call_7 __arm_smccc_1_1_inline >> +#define __arm_smccc_1_1_call_8 __arm_smccc_1_1_inline >> +#define __arm_smccc_1_1_call_9 __arm_smccc_1_1_out_of_line >> + >> +#define __arm_smccc_1_1_call(fn, inst, ...) \ >> + CONCATENATE(__arm_smccc_1_1_call_, COUNT_ARGS(__VA_ARGS__))(fn, inst, __VA_ARGS__) >> +#else >> +#define __arm_smccc_1_1_call(fn, inst, ...) \ >> + __arm_smccc_1_1(inst, __VA_ARGS__) >> +#endif > > I wonder if this could just be something simpler like > > #define __arm_smccc_1_1_call(fn, inst, ...) \ > ({ \ > if (COUNT_ARGS(__VA_ARGS__) >= 7 && \ > IS_ENABLED(CONFIG_THUMB2_KERNEL)) \ > __arm_smccc_1_1_call_(inst, __VA_ARGS__); \ > else \ > __arm_smccc_1_1(inst, __VA_ARGS__); \ > }) > > ? (still needs to take care of the NULL res) > Sure with the change __arm_smccc_1_1_call_(fn, __VA_ARGS__); \ But, as Catalin suggested, we can keep this simpler for this merge and do the cleanup later. -aneesh ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2026-10-10 9:57 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-10-06 22:25 [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here kernel test robot 2026-10-07 6:58 ` Aneesh Kumar K.V 2026-10-07 8:44 ` Sudeep Holla 2026-10-07 9:10 ` Catalin Marinas 2026-10-07 9:18 ` Sudeep Holla 2026-10-07 10:19 ` Catalin Marinas 2026-10-07 10:25 ` Sudeep Holla 2026-10-07 9:46 ` Aneesh Kumar K.V 2026-10-07 9:39 ` Aneesh Kumar K.V 2026-10-07 9:47 ` Sudeep Holla 2026-10-07 8:48 ` Aneesh Kumar K.V 2026-10-07 9:51 ` Aneesh Kumar K.V 2026-10-09 13:42 ` Jason Gunthorpe 2026-10-10 9:57 ` Aneesh Kumar K.V
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.