Lines Matching full:pte
242 struct pasid_entry *pte; in intel_pasid_tear_down_entry() local
246 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_tear_down_entry()
247 if (WARN_ON(!pte)) { in intel_pasid_tear_down_entry()
252 if (!pasid_pte_is_present(pte)) { in intel_pasid_tear_down_entry()
253 if (!pasid_pte_is_fault_disabled(pte)) { in intel_pasid_tear_down_entry()
254 WARN_ON(READ_ONCE(pte->val[0]) != 0); in intel_pasid_tear_down_entry()
265 pasid_clear_entry(pte); in intel_pasid_tear_down_entry()
272 did = pasid_get_domain_id(pte); in intel_pasid_tear_down_entry()
273 pgtt = pasid_pte_get_pgtt(pte); in intel_pasid_tear_down_entry()
278 clflush_cache_range(pte, sizeof(*pte)); in intel_pasid_tear_down_entry()
297 struct pasid_entry *pte, in pasid_flush_caches() argument
301 clflush_cache_range(pte, sizeof(*pte)); in pasid_flush_caches()
322 struct pasid_entry *pte) in intel_pasid_flush_present() argument
325 clflush_cache_range(pte, sizeof(*pte)); in intel_pasid_flush_present()
349 struct pasid_entry *pte, in pasid_pte_config_first_level() argument
354 pasid_clear_entry(pte); in pasid_pte_config_first_level()
357 pasid_set_flptr(pte, (u64)__pa(pgd)); in pasid_pte_config_first_level()
360 pasid_set_flpm(pte, 1); in pasid_pte_config_first_level()
363 pasid_set_pgsnp(pte); in pasid_pte_config_first_level()
365 pasid_set_domain_id(pte, did); in pasid_pte_config_first_level()
366 pasid_set_address_width(pte, iommu->agaw); in pasid_pte_config_first_level()
367 pasid_set_page_snoop(pte, !!ecap_smpwc(iommu->ecap)); in pasid_pte_config_first_level()
370 pasid_set_translation_type(pte, PASID_ENTRY_PGTT_FL_ONLY); in pasid_pte_config_first_level()
371 pasid_set_present(pte); in pasid_pte_config_first_level()
378 struct pasid_entry *pte; in intel_pasid_setup_first_level() local
393 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_setup_first_level()
394 if (!pte) { in intel_pasid_setup_first_level()
399 if (pasid_pte_is_present(pte)) { in intel_pasid_setup_first_level()
404 pasid_pte_config_first_level(iommu, pte, pgd, did, flags); in intel_pasid_setup_first_level()
408 pasid_flush_caches(iommu, pte, pasid, did); in intel_pasid_setup_first_level()
418 struct pasid_entry *pte, new_pte; in intel_pasid_replace_first_level() local
435 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_replace_first_level()
436 if (!pte) { in intel_pasid_replace_first_level()
441 if (!pasid_pte_is_present(pte)) { in intel_pasid_replace_first_level()
446 WARN_ON(old_did != pasid_get_domain_id(pte)); in intel_pasid_replace_first_level()
448 *pte = new_pte; in intel_pasid_replace_first_level()
451 intel_pasid_flush_present(iommu, dev, pasid, old_did, pte); in intel_pasid_replace_first_level()
461 struct pasid_entry *pte, in pasid_pte_config_second_level() argument
467 pasid_clear_entry(pte); in pasid_pte_config_second_level()
468 pasid_set_domain_id(pte, did); in pasid_pte_config_second_level()
469 pasid_set_slptr(pte, pgd_val); in pasid_pte_config_second_level()
470 pasid_set_address_width(pte, agaw); in pasid_pte_config_second_level()
471 pasid_set_translation_type(pte, PASID_ENTRY_PGTT_SL_ONLY); in pasid_pte_config_second_level()
472 pasid_set_fault_enable(pte); in pasid_pte_config_second_level()
473 pasid_set_page_snoop(pte, !!ecap_smpwc(iommu->ecap)); in pasid_pte_config_second_level()
475 pasid_set_ssade(pte); in pasid_pte_config_second_level()
477 pasid_set_present(pte); in pasid_pte_config_second_level()
484 struct pasid_entry *pte; in intel_pasid_setup_second_level() local
504 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_setup_second_level()
505 if (!pte) { in intel_pasid_setup_second_level()
510 if (pasid_pte_is_present(pte)) { in intel_pasid_setup_second_level()
515 pasid_pte_config_second_level(iommu, pte, pgd_val, domain->agaw, in intel_pasid_setup_second_level()
519 pasid_flush_caches(iommu, pte, pasid, did); in intel_pasid_setup_second_level()
529 struct pasid_entry *pte, new_pte; in intel_pasid_replace_second_level() local
553 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_replace_second_level()
554 if (!pte) { in intel_pasid_replace_second_level()
559 if (!pasid_pte_is_present(pte)) { in intel_pasid_replace_second_level()
564 WARN_ON(old_did != pasid_get_domain_id(pte)); in intel_pasid_replace_second_level()
566 *pte = new_pte; in intel_pasid_replace_second_level()
569 intel_pasid_flush_present(iommu, dev, pasid, old_did, pte); in intel_pasid_replace_second_level()
582 struct pasid_entry *pte; in intel_pasid_setup_dirty_tracking() local
587 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_setup_dirty_tracking()
588 if (!pte) { in intel_pasid_setup_dirty_tracking()
595 did = pasid_get_domain_id(pte); in intel_pasid_setup_dirty_tracking()
596 pgtt = pasid_pte_get_pgtt(pte); in intel_pasid_setup_dirty_tracking()
607 if (pasid_get_ssade(pte) == enabled) { in intel_pasid_setup_dirty_tracking()
613 pasid_set_ssade(pte); in intel_pasid_setup_dirty_tracking()
615 pasid_clear_ssade(pte); in intel_pasid_setup_dirty_tracking()
619 clflush_cache_range(pte, sizeof(*pte)); in intel_pasid_setup_dirty_tracking()
648 struct pasid_entry *pte, u16 did) in pasid_pte_config_pass_through() argument
652 pasid_clear_entry(pte); in pasid_pte_config_pass_through()
653 pasid_set_domain_id(pte, did); in pasid_pte_config_pass_through()
654 pasid_set_address_width(pte, iommu->agaw); in pasid_pte_config_pass_through()
655 pasid_set_translation_type(pte, PASID_ENTRY_PGTT_PT); in pasid_pte_config_pass_through()
656 pasid_set_fault_enable(pte); in pasid_pte_config_pass_through()
657 pasid_set_page_snoop(pte, !!ecap_smpwc(iommu->ecap)); in pasid_pte_config_pass_through()
658 pasid_set_present(pte); in pasid_pte_config_pass_through()
665 struct pasid_entry *pte; in intel_pasid_setup_pass_through() local
668 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_setup_pass_through()
669 if (!pte) { in intel_pasid_setup_pass_through()
674 if (pasid_pte_is_present(pte)) { in intel_pasid_setup_pass_through()
679 pasid_pte_config_pass_through(iommu, pte, did); in intel_pasid_setup_pass_through()
682 pasid_flush_caches(iommu, pte, pasid, did); in intel_pasid_setup_pass_through()
691 struct pasid_entry *pte, new_pte; in intel_pasid_replace_pass_through() local
697 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_replace_pass_through()
698 if (!pte) { in intel_pasid_replace_pass_through()
703 if (!pasid_pte_is_present(pte)) { in intel_pasid_replace_pass_through()
708 WARN_ON(old_did != pasid_get_domain_id(pte)); in intel_pasid_replace_pass_through()
710 *pte = new_pte; in intel_pasid_replace_pass_through()
713 intel_pasid_flush_present(iommu, dev, pasid, old_did, pte); in intel_pasid_replace_pass_through()
725 struct pasid_entry *pte; in intel_pasid_setup_page_snoop_control() local
729 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_setup_page_snoop_control()
730 if (WARN_ON(!pte || !pasid_pte_is_present(pte))) { in intel_pasid_setup_page_snoop_control()
735 pasid_set_pgsnp(pte); in intel_pasid_setup_page_snoop_control()
736 did = pasid_get_domain_id(pte); in intel_pasid_setup_page_snoop_control()
739 intel_pasid_flush_present(iommu, dev, pasid, did, pte); in intel_pasid_setup_page_snoop_control()
743 struct pasid_entry *pte, in pasid_pte_config_nestd() argument
752 pasid_clear_entry(pte); in pasid_pte_config_nestd()
755 pasid_set_flpm(pte, 1); in pasid_pte_config_nestd()
757 pasid_set_flptr(pte, s1_cfg->pgtbl_addr); in pasid_pte_config_nestd()
760 pasid_set_sre(pte); in pasid_pte_config_nestd()
762 pasid_set_wpe(pte); in pasid_pte_config_nestd()
766 pasid_set_eafe(pte); in pasid_pte_config_nestd()
769 pasid_set_pgsnp(pte); in pasid_pte_config_nestd()
771 pasid_set_slptr(pte, virt_to_phys(pgd)); in pasid_pte_config_nestd()
772 pasid_set_fault_enable(pte); in pasid_pte_config_nestd()
773 pasid_set_domain_id(pte, did); in pasid_pte_config_nestd()
774 pasid_set_address_width(pte, s2_domain->agaw); in pasid_pte_config_nestd()
775 pasid_set_page_snoop(pte, !!ecap_smpwc(iommu->ecap)); in pasid_pte_config_nestd()
777 pasid_set_ssade(pte); in pasid_pte_config_nestd()
778 pasid_set_translation_type(pte, PASID_ENTRY_PGTT_NESTED); in pasid_pte_config_nestd()
779 pasid_set_present(pte); in pasid_pte_config_nestd()
799 struct pasid_entry *pte; in intel_pasid_setup_nested() local
831 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_setup_nested()
832 if (!pte) { in intel_pasid_setup_nested()
836 if (pasid_pte_is_present(pte)) { in intel_pasid_setup_nested()
841 pasid_pte_config_nestd(iommu, pte, s1_cfg, s2_domain, did); in intel_pasid_setup_nested()
844 pasid_flush_caches(iommu, pte, pasid, did); in intel_pasid_setup_nested()
856 struct pasid_entry *pte, new_pte; in intel_pasid_replace_nested() local
890 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_replace_nested()
891 if (!pte) { in intel_pasid_replace_nested()
896 if (!pasid_pte_is_present(pte)) { in intel_pasid_replace_nested()
901 WARN_ON(old_did != pasid_get_domain_id(pte)); in intel_pasid_replace_nested()
903 *pte = new_pte; in intel_pasid_replace_nested()
906 intel_pasid_flush_present(iommu, dev, pasid, old_did, pte); in intel_pasid_replace_nested()
1129 struct pasid_entry *pte; in intel_context_flush_present() local
1168 pte = intel_pasid_get_entry(info->dev, i); in intel_context_flush_present()
1169 if (!pte || !pasid_pte_is_present(pte)) in intel_context_flush_present()
1172 did = pasid_get_domain_id(pte); in intel_context_flush_present()