|
@@ -131,7 +131,8 @@ static void __ioremap_check_mem(resource_size_t addr, unsigned long size,
|
|
|
* caller shouldn't need to know that small detail.
|
|
|
*/
|
|
|
static void __iomem *__ioremap_caller(resource_size_t phys_addr,
|
|
|
- unsigned long size, enum page_cache_mode pcm, void *caller)
|
|
|
+ unsigned long size, enum page_cache_mode pcm,
|
|
|
+ void *caller, bool encrypted)
|
|
|
{
|
|
|
unsigned long offset, vaddr;
|
|
|
resource_size_t last_addr;
|
|
@@ -199,7 +200,7 @@ static void __iomem *__ioremap_caller(resource_size_t phys_addr,
|
|
|
* resulting mapping.
|
|
|
*/
|
|
|
prot = PAGE_KERNEL_IO;
|
|
|
- if (sev_active() && mem_flags.desc_other)
|
|
|
+ if ((sev_active() && mem_flags.desc_other) || encrypted)
|
|
|
prot = pgprot_encrypted(prot);
|
|
|
|
|
|
switch (pcm) {
|
|
@@ -291,7 +292,7 @@ void __iomem *ioremap_nocache(resource_size_t phys_addr, unsigned long size)
|
|
|
enum page_cache_mode pcm = _PAGE_CACHE_MODE_UC_MINUS;
|
|
|
|
|
|
return __ioremap_caller(phys_addr, size, pcm,
|
|
|
- __builtin_return_address(0));
|
|
|
+ __builtin_return_address(0), false);
|
|
|
}
|
|
|
EXPORT_SYMBOL(ioremap_nocache);
|
|
|
|
|
@@ -324,7 +325,7 @@ void __iomem *ioremap_uc(resource_size_t phys_addr, unsigned long size)
|
|
|
enum page_cache_mode pcm = _PAGE_CACHE_MODE_UC;
|
|
|
|
|
|
return __ioremap_caller(phys_addr, size, pcm,
|
|
|
- __builtin_return_address(0));
|
|
|
+ __builtin_return_address(0), false);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(ioremap_uc);
|
|
|
|
|
@@ -341,7 +342,7 @@ EXPORT_SYMBOL_GPL(ioremap_uc);
|
|
|
void __iomem *ioremap_wc(resource_size_t phys_addr, unsigned long size)
|
|
|
{
|
|
|
return __ioremap_caller(phys_addr, size, _PAGE_CACHE_MODE_WC,
|
|
|
- __builtin_return_address(0));
|
|
|
+ __builtin_return_address(0), false);
|
|
|
}
|
|
|
EXPORT_SYMBOL(ioremap_wc);
|
|
|
|
|
@@ -358,14 +359,21 @@ EXPORT_SYMBOL(ioremap_wc);
|
|
|
void __iomem *ioremap_wt(resource_size_t phys_addr, unsigned long size)
|
|
|
{
|
|
|
return __ioremap_caller(phys_addr, size, _PAGE_CACHE_MODE_WT,
|
|
|
- __builtin_return_address(0));
|
|
|
+ __builtin_return_address(0), false);
|
|
|
}
|
|
|
EXPORT_SYMBOL(ioremap_wt);
|
|
|
|
|
|
+void __iomem *ioremap_encrypted(resource_size_t phys_addr, unsigned long size)
|
|
|
+{
|
|
|
+ return __ioremap_caller(phys_addr, size, _PAGE_CACHE_MODE_WB,
|
|
|
+ __builtin_return_address(0), true);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(ioremap_encrypted);
|
|
|
+
|
|
|
void __iomem *ioremap_cache(resource_size_t phys_addr, unsigned long size)
|
|
|
{
|
|
|
return __ioremap_caller(phys_addr, size, _PAGE_CACHE_MODE_WB,
|
|
|
- __builtin_return_address(0));
|
|
|
+ __builtin_return_address(0), false);
|
|
|
}
|
|
|
EXPORT_SYMBOL(ioremap_cache);
|
|
|
|
|
@@ -374,7 +382,7 @@ void __iomem *ioremap_prot(resource_size_t phys_addr, unsigned long size,
|
|
|
{
|
|
|
return __ioremap_caller(phys_addr, size,
|
|
|
pgprot2cachemode(__pgprot(prot_val)),
|
|
|
- __builtin_return_address(0));
|
|
|
+ __builtin_return_address(0), false);
|
|
|
}
|
|
|
EXPORT_SYMBOL(ioremap_prot);
|
|
|
|