aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/arm64
diff options
context:
space:
mode:
authorLinu Cherian <linu.cherian@cavium.com>2017-06-22 08:05:36 -0400
committerWill Deacon <will.deacon@arm.com>2017-06-23 12:58:03 -0400
commit403e8c7c5bcaff3291a2c7012fe80f707a854d10 (patch)
tree4cfc2419cf14a9d509200c73632ce9369f4a9abd /drivers/acpi/arm64
parent12275bf0a4deb690a5dc9903d207060737b7bae6 (diff)
ACPI/IORT: Fixup SMMUv3 resource size for Cavium ThunderX2 SMMUv3 model
Cavium ThunderX2 implementation doesn't support second page in SMMU register space. Hence, resource size is set as 64k for this model. Signed-off-by: Linu Cherian <linu.cherian@cavium.com> Signed-off-by: Geetha Sowjanya <geethasowjanya.akula@cavium.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'drivers/acpi/arm64')
-rw-r--r--drivers/acpi/arm64/iort.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
index da225710b009..a8ebda9f7e97 100644
--- a/drivers/acpi/arm64/iort.c
+++ b/drivers/acpi/arm64/iort.c
@@ -833,6 +833,18 @@ static int __init arm_smmu_v3_count_resources(struct acpi_iort_node *node)
833 return num_res; 833 return num_res;
834} 834}
835 835
836static unsigned long arm_smmu_v3_resource_size(struct acpi_iort_smmu_v3 *smmu)
837{
838 /*
839 * Override the size, for Cavium ThunderX2 implementation
840 * which doesn't support the page 1 SMMU register space.
841 */
842 if (smmu->model == ACPI_IORT_SMMU_V3_CAVIUM_CN99XX)
843 return SZ_64K;
844
845 return SZ_128K;
846}
847
836static void __init arm_smmu_v3_init_resources(struct resource *res, 848static void __init arm_smmu_v3_init_resources(struct resource *res,
837 struct acpi_iort_node *node) 849 struct acpi_iort_node *node)
838{ 850{
@@ -843,7 +855,8 @@ static void __init arm_smmu_v3_init_resources(struct resource *res,
843 smmu = (struct acpi_iort_smmu_v3 *)node->node_data; 855 smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
844 856
845 res[num_res].start = smmu->base_address; 857 res[num_res].start = smmu->base_address;
846 res[num_res].end = smmu->base_address + SZ_128K - 1; 858 res[num_res].end = smmu->base_address +
859 arm_smmu_v3_resource_size(smmu) - 1;
847 res[num_res].flags = IORESOURCE_MEM; 860 res[num_res].flags = IORESOURCE_MEM;
848 861
849 num_res++; 862 num_res++;