On Tue, Aug 27, 2024 at 04:57:48PM +0100, Robin Murphy wrote: > > > @@ -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