On 26-03-2018 17:15, Robin Murphy wrote:
> Hi Harsh,
>
> On 26/03/18 10:55, Harsh Jain wrote:
>> Hi,
>>
>> Can we add  offset to dma address received from IOMMU in scatter/Gather list 
>> before sending it to H/W.
>>
>> Address to HW = sg_dma_address(sg) + offset, where 0 < offset < 
>> sg_dma_len(sg).
>
> sg_dma_address() should already account for sg->offset (i.e. the start of the 
> buffer within the page. If there's a DMA API implementation failing to 
> respect that then that's a bug.
Thanks.
Here "offset" means size of last dma entry I had mapped to H/W structure. eg if 
dma length is 9K offset will be 0, 2K, 4K,6K,8K.
>
>> I need this operation to make sure our H/W does not receives entry of size 
>> greater than 2K.
>
> If however it's just that you want to fragment a single SG entry into 
> multiple commaneds/descriptors/etc. internally to your driver, then I can't 
> see that being an issue as long as you don't visibly modify the scatterlist 
> itself. If there's a genuine length and/or alignment limitation in the 
> hardware, though, it would be better to set up dev->dma_parms appropriately 
> to describe them, such that the subsystem responsible for generating the 
> scatterlist respects the appropriate constraints in the first place (and if 
> it doesn't, then that's another bug to fix).
>
Yes, I wants to fragment single entry into multiple such that it is less than 
2K. eg. if sg->length  == 5k , I will split into 3 entries
addr1 = sg_dma_address(sg),     len =2K
addr2 = sg_dma_address(sg) + 2K,     len = 2K
addr3 = sg_dma_address(sg) +4K,     len = 1K


> Robin.

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to