| From d55ac622b9edc3f20ab6addaaafc8b86a6cd73b3 Mon Sep 17 00:00:00 2001 |
| From: Marc Gonzalez <marc_gonzalez@sigmadesigns.com> |
| Date: Tue, 26 Sep 2017 12:22:54 +0200 |
| Subject: [PATCH 0264/1795] of/pci: Add of_pci_dma_range_parser_init() for |
| dma-ranges parsing support |
| |
| 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> |
| (cherry picked from commit a060c2104ef83e62346b7e893947a940471c0d7c) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| --- |
| drivers/of/address.c | 19 ++++++++++++++++--- |
| include/linux/of_address.h | 10 +++++++++- |
| 2 files changed, 25 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/of/address.c b/drivers/of/address.c |
| index 792722e7d458..fa6cabfc3cb9 100644 |
| --- a/drivers/of/address.c |
| +++ b/drivers/of/address.c |
| @@ -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) |
| { |
| diff --git a/include/linux/of_address.h b/include/linux/of_address.h |
| index b8ac44c9748e..30e40fb6936b 100644 |
| --- a/include/linux/of_address.h |
| +++ b/include/linux/of_address.h |
| @@ -50,6 +50,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); |
| @@ -86,7 +88,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( |
| -- |
| 2.19.0 |
| |