From nobody Fri Jun 12 14:15:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ACEA33815FE; Thu, 14 May 2026 09:40:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778751650; cv=none; b=dyF0Ah8KtCfcX2ufnsBCM69nEtkHC5WmvBVRgcP/H6loVNQSqHdXFOOHN5LzsO7m2Q9GL1wMFMg6m5Oc+vywrpSAo/hUyQvuzPjAu9wqa0oAT5vNQ8/hEF/bdlUmcmaCybj0J/AAUz/H8ymcVFOMqUIxnha42p7OhW3MWZQVw5E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778751650; c=relaxed/simple; bh=oAbmsYmyQL4uWzHLbBhhUhVHXHB9PBmOF69eGHy61Vo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YC5ozsvxkRH1TEu3kPi3xruq5RjZ8I5+t4z/V4dFvfXDRkMeyzt86fKFNil33glvzP4U9Ei6guQ9of9nbbKZ0BUFTQDROs/gCPWQAm6f501FVAyeBC8fxcHD8PWuFLDLtg/P1wAV0tYo0dI553ls8n4dp/3DMReaapI2pTNOUiE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qwNsaUUp; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qwNsaUUp" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 67C22C2BCB3; Thu, 14 May 2026 09:40:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778751650; bh=oAbmsYmyQL4uWzHLbBhhUhVHXHB9PBmOF69eGHy61Vo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qwNsaUUp/cF/OG4Q79wj57Io9A9M6SUwpdOs7EC4f0dMR69c0JAISw+KdIU+SBQGl 5FbRZbXRmJqsQKRun6BOKZLtiMxx3/rfTf4JihSu5xmiqNXBuUoF/WOP1WqfvpVm41 qhJB8sNtghDdQI2H9SGrZJebVbagIU9gqtkP1ym4xJ1ukzT9XRpzycp+yv2D9eABA3 kzKJT+XnNjlKonyjh/NbYINqssgKbnNElUOGjdDaxMdxNk9aY4z/+D77NPS5r0rAyw BZs3WYkzjcUkORl3c79GJzgMt+Y9Z0CwBA/ZCyYcl2oPzTUaQNnA/8SnMDC5Gx4mxx fS0cZ1THkPwMQ== From: "Aneesh Kumar K.V (Arm)" To: linux-coco@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: "Aneesh Kumar K.V (Arm)" , Catalin Marinas , Greg KH , Jeremy Linton , Jonathan Cameron , Lorenzo Pieralisi , Mark Rutland , Sudeep Holla , Will Deacon , Steven Price , Suzuki K Poulose Subject: [PATCH v5 1/3] firmware: smccc: coco: Manage arm-smccc platform device and CCA auxiliary drivers Date: Thu, 14 May 2026 15:10:28 +0530 Message-ID: <20260514094030.42495-2-aneesh.kumar@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260514094030.42495-1-aneesh.kumar@kernel.org> References: <20260514094030.42495-1-aneesh.kumar@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Make the SMCCC driver responsible for registering the arm-smccc platform device and after confirming the relevant SMCCC function IDs, create the arm_cca_guest auxiliary device. Also update the arm-cca-guest driver to use the auxiliary device interface instead of the platform device (arm-cca-dev). The removal of the platform device registration will follow in a subsequent patch, allowing this change to be applied without immediately breaking existing userspace dependencies [1]. [1] https://lore.kernel.org/all/4a7d84b2-2ec4-4773-a2d5-7b63d5c683cf@arm.com Signed-off-by: Aneesh Kumar K.V (Arm) --- arch/arm64/include/asm/rsi.h | 2 +- arch/arm64/kernel/rsi.c | 2 +- drivers/firmware/smccc/Kconfig | 1 + drivers/firmware/smccc/Makefile | 1 + drivers/firmware/smccc/rmm.c | 24 ++++++++ drivers/firmware/smccc/rmm.h | 17 ++++++ drivers/firmware/smccc/smccc.c | 17 ++++++ drivers/virt/coco/arm-cca-guest/Kconfig | 1 + drivers/virt/coco/arm-cca-guest/Makefile | 2 + .../{arm-cca-guest.c =3D> arm-cca.c} | 59 +++++++++---------- 10 files changed, 94 insertions(+), 32 deletions(-) create mode 100644 drivers/firmware/smccc/rmm.c create mode 100644 drivers/firmware/smccc/rmm.h rename drivers/virt/coco/arm-cca-guest/{arm-cca-guest.c =3D> arm-cca.c} (8= 4%) diff --git a/arch/arm64/include/asm/rsi.h b/arch/arm64/include/asm/rsi.h index 88b50d660e85..2d2d363aaaee 100644 --- a/arch/arm64/include/asm/rsi.h +++ b/arch/arm64/include/asm/rsi.h @@ -10,7 +10,7 @@ #include #include =20 -#define RSI_PDEV_NAME "arm-cca-dev" +#define RSI_DEV_NAME "arm-rsi-dev" =20 DECLARE_STATIC_KEY_FALSE(rsi_present); =20 diff --git a/arch/arm64/kernel/rsi.c b/arch/arm64/kernel/rsi.c index 9e846ce4ef9c..8380e5ba88d2 100644 --- a/arch/arm64/kernel/rsi.c +++ b/arch/arm64/kernel/rsi.c @@ -161,7 +161,7 @@ void __init arm64_rsi_init(void) } =20 static struct platform_device rsi_dev =3D { - .name =3D RSI_PDEV_NAME, + .name =3D "arm-cca-dev", .id =3D PLATFORM_DEVID_NONE }; =20 diff --git a/drivers/firmware/smccc/Kconfig b/drivers/firmware/smccc/Kconfig index 15e7466179a6..2b6984757241 100644 --- a/drivers/firmware/smccc/Kconfig +++ b/drivers/firmware/smccc/Kconfig @@ -8,6 +8,7 @@ config HAVE_ARM_SMCCC config HAVE_ARM_SMCCC_DISCOVERY bool depends on ARM_PSCI_FW + select AUXILIARY_BUS default y help SMCCC v1.0 lacked discoverability and hence PSCI v1.0 was updated diff --git a/drivers/firmware/smccc/Makefile b/drivers/firmware/smccc/Makef= ile index 40d19144a860..146dc3c03c20 100644 --- a/drivers/firmware/smccc/Makefile +++ b/drivers/firmware/smccc/Makefile @@ -2,3 +2,4 @@ # obj-$(CONFIG_HAVE_ARM_SMCCC_DISCOVERY) +=3D smccc.o kvm_guest.o obj-$(CONFIG_ARM_SMCCC_SOC_ID) +=3D soc_id.o +obj-$(CONFIG_ARM64) +=3D rmm.o diff --git a/drivers/firmware/smccc/rmm.c b/drivers/firmware/smccc/rmm.c new file mode 100644 index 000000000000..728338cb5a22 --- /dev/null +++ b/drivers/firmware/smccc/rmm.c @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2026 Arm Limited + */ + +#include + +#include "rmm.h" + +void __init register_rsi_device(struct platform_device *pdev) +{ + unsigned long ret; + unsigned long ver_lower, ver_higher; + + if (arm_smccc_1_1_get_conduit() !=3D SMCCC_CONDUIT_SMC) + return; + + ret =3D rsi_request_version(RSI_ABI_VERSION, &ver_lower, &ver_higher); + if (ret !=3D RSI_SUCCESS) + return; + + __devm_auxiliary_device_create(&pdev->dev, + "arm_cca_guest", RSI_DEV_NAME, NULL, 0); +} diff --git a/drivers/firmware/smccc/rmm.h b/drivers/firmware/smccc/rmm.h new file mode 100644 index 000000000000..a47a650d4f51 --- /dev/null +++ b/drivers/firmware/smccc/rmm.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _SMCCC_RMM_H +#define _SMCCC_RMM_H + +#include + +#ifdef CONFIG_ARM64 +#include +void __init register_rsi_device(struct platform_device *pdev); +#else + +static void __init register_rsi_device(struct platform_device *pdev) +{ + +} +#endif +#endif diff --git a/drivers/firmware/smccc/smccc.c b/drivers/firmware/smccc/smccc.c index bdee057db2fd..eb077b9aa6da 100644 --- a/drivers/firmware/smccc/smccc.c +++ b/drivers/firmware/smccc/smccc.c @@ -12,6 +12,8 @@ #include #include =20 +#include "rmm.h" + static u32 smccc_version =3D ARM_SMCCC_VERSION_1_0; static enum arm_smccc_conduit smccc_conduit =3D SMCCC_CONDUIT_NONE; =20 @@ -85,6 +87,21 @@ static int __init smccc_devices_init(void) { struct platform_device *pdev; =20 + if (smccc_conduit =3D=3D SMCCC_CONDUIT_NONE) + return 0; + + pdev =3D platform_device_register_simple("arm-smccc", + PLATFORM_DEVID_NONE, NULL, 0); + if (IS_ERR(pdev)) { + pr_err("arm-smccc: could not register device: %ld\n", PTR_ERR(pdev)); + } else { + /* + * Register the RMI and RSI devices only when firmware exposes + * the required SMCCC function IDs at a supported revision. + */ + register_rsi_device(pdev); + } + if (smccc_trng_available) { pdev =3D platform_device_register_simple("smccc_trng", -1, NULL, 0); diff --git a/drivers/virt/coco/arm-cca-guest/Kconfig b/drivers/virt/coco/ar= m-cca-guest/Kconfig index 3f0f013f03f1..a42359a90558 100644 --- a/drivers/virt/coco/arm-cca-guest/Kconfig +++ b/drivers/virt/coco/arm-cca-guest/Kconfig @@ -2,6 +2,7 @@ config ARM_CCA_GUEST tristate "Arm CCA Guest driver" depends on ARM64 select TSM_REPORTS + select AUXILIARY_BUS help The driver provides userspace interface to request and attestation report from the Realm Management Monitor(RMM). diff --git a/drivers/virt/coco/arm-cca-guest/Makefile b/drivers/virt/coco/a= rm-cca-guest/Makefile index 69eeba08e98a..75a120e24fda 100644 --- a/drivers/virt/coco/arm-cca-guest/Makefile +++ b/drivers/virt/coco/arm-cca-guest/Makefile @@ -1,2 +1,4 @@ # SPDX-License-Identifier: GPL-2.0-only obj-$(CONFIG_ARM_CCA_GUEST) +=3D arm-cca-guest.o + +arm-cca-guest-y +=3D arm-cca.o diff --git a/drivers/virt/coco/arm-cca-guest/arm-cca-guest.c b/drivers/virt= /coco/arm-cca-guest/arm-cca.c similarity index 84% rename from drivers/virt/coco/arm-cca-guest/arm-cca-guest.c rename to drivers/virt/coco/arm-cca-guest/arm-cca.c index 0c9ea24a200c..7daada072cc0 100644 --- a/drivers/virt/coco/arm-cca-guest/arm-cca-guest.c +++ b/drivers/virt/coco/arm-cca-guest/arm-cca.c @@ -3,6 +3,7 @@ * Copyright (C) 2023 ARM Ltd. */ =20 +#include #include #include #include @@ -181,52 +182,50 @@ static int arm_cca_report_new(struct tsm_report *repo= rt, void *data) return ret; } =20 -static const struct tsm_report_ops arm_cca_tsm_ops =3D { +static const struct tsm_report_ops arm_cca_tsm_report_ops =3D { .name =3D KBUILD_MODNAME, .report_new =3D arm_cca_report_new, }; =20 -/** - * arm_cca_guest_init - Register with the Trusted Security Module (TSM) - * interface. - * - * Return: - * * %0 - Registered successfully with the TSM interface. - * * %-ENODEV - The execution context is not an Arm Realm. - * * %-EBUSY - Already registered. - */ -static int __init arm_cca_guest_init(void) +static void unregister_cca_tsm_report(void *data) +{ + tsm_report_unregister(&arm_cca_tsm_report_ops); +} + +static int cca_devsec_tsm_probe(struct auxiliary_device *adev, + const struct auxiliary_device_id *id) { int ret; =20 if (!is_realm_world()) return -ENODEV; =20 - ret =3D tsm_report_register(&arm_cca_tsm_ops, NULL); - if (ret < 0) - pr_err("Error %d registering with TSM\n", ret); + ret =3D tsm_report_register(&arm_cca_tsm_report_ops, NULL); + if (ret < 0) { + dev_err_probe(&adev->dev, ret, "Error registering with TSM\n"); + return ret; + } =20 - return ret; -} -module_init(arm_cca_guest_init); + ret =3D devm_add_action_or_reset(&adev->dev, unregister_cca_tsm_report, N= ULL); + if (ret < 0) { + dev_err_probe(&adev->dev, ret, "Error registering devm action\n"); + return ret; + } =20 -/** - * arm_cca_guest_exit - unregister with the Trusted Security Module (TSM) - * interface. - */ -static void __exit arm_cca_guest_exit(void) -{ - tsm_report_unregister(&arm_cca_tsm_ops); + return 0; } -module_exit(arm_cca_guest_exit); =20 -/* modalias, so userspace can autoload this module when RSI is available */ -static const struct platform_device_id arm_cca_match[] __maybe_unused =3D { - { RSI_PDEV_NAME, 0}, - { } +static const struct auxiliary_device_id cca_devsec_tsm_id_table[] =3D { + { .name =3D KBUILD_MODNAME "." RSI_DEV_NAME }, + {} }; +MODULE_DEVICE_TABLE(auxiliary, cca_devsec_tsm_id_table); =20 -MODULE_DEVICE_TABLE(platform, arm_cca_match); +static struct auxiliary_driver cca_devsec_tsm_driver =3D { + .probe =3D cca_devsec_tsm_probe, + .id_table =3D cca_devsec_tsm_id_table, +}; +module_auxiliary_driver(cca_devsec_tsm_driver); MODULE_AUTHOR("Sami Mujawar "); MODULE_DESCRIPTION("Arm CCA Guest TSM Driver"); MODULE_LICENSE("GPL"); --=20 2.43.0 From nobody Fri Jun 12 14:15:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E65513A4F4B; Thu, 14 May 2026 09:40:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778751656; cv=none; b=HvfyB0/XM3Tprihv+xvxfE5ICkEAy2BgSb5S7zKLHLzLdVLLYoZKKhwlHeD7rcHHM6thKYuUt8YQc/cW868rQisAbX9vykXSg8KPXVGH69SP78aC0yL7X7xUJq9ScEvjKhVv5s3ik0x3vKrbpObe9ncYihQDJOrE/WsniaODWK0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778751656; c=relaxed/simple; bh=cYm8KIacQw1yy4uZwh8PXHJpvBgJW6Pi20fiqsOilQg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SCp4ietmWRqcYpp//MMvhRnwTvj3PNpf0E+n4BRyBFcGm86BbMFDoxTMP2L+KRJZjnubX4LUIsl7P3mTuuvlphmLIpAJdJzQrcDKeLb+ohqUkg4PfdRzx+zt1BI/OPoo1sgdiWTbb2juXc1tGapv4L01xmwLvvXx5gurN3ZvPnk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MdjAV5q/; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MdjAV5q/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E973AC2BCB3; Thu, 14 May 2026 09:40:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778751655; bh=cYm8KIacQw1yy4uZwh8PXHJpvBgJW6Pi20fiqsOilQg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MdjAV5q/aYCjj17JWcDcqPsfHVk0bqU2ezMp5iwRULQ2FMLp5TSdRzIbwi/hM2MEv 5F3KpU35XiBFG9zv5rPEJzkqaIRg1k9vX6qkfxInwgC+HFIaozOzlJACW5RotFhC3r 2wk8XOAd8OA9kfLZQBaAGYS/F76lwU/Q4LImPg85SHHnVEA01GRubgdfYn938SXaeN kT6AY0OxRUG2riu5+72nRzMuQfHD3dJcXTHLpdiN9S+FPeNc11mIkfRroPUjBFL+Ws Set4FM8AQduqmBQbwdRAYeCinkZ1sk/GDlDxVuvcAgwEWZFL0ln6sCkjqvkElJ50s4 ibWNwFv2y1ihQ== From: "Aneesh Kumar K.V (Arm)" To: linux-coco@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: "Aneesh Kumar K.V (Arm)" , Catalin Marinas , Greg KH , Jeremy Linton , Jonathan Cameron , Lorenzo Pieralisi , Mark Rutland , Sudeep Holla , Will Deacon , Steven Price , Suzuki K Poulose Subject: [PATCH v5 2/3] hwrng: arm_smccc_trng: Register as an auxiliary device Date: Thu, 14 May 2026 15:10:29 +0530 Message-ID: <20260514094030.42495-3-aneesh.kumar@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260514094030.42495-1-aneesh.kumar@kernel.org> References: <20260514094030.42495-1-aneesh.kumar@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The SMCCC TRNG interface is a firmware-provided function rather than a standalone platform device. Register it as an auxiliary device under the arm-smccc platform device and convert the hwrng driver to an auxiliary driver. This keeps the TRNG device tied to the SMCCC core device while preserving module autoloading through the auxiliary device ID table. The conversion changes the device path from the old platform device path, but no userspace dependency on that path was found. This was confirmed with a Debian Code Search lookup for the existing platform device name/path. Signed-off-by: Aneesh Kumar K.V (Arm) --- drivers/char/hw_random/arm_smccc_trng.c | 25 ++++++++++++++----------- drivers/firmware/smccc/smccc.c | 24 +++++++++++++----------- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/drivers/char/hw_random/arm_smccc_trng.c b/drivers/char/hw_rand= om/arm_smccc_trng.c index dcb8e7f37f25..5d56fcbcefa0 100644 --- a/drivers/char/hw_random/arm_smccc_trng.c +++ b/drivers/char/hw_random/arm_smccc_trng.c @@ -16,7 +16,7 @@ #include #include #include -#include +#include #include =20 #ifdef CONFIG_ARM64 @@ -94,29 +94,32 @@ static int smccc_trng_read(struct hwrng *rng, void *dat= a, size_t max, bool wait) return copied; } =20 -static int smccc_trng_probe(struct platform_device *pdev) +static int smccc_trng_probe(struct auxiliary_device *adev, + const struct auxiliary_device_id *id) { struct hwrng *trng; =20 - trng =3D devm_kzalloc(&pdev->dev, sizeof(*trng), GFP_KERNEL); + trng =3D devm_kzalloc(&adev->dev, sizeof(*trng), GFP_KERNEL); if (!trng) return -ENOMEM; =20 trng->name =3D "smccc_trng"; trng->read =3D smccc_trng_read; =20 - return devm_hwrng_register(&pdev->dev, trng); + return devm_hwrng_register(&adev->dev, trng); } =20 -static struct platform_driver smccc_trng_driver =3D { - .driver =3D { - .name =3D "smccc_trng", - }, - .probe =3D smccc_trng_probe, +static const struct auxiliary_device_id smccc_trng_id_table[] =3D { + { .name =3D KBUILD_MODNAME ".smccc_trng" }, + {} }; -module_platform_driver(smccc_trng_driver); +MODULE_DEVICE_TABLE(auxiliary, smccc_trng_id_table); =20 -MODULE_ALIAS("platform:smccc_trng"); +static struct auxiliary_driver smccc_trng_driver =3D { + .probe =3D smccc_trng_probe, + .id_table =3D smccc_trng_id_table, +}; +module_auxiliary_driver(smccc_trng_driver); MODULE_AUTHOR("Andre Przywara"); MODULE_DESCRIPTION("Arm SMCCC TRNG firmware interface support"); MODULE_LICENSE("GPL"); diff --git a/drivers/firmware/smccc/smccc.c b/drivers/firmware/smccc/smccc.c index eb077b9aa6da..49ac8172def4 100644 --- a/drivers/firmware/smccc/smccc.c +++ b/drivers/firmware/smccc/smccc.c @@ -10,6 +10,7 @@ #include #include #include +#include #include =20 #include "rmm.h" @@ -94,20 +95,21 @@ static int __init smccc_devices_init(void) PLATFORM_DEVID_NONE, NULL, 0); if (IS_ERR(pdev)) { pr_err("arm-smccc: could not register device: %ld\n", PTR_ERR(pdev)); - } else { - /* - * Register the RMI and RSI devices only when firmware exposes - * the required SMCCC function IDs at a supported revision. - */ - register_rsi_device(pdev); + return 0; } + /* + * Register the RMI and RSI devices only when firmware exposes + * the required SMCCC function IDs at a supported revision. + */ + register_rsi_device(pdev); =20 if (smccc_trng_available) { - pdev =3D platform_device_register_simple("smccc_trng", -1, - NULL, 0); - if (IS_ERR(pdev)) - pr_err("smccc_trng: could not register device: %ld\n", - PTR_ERR(pdev)); + struct auxiliary_device *adev; + + adev =3D __devm_auxiliary_device_create(&pdev->dev, + "arm_smccc_trng", "smccc_trng", NULL, 0); + if (!adev) + pr_err("smccc_trng: could not register device\n"); } =20 return 0; --=20 2.43.0 From nobody Fri Jun 12 14:15:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D0DC33A4F4B; Thu, 14 May 2026 09:41:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778751661; cv=none; b=hrH0+TGfDrBzATV1EzmFF0Z61VE/4Hrdy2b3C1LKMCHD08NPiRTwfjo5YmCxyXmLGXKYH+zwVbUhnF9s2At5og51v5MM55lwBczaSwr5iE/12m1neUA700bzclkJH4O8rtLpxU/k4cM0z0ctdJZu/FRrArORsdldEpO7uqbHNog= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778751661; c=relaxed/simple; bh=XWBLYDMoG9UY2br2So2uu6HROTGF8oGeeKo1YXLahw8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cv8rUmp88tvh31RoSeyX0sSrOa/oaIqttXXVvtJml2t06yPIrWrl4M6NMZFAo6In/vWb9s6dm2U36Z6rbPz1H+Q8zxvxzy5FvKlKUBMKMsZgd/i3Ox4UV72JLKJdD9/mp5LahaSBucM8T1GqXjWRWr4qpeWY2QBwq+sG7M2XRv4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sAIwccg3; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="sAIwccg3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 75B0BC2BCB3; Thu, 14 May 2026 09:40:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778751661; bh=XWBLYDMoG9UY2br2So2uu6HROTGF8oGeeKo1YXLahw8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sAIwccg36liT9ntaU5uLa+ZHufIghTxRLKc+jMHEf6c89yU2kIY25tC0TFITJdLiV wx3JDXHW3tOnUPHpWuyLpqfrQ6rJW3EBSiS6U0/zAVupKn6ALmfGj/r46Xfwvnz5Cm hH59FRrM95JoEnB4OYun5VeHZpRFbMs3UVFGCuvL4GtIZjk2WPOrzj9kWKrwuYF3Zi vUx0X/BVrHDQVTyVsSBm9SGBA12o5gOThs2C3IA2+i7gu2eDS3Rpnh+Ia+GDT9quva AtOXB63myHZQY1IisxG6wZYa83OCyaMCSVdxnrII56SdxLGN4FY8Wnd880lFsTMA1x ec3cQgvizuhHQ== From: "Aneesh Kumar K.V (Arm)" To: linux-coco@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: "Aneesh Kumar K.V (Arm)" , Catalin Marinas , Greg KH , Jeremy Linton , Jonathan Cameron , Lorenzo Pieralisi , Mark Rutland , Sudeep Holla , Will Deacon , Steven Price , Suzuki K Poulose Subject: [PATCH v5 3/3] coco: guest: arm64: Replace dummy CCA device with sysfs ABI Date: Thu, 14 May 2026 15:10:30 +0530 Message-ID: <20260514094030.42495-4-aneesh.kumar@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260514094030.42495-1-aneesh.kumar@kernel.org> References: <20260514094030.42495-1-aneesh.kumar@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The SMCCC firmware driver now creates the arm-smccc platform device and instantiates the CCA auxiliary devices once the RSI ABI is discovered. The arm64-specific arm-cca-dev platform device stub is therefore no longer needed. However, userspace has used the arm-cca-dev platform device to detect Arm CCA Realm guests [1]. Removing it without a replacement would break that detection and would also leave userspace depending on kernel device-model details. Add /sys/firmware/cca/realm_guest as a stable, architecture-provided ABI for detecting whether the kernel is running as an Arm CCA Realm guest. The file returns 1 in Realm world and 0 otherwise, similar to the existing s390 /sys/firmware/uv/prot_virt_guest interface for protected virtualization guests. Remove the dummy arm-cca-dev registration now that userspace has a dedicated CCA Realm guest indicator, and document the new ABI in Documentation/ABI/testing/sysfs-firmware-cca. [1] https://lore.kernel.org/all/4a7d84b2-2ec4-4773-a2d5-7b63d5c683cf@arm.com Signed-off-by: Aneesh Kumar K.V (Arm) --- Documentation/ABI/testing/sysfs-firmware-cca | 10 +++++ arch/arm64/kernel/rsi.c | 39 +++++++++++++++----- 2 files changed, 39 insertions(+), 10 deletions(-) create mode 100644 Documentation/ABI/testing/sysfs-firmware-cca diff --git a/Documentation/ABI/testing/sysfs-firmware-cca b/Documentation/A= BI/testing/sysfs-firmware-cca new file mode 100644 index 000000000000..bf177d636b92 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-firmware-cca @@ -0,0 +1,10 @@ +What: /sys/firmware/cca/realm_guest +Date: May 2026 +Contact: Linux ARM Kernel Mailing list +Description: Read-only. Indicates whether the kernel is running as an + Arm Confidential Compute Architecture (CCA) Realm guest. + + The value is one of: + + 0: the kernel is not running as a Realm guest + 1: the kernel is running as a Realm guest diff --git a/arch/arm64/kernel/rsi.c b/arch/arm64/kernel/rsi.c index 8380e5ba88d2..a3e9b3bb5679 100644 --- a/arch/arm64/kernel/rsi.c +++ b/arch/arm64/kernel/rsi.c @@ -9,6 +9,8 @@ #include #include #include +#include +#include =20 #include #include @@ -16,6 +18,7 @@ #include =20 static struct realm_config config; +static struct kobject *cca_kobj; =20 unsigned long prot_ns_shared; EXPORT_SYMBOL(prot_ns_shared); @@ -160,17 +163,33 @@ void __init arm64_rsi_init(void) static_branch_enable(&rsi_present); } =20 -static struct platform_device rsi_dev =3D { - .name =3D "arm-cca-dev", - .id =3D PLATFORM_DEVID_NONE +static ssize_t cca_is_realm_guest(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + return sysfs_emit(buf, "%d\n", is_realm_world()); +} + +static struct kobj_attribute cca_realm_guest =3D + __ATTR(realm_guest, 0444, cca_is_realm_guest, NULL); + +static const struct attribute *cca_realm_attrs[] =3D { + &cca_realm_guest.attr, + NULL, }; =20 -static int __init arm64_create_dummy_rsi_dev(void) +static int __init realm_sysfs_init(void) { - if (is_realm_world() && - platform_device_register(&rsi_dev)) - pr_err("failed to register rsi platform device\n"); - return 0; -} + int ret; + + cca_kobj =3D kobject_create_and_add("cca", firmware_kobj); + if (!cca_kobj) + return -ENOMEM; =20 -arch_initcall(arm64_create_dummy_rsi_dev) + ret =3D sysfs_create_files(cca_kobj, cca_realm_attrs); + if (!ret) + return 0; + + kobject_put(cca_kobj); + return ret; +} +device_initcall(realm_sysfs_init); --=20 2.43.0