IORESOURCE_SYSTEM_RAM, IORES_DESC_NONE);
        void *addr = NULL;
 
+       if (!flags)
+               return NULL;
+
        if (is_ram == REGION_MIXED) {
                WARN_ONCE(1, "memremap attempted on mixed range %pa size: %#lx\n",
                                &offset, (unsigned long) size);
 
        /* Try all mapping types requested until one returns non-NULL */
        if (flags & MEMREMAP_WB) {
-               flags &= ~MEMREMAP_WB;
                /*
                 * MEMREMAP_WB is special in that it can be satisifed
                 * from the direct map.  Some archs depend on the
        }
 
        /*
-        * If we don't have a mapping yet and more request flags are
-        * pending then we will be attempting to establish a new virtual
+        * If we don't have a mapping yet and other request flags are
+        * present then we will be attempting to establish a new virtual
         * address mapping.  Enforce that this mapping is not aliasing
         * System RAM.
         */
-       if (!addr && is_ram == REGION_INTERSECTS && flags) {
+       if (!addr && is_ram == REGION_INTERSECTS && flags != MEMREMAP_WB) {
                WARN_ONCE(1, "memremap attempted on ram %pa size: %#lx\n",
                                &offset, (unsigned long) size);
                return NULL;
        }
 
-       if (!addr && (flags & MEMREMAP_WT)) {
-               flags &= ~MEMREMAP_WT;
+       if (!addr && (flags & MEMREMAP_WT))
                addr = ioremap_wt(offset, size);
-       }
 
        return addr;
 }