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?