On Thu, Jan 30, 2020 at 01:39:58PM +0530, Kishon Vijay Abraham I wrote: > Hi Christoph, > > On 30/01/20 1:28 pm, Christoph Hellwig wrote: > > On Fri, Nov 15, 2019 at 04:29:31PM +0530, Kishon Vijay Abraham I wrote: > >> Hi Christoph, > >> > >> I think we are encountering a case where the connected PCIe card (like PCIe USB > >> card) supports 64-bit addressing and the ARM core supports 64-bit addressing > >> but the PCIe controller in the SoC to which PCIe card is connected supports > >> only 32-bits. > >> > >> Here dma APIs can provide an address above the 32 bit region to the PCIe card. > >> However this will fail when the card tries to access the provided address via > >> the PCIe controller. > > > > What kernel version do you test? The classic arm version of dma_capable > > doesn't take the bus dma mask into account. In Linux 5.5 I switched > > ARM to use the generic version in > > > > 130c1ccbf55 ("dma-direct: unify the dma_capable definitions") > > > > so with that this case is supposed to work, without that it doesn't > > have much of a chance. > > I got into a new issue in 5.5 kernel with NVMe card wherein I get the > below warn dump. This is different from the issue I initially posted > seen with USB and SATA cards (I was getting a data mismatch then). With > 5.5 kernel I don't see those issues anymore in USB card. I only see the > below warn dump with NVMe card. Can you throw in a little debug printk if this comes from dma_direct_possible or swiotlb_map?