Hi Christoph, On 30/01/20 10:12 pm, Christoph Hellwig wrote: > 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? I could see swiotlb_tbl_map_single() returning DMA_MAPPING_ERROR. Kernel with debug print: https://github.com/kishon/linux-wip.git nvm_dma_issue Full log: https://pastebin.ubuntu.com/p/Xf2ngxc3kB/ Thanks Kishon