Re: [PATCH v13 06/10] iommu/arm-smmu-v3: Add acpi_smmu_acpi_probe_model for impl
From: Nicolin Chen <hidden>
Date: 2024-08-27 16:19:03
Also in:
linux-iommu, linux-tegra, lkml
Subsystem:
arm smmu drivers, iommu subsystem, tegra iommu drivers, the rest · Maintainers:
Will Deacon, Joerg Roedel, Thierry Reding, Linus Torvalds
On Tue, Aug 27, 2024 at 04:57:48PM +0100, Robin Murphy wrote:
quoted
quoted
@@ -4341,18 +4341,28 @@ static int arm_smmu_device_hw_probe(struct arm_smmu_device *smmu) } #ifdef CONFIG_ACPI -static void acpi_smmu_get_options(u32 model, struct arm_smmu_device *smmu) +static int acpi_smmu_iort_probe_model(struct acpi_iort_node *node, + struct arm_smmu_device *smmu) { - switch (model) { + struct acpi_iort_smmu_v3 *iort_smmu = + (struct acpi_iort_smmu_v3 *)node->node_data; + + switch (iort_smmu->model) { case ACPI_IORT_SMMU_V3_CAVIUM_CN99XX: smmu->options |= ARM_SMMU_OPT_PAGE0_REGS_ONLY; break; case ACPI_IORT_SMMU_V3_HISILICON_HI161X: smmu->options |= ARM_SMMU_OPT_SKIP_PREFETCH; break; + case ACPI_IORT_SMMU_V3_GENERIC: + break; + default: + dev_err(smmu->dev, "Unknown/unsupported IORT model!\n"); + return -ENXIO;We probably don't want this 'default' case, otherwise the driver will need to be updated every time there's a new model....although the intent is very strongly that there should never be any new models, because by now hardware should really not be failing to implement SMMU_IIDR correctly. In some ways, having this might help further discourage people from abusing the mechanism and making random stuff up in their firmware :/
I don't have a strong feeling about this, though Robin's point was my intention here. Apart from this "default case", I typo-ed the function name in the patch subject and commit message. Also, there's a missed kdoc line in struct tegra241_cmdqv (PATCH-8). So, I prepared a v14: https://github.com/nicolinc/iommufd/commits/vcmdq_in_kernel-v14 v14 changelog (attaching git-diff at the EOM): * Rebased on Will's for-joerg/arm-smmu/updates * Added a missed kdoc for "dev" in struct tegra241_cmdqv * Dropped the default case in acpi_smmu_iort_probe_model() (did this before seeing Robin's mail here.) Let's see what makes the best for you, Will. Thanks Nicolin
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 8b1437240ce5..f23245012681 100644
--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c@@ -4356,9 +4356,6 @@ static int acpi_smmu_iort_probe_model(struct acpi_iort_node *node, break; case ACPI_IORT_SMMU_V3_GENERIC: break; - default: - dev_err(smmu->dev, "Unknown/unsupported IORT model!\n"); - return -ENXIO; } dev_notice(smmu->dev, "option mask 0x%x\n", smmu->options);
diff --git a/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c b/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c
index b794a4dcbce1..5ac3032ee6dd 100644
--- a/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c
+++ b/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c@@ -160,6 +160,7 @@ struct tegra241_vintf { /** * struct tegra241_cmdqv - CMDQ-V for SMMUv3 * @smmu: SMMUv3 device + * @dev: CMDQV device * @base: MMIO base address * @irq: IRQ number * @num_vintfs: Total number of VINTFs