|
@@ -575,7 +575,7 @@ static void dump_dte_entry(u16 devid)
|
|
|
|
|
|
static void dump_command(unsigned long phys_addr)
|
|
|
{
|
|
|
- struct iommu_cmd *cmd = phys_to_virt(phys_addr);
|
|
|
+ struct iommu_cmd *cmd = iommu_phys_to_virt(phys_addr);
|
|
|
int i;
|
|
|
|
|
|
for (i = 0; i < 4; ++i)
|
|
@@ -919,11 +919,13 @@ static void copy_cmd_to_buffer(struct amd_iommu *iommu,
|
|
|
|
|
|
static void build_completion_wait(struct iommu_cmd *cmd, u64 address)
|
|
|
{
|
|
|
+ u64 paddr = iommu_virt_to_phys((void *)address);
|
|
|
+
|
|
|
WARN_ON(address & 0x7ULL);
|
|
|
|
|
|
memset(cmd, 0, sizeof(*cmd));
|
|
|
- cmd->data[0] = lower_32_bits(__pa(address)) | CMD_COMPL_WAIT_STORE_MASK;
|
|
|
- cmd->data[1] = upper_32_bits(__pa(address));
|
|
|
+ cmd->data[0] = lower_32_bits(paddr) | CMD_COMPL_WAIT_STORE_MASK;
|
|
|
+ cmd->data[1] = upper_32_bits(paddr);
|
|
|
cmd->data[2] = 1;
|
|
|
CMD_SET_TYPE(cmd, CMD_COMPL_WAIT);
|
|
|
}
|
|
@@ -1383,7 +1385,7 @@ static bool increase_address_space(struct protection_domain *domain,
|
|
|
return false;
|
|
|
|
|
|
*pte = PM_LEVEL_PDE(domain->mode,
|
|
|
- virt_to_phys(domain->pt_root));
|
|
|
+ iommu_virt_to_phys(domain->pt_root));
|
|
|
domain->pt_root = pte;
|
|
|
domain->mode += 1;
|
|
|
domain->updated = true;
|
|
@@ -1420,7 +1422,7 @@ static u64 *alloc_pte(struct protection_domain *domain,
|
|
|
if (!page)
|
|
|
return NULL;
|
|
|
|
|
|
- __npte = PM_LEVEL_PDE(level, virt_to_phys(page));
|
|
|
+ __npte = PM_LEVEL_PDE(level, iommu_virt_to_phys(page));
|
|
|
|
|
|
/* pte could have been changed somewhere. */
|
|
|
if (cmpxchg64(pte, __pte, __npte) != __pte) {
|
|
@@ -1536,10 +1538,10 @@ static int iommu_map_page(struct protection_domain *dom,
|
|
|
return -EBUSY;
|
|
|
|
|
|
if (count > 1) {
|
|
|
- __pte = PAGE_SIZE_PTE(phys_addr, page_size);
|
|
|
+ __pte = PAGE_SIZE_PTE(__sme_set(phys_addr), page_size);
|
|
|
__pte |= PM_LEVEL_ENC(7) | IOMMU_PTE_P | IOMMU_PTE_FC;
|
|
|
} else
|
|
|
- __pte = phys_addr | IOMMU_PTE_P | IOMMU_PTE_FC;
|
|
|
+ __pte = __sme_set(phys_addr) | IOMMU_PTE_P | IOMMU_PTE_FC;
|
|
|
|
|
|
if (prot & IOMMU_PROT_IR)
|
|
|
__pte |= IOMMU_PTE_IR;
|
|
@@ -1755,7 +1757,7 @@ static void free_gcr3_tbl_level1(u64 *tbl)
|
|
|
if (!(tbl[i] & GCR3_VALID))
|
|
|
continue;
|
|
|
|
|
|
- ptr = __va(tbl[i] & PAGE_MASK);
|
|
|
+ ptr = iommu_phys_to_virt(tbl[i] & PAGE_MASK);
|
|
|
|
|
|
free_page((unsigned long)ptr);
|
|
|
}
|
|
@@ -1770,7 +1772,7 @@ static void free_gcr3_tbl_level2(u64 *tbl)
|
|
|
if (!(tbl[i] & GCR3_VALID))
|
|
|
continue;
|
|
|
|
|
|
- ptr = __va(tbl[i] & PAGE_MASK);
|
|
|
+ ptr = iommu_phys_to_virt(tbl[i] & PAGE_MASK);
|
|
|
|
|
|
free_gcr3_tbl_level1(ptr);
|
|
|
}
|
|
@@ -2049,7 +2051,7 @@ static void set_dte_entry(u16 devid, struct protection_domain *domain, bool ats)
|
|
|
u64 flags = 0;
|
|
|
|
|
|
if (domain->mode != PAGE_MODE_NONE)
|
|
|
- pte_root = virt_to_phys(domain->pt_root);
|
|
|
+ pte_root = iommu_virt_to_phys(domain->pt_root);
|
|
|
|
|
|
pte_root |= (domain->mode & DEV_ENTRY_MODE_MASK)
|
|
|
<< DEV_ENTRY_MODE_SHIFT;
|
|
@@ -2061,7 +2063,7 @@ static void set_dte_entry(u16 devid, struct protection_domain *domain, bool ats)
|
|
|
flags |= DTE_FLAG_IOTLB;
|
|
|
|
|
|
if (domain->flags & PD_IOMMUV2_MASK) {
|
|
|
- u64 gcr3 = __pa(domain->gcr3_tbl);
|
|
|
+ u64 gcr3 = iommu_virt_to_phys(domain->gcr3_tbl);
|
|
|
u64 glx = domain->glx;
|
|
|
u64 tmp;
|
|
|
|
|
@@ -3606,10 +3608,10 @@ static u64 *__get_gcr3_pte(u64 *root, int level, int pasid, bool alloc)
|
|
|
if (root == NULL)
|
|
|
return NULL;
|
|
|
|
|
|
- *pte = __pa(root) | GCR3_VALID;
|
|
|
+ *pte = iommu_virt_to_phys(root) | GCR3_VALID;
|
|
|
}
|
|
|
|
|
|
- root = __va(*pte & PAGE_MASK);
|
|
|
+ root = iommu_phys_to_virt(*pte & PAGE_MASK);
|
|
|
|
|
|
level -= 1;
|
|
|
}
|
|
@@ -3788,7 +3790,7 @@ static void set_dte_irq_entry(u16 devid, struct irq_remap_table *table)
|
|
|
|
|
|
dte = amd_iommu_dev_table[devid].data[2];
|
|
|
dte &= ~DTE_IRQ_PHYS_ADDR_MASK;
|
|
|
- dte |= virt_to_phys(table->table);
|
|
|
+ dte |= iommu_virt_to_phys(table->table);
|
|
|
dte |= DTE_IRQ_REMAP_INTCTL;
|
|
|
dte |= DTE_IRQ_TABLE_LEN;
|
|
|
dte |= DTE_IRQ_REMAP_ENABLE;
|