On powerpc arch, dma_ops of rescanned pci device after system's booting up won't be initialized by system, so it will fail to execute the dma_set_mask in the device's driver. Initialize it to solve this issue.
Signed-off-by: Yuanquan Chen <b41...@freescale.com> --- arch/powerpc/include/asm/dma-mapping.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h index 7816087..22eae53 100644 --- a/arch/powerpc/include/asm/dma-mapping.h +++ b/arch/powerpc/include/asm/dma-mapping.h @@ -126,8 +126,11 @@ static inline int dma_supported(struct device *dev, u64 mask) { struct dma_map_ops *dma_ops = get_dma_ops(dev); - if (unlikely(dma_ops == NULL)) - return 0; + if (unlikely(dma_ops == NULL)) { + set_dma_ops(dev, &dma_direct_ops); + set_dma_offset(dev, PCI_DRAM_OFFSET); + dma_ops = &dma_direct_ops; + } if (dma_ops->dma_supported == NULL) return 1; return dma_ops->dma_supported(dev, mask); -- 1.7.9.5 _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev