Hi Christoph, On Wed, Aug 18, 2021 at 2:11 AM Christoph Hellwig <hch@xxxxxx> wrote: > > On Tue, Aug 17, 2021 at 09:23:26PM -0300, Fabio Estevam wrote: > > > > void *dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle, > > .... > > WARN_ON_ONCE(!dev->coherent_dma_mask); > > > > Where should the coherent_dma_mask be set to avoid this problem? > > Looking at the ath10k code ar->dev is set by ath10k_core_create, which > has multiple callers. > > For ath10k_pci_probe it is a pci_dev, whoch should always have a > dma_mask. > For ath10k_ahb_probe is is a device tree probed platform_device, > which should have a dma mask. > For ath10k_sdio_probe it is a sdio_func, which from my understanding is > a virtual device can't do DMA itself. > For ath10k_snoc_probe it is a platform device wit an explicit > dma_set_mask_and_coherent and above so the dma_mask is set. > For ath10k_usb_probe it is an usb device which can't do USB > > So unless I misred the driver you're using the SDIO or USB variant, > and those are not allowed to just call dma_* functions on their > respective devices. Correct, on i.MX7 the ath10k Wifi chip connects via SDIO. Is there a way to avoid the WARN_ON_ONCE(!dev->coherent_dma_mask) to happen in this case? Thanks