Lines Matching full:cfg
188 struct io_pgtable_cfg *cfg) in __arm_lpae_alloc_pages() argument
190 struct device *dev = cfg->iommu_dev; in __arm_lpae_alloc_pages()
203 if (!cfg->coherent_walk) { in __arm_lpae_alloc_pages()
227 struct io_pgtable_cfg *cfg) in __arm_lpae_free_pages() argument
229 if (!cfg->coherent_walk) in __arm_lpae_free_pages()
230 dma_unmap_single(cfg->iommu_dev, __arm_lpae_dma_addr(pages), in __arm_lpae_free_pages()
236 struct io_pgtable_cfg *cfg) in __arm_lpae_sync_pte() argument
238 dma_sync_single_for_device(cfg->iommu_dev, __arm_lpae_dma_addr(ptep), in __arm_lpae_sync_pte()
243 struct io_pgtable_cfg *cfg) in __arm_lpae_set_pte() argument
247 if (!cfg->coherent_walk) in __arm_lpae_set_pte()
248 __arm_lpae_sync_pte(ptep, cfg); in __arm_lpae_set_pte()
269 __arm_lpae_set_pte(ptep, pte, &data->iop.cfg); in __arm_lpae_init_pte()
308 struct io_pgtable_cfg *cfg = &data->iop.cfg; in arm_lpae_install_table() local
311 if (cfg->quirks & IO_PGTABLE_QUIRK_ARM_NS) in arm_lpae_install_table()
323 if (cfg->coherent_walk || (old & ARM_LPAE_PTE_SW_SYNC)) in arm_lpae_install_table()
327 __arm_lpae_sync_pte(ptep, cfg); in arm_lpae_install_table()
341 struct io_pgtable_cfg *cfg = &data->iop.cfg; in __arm_lpae_map() local
357 cptep = __arm_lpae_alloc_pages(tblsz, gfp, cfg); in __arm_lpae_map()
363 __arm_lpae_free_pages(cptep, tblsz, cfg); in __arm_lpae_map()
364 } else if (!cfg->coherent_walk && !(pte & ARM_LPAE_PTE_SW_SYNC)) { in __arm_lpae_map()
365 __arm_lpae_sync_pte(ptep, cfg); in __arm_lpae_map()
435 if (data->iop.cfg.quirks & IO_PGTABLE_QUIRK_ARM_NS) in arm_lpae_prot_to_pte()
448 struct io_pgtable_cfg *cfg = &data->iop.cfg; in arm_lpae_map() local
452 long iaext = (s64)iova >> cfg->ias; in arm_lpae_map()
458 if (WARN_ON(!size || (size & cfg->pgsize_bitmap) != size)) in arm_lpae_map()
461 if (cfg->quirks & IO_PGTABLE_QUIRK_ARM_TTBR1) in arm_lpae_map()
463 if (WARN_ON(iaext || paddr >> cfg->oas)) in arm_lpae_map()
505 __arm_lpae_free_pages(start, table_size, &data->iop.cfg); in __arm_lpae_free_pgtable()
522 struct io_pgtable_cfg *cfg = &data->iop.cfg; in arm_lpae_split_blk_unmap() local
532 tablep = __arm_lpae_alloc_pages(tablesz, GFP_ATOMIC, cfg); in arm_lpae_split_blk_unmap()
552 __arm_lpae_free_pages(tablep, tablesz, cfg); in arm_lpae_split_blk_unmap()
589 __arm_lpae_set_pte(ptep, 0, &iop->cfg); in __arm_lpae_unmap()
597 } else if (iop->cfg.quirks & IO_PGTABLE_QUIRK_NON_STRICT) { in __arm_lpae_unmap()
627 struct io_pgtable_cfg *cfg = &data->iop.cfg; in arm_lpae_unmap() local
629 long iaext = (s64)iova >> cfg->ias; in arm_lpae_unmap()
631 if (WARN_ON(!size || (size & cfg->pgsize_bitmap) != size)) in arm_lpae_unmap()
634 if (cfg->quirks & IO_PGTABLE_QUIRK_ARM_TTBR1) in arm_lpae_unmap()
678 static void arm_lpae_restrict_pgsizes(struct io_pgtable_cfg *cfg) in arm_lpae_restrict_pgsizes() argument
690 if (cfg->pgsize_bitmap & PAGE_SIZE) in arm_lpae_restrict_pgsizes()
692 else if (cfg->pgsize_bitmap & ~PAGE_MASK) in arm_lpae_restrict_pgsizes()
693 granule = 1UL << __fls(cfg->pgsize_bitmap & ~PAGE_MASK); in arm_lpae_restrict_pgsizes()
694 else if (cfg->pgsize_bitmap & PAGE_MASK) in arm_lpae_restrict_pgsizes()
695 granule = 1UL << __ffs(cfg->pgsize_bitmap & PAGE_MASK); in arm_lpae_restrict_pgsizes()
709 if (cfg->oas > 48) in arm_lpae_restrict_pgsizes()
716 cfg->pgsize_bitmap &= page_sizes; in arm_lpae_restrict_pgsizes()
717 cfg->ias = min(cfg->ias, max_addr_bits); in arm_lpae_restrict_pgsizes()
718 cfg->oas = min(cfg->oas, max_addr_bits); in arm_lpae_restrict_pgsizes()
722 arm_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg) in arm_lpae_alloc_pgtable() argument
727 arm_lpae_restrict_pgsizes(cfg); in arm_lpae_alloc_pgtable()
729 if (!(cfg->pgsize_bitmap & (SZ_4K | SZ_16K | SZ_64K))) in arm_lpae_alloc_pgtable()
732 if (cfg->ias > ARM_LPAE_MAX_ADDR_BITS) in arm_lpae_alloc_pgtable()
735 if (cfg->oas > ARM_LPAE_MAX_ADDR_BITS) in arm_lpae_alloc_pgtable()
742 pg_shift = __ffs(cfg->pgsize_bitmap); in arm_lpae_alloc_pgtable()
745 va_bits = cfg->ias - pg_shift; in arm_lpae_alloc_pgtable()
762 arm_64_lpae_alloc_pgtable_s1(struct io_pgtable_cfg *cfg, void *cookie) in arm_64_lpae_alloc_pgtable_s1() argument
766 typeof(&cfg->arm_lpae_s1_cfg.tcr) tcr = &cfg->arm_lpae_s1_cfg.tcr; in arm_64_lpae_alloc_pgtable_s1()
769 if (cfg->quirks & ~(IO_PGTABLE_QUIRK_ARM_NS | in arm_64_lpae_alloc_pgtable_s1()
774 data = arm_lpae_alloc_pgtable(cfg); in arm_64_lpae_alloc_pgtable_s1()
779 if (cfg->coherent_walk) { in arm_64_lpae_alloc_pgtable_s1()
789 tg1 = cfg->quirks & IO_PGTABLE_QUIRK_ARM_TTBR1; in arm_64_lpae_alloc_pgtable_s1()
802 switch (cfg->oas) { in arm_64_lpae_alloc_pgtable_s1()
828 tcr->tsz = 64ULL - cfg->ias; in arm_64_lpae_alloc_pgtable_s1()
840 cfg->arm_lpae_s1_cfg.mair = reg; in arm_64_lpae_alloc_pgtable_s1()
844 GFP_KERNEL, cfg); in arm_64_lpae_alloc_pgtable_s1()
852 cfg->arm_lpae_s1_cfg.ttbr = virt_to_phys(data->pgd); in arm_64_lpae_alloc_pgtable_s1()
861 arm_64_lpae_alloc_pgtable_s2(struct io_pgtable_cfg *cfg, void *cookie) in arm_64_lpae_alloc_pgtable_s2() argument
865 typeof(&cfg->arm_lpae_s2_cfg.vtcr) vtcr = &cfg->arm_lpae_s2_cfg.vtcr; in arm_64_lpae_alloc_pgtable_s2()
868 if (cfg->quirks & ~(IO_PGTABLE_QUIRK_NON_STRICT)) in arm_64_lpae_alloc_pgtable_s2()
871 data = arm_lpae_alloc_pgtable(cfg); in arm_64_lpae_alloc_pgtable_s2()
890 if (cfg->coherent_walk) { in arm_64_lpae_alloc_pgtable_s2()
915 switch (cfg->oas) { in arm_64_lpae_alloc_pgtable_s2()
941 vtcr->tsz = 64ULL - cfg->ias; in arm_64_lpae_alloc_pgtable_s2()
946 GFP_KERNEL, cfg); in arm_64_lpae_alloc_pgtable_s2()
954 cfg->arm_lpae_s2_cfg.vttbr = virt_to_phys(data->pgd); in arm_64_lpae_alloc_pgtable_s2()
963 arm_32_lpae_alloc_pgtable_s1(struct io_pgtable_cfg *cfg, void *cookie) in arm_32_lpae_alloc_pgtable_s1() argument
965 if (cfg->ias > 32 || cfg->oas > 40) in arm_32_lpae_alloc_pgtable_s1()
968 cfg->pgsize_bitmap &= (SZ_4K | SZ_2M | SZ_1G); in arm_32_lpae_alloc_pgtable_s1()
969 return arm_64_lpae_alloc_pgtable_s1(cfg, cookie); in arm_32_lpae_alloc_pgtable_s1()
973 arm_32_lpae_alloc_pgtable_s2(struct io_pgtable_cfg *cfg, void *cookie) in arm_32_lpae_alloc_pgtable_s2() argument
975 if (cfg->ias > 40 || cfg->oas > 40) in arm_32_lpae_alloc_pgtable_s2()
978 cfg->pgsize_bitmap &= (SZ_4K | SZ_2M | SZ_1G); in arm_32_lpae_alloc_pgtable_s2()
979 return arm_64_lpae_alloc_pgtable_s2(cfg, cookie); in arm_32_lpae_alloc_pgtable_s2()
983 arm_mali_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg, void *cookie) in arm_mali_lpae_alloc_pgtable() argument
988 if (cfg->quirks) in arm_mali_lpae_alloc_pgtable()
991 if (cfg->ias > 48 || cfg->oas > 40) in arm_mali_lpae_alloc_pgtable()
994 cfg->pgsize_bitmap &= (SZ_4K | SZ_2M | SZ_1G); in arm_mali_lpae_alloc_pgtable()
996 data = arm_lpae_alloc_pgtable(cfg); in arm_mali_lpae_alloc_pgtable()
1012 cfg->arm_mali_lpae_cfg.memattr = in arm_mali_lpae_alloc_pgtable()
1021 cfg); in arm_mali_lpae_alloc_pgtable()
1028 cfg->arm_mali_lpae_cfg.transtab = virt_to_phys(data->pgd) | in arm_mali_lpae_alloc_pgtable()
1031 if (cfg->coherent_walk) in arm_mali_lpae_alloc_pgtable()
1032 cfg->arm_mali_lpae_cfg.transtab |= ARM_MALI_LPAE_TTBR_SHARE_OUTER; in arm_mali_lpae_alloc_pgtable()
1099 struct io_pgtable_cfg *cfg = &data->iop.cfg; in arm_lpae_dump_ops() local
1101 pr_err("cfg: pgsize_bitmap 0x%lx, ias %u-bit\n", in arm_lpae_dump_ops()
1102 cfg->pgsize_bitmap, cfg->ias); in arm_lpae_dump_ops()
1115 static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg) in arm_lpae_run_tests() argument
1130 cfg_cookie = cfg; in arm_lpae_run_tests()
1131 ops = alloc_io_pgtable_ops(fmts[i], cfg, cfg); in arm_lpae_run_tests()
1154 for_each_set_bit(j, &cfg->pgsize_bitmap, BITS_PER_LONG) { in arm_lpae_run_tests()
1175 size = 1UL << __ffs(cfg->pgsize_bitmap); in arm_lpae_run_tests()
1188 for_each_set_bit(j, &cfg->pgsize_bitmap, BITS_PER_LONG) { in arm_lpae_run_tests()
1227 struct io_pgtable_cfg cfg = { in arm_lpae_do_selftests() local
1235 cfg.pgsize_bitmap = pgsize[i]; in arm_lpae_do_selftests()
1236 cfg.ias = ias[j]; in arm_lpae_do_selftests()
1239 if (arm_lpae_run_tests(&cfg)) in arm_lpae_do_selftests()