octeontx2-af: Use DMA_ATTR_FORCE_CONTIGUOUS attribute in DMA alloc
authorGeetha sowjanya <gakula@marvell.com>
Sun, 22 Aug 2021 12:02:23 +0000 (17:32 +0530)
committerDavid S. Miller <davem@davemloft.net>
Sun, 22 Aug 2021 20:38:15 +0000 (21:38 +0100)
CN10K platform requires physically contiguous memory for LMTST
operations which goes beyond a single page. Not having physically
contiguous memory will result in HW fetching transmit descriptors from
a wrong memory location.

Hence use DMA_ATTR_FORCE_CONTIGUOUS attribute while allocating
LMTST regions.

Signed-off-by: Geetha sowjanya <gakula@marvell.com>
Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/octeontx2/af/common.h

index 6c77023..da82480 100644 (file)
@@ -64,8 +64,8 @@ static inline int qmem_alloc(struct device *dev, struct qmem **q,
 
        qmem->entry_sz = entry_sz;
        qmem->alloc_sz = (qsize * entry_sz) + OTX2_ALIGN;
-       qmem->base = dma_alloc_coherent(dev, qmem->alloc_sz,
-                                        &qmem->iova, GFP_KERNEL);
+       qmem->base = dma_alloc_attrs(dev, qmem->alloc_sz, &qmem->iova,
+                                    GFP_KERNEL, DMA_ATTR_FORCE_CONTIGUOUS);
        if (!qmem->base)
                return -ENOMEM;
 
@@ -84,9 +84,10 @@ static inline void qmem_free(struct device *dev, struct qmem *qmem)
                return;
 
        if (qmem->base)
-               dma_free_coherent(dev, qmem->alloc_sz,
-                                 qmem->base - qmem->align,
-                                 qmem->iova - qmem->align);
+               dma_free_attrs(dev, qmem->alloc_sz,
+                              qmem->base - qmem->align,
+                              qmem->iova - qmem->align,
+                              DMA_ATTR_FORCE_CONTIGUOUS);
        devm_kfree(dev, qmem);
 }