Lines Matching full:pte
243 struct pasid_entry *pte; in intel_pasid_tear_down_entry() local
247 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_tear_down_entry()
248 if (WARN_ON(!pte)) { in intel_pasid_tear_down_entry()
253 if (!pasid_pte_is_present(pte)) { in intel_pasid_tear_down_entry()
254 if (!pasid_pte_is_fault_disabled(pte)) { in intel_pasid_tear_down_entry()
255 WARN_ON(READ_ONCE(pte->val[0]) != 0); in intel_pasid_tear_down_entry()
266 pasid_clear_entry(pte); in intel_pasid_tear_down_entry()
273 did = pasid_get_domain_id(pte); in intel_pasid_tear_down_entry()
274 pgtt = pasid_pte_get_pgtt(pte); in intel_pasid_tear_down_entry()
279 clflush_cache_range(pte, sizeof(*pte)); in intel_pasid_tear_down_entry()
298 struct pasid_entry *pte, in pasid_flush_caches() argument
302 clflush_cache_range(pte, sizeof(*pte)); in pasid_flush_caches()
323 struct pasid_entry *pte) in intel_pasid_flush_present() argument
326 clflush_cache_range(pte, sizeof(*pte)); in intel_pasid_flush_present()
350 struct pasid_entry *pte, in pasid_pte_config_first_level() argument
356 pasid_clear_entry(pte); in pasid_pte_config_first_level()
359 pasid_set_flptr(pte, fsptptr); in pasid_pte_config_first_level()
362 pasid_set_flpm(pte, 1); in pasid_pte_config_first_level()
365 pasid_set_pgsnp(pte); in pasid_pte_config_first_level()
367 pasid_set_domain_id(pte, did); in pasid_pte_config_first_level()
368 pasid_set_address_width(pte, iommu->agaw); in pasid_pte_config_first_level()
369 pasid_set_page_snoop(pte, !!ecap_smpwc(iommu->ecap)); in pasid_pte_config_first_level()
372 pasid_set_translation_type(pte, PASID_ENTRY_PGTT_FL_ONLY); in pasid_pte_config_first_level()
373 pasid_set_present(pte); in pasid_pte_config_first_level()
380 struct pasid_entry *pte; in intel_pasid_setup_first_level() local
395 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_setup_first_level()
396 if (!pte) { in intel_pasid_setup_first_level()
401 if (pasid_pte_is_present(pte)) { in intel_pasid_setup_first_level()
406 pasid_pte_config_first_level(iommu, pte, fsptptr, did, flags); in intel_pasid_setup_first_level()
410 pasid_flush_caches(iommu, pte, pasid, did); in intel_pasid_setup_first_level()
420 struct pasid_entry *pte, new_pte; in intel_pasid_replace_first_level() local
437 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_replace_first_level()
438 if (!pte) { in intel_pasid_replace_first_level()
443 if (!pasid_pte_is_present(pte)) { in intel_pasid_replace_first_level()
448 WARN_ON(old_did != pasid_get_domain_id(pte)); in intel_pasid_replace_first_level()
450 *pte = new_pte; in intel_pasid_replace_first_level()
453 intel_pasid_flush_present(iommu, dev, pasid, old_did, pte); in intel_pasid_replace_first_level()
463 struct pasid_entry *pte, in pasid_pte_config_second_level() argument
469 pasid_clear_entry(pte); in pasid_pte_config_second_level()
470 pasid_set_domain_id(pte, did); in pasid_pte_config_second_level()
471 pasid_set_slptr(pte, pgd_val); in pasid_pte_config_second_level()
472 pasid_set_address_width(pte, agaw); in pasid_pte_config_second_level()
473 pasid_set_translation_type(pte, PASID_ENTRY_PGTT_SL_ONLY); in pasid_pte_config_second_level()
474 pasid_set_fault_enable(pte); in pasid_pte_config_second_level()
475 pasid_set_page_snoop(pte, !!ecap_smpwc(iommu->ecap)); in pasid_pte_config_second_level()
477 pasid_set_ssade(pte); in pasid_pte_config_second_level()
479 pasid_set_present(pte); in pasid_pte_config_second_level()
486 struct pasid_entry *pte; in intel_pasid_setup_second_level() local
506 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_setup_second_level()
507 if (!pte) { in intel_pasid_setup_second_level()
512 if (pasid_pte_is_present(pte)) { in intel_pasid_setup_second_level()
517 pasid_pte_config_second_level(iommu, pte, pgd_val, domain->agaw, in intel_pasid_setup_second_level()
521 pasid_flush_caches(iommu, pte, pasid, did); in intel_pasid_setup_second_level()
531 struct pasid_entry *pte, new_pte; in intel_pasid_replace_second_level() local
555 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_replace_second_level()
556 if (!pte) { in intel_pasid_replace_second_level()
561 if (!pasid_pte_is_present(pte)) { in intel_pasid_replace_second_level()
566 WARN_ON(old_did != pasid_get_domain_id(pte)); in intel_pasid_replace_second_level()
568 *pte = new_pte; in intel_pasid_replace_second_level()
571 intel_pasid_flush_present(iommu, dev, pasid, old_did, pte); in intel_pasid_replace_second_level()
584 struct pasid_entry *pte; in intel_pasid_setup_dirty_tracking() local
589 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_setup_dirty_tracking()
590 if (!pte) { in intel_pasid_setup_dirty_tracking()
597 did = pasid_get_domain_id(pte); in intel_pasid_setup_dirty_tracking()
598 pgtt = pasid_pte_get_pgtt(pte); in intel_pasid_setup_dirty_tracking()
609 if (pasid_get_ssade(pte) == enabled) { in intel_pasid_setup_dirty_tracking()
615 pasid_set_ssade(pte); in intel_pasid_setup_dirty_tracking()
617 pasid_clear_ssade(pte); in intel_pasid_setup_dirty_tracking()
621 clflush_cache_range(pte, sizeof(*pte)); in intel_pasid_setup_dirty_tracking()
650 struct pasid_entry *pte, u16 did) in pasid_pte_config_pass_through() argument
654 pasid_clear_entry(pte); in pasid_pte_config_pass_through()
655 pasid_set_domain_id(pte, did); in pasid_pte_config_pass_through()
656 pasid_set_address_width(pte, iommu->agaw); in pasid_pte_config_pass_through()
657 pasid_set_translation_type(pte, PASID_ENTRY_PGTT_PT); in pasid_pte_config_pass_through()
658 pasid_set_fault_enable(pte); in pasid_pte_config_pass_through()
659 pasid_set_page_snoop(pte, !!ecap_smpwc(iommu->ecap)); in pasid_pte_config_pass_through()
660 pasid_set_present(pte); in pasid_pte_config_pass_through()
667 struct pasid_entry *pte; in intel_pasid_setup_pass_through() local
670 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_setup_pass_through()
671 if (!pte) { in intel_pasid_setup_pass_through()
676 if (pasid_pte_is_present(pte)) { in intel_pasid_setup_pass_through()
681 pasid_pte_config_pass_through(iommu, pte, did); in intel_pasid_setup_pass_through()
684 pasid_flush_caches(iommu, pte, pasid, did); in intel_pasid_setup_pass_through()
693 struct pasid_entry *pte, new_pte; in intel_pasid_replace_pass_through() local
699 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_replace_pass_through()
700 if (!pte) { in intel_pasid_replace_pass_through()
705 if (!pasid_pte_is_present(pte)) { in intel_pasid_replace_pass_through()
710 WARN_ON(old_did != pasid_get_domain_id(pte)); in intel_pasid_replace_pass_through()
712 *pte = new_pte; in intel_pasid_replace_pass_through()
715 intel_pasid_flush_present(iommu, dev, pasid, old_did, pte); in intel_pasid_replace_pass_through()
727 struct pasid_entry *pte; in intel_pasid_setup_page_snoop_control() local
731 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_setup_page_snoop_control()
732 if (WARN_ON(!pte || !pasid_pte_is_present(pte))) { in intel_pasid_setup_page_snoop_control()
737 pasid_set_pgsnp(pte); in intel_pasid_setup_page_snoop_control()
738 did = pasid_get_domain_id(pte); in intel_pasid_setup_page_snoop_control()
741 intel_pasid_flush_present(iommu, dev, pasid, did, pte); in intel_pasid_setup_page_snoop_control()
745 struct pasid_entry *pte, in pasid_pte_config_nestd() argument
754 pasid_clear_entry(pte); in pasid_pte_config_nestd()
757 pasid_set_flpm(pte, 1); in pasid_pte_config_nestd()
759 pasid_set_flptr(pte, s1_cfg->pgtbl_addr); in pasid_pte_config_nestd()
762 pasid_set_sre(pte); in pasid_pte_config_nestd()
764 pasid_set_wpe(pte); in pasid_pte_config_nestd()
768 pasid_set_eafe(pte); in pasid_pte_config_nestd()
771 pasid_set_pgsnp(pte); in pasid_pte_config_nestd()
773 pasid_set_slptr(pte, virt_to_phys(pgd)); in pasid_pte_config_nestd()
774 pasid_set_fault_enable(pte); in pasid_pte_config_nestd()
775 pasid_set_domain_id(pte, did); in pasid_pte_config_nestd()
776 pasid_set_address_width(pte, s2_domain->agaw); in pasid_pte_config_nestd()
777 pasid_set_page_snoop(pte, !!ecap_smpwc(iommu->ecap)); in pasid_pte_config_nestd()
779 pasid_set_ssade(pte); in pasid_pte_config_nestd()
780 pasid_set_translation_type(pte, PASID_ENTRY_PGTT_NESTED); in pasid_pte_config_nestd()
781 pasid_set_present(pte); in pasid_pte_config_nestd()
801 struct pasid_entry *pte; in intel_pasid_setup_nested() local
833 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_setup_nested()
834 if (!pte) { in intel_pasid_setup_nested()
838 if (pasid_pte_is_present(pte)) { in intel_pasid_setup_nested()
843 pasid_pte_config_nestd(iommu, pte, s1_cfg, s2_domain, did); in intel_pasid_setup_nested()
846 pasid_flush_caches(iommu, pte, pasid, did); in intel_pasid_setup_nested()
858 struct pasid_entry *pte, new_pte; in intel_pasid_replace_nested() local
892 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_replace_nested()
893 if (!pte) { in intel_pasid_replace_nested()
898 if (!pasid_pte_is_present(pte)) { in intel_pasid_replace_nested()
903 WARN_ON(old_did != pasid_get_domain_id(pte)); in intel_pasid_replace_nested()
905 *pte = new_pte; in intel_pasid_replace_nested()
908 intel_pasid_flush_present(iommu, dev, pasid, old_did, pte); in intel_pasid_replace_nested()