of/pci: Add of_pci_dma_range_parser_init() for dma-ranges parsing support
authorMarc Gonzalez <marc_gonzalez@sigmadesigns.com>
Tue, 26 Sep 2017 10:22:54 +0000 (12:22 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 5 Oct 2017 20:52:34 +0000 (15:52 -0500)
Several host bridge drivers duplicate of_pci_range_parser_init() in order
to parse their dma-ranges property.

Provide of_pci_dma_range_parser_init() for that use case.

Signed-off-by: Marc Gonzalez <marc_gonzalez@sigmadesigns.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Rob Herring <robh@kernel.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
drivers/of/address.c
include/linux/of_address.h

index 792722e7d45884add844d9931ddef7dc5e816f0f..fa6cabfc3cb92e3e90cbcb08993d453a5516c8fd 100644 (file)
@@ -232,8 +232,8 @@ int of_pci_address_to_resource(struct device_node *dev, int bar,
 }
 EXPORT_SYMBOL_GPL(of_pci_address_to_resource);
 
-int of_pci_range_parser_init(struct of_pci_range_parser *parser,
-                               struct device_node *node)
+static int parser_init(struct of_pci_range_parser *parser,
+                       struct device_node *node, const char *name)
 {
        const int na = 3, ns = 2;
        int rlen;
@@ -242,7 +242,7 @@ int of_pci_range_parser_init(struct of_pci_range_parser *parser,
        parser->pna = of_n_addr_cells(node);
        parser->np = parser->pna + na + ns;
 
-       parser->range = of_get_property(node, "ranges", &rlen);
+       parser->range = of_get_property(node, name, &rlen);
        if (parser->range == NULL)
                return -ENOENT;
 
@@ -250,8 +250,21 @@ int of_pci_range_parser_init(struct of_pci_range_parser *parser,
 
        return 0;
 }
+
+int of_pci_range_parser_init(struct of_pci_range_parser *parser,
+                               struct device_node *node)
+{
+       return parser_init(parser, node, "ranges");
+}
 EXPORT_SYMBOL_GPL(of_pci_range_parser_init);
 
+int of_pci_dma_range_parser_init(struct of_pci_range_parser *parser,
+                               struct device_node *node)
+{
+       return parser_init(parser, node, "dma-ranges");
+}
+EXPORT_SYMBOL_GPL(of_pci_dma_range_parser_init);
+
 struct of_pci_range *of_pci_range_parser_one(struct of_pci_range_parser *parser,
                                                struct of_pci_range *range)
 {
index 37864734ca50f76838cc1e95ea92f8d37bbdc856..8beed2de98e9deebc1f8ed99c694a5f581585846 100644 (file)
@@ -49,6 +49,8 @@ extern const __be32 *of_get_address(struct device_node *dev, int index,
 
 extern int of_pci_range_parser_init(struct of_pci_range_parser *parser,
                        struct device_node *node);
+extern int of_pci_dma_range_parser_init(struct of_pci_range_parser *parser,
+                       struct device_node *node);
 extern struct of_pci_range *of_pci_range_parser_one(
                                        struct of_pci_range_parser *parser,
                                        struct of_pci_range *range);
@@ -85,7 +87,13 @@ static inline const __be32 *of_get_address(struct device_node *dev, int index,
 static inline int of_pci_range_parser_init(struct of_pci_range_parser *parser,
                        struct device_node *node)
 {
-       return -1;
+       return -ENOSYS;
+}
+
+static inline int of_pci_dma_range_parser_init(struct of_pci_range_parser *parser,
+                       struct device_node *node)
+{
+       return -ENOSYS;
 }
 
 static inline struct of_pci_range *of_pci_range_parser_one(