[RFC PATCH 1/5] iommu/arm-smmu-v3: Add basic debugfs framework
Qinxin Xia
xiaqinxin at huawei.com
Mon Mar 16 08:14:33 PDT 2026
On 2026/3/14 03:58:44, Nicolin Chen <nicolinc at nvidia.com> wrote:
> On Fri, Mar 13, 2026 at 06:43:47PM +0800, Qinxin Xia wrote:
>> +/**
>> + * smmu_debugfs_capabilities_show() - Display SMMU capabilities
>> + * @seq: seq_file to write to
>> + * @v: private data (SMMU device)
>
> @v is not used
>
>> +
>> +/**
>> + * arm_smmu_debugfs_setup() - Initialize debugfs for SMMU device
>> + * @smmu: SMMU device to setup debugfs for
>> + * @ioaddr: Physical base address of the SMMU device registers
>> + *
>> + * This function creates the basic debugfs directory structure for a SMMU device.
>
> nit: an SMMU
>
> Or maybe simply "@smmu"
>
>> + *
>> + * Return: 0 on success, negative error code on failure
>> + */
>> +int arm_smmu_debugfs_setup(struct arm_smmu_device *smmu, phys_addr_t ioaddr)
>> +{
>> + struct arm_smmu_debugfs *debugfs;
>> + struct dentry *smmu_dir;
>> + char name[32];
>> + int ret;
>> +
>> + /* Create root directory if it doesn't exist */
>> + mutex_lock(&arm_smmu_debugfs_lock);
>> + if (!smmuv3_root_dir) {
>> + smmuv3_root_dir = debugfs_create_dir("arm_smmu_v3",
>> + iommu_debugfs_dir);
>> + if (!smmuv3_root_dir) {
>> + mutex_unlock(&arm_smmu_debugfs_lock);
>> + return -ENOMEM;
>> + }
>> + }
>> + mutex_unlock(&arm_smmu_debugfs_lock);
>> +
>> + /* Allocate debugfs structure */
>> + debugfs = kzalloc(sizeof(*debugfs), GFP_KERNEL);
>
> kzalloc_obj(*debugfs)
>
>> diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
>> index 4d00d796f078..211a0c87507a 100644
>> --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
>> +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
>> @@ -33,6 +33,10 @@
>> #include "arm-smmu-v3.h"
>> #include "../../dma-iommu.h"
>>
>> +#ifdef CONFIG_ARM_SMMU_V3_DEBUGFS
>> +static unsigned int arm_smmu_present;
>> +#endif
>
> Unused
>
>> @@ -4909,6 +4913,12 @@ static int arm_smmu_device_probe(struct platform_device *pdev)
>> if (ret)
>> goto err_disable;
>>
>> +#ifdef CONFIG_ARM_SMMU_V3_DEBUGFS
>> + ret = arm_smmu_debugfs_setup(smmu, ioaddr);
>> + if (ret)
>> + dev_warn(dev, "Failed to create debugfs!\n");
>> +#endif
>> +
>> /* And we're up. Go go go! */
>> ret = iommu_device_sysfs_add(&smmu->iommu, dev, NULL,
>> "smmu3.%pa", &ioaddr);
>
> Since name is all we wanted, maybe follow iommu_device_sysfs_add()
> by passing in:
> "const char *name, ..." instead of "phys_addr_t ioaddr"
>
>> diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
>> index 3c6d65d36164..247f27426f6b 100644
>> --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
>> +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
>> @@ -733,6 +733,15 @@ struct arm_smmu_impl_ops {
>> const struct iommu_user_data *user_data);
>> };
>>
>> +#ifdef CONFIG_ARM_SMMU_V3_DEBUGFS
>> +struct arm_smmu_debugfs {
>> + struct dentry *root_dir;
>
> Unused
>
>> + struct dentry *smmu_dir;
>> + struct arm_smmu_device *smmu;
>
> Unused
>
> Nicolin
>
I'll delete the unuse variable, but I'll keep this struct there for
extensions.
--
Thanks,
Qinxin
More information about the linux-arm-kernel
mailing list