From mboxrd@z Thu Jan 1 00:00:00 1970 From: will.deacon@arm.com (Will Deacon) Date: Wed, 24 Sep 2014 18:06:27 +0100 Subject: [PATCH v2 01/18] arm: dma-mapping: arm_iommu_attach_device: automatically set max_seg_size In-Reply-To: <1410868485-4143-2-git-send-email-m.szyprowski@samsung.com> References: <1410868485-4143-1-git-send-email-m.szyprowski@samsung.com> <1410868485-4143-2-git-send-email-m.szyprowski@samsung.com> Message-ID: <20140924170627.GK16244@arm.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Marek, On Tue, Sep 16, 2014 at 12:54:28PM +0100, Marek Szyprowski wrote: > If device has no max_seg_size set, we assume that there is no limit and > force it to DMA_BIT_MASK(32) to always use contiguous mappings in DMA > address space. > > Signed-off-by: Marek Szyprowski > --- > arch/arm/mm/dma-mapping.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c > index bcd5f836f27e..84705e24571b 100644 > --- a/arch/arm/mm/dma-mapping.c > +++ b/arch/arm/mm/dma-mapping.c > @@ -2050,6 +2050,22 @@ int arm_iommu_attach_device(struct device *dev, > { > int err; > > + /* > + * if device has no max_seg_size set, we assume that there is no limit > + * and force it to DMA_BIT_MASK(32) to always use contiguous mappings > + * in DMA address space > + */ > + if (!dev->dma_parms) { > + dev->dma_parms = kzalloc(sizeof(*dev->dma_parms), GFP_KERNEL); > + if (!dev->dma_parms) > + return -ENOMEM; > + } > + if (!dev->dma_parms->max_segment_size) { > + err = dma_set_max_seg_size(dev, DMA_BIT_MASK(32)); Would it make more sense to base this default value off the dma_mask? In my IOMMU series, of_dma_configure passes back a size parameter to arch_setup_dma_ops which is calculated from the dma-ranges property or the coherent dma mask if the ranges property is absent, so maybe we should set this there too? Will