* @offset:    bus address of the memory
  * @size:      size of the resource to map
  */
-extern pgprot_t pgprot_wc;
-
 #define ioremap_wc(offset, size)       \
-       ioremap_prot((offset), (size), pgprot_val(pgprot_wc))
+       ioremap_prot((offset), (size),  \
+               pgprot_val(wc_enabled ? PAGE_KERNEL_WUC : PAGE_KERNEL_SUC))
 
 #define ioremap_cache(offset, size)    \
        ioremap_prot((offset), (size), pgprot_val(PAGE_KERNEL))
 
        return __pgprot(prot);
 }
 
+extern bool wc_enabled;
+
 #define pgprot_writecombine pgprot_writecombine
 
 static inline pgprot_t pgprot_writecombine(pgprot_t _prot)
 {
        unsigned long prot = pgprot_val(_prot);
 
-       prot = (prot & ~_CACHE_MASK) | _CACHE_WUC;
+       prot = (prot & ~_CACHE_MASK) | (wc_enabled ? _CACHE_WUC : _CACHE_SUC);
 
        return __pgprot(prot);
 }
 
 }
 
 #ifdef CONFIG_ARCH_WRITECOMBINE
-pgprot_t pgprot_wc = PAGE_KERNEL_WUC;
+bool wc_enabled = true;
 #else
-pgprot_t pgprot_wc = PAGE_KERNEL_SUC;
+bool wc_enabled = false;
 #endif
 
-EXPORT_SYMBOL(pgprot_wc);
+EXPORT_SYMBOL(wc_enabled);
 
 static int __init setup_writecombine(char *p)
 {
        if (!strcmp(p, "on"))
-               pgprot_wc = PAGE_KERNEL_WUC;
+               wc_enabled = true;
        else if (!strcmp(p, "off"))
-               pgprot_wc = PAGE_KERNEL_SUC;
+               wc_enabled = false;
        else
                pr_warn("Unknown writecombine setting \"%s\".\n", p);