On 16/11/2019 4:35 pm, Christoph Hellwig wrote:
On Fri, Nov 15, 2019 at 07:48:23PM +0530, Kishon Vijay Abraham I wrote:
I think the fix on 5.3 was useful for platform drivers (where the platform
driver will set dma_set_mask as 32bits) even when the system itself supports LPAE.
Well, we can also use the bus_dma_mask for PCI(e) root port quirks,
as we do that for the VIA ones on x86. But I think the OF parsing code
is missing something here, and Robin did plan to look into that.
Right, the correct way to describe this is with "dma-ranges" on the host
bridge node, and there are patches queued in linux-next to (finally)
handle that properly for the way we bodge dynamically-discovered
endpoints through of_dma_configure().
Robin.
We should find a way to set the DMA mask of of the PCI device based on the DMA
mask of the PCI controller in the SoC. One option would be to change the
pci_drivers all over the kernel to set DMA mask to be based on the DMA mask of
the PCI controller (the PCI device hierarchy should get a reference to the
device pointer of the PCI controller). Or is there a better way to handle this?
No. The driver sets the device capabilities. bus_dma_mask handles
the system limitations.