All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aneesh Kumar K.V <aneesh.kumar@kernel.org>
To: Catalin Marinas <catalin.marinas@arm.com>,
	Sudeep Holla <sudeep.holla@kernel.org>
Cc: kernel test robot <lkp@intel.com>,
	oe-kbuild-all@lists.linux.dev, Marc Zyngier <maz@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>,
	Jason Gunthorpe <jgg@nvidia.com>
Subject: Re: [linux-next:master 8264/14724] drivers/firmware/smccc/smccc.c:141:1: error: r7 cannot be used in asm here
Date: Wed, 07 Oct 2026 15:16:50 +0530	[thread overview]
Message-ID: <yq5a33uh4zcl.fsf@kernel.org> (raw)
In-Reply-To: <asYMkrV8lu-LtUUR@arm.com>

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

  parent reply	other threads:[~2026-10-07  9:46 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=yq5a33uh4zcl.fsf@kernel.org \
    --to=aneesh.kumar@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=jgg@nvidia.com \
    --cc=jonathan.cameron@oss.qualcomm.com \
    --cc=lkp@intel.com \
    --cc=mark.rutland@arm.com \
    --cc=maz@kernel.org \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=sudeep.holla@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.