On 8/9/19 10:56 PM, Simon Horman wrote: > On Fri, Aug 09, 2019 at 07:34:48PM +0200, marek.vasut@xxxxxxxxx wrote: >> From: Oza Pawandeep <oza.oza@xxxxxxxxxxxx> >> >> The patch exports interface to PCIe RC drivers so that, >> Drivers can get their inbound memory configuration. >> >> It provides basis for IOVA reservations for inbound memory >> holes, if RC is not capable of addressing all the host memory, >> Specifically when IOMMU is enabled and on ARMv8 where 64bit IOVA >> could be allocated. >> >> It handles multiple inbound windows, and returns resources, >> and is left to the caller, how it wants to use them. >> >> Signed-off-by: Oza Pawandeep <oza.oza@xxxxxxxxxxxx> >> Signed-off-by: Marek Vasut <marek.vasut+renesas@xxxxxxxxx> >> Cc: Arnd Bergmann <arnd@xxxxxxxx> >> Cc: Geert Uytterhoeven <geert+renesas@xxxxxxxxx> >> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@xxxxxxx> >> Cc: Robin Murphy <robin.murphy@xxxxxxx> >> Cc: Simon Horman <horms+renesas@xxxxxxxxxxxx> >> Cc: Wolfram Sang <wsa@xxxxxxxxxxxxx> >> Cc: linux-renesas-soc@xxxxxxxxxxxxxxx >> To: linux-pci@xxxxxxxxxxxxxxx >> --- >> drivers/pci/of.c | 96 ++++++++++++++++++++++++++++++++++++++++++ >> include/linux/of_pci.h | 7 +++ >> 2 files changed, 103 insertions(+) >> >> diff --git a/drivers/pci/of.c b/drivers/pci/of.c >> index bc7b27a28795..4018f1a26f6f 100644 >> --- a/drivers/pci/of.c >> +++ b/drivers/pci/of.c >> @@ -347,6 +347,102 @@ int devm_of_pci_get_host_bridge_resources(struct device *dev, >> return err; >> } >> EXPORT_SYMBOL_GPL(devm_of_pci_get_host_bridge_resources); >> + >> +/** >> + * of_pci_get_dma_ranges - Parse PCI host bridge inbound resources from DT >> + * @np: device node of the host bridge having the dma-ranges property >> + * @resources: list where the range of resources will be added after DT parsing >> + * >> + * It is the caller's job to free the @resources list. >> + * >> + * This function will parse the "dma-ranges" property of a >> + * PCI host bridge device node and setup the resource mapping based >> + * on its content. >> + * >> + * It returns zero if the range parsing has been successful or a standard error >> + * value if it failed. >> + */ >> + >> +int of_pci_get_dma_ranges(struct device_node *dn, struct list_head *resources) >> +{ >> + struct device_node *node = of_node_get(dn); >> + int rlen; >> + int pna = of_n_addr_cells(node); >> + const int na = 3, ns = 2; >> + int np = pna + na + ns; >> + int ret = 0; >> + struct resource *res; >> + const u32 *dma_ranges; > > It seems that const __be32 * would be a more appropriate type > for dma_ranges as that seems to be the expected type in > all uses below. Noted, but I'm more interested in some conceptual input about this -- whether this is the right approach or not. Seems like we now have iMX8, R-Car3 and some Broadcom SoCs affected by this issue, with no solution in sight for years, so I think something has to be done here. -- Best regards, Marek Vasut