Skip to content

Commit

Permalink
of/pci: Add of_pci_dma_range_parser_init() for dma-ranges parsing sup…
Browse files Browse the repository at this point in the history
…port

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>
  • Loading branch information
Marc Gonzalez authored and Bjorn Helgaas committed Oct 5, 2017
1 parent 9e66317 commit a060c21
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 4 deletions.
19 changes: 16 additions & 3 deletions drivers/of/address.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -242,16 +242,29 @@ 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;

parser->end = parser->range + rlen / sizeof(__be32);

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)
{
Expand Down
10 changes: 9 additions & 1 deletion include/linux/of_address.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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(
Expand Down

0 comments on commit a060c21

Please sign in to comment.