}
 
        of_dma_range_parser_init(&parser, node);
-       for_each_of_range(&parser, &range)
+       for_each_of_range(&parser, &range) {
+               if (range.cpu_addr == OF_BAD_ADDR) {
+                       pr_err("translation of DMA address(%llx) to CPU address failed node(%pOF)\n",
+                              range.bus_addr, node);
+                       continue;
+               }
                num_ranges++;
+       }
+
+       if (!num_ranges) {
+               ret = -EINVAL;
+               goto out;
+       }
 
        r = kcalloc(num_ranges + 1, sizeof(*r), GFP_KERNEL);
        if (!r) {
        }
 
        /*
-        * Record all info in the generic DMA ranges array for struct device.
+        * Record all info in the generic DMA ranges array for struct device,
+        * returning an error if we don't find any parsable ranges.
         */
        *map = r;
        of_dma_range_parser_init(&parser, node);
        for_each_of_range(&parser, &range) {
                pr_debug("dma_addr(%llx) cpu_addr(%llx) size(%llx)\n",
                         range.bus_addr, range.cpu_addr, range.size);
-               if (range.cpu_addr == OF_BAD_ADDR) {
-                       pr_err("translation of DMA address(%llx) to CPU address failed node(%pOF)\n",
-                              range.bus_addr, node);
+               if (range.cpu_addr == OF_BAD_ADDR)
                        continue;
-               }
                r->cpu_start = range.cpu_addr;
                r->dma_start = range.bus_addr;
                r->size = range.size;