From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754145AbcFGIaH (ORCPT ); Tue, 7 Jun 2016 04:30:07 -0400 Received: from mail-pf0-f176.google.com ([209.85.192.176]:33331 "EHLO mail-pf0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751547AbcFGIaE (ORCPT ); Tue, 7 Jun 2016 04:30:04 -0400 From: Baolin Wang To: catalin.marinas@arm.com, will.deacon@arm.com Cc: robin.murphy@arm.com, jroedel@suse.de, akpm@linux-foundation.org, jszhang@marvell.com, Suravee.Suthikulpanit@amd.com, arnd@arndb.de, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, broonie@kernel.org, balbi@kernel.org, baolin.wang@linaro.org Subject: [PATCH] arm64: Implement arch_setup_pdev_archdata hook Date: Tue, 7 Jun 2016 16:29:21 +0800 Message-Id: X-Mailer: git-send-email 1.7.9.5 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Now on ARM64 platform, it will set 'dummy_dma_ops' for device dma_ops if it did not call 'arch_setup_dma_ops' at device creation time by issuing platform_device_alloc() function, that will cause failure when setting the dma mask for device. Hence We need to hook the archdata to setup proper dma_ops for these devices. Signed-off-by: Baolin Wang --- arch/arm64/mm/dma-mapping.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index c566ec8..04e057b 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c @@ -26,6 +26,7 @@ #include #include #include +#include #include @@ -961,3 +962,23 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, dev->archdata.dma_coherent = coherent; __iommu_setup_dma_ops(dev, dma_base, size, iommu); } + +void arch_setup_pdev_archdata(struct platform_device *pdev) +{ + if (!pdev->dev.archdata.dma_ops) + pdev->dev.archdata.dma_ops = &swiotlb_dma_ops; + + /* + * Set default coherent_dma_mask to 32 bit. Drivers are expected to + * setup the correct supported mask. + */ + if (!pdev->dev.coherent_dma_mask) + pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32); + + /* + * Set it to coherent_dma_mask by default if the architecture + * code has not set it. + */ + if (!pdev->dev.dma_mask) + pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask; +} -- 1.7.9.5