|
@@ -41,11 +41,13 @@ static void *try_ram_remap(resource_size_t offset, size_t size)
|
|
|
* memremap() - remap an iomem_resource as cacheable memory
|
|
|
* @offset: iomem resource start address
|
|
|
* @size: size of remap
|
|
|
- * @flags: either MEMREMAP_WB or MEMREMAP_WT
|
|
|
+ * @flags: any of MEMREMAP_WB, MEMREMAP_WT and MEMREMAP_WC
|
|
|
*
|
|
|
* memremap() is "ioremap" for cases where it is known that the resource
|
|
|
* being mapped does not have i/o side effects and the __iomem
|
|
|
- * annotation is not applicable.
|
|
|
+ * annotation is not applicable. In the case of multiple flags, the different
|
|
|
+ * mapping types will be attempted in the order listed below until one of
|
|
|
+ * them succeeds.
|
|
|
*
|
|
|
* MEMREMAP_WB - matches the default mapping for System RAM on
|
|
|
* the architecture. This is usually a read-allocate write-back cache.
|
|
@@ -57,6 +59,10 @@ static void *try_ram_remap(resource_size_t offset, size_t size)
|
|
|
* cache or are written through to memory and never exist in a
|
|
|
* cache-dirty state with respect to program visibility. Attempts to
|
|
|
* map System RAM with this mapping type will fail.
|
|
|
+ *
|
|
|
+ * MEMREMAP_WC - establish a writecombine mapping, whereby writes may
|
|
|
+ * be coalesced together (e.g. in the CPU's write buffers), but is otherwise
|
|
|
+ * uncached. Attempts to map System RAM with this mapping type will fail.
|
|
|
*/
|
|
|
void *memremap(resource_size_t offset, size_t size, unsigned long flags)
|
|
|
{
|
|
@@ -102,6 +108,9 @@ void *memremap(resource_size_t offset, size_t size, unsigned long flags)
|
|
|
if (!addr && (flags & MEMREMAP_WT))
|
|
|
addr = ioremap_wt(offset, size);
|
|
|
|
|
|
+ if (!addr && (flags & MEMREMAP_WC))
|
|
|
+ addr = ioremap_wc(offset, size);
|
|
|
+
|
|
|
return addr;
|
|
|
}
|
|
|
EXPORT_SYMBOL(memremap);
|