@ -351,6 +351,7 @@ struct arm_smmu_device {
unsigned long va_size ;
unsigned long ipa_size ;
unsigned long pa_size ;
unsigned long pgsize_bitmap ;
u32 num_global_irqs ;
u32 num_context_irqs ;
@ -396,8 +397,6 @@ struct arm_smmu_domain {
struct iommu_domain domain ;
} ;
static struct iommu_ops arm_smmu_ops ;
static DEFINE_SPINLOCK ( arm_smmu_devices_lock ) ;
static LIST_HEAD ( arm_smmu_devices ) ;
@ -957,7 +956,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
}
pgtbl_cfg = ( struct io_pgtable_cfg ) {
. pgsize_bitmap = arm_smmu_ops . pgsize_bitmap ,
. pgsize_bitmap = smmu - > pgsize_bitmap ,
. ias = ias ,
. oas = oas ,
. tlb = & arm_smmu_gather_ops ,
@ -971,8 +970,8 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
goto out_clear_smmu ;
}
/* Update our support page sizes to reflect the page table format */
arm_smmu_ops . pgsize_bitmap = pgtbl_cfg . pgsize_bitmap ;
/* Update the domain's page sizes to reflect the page table format */
domain - > pgsize_bitmap = pgtbl_cfg . pgsize_bitmap ;
/* Initialise the context bank with our page table cfg */
arm_smmu_init_context_bank ( smmu_domain , & pgtbl_cfg ) ;
@ -1814,19 +1813,23 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
}
/* Now we've corralled the various formats, what'll it do? */
size = 0 ;
if ( smmu - > features & ARM_SMMU_FEAT_FMT_AARCH32_S )
size | = SZ_4K | SZ_64K | SZ_1M | SZ_16M ;
smmu - > pgs ize_bitmap | = SZ_4K | SZ_64K | SZ_1M | SZ_16M ;
if ( smmu - > features &
( ARM_SMMU_FEAT_FMT_AARCH32_L | ARM_SMMU_FEAT_FMT_AARCH64_4K ) )
size | = SZ_4K | SZ_2M | SZ_1G ;
smmu - > pgs ize_bitmap | = SZ_4K | SZ_2M | SZ_1G ;
if ( smmu - > features & ARM_SMMU_FEAT_FMT_AARCH64_16K )
size | = SZ_16K | SZ_32M ;
smmu - > pgs ize_bitmap | = SZ_16K | SZ_32M ;
if ( smmu - > features & ARM_SMMU_FEAT_FMT_AARCH64_64K )
size | = SZ_64K | SZ_512M ;
smmu - > pgsize_bitmap | = SZ_64K | SZ_512M ;
if ( arm_smmu_ops . pgsize_bitmap = = - 1UL )
arm_smmu_ops . pgsize_bitmap = smmu - > pgsize_bitmap ;
else
arm_smmu_ops . pgsize_bitmap | = smmu - > pgsize_bitmap ;
dev_notice ( smmu - > dev , " \t Supported page sizes: 0x%08lx \n " ,
smmu - > pgsize_bitmap ) ;
arm_smmu_ops . pgsize_bitmap & = size ;
dev_notice ( smmu - > dev , " \t Supported page sizes: 0x%08lx \n " , size ) ;
if ( smmu - > features & ARM_SMMU_FEAT_TRANS_S1 )
dev_notice ( smmu - > dev , " \t Stage-1: %lu-bit VA -> %lu-bit IPA \n " ,