.. | .. |
---|
990 | 990 | } |
---|
991 | 991 | |
---|
992 | 992 | of_dma_range_parser_init(&parser, node); |
---|
993 | | - for_each_of_range(&parser, &range) |
---|
| 993 | + for_each_of_range(&parser, &range) { |
---|
| 994 | + if (range.cpu_addr == OF_BAD_ADDR) { |
---|
| 995 | + pr_err("translation of DMA address(%llx) to CPU address failed node(%pOF)\n", |
---|
| 996 | + range.bus_addr, node); |
---|
| 997 | + continue; |
---|
| 998 | + } |
---|
994 | 999 | num_ranges++; |
---|
| 1000 | + } |
---|
| 1001 | + |
---|
| 1002 | + if (!num_ranges) { |
---|
| 1003 | + ret = -EINVAL; |
---|
| 1004 | + goto out; |
---|
| 1005 | + } |
---|
995 | 1006 | |
---|
996 | 1007 | r = kcalloc(num_ranges + 1, sizeof(*r), GFP_KERNEL); |
---|
997 | 1008 | if (!r) { |
---|
.. | .. |
---|
1000 | 1011 | } |
---|
1001 | 1012 | |
---|
1002 | 1013 | /* |
---|
1003 | | - * Record all info in the generic DMA ranges array for struct device. |
---|
| 1014 | + * Record all info in the generic DMA ranges array for struct device, |
---|
| 1015 | + * returning an error if we don't find any parsable ranges. |
---|
1004 | 1016 | */ |
---|
1005 | 1017 | *map = r; |
---|
1006 | 1018 | of_dma_range_parser_init(&parser, node); |
---|
1007 | 1019 | for_each_of_range(&parser, &range) { |
---|
1008 | 1020 | pr_debug("dma_addr(%llx) cpu_addr(%llx) size(%llx)\n", |
---|
1009 | 1021 | range.bus_addr, range.cpu_addr, range.size); |
---|
1010 | | - if (range.cpu_addr == OF_BAD_ADDR) { |
---|
1011 | | - pr_err("translation of DMA address(%llx) to CPU address failed node(%pOF)\n", |
---|
1012 | | - range.bus_addr, node); |
---|
| 1022 | + if (range.cpu_addr == OF_BAD_ADDR) |
---|
1013 | 1023 | continue; |
---|
1014 | | - } |
---|
1015 | 1024 | r->cpu_start = range.cpu_addr; |
---|
1016 | 1025 | r->dma_start = range.bus_addr; |
---|
1017 | 1026 | r->size = range.size; |
---|