iommu/arm-smmu-v3: Add acpi_smmu_iort_probe_model for impl
For model-specific implementation, repurpose the acpi_smmu_get_options() to a wider acpi_smmu_acpi_probe_model(). A new model can add to the list in this new function. Suggested-by: Will Deacon <will@kernel.org> Change-Id: I6a9912f55cde32a78da1203f1abffc50e59c1438 Signed-off-by: Nicolin Chen <nicolinc@nvidia.com> Link: https://lore.kernel.org/r/79716299829aeab2e55b8c7932f2634b209bb4d5.1724970714.git.nicolinc@nvidia.com Signed-off-by: Will Deacon <will@kernel.org> Signed-off-by: Ashish Mhetre <amhetre@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/3rdparty/canonical/linux-noble/+/3435433 Reviewed-by: Pritesh Raithatha <praithatha@nvidia.com> GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
@@ -3713,18 +3713,25 @@ 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;
|
||||
}
|
||||
|
||||
dev_notice(smmu->dev, "option mask 0x%x\n", smmu->options);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int arm_smmu_device_acpi_probe(struct platform_device *pdev,
|
||||
@@ -3739,12 +3746,10 @@ static int arm_smmu_device_acpi_probe(struct platform_device *pdev,
|
||||
/* Retrieve SMMUv3 specific data */
|
||||
iort_smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
|
||||
|
||||
acpi_smmu_get_options(iort_smmu->model, smmu);
|
||||
|
||||
if (iort_smmu->flags & ACPI_IORT_SMMU_V3_COHACC_OVERRIDE)
|
||||
smmu->features |= ARM_SMMU_FEAT_COHERENCY;
|
||||
|
||||
return 0;
|
||||
return acpi_smmu_iort_probe_model(node, smmu);
|
||||
}
|
||||
#else
|
||||
static inline int arm_smmu_device_acpi_probe(struct platform_device *pdev,
|
||||
|
||||
Reference in New Issue
Block a user