diff mbox

pasemi: Fix coherent_dma_mask for dma engine

Message ID 488c970c5ae.f93db6b@auth.smtp.1and1.co.uk (mailing list archive)
State Accepted
Headers show

Commit Message

Darren Stevens July 27, 2016, 2:41 p.m. UTC
Commit 817820b0226a ("powerpc/iommu: Support "hybrid" iommu/direct DMA
    ops for coherent_mask < dma_mask) adds a check of coherent_dma_mask
    for dma allocations.
    Unfortunately current PASemi code does not set this value for the DMA
    engine, which ends up with the default value of 0xffffffff, the result 
    is on a PASemi system with >2Gb ram and iommu enabled the the onboard 
    ethernet stops working due to an inability to allocate memory.
    Add an initialisation to pci_dma_dev_setup_pasemi()
  
    Signed-off-by: Darren Stevens <darren@stevens-zone.net>
  
---

Comments

Michael Ellerman Aug. 9, 2016, 11:26 a.m. UTC | #1
On Wed, 2016-27-07 at 14:41:29 UTC, Darren Stevens wrote:
> Commit 817820b0226a ("powerpc/iommu: Support "hybrid" iommu/direct DMA
>     ops for coherent_mask < dma_mask) adds a check of coherent_dma_mask
>     for dma allocations.
>     Unfortunately current PASemi code does not set this value for the DMA
>     engine, which ends up with the default value of 0xffffffff, the result 
>     is on a PASemi system with >2Gb ram and iommu enabled the the onboard 
>     ethernet stops working due to an inability to allocate memory.
>     Add an initialisation to pci_dma_dev_setup_pasemi()
>   
>     Signed-off-by: Darren Stevens <darren@stevens-zone.net>

Applied to powerpc fixes, thanks.

https://git.kernel.org/powerpc/c/416f37d0816b9720b8227953e5

cheers
diff mbox

Patch

diff --git a/arch/powerpc/platforms/pasemi/iommu.c b/arch/powerpc/platforms/pasemi/iommu.c
index c929644..81b334a 100644
--- a/arch/powerpc/platforms/pasemi/iommu.c
+++ b/arch/powerpc/platforms/pasemi/iommu.c
@@ -187,6 +187,11 @@  static void pci_dma_dev_setup_pasemi(struct pci_dev *dev)
 	if (dev->vendor == 0x1959 && dev->device == 0xa007 &&
 	    !firmware_has_feature(FW_FEATURE_LPAR)) {
 		dev->dev.archdata.dma_ops = &dma_direct_ops;
+		/*
+		 * Set the coherent DMA mask to prevent the iommu
+		 * being used unnecessarily
+		 */
+		dev->dev.coherent_dma_mask = DMA_BIT_MASK(44);
 		return;
 	}
 #endif