|
@@ -417,6 +417,50 @@ void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr)
|
|
|
iounmap((void __iomem *)((unsigned long)addr & PAGE_MASK));
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_ARCH_USE_MEMREMAP_PROT
|
|
|
+/* Remap memory with encryption */
|
|
|
+void __init *early_memremap_encrypted(resource_size_t phys_addr,
|
|
|
+ unsigned long size)
|
|
|
+{
|
|
|
+ return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_ENC);
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Remap memory with encryption and write-protected - cannot be called
|
|
|
+ * before pat_init() is called
|
|
|
+ */
|
|
|
+void __init *early_memremap_encrypted_wp(resource_size_t phys_addr,
|
|
|
+ unsigned long size)
|
|
|
+{
|
|
|
+ /* Be sure the write-protect PAT entry is set for write-protect */
|
|
|
+ if (__pte2cachemode_tbl[_PAGE_CACHE_MODE_WP] != _PAGE_CACHE_MODE_WP)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_ENC_WP);
|
|
|
+}
|
|
|
+
|
|
|
+/* Remap memory without encryption */
|
|
|
+void __init *early_memremap_decrypted(resource_size_t phys_addr,
|
|
|
+ unsigned long size)
|
|
|
+{
|
|
|
+ return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_NOENC);
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Remap memory without encryption and write-protected - cannot be called
|
|
|
+ * before pat_init() is called
|
|
|
+ */
|
|
|
+void __init *early_memremap_decrypted_wp(resource_size_t phys_addr,
|
|
|
+ unsigned long size)
|
|
|
+{
|
|
|
+ /* Be sure the write-protect PAT entry is set for write-protect */
|
|
|
+ if (__pte2cachemode_tbl[_PAGE_CACHE_MODE_WP] != _PAGE_CACHE_MODE_WP)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_NOENC_WP);
|
|
|
+}
|
|
|
+#endif /* CONFIG_ARCH_USE_MEMREMAP_PROT */
|
|
|
+
|
|
|
static pte_t bm_pte[PAGE_SIZE/sizeof(pte_t)] __page_aligned_bss;
|
|
|
|
|
|
static inline pmd_t * __init early_ioremap_pmd(unsigned long addr)
|