Re: [PATCH v12 7/7] coco: guest: arm64: Replace dummy CCA device with sysfs ABI
From: Catalin Marinas
Date: Mon Sep 21 2026 - 05:01:40 EST
On Mon, Sep 21, 2026 at 11:08:07AM +0530, Aneesh Kumar K.V (Arm) wrote:
> diff --git a/Documentation/ABI/testing/sysfs-firmware-cca b/Documentation/ABI/testing/sysfs-firmware-cca
> new file mode 100644
> index 000000000000..9cc355724f94
> --- /dev/null
> +++ b/Documentation/ABI/testing/sysfs-firmware-cca
> @@ -0,0 +1,7 @@
> +What: /sys/firmware/cca/realm_guest
> +Date: May 2026
Still May?
> +Contact: Linux ARM Kernel Mailing list <linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>
> +Description: Read-only. Present only when the kernel is running as an
> + Arm Confidential Compute Architecture (CCA) Realm guest, in
> + which case it reads 1. If the file does not exist, the kernel
> + is not running as a Realm guest.
> diff --git a/drivers/firmware/arm_rmm/rsi.c b/drivers/firmware/arm_rmm/rsi.c
> index 2dd69febedbd..425b27c0cad4 100644
> --- a/drivers/firmware/arm_rmm/rsi.c
> +++ b/drivers/firmware/arm_rmm/rsi.c
> @@ -7,14 +7,16 @@
> #include <linux/memblock.h>
> #include <linux/psci.h>
> #include <linux/swiotlb.h>
> -#include <linux/platform_device.h>
> #include <linux/arm-rsi-cmds.h>
> +#include <linux/kobject.h>
> +#include <linux/sysfs.h>
>
> #include <asm/io.h>
> #include <asm/mem_encrypt.h>
> #include <asm/pgtable.h>
>
> static struct realm_config config;
> +static struct kobject *cca_kobj;
Nit: do we need this static cca_kobj? Can you not just use a local
variable in realm_sysfs_init()?
>
> unsigned long prot_ns_shared;
> EXPORT_SYMBOL(prot_ns_shared);
> @@ -182,17 +184,36 @@ void __init arm64_rsi_init(void)
> static_branch_enable(&rsi_present);
> }
>
> -static struct platform_device rsi_dev = {
> - .name = "arm-cca-dev",
> - .id = PLATFORM_DEVID_NONE
> +static ssize_t realm_guest_show(struct kobject *kobj,
> + struct kobj_attribute *attr, char *buf)
> +{
> + return sysfs_emit(buf, "1\n");
> +}
> +
> +static struct kobj_attribute cca_realm_guest =
> + __ATTR(realm_guest, 0444, realm_guest_show, NULL);
Nit: __ATTR_RO,
> +
> +static const struct attribute *cca_realm_attrs[] = {
> + &cca_realm_guest.attr,
> + NULL
> };
>
> -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;
>
> -arch_initcall(arm64_create_dummy_rsi_dev)
> + if (!is_realm_world())
> + return 0;
> +
> + cca_kobj = kobject_create_and_add("cca", firmware_kobj);
> + if (!cca_kobj)
> + return -ENOMEM;
> +
> + ret = sysfs_create_files(cca_kobj, cca_realm_attrs);
> + if (!ret)
> + return 0;
> +
> + kobject_put(cca_kobj);
> + return ret;
> +}
> +device_initcall(realm_sysfs_init);
If you make it to here ;), I'd also split this patch in two as per
Jonathan's suggestion on the previous version.
--
Catalin