24
24
#include <asm/pgalloc.h>
25
25
#include <asm/pat.h>
26
26
#include <asm/setup.h>
27
+ #include <linux/crash_dump.h>
27
28
28
29
#include "physaddr.h"
29
30
@@ -131,7 +132,8 @@ static void __ioremap_check_mem(resource_size_t addr, unsigned long size,
131
132
* caller shouldn't need to know that small detail.
132
133
*/
133
134
static void __iomem * __ioremap_caller (resource_size_t phys_addr ,
134
- unsigned long size , enum page_cache_mode pcm , void * caller )
135
+ unsigned long size , enum page_cache_mode pcm ,
136
+ void * caller , bool encrypted )
135
137
{
136
138
unsigned long offset , vaddr ;
137
139
resource_size_t last_addr ;
@@ -199,7 +201,7 @@ static void __iomem *__ioremap_caller(resource_size_t phys_addr,
199
201
* resulting mapping.
200
202
*/
201
203
prot = PAGE_KERNEL_IO ;
202
- if (sev_active () && mem_flags .desc_other )
204
+ if (( sev_active () && mem_flags .desc_other ) || encrypted )
203
205
prot = pgprot_encrypted (prot );
204
206
205
207
switch (pcm ) {
@@ -291,7 +293,7 @@ void __iomem *ioremap_nocache(resource_size_t phys_addr, unsigned long size)
291
293
enum page_cache_mode pcm = _PAGE_CACHE_MODE_UC_MINUS ;
292
294
293
295
return __ioremap_caller (phys_addr , size , pcm ,
294
- __builtin_return_address (0 ));
296
+ __builtin_return_address (0 ), false );
295
297
}
296
298
EXPORT_SYMBOL (ioremap_nocache );
297
299
@@ -324,7 +326,7 @@ void __iomem *ioremap_uc(resource_size_t phys_addr, unsigned long size)
324
326
enum page_cache_mode pcm = _PAGE_CACHE_MODE_UC ;
325
327
326
328
return __ioremap_caller (phys_addr , size , pcm ,
327
- __builtin_return_address (0 ));
329
+ __builtin_return_address (0 ), false );
328
330
}
329
331
EXPORT_SYMBOL_GPL (ioremap_uc );
330
332
@@ -341,7 +343,7 @@ EXPORT_SYMBOL_GPL(ioremap_uc);
341
343
void __iomem * ioremap_wc (resource_size_t phys_addr , unsigned long size )
342
344
{
343
345
return __ioremap_caller (phys_addr , size , _PAGE_CACHE_MODE_WC ,
344
- __builtin_return_address (0 ));
346
+ __builtin_return_address (0 ), false );
345
347
}
346
348
EXPORT_SYMBOL (ioremap_wc );
347
349
@@ -358,14 +360,21 @@ EXPORT_SYMBOL(ioremap_wc);
358
360
void __iomem * ioremap_wt (resource_size_t phys_addr , unsigned long size )
359
361
{
360
362
return __ioremap_caller (phys_addr , size , _PAGE_CACHE_MODE_WT ,
361
- __builtin_return_address (0 ));
363
+ __builtin_return_address (0 ), false );
362
364
}
363
365
EXPORT_SYMBOL (ioremap_wt );
364
366
367
+ void __iomem * ioremap_encrypted (resource_size_t phys_addr , unsigned long size )
368
+ {
369
+ return __ioremap_caller (phys_addr , size , _PAGE_CACHE_MODE_WB ,
370
+ __builtin_return_address (0 ), true);
371
+ }
372
+ EXPORT_SYMBOL (ioremap_encrypted );
373
+
365
374
void __iomem * ioremap_cache (resource_size_t phys_addr , unsigned long size )
366
375
{
367
376
return __ioremap_caller (phys_addr , size , _PAGE_CACHE_MODE_WB ,
368
- __builtin_return_address (0 ));
377
+ __builtin_return_address (0 ), false );
369
378
}
370
379
EXPORT_SYMBOL (ioremap_cache );
371
380
@@ -374,7 +383,7 @@ void __iomem *ioremap_prot(resource_size_t phys_addr, unsigned long size,
374
383
{
375
384
return __ioremap_caller (phys_addr , size ,
376
385
pgprot2cachemode (__pgprot (prot_val )),
377
- __builtin_return_address (0 ));
386
+ __builtin_return_address (0 ), false );
378
387
}
379
388
EXPORT_SYMBOL (ioremap_prot );
380
389
0 commit comments