From: Gavin Shan <gshan@redhat.com>
To: Suzuki K Poulose <suzuki.poulose@arm.com>,
kvm@vger.kernel.org, kvmarm@lists.linux.dev
Cc: maz@kernel.org, will@kernel.org, catalin.marinas@arm.com,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, steven.price@arm.com,
aneesh.kumar@kernel.org, oupton@kernel.org, joey.gouly@arm.com,
tabba@google.com, yuzenghui@huawei.com,
linux-coco@lists.linux.dev, gankulkarni@os.amperecomputing.com,
sdonthineni@nvidia.com, alpergun@google.com,
fj0570is@fujitsu.com, WeiLin.Chang@arm.com,
lpieralisi@kernel.org, enju.kohei@fujitsu.com,
sudeep.holla@arm.com, jonathan.cameron@oss.qualcomm.com
Subject: Re: [PATCH v22 02/10] firmware: arm_rmm: Check for RMI support at init
Date: Wed, 14 Oct 2026 17:26:14 +1000 [thread overview]
Message-ID: <3fbd4739-a4eb-4428-95ae-ead22e7cf9f2@redhat.com> (raw)
In-Reply-To: <8be050e3-8af1-4f04-902f-9bc01b209dd0@arm.com>
On 10/13/26 7:58 PM, Suzuki K Poulose wrote:
> On 13/10/2026 04:53, Gavin Shan wrote:
>> Hi Suzuki,
>>
>> On 10/2/26 4:14 PM, Suzuki K Poulose wrote:
>>> From: Steven Price <steven.price@arm.com>
>>>
>>> Query the RMI version number and check if it is a compatible version.
>>> All RMM feature registers are read and exposed for future code to
>>> use. Also restrict the support to SMC conduit.
>>>
>>> We only support this for Little Endian kernels, the Big Endian kernel
>>> support is anyway marked BROKEN and is being removed.
>>>
>>> Cc: Marc Zyngier <maz@kernel.org>
>>> Cc: Oliver Upton <oupton@kernel.org>
>>> Reviewed-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
>>> Reviewed-by: Gavin Shan <gshan@redhat.com>
>>> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
>>> Tested-by: Gavin Shan <gshan@redhat.com>
>>> Signed-off-by: Steven Price <steven.price@arm.com>
>>> Co-developed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
>>> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
>>> ---
>>
>> [...]
>>
>>> ---
>>> MAINTAINERS | 2 +
>>> arch/arm64/Kconfig | 1 +
>>> arch/arm64/kernel/cpufeature.c | 1 +
>>> arch/arm64/kvm/sys_regs.c | 2 +
>>> drivers/firmware/Kconfig | 1 +
>>> drivers/firmware/Makefile | 1 +
>>> drivers/firmware/arm_rmm/Kconfig | 25 +++++++
>>> drivers/firmware/arm_rmm/Makefile | 1 +
>>> drivers/firmware/arm_rmm/rmi.c | 112 ++++++++++++++++++++++++++++++
>>> include/linux/arm-rmi-cmds.h | 48 +++++++++++++
>>> 10 files changed, 194 insertions(+)
>>> create mode 100644 drivers/firmware/arm_rmm/Kconfig
>>> create mode 100644 drivers/firmware/arm_rmm/Makefile
>>> create mode 100644 drivers/firmware/arm_rmm/rmi.c
>>> create mode 100644 include/linux/arm-rmi-cmds.h
>>>
>>
>> [...]
>>
>>> diff --git a/drivers/firmware/arm_rmm/rmi.c b/drivers/firmware/ arm_rmm/rmi.c
>>> new file mode 100644
>>> index 0000000000000..06f5392c982d2
>>> --- /dev/null
>>> +++ b/drivers/firmware/arm_rmm/rmi.c
>>> @@ -0,0 +1,112 @@
>>> +// SPDX-License-Identifier: GPL-2.0
>>> +/*
>>> + * Copyright (C) 2023-2026 ARM Ltd.
>>> + */
>>> +
>>> +#include <linux/arm-rmi-cmds.h>
>>> +#include <linux/cpufeature.h>
>>> +#include <linux/memblock.h>
>>> +#include <linux/slab.h>
>>> +
>>> +#include <asm/memory.h>
>>> +#include <asm/pgtable-hwdef.h>
>>> +
>>> +/* RMM v2.0 defines RmiFeatureRegister0 to RmiFeatureRegister4. */
>>> +static unsigned long rmi_feat_reg_cache[5] __ro_after_init;
>>> +
>>> +static int rmi_check_version(void)
>>> +{
>>> + unsigned short version_major, version_minor;
>>> + unsigned long host_version = RMI_ABI_VERSION(RMI_ABI_MAJOR_VERSION,
>>> + RMI_ABI_MINOR_VERSION);
>>> + unsigned long aa64pfr0 = read_sanitised_ftr_reg(SYS_ID_AA64PFR0_EL1);
>>> + struct arm_smccc_1_2_regs res = {
>>> + SMC_RMI_VERSION, host_version,
>>> + };
>>> +
>>> + /* If RME isn't supported, then RMI can't be */
>>> + if (cpuid_feature_extract_unsigned_field(aa64pfr0, ID_AA64PFR0_EL1_RME_SHIFT) == 0)
>>> + return -ENXIO;
>>> +
>>> + if (arm_smccc_1_1_get_conduit() != SMCCC_CONDUIT_SMC)
>>> + return -ENXIO;
>>
>> I think we need to ensure SMCCC version is v1.2 or a newer one here? arm_smccc_1_2_smc()
>> is immediately called by rmi_smccc_invoke() after this check.
>>
>> if (arm_smccc_1_1_get_conduit() != SMCCC_CONDUIT_SMC ||
>> arm_smccc_get_version() < ARM_SMCCC_VERSION_1_2)
>
> We could. But I am wondering if that adds any value ? If the RMM
> exists and responds to the RMI_ABI_VERSION, it must be so on a
> platform with v1.2 or greater ? The extra check doesn't hurt.
>
It's required as documented in section "B1.1 overview" of RMM-spec-v2.0-bet3.
In the same section, there are more requirements regarding the SMCCC version
when SVE/SME are supported. I don't see a practical problem if the check is
missed since the combination of TF-A and TF-RMM are the only RMM-spec-v2.0-bet3
implementation (as I knew) where the SMCCC version has been set to v1.5 in the
'master' branch.
Thanks,
Gavin
> Suzuki
>
>> return -ENXIO;
>>
>> Thanks,
>> Gavin
>>
>>> +
>>> + rmi_smccc_invoke(&res);
>>> + if (res.a0 == SMCCC_RET_NOT_SUPPORTED)
>>> + return -ENXIO;
>>> +
>>> + version_major = RMI_ABI_VERSION_GET_MAJOR(res.a1);
>>> + version_minor = RMI_ABI_VERSION_GET_MINOR(res.a1);
>>> +
>>> + if (res.a0 != RMI_SUCCESS) {
>>> + unsigned short high_version_major, high_version_minor;
>>> +
>>> + high_version_major = RMI_ABI_VERSION_GET_MAJOR(res.a2);
>>> + high_version_minor = RMI_ABI_VERSION_GET_MINOR(res.a2);
>>> +
>>> + pr_err("Unsupported RMI ABI (v%d.%d - v%d.%d) we want v%d.%d\n",
>>> + version_major, version_minor,
>>> + high_version_major, high_version_minor,
>>> + RMI_ABI_MAJOR_VERSION,
>>> + RMI_ABI_MINOR_VERSION);
>>> + return -ENXIO;
>>> + }
>>> +
>>> + pr_info("RMI ABI version %d.%d\n", version_major, version_minor);
>>> +
>>> + return 0;
>>> +}
>>> +
>>
>> [...]
>>
>>
>>
>
next prev parent reply other threads:[~2026-10-14 7:26 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-02 6:14 [PATCH v22 00/10] firmware: arm_rmm: Add RMM v2.0 base RMI support Suzuki K Poulose
2026-10-02 6:14 ` [PATCH v22 01/10] firmware: arm_rmm: Add SMC definitions for calling the RMM Suzuki K Poulose
2026-10-02 6:14 ` [PATCH v22 02/10] firmware: arm_rmm: Check for RMI support at init Suzuki K Poulose
2026-10-13 3:53 ` Gavin Shan
2026-10-13 9:58 ` Suzuki K Poulose
2026-10-14 7:26 ` Gavin Shan [this message]
2026-10-14 9:19 ` Suzuki K Poulose
2026-10-14 10:58 ` Gavin Shan
2026-10-14 11:06 ` Sudeep Holla
2026-10-14 11:06 ` Suzuki K Poulose
2026-10-14 12:05 ` Sudeep Holla
2026-10-14 12:40 ` Suzuki K Poulose
2026-10-02 6:14 ` [PATCH v22 03/10] firmware: arm_rmm: Configure the RMM with the host's page size Suzuki K Poulose
2026-10-02 6:15 ` [PATCH v22 04/10] firmware: arm_rmm: Add support for SRO Suzuki K Poulose
2026-10-02 6:15 ` [PATCH v22 05/10] firmware: arm_rmm: Activate the RMM Suzuki K Poulose
2026-10-02 6:15 ` [PATCH v22 06/10] firmware: arm_rmm: Ensure the RMM has GPT entries for memory Suzuki K Poulose
2026-10-02 6:15 ` [PATCH v22 07/10] kernel: hibernate: Add an arch hook for preventing hiberation Suzuki K Poulose
2026-10-02 11:03 ` Catalin Marinas
2026-10-02 15:29 ` Suzuki K Poulose
2026-10-12 19:11 ` Rafael J. Wysocki (Intel)
2026-10-02 13:32 ` Sudeep Holla
2026-10-02 6:15 ` [PATCH v22 08/10] arm64: Block hibernate and kexec while RMM is active Suzuki K Poulose
2026-10-02 6:15 ` [PATCH v22 09/10] firmware: arm_rmm: Add wrappers for Realm related RMI commands Suzuki K Poulose
2026-10-02 11:05 ` Catalin Marinas
2026-10-02 15:28 ` Suzuki K Poulose
2026-10-02 6:15 ` [PATCH v22 10/10] firmware: arm_rmm: hotplug: Skip memory added to ZONE_MOVABLE Suzuki K Poulose
2026-10-02 7:57 ` David Hildenbrand (Arm)
2026-10-02 18:49 ` [PATCH v22 00/10] firmware: arm_rmm: Add RMM v2.0 base RMI support Catalin Marinas
2026-10-03 5:57 ` Suzuki K Poulose
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=3fbd4739-a4eb-4428-95ae-ead22e7cf9f2@redhat.com \
--to=gshan@redhat.com \
--cc=WeiLin.Chang@arm.com \
--cc=alpergun@google.com \
--cc=aneesh.kumar@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=enju.kohei@fujitsu.com \
--cc=fj0570is@fujitsu.com \
--cc=gankulkarni@os.amperecomputing.com \
--cc=joey.gouly@arm.com \
--cc=jonathan.cameron@oss.qualcomm.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=maz@kernel.org \
--cc=oupton@kernel.org \
--cc=sdonthineni@nvidia.com \
--cc=steven.price@arm.com \
--cc=sudeep.holla@arm.com \
--cc=suzuki.poulose@arm.com \
--cc=tabba@google.com \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®