const __be32 *addrs;
        u32 i;
        int proplen;
+       bool mark_unset = false;
 
        addrs = of_get_property(node, "assigned-addresses", &proplen);
-       if (!addrs)
-               return;
+       if (!addrs || !proplen) {
+               addrs = of_get_property(node, "reg", &proplen);
+               if (!addrs || !proplen)
+                       return;
+               mark_unset = true;
+       }
+
        pr_debug("    parse addresses (%d bytes) @ %p\n", proplen, addrs);
        for (; proplen >= 20; proplen -= 20, addrs += 5) {
                flags = pci_parse_of_flags(of_read_number(addrs, 1), 0);
                        continue;
                }
                res->flags = flags;
+               if (mark_unset)
+                       res->flags |= IORESOURCE_UNSET;
                res->name = pci_name(dev);
                region.start = base;
                region.end = base + size - 1;