[PATCH v12 7/7] coco: guest: arm64: Replace dummy CCA device with sysfs ABI

Catalin Marinas catalin.marinas at arm.com
Mon Sep 21 02:00:27 PDT 2026


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 at lists.infradead.org>
> +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



More information about the linux-arm-kernel mailing list