[PATCH v4 4/8] PCI: brcmstb: Add dma-range mapping for inbound traffic
From: jim2101024@gmail.com (Jim Quinlan)
Date: 2018-01-26 17:46:48
Also in:
linux-devicetree, linux-mips, linux-pci, lkml
On Fri, Jan 26, 2018 at 2:53 AM, Christoph Hellwig [off-list ref] wrote:
On Wed, Jan 24, 2018 at 12:04:58PM -0800, Florian Fainelli wrote:quoted
This looks nicer than the current shape, but this still requires to register a PCI fixup to override phys_to_dma() and dma_to_phys(), and it would appear that you have dodged my question about how this is supposed to fit with an entirely modular PCIe root complex driver? Are you suggesting that we split the module into a built-in part and a modular part?I don't think entirely modular PCI root bridges should be a focal point for the design. If we happen to support them by other design choices: fine, but they should not be a priority.
I disagree. If there is one common thing our customers request it is the ability to remove (or control the insmod of after boot) the pcie RC driver. I didn't add this in as a "nice-to-have".
That being said if we have core dma mapping or PCIe code that has a list of offsets and the root complex only populates them it should work just fine.
I'm looking at arch/arm/include/asm/dma-mapping.h. In addition to overriding dma_to_phsy() and phys_to_dma(), it looks like I may have to define __arch_pfn_to_dma(), __arch_dma_to_pfn(), __arch_dma_to_virt(), __arch_virt_to_dma(). Do you agree or is this not necessary? If it is, this seems more intrusive than our pcie-brcmstb-dma.c solution which doesn't require tentacles into major include files and Kconfigs. Another issue is that our function wrappers -- depending upon whether we are dealing with a pci device or not -- will have to possibly call the actual ARM and ARM64 definitions of these functions, which have been of course #ifdef'd out. This means that our code must contain identical copies of these functions' code and that the code must somehow be kept in sync. Do you see a solution to this? Jim