Message ID | 20240930-pci_fixup_addr-v3-1-80ee70352fc7@nxp.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | PCI: dwc: opitimaze RC host pci_fixup_addr() | expand |
On Mon, Sep 30, 2024 at 02:44:53PM -0400, Frank Li wrote: > Introduce field 'parent_bus_addr' in of_pci_range to retrieve untranslated > CPU address information. > > Refer to the diagram below to understand that the bus fabric in some > systems (like i.MX8QXP) does not use a 1:1 address map between input and > output. > > Currently, many drivers use .cpu_addr_fixup() callback hardcodes that s/drivers/controller drivers/ > translation in the code, e.g., "cpu_addr & CDNS_PLAT_CPU_TO_BUS_ADDR", > "cpu_addr + BUS_IATU_OFFSET", etc, even though those translations *should* > be described via DT. > It'd be useful to mention which driver has the mentioned fixup as an example. - Mani
diff --git a/drivers/of/address.c b/drivers/of/address.c index 286f0c161e332..1a0229ee4e0b2 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -811,6 +811,8 @@ struct of_pci_range *of_pci_range_parser_one(struct of_pci_range_parser *parser, else range->cpu_addr = of_translate_address(parser->node, parser->range + na); + + range->parent_bus_addr = of_read_number(parser->range + na, parser->pna); range->size = of_read_number(parser->range + parser->pna + na, ns); parser->range += np; diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 26a19daf0d092..13dd79186d02c 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h @@ -26,6 +26,7 @@ struct of_pci_range { u64 bus_addr; }; u64 cpu_addr; + u64 parent_bus_addr; u64 size; u32 flags; };