On Tue, Mar 04, 2025 at 02:31:46PM -0600, Bjorn Helgaas wrote: > On Tue, Mar 04, 2025 at 03:12:11PM -0500, Frank Li wrote: > > On Tue, Mar 04, 2025 at 01:08:16PM -0600, Bjorn Helgaas wrote: > > > On Tue, Mar 04, 2025 at 12:49:36PM -0500, Frank Li wrote: > > > > Remove artpec6_pcie_cpu_addr_fixup() as the DT bus fabric should provide correct > > > > address translation. Set use_parent_dt_ranges to allow the DWC core driver to > > > > fetch address translation from the device tree. > > > > > > Shouldn't we be able to detect platforms where DT doesn't describe the > > > translation correctly? E.g., by running .cpu_addr_fixup() on a > > > res.start value and comparing the result to the parent_bus_addr()? > > > Then we could complain about it if they don't match. > > > > Can't detect because: > > > > There are case, driver have not provide .cpu_addr_fixup, but dts still be > > wrong. such as > > > > bus@10000000 > > { > > ranges = <0xdeaddead 0x1000000 size>; > > pci@90000000 { > > > > reg = <...>, <0xdeaddead>; > > reg-names = <...>, <config>; > > } > > > > }; > > > > above dts can work with current driver, but parent bus address 0xdeaddead > > is totally fake address. We can't detect this case because no > > .cpu_addr_fixup() at all. > > If there's no .cpu_addr_fixup(), primary-side ATU addresses must be > identical to CPU addresses. If the DT parent bus address is > different, can't we assume the DT is broken? I think so. Frank