]> Pileus Git - ~andy/linux/blobdiff - arch/sparc/kernel/of_device_64.c
Merge commit 'v2.6.33-rc5' into secretlab/test-devicetree
[~andy/linux] / arch / sparc / kernel / of_device_64.c
index 036f18ae59a64941d3ce92fc062458fea2dcc259..b3d4cb5d21b333c54fee00998491644397eb92d1 100644 (file)
@@ -104,9 +104,19 @@ static int of_bus_pci_map(u32 *addr, const u32 *range,
        int i;
 
        /* Check address type match */
-       if ((addr[0] ^ range[0]) & 0x03000000)
-               return -EINVAL;
+       if (!((addr[0] ^ range[0]) & 0x03000000))
+               goto type_match;
+
+       /* Special exception, we can map a 64-bit address into
+        * a 32-bit range.
+        */
+       if ((addr[0] & 0x03000000) == 0x03000000 &&
+           (range[0] & 0x03000000) == 0x02000000)
+               goto type_match;
+
+       return -EINVAL;
 
+type_match:
        if (of_out_of_range(addr + 1, range + 1, range + na + pna,
                            na - 1, ns))
                return -EINVAL;