unsigned long offset = phys & ~PAGE_MASK;
        void *vaddr;
 
-       /* If page is RAM, we can use __va. Otherwise ioremap and unmap. */
-       if (page_is_ram(start >> PAGE_SHIFT))
-               return __va(phys);
+       /* memremap() maps if RAM, otherwise falls back to ioremap() */
+       vaddr = memremap(start, PAGE_SIZE, MEMREMAP_WB);
 
-       vaddr = ioremap_cache(start, PAGE_SIZE);
-       /* Only add the offset on success and return NULL if the ioremap() failed: */
+       /* Only add the offset on success and return NULL if memremap() failed */
        if (vaddr)
                vaddr += offset;
 
 
 void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr)
 {
-       if (page_is_ram(phys >> PAGE_SHIFT))
-               return;
-
-       iounmap((void __iomem *)((unsigned long)addr & PAGE_MASK));
+       memunmap((void *)((unsigned long)addr & PAGE_MASK));
 }
 
 /*
        return prot;
 }
 
+bool phys_mem_access_encrypted(unsigned long phys_addr, unsigned long size)
+{
+       return arch_memremap_can_ram_remap(phys_addr, size, 0);
+}
+
 #ifdef CONFIG_ARCH_USE_MEMREMAP_PROT
 /* Remap memory with encryption */
 void __init *early_memremap_encrypted(resource_size_t phys_addr,
 
 pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
                                unsigned long size, pgprot_t vma_prot)
 {
+       if (!phys_mem_access_encrypted(pfn << PAGE_SHIFT, size))
+               vma_prot = pgprot_decrypted(vma_prot);
+
        return vma_prot;
 }