|
@@ -172,6 +172,10 @@ static void __iomem *__ioremap_caller(resource_size_t phys_addr,
|
|
|
prot = __pgprot(pgprot_val(prot) |
|
|
|
cachemode2protval(_PAGE_CACHE_MODE_WC));
|
|
|
break;
|
|
|
+ case _PAGE_CACHE_MODE_WT:
|
|
|
+ prot = __pgprot(pgprot_val(prot) |
|
|
|
+ cachemode2protval(_PAGE_CACHE_MODE_WT));
|
|
|
+ break;
|
|
|
case _PAGE_CACHE_MODE_WB:
|
|
|
break;
|
|
|
}
|
|
@@ -297,6 +301,23 @@ void __iomem *ioremap_wc(resource_size_t phys_addr, unsigned long size)
|
|
|
}
|
|
|
EXPORT_SYMBOL(ioremap_wc);
|
|
|
|
|
|
+/**
|
|
|
+ * ioremap_wt - map memory into CPU space write through
|
|
|
+ * @phys_addr: bus address of the memory
|
|
|
+ * @size: size of the resource to map
|
|
|
+ *
|
|
|
+ * This version of ioremap ensures that the memory is marked write through.
|
|
|
+ * Write through stores data into memory while keeping the cache up-to-date.
|
|
|
+ *
|
|
|
+ * Must be freed with iounmap.
|
|
|
+ */
|
|
|
+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));
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(ioremap_wt);
|
|
|
+
|
|
|
void __iomem *ioremap_cache(resource_size_t phys_addr, unsigned long size)
|
|
|
{
|
|
|
return __ioremap_caller(phys_addr, size, _PAGE_CACHE_MODE_WB,
|