Thread (16 messages) 16 messages, 4 authors, 2024-08-29

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help