On 11/04/17 15:42, linucher...@gmail.com wrote:
> From: Linu Cherian <linu.cher...@cavium.com>
> 
> With implementations supporting only page 0 of register space,
> resource size can be 64k as well and hence perform size checks
> based on smmu option PAGE0_REGS_ONLY.

What harm comes of mapping page 1 if we don't access it?

Robin.

> For this, arm_smmu_device_dt_probe/acpi_probe has been moved before
> platform_get_resource call, so that smmu options are set beforehand.
> 
> Signed-off-by: Linu Cherian <linu.cher...@cavium.com>
> ---
>  drivers/iommu/arm-smmu-v3.c | 26 +++++++++++++++++---------
>  1 file changed, 17 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
> index df9f27b..b326195 100644
> --- a/drivers/iommu/arm-smmu-v3.c
> +++ b/drivers/iommu/arm-smmu-v3.c
> @@ -2669,6 +2669,14 @@ static int arm_smmu_device_dt_probe(struct 
> platform_device *pdev,
>       return ret;
>  }
>  
> +static unsigned long arm_smmu_resource_size(struct arm_smmu_device *smmu)
> +{
> +     if (ARM_SMMU_PAGE0_REGS_ONLY(smmu))
> +             return SZ_64K;
> +     else
> +             return SZ_128K;
> +}
> +
>  static int arm_smmu_device_probe(struct platform_device *pdev)
>  {
>       int irq, ret;
> @@ -2685,9 +2693,17 @@ static int arm_smmu_device_probe(struct 
> platform_device *pdev)
>       }
>       smmu->dev = dev;
>  
> +     if (dev->of_node) {
> +             ret = arm_smmu_device_dt_probe(pdev, smmu);
> +     } else {
> +             ret = arm_smmu_device_acpi_probe(pdev, smmu);
> +             if (ret == -ENODEV)
> +                     return ret;
> +     }
> +
>       /* Base address */
>       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> -     if (resource_size(res) + 1 < SZ_128K) {
> +     if (resource_size(res) + 1 < arm_smmu_resource_size(smmu)) {
>               dev_err(dev, "MMIO region too small (%pr)\n", res);
>               return -EINVAL;
>       }
> @@ -2714,14 +2730,6 @@ static int arm_smmu_device_probe(struct 
> platform_device *pdev)
>       if (irq > 0)
>               smmu->gerr_irq = irq;
>  
> -     if (dev->of_node) {
> -             ret = arm_smmu_device_dt_probe(pdev, smmu);
> -     } else {
> -             ret = arm_smmu_device_acpi_probe(pdev, smmu);
> -             if (ret == -ENODEV)
> -                     return ret;
> -     }
> -
>       /* Set bypass mode according to firmware probing result */
>       bypass = !!ret;
>  
> 

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to