/* Get the received frame and unmap it */
        db = &rx->dcbs[rx->dcb_index].db[rx->db_index];
        page = rx->page[rx->dcb_index][rx->db_index];
+
+       dma_sync_single_for_cpu(lan966x->dev, (dma_addr_t)db->dataptr,
+                               FDMA_DCB_STATUS_BLOCKL(db->status),
+                               DMA_FROM_DEVICE);
+
        skb = build_skb(page_address(page), PAGE_SIZE << rx->page_order);
        if (unlikely(!skb))
                goto unmap_page;
 
-       dma_unmap_single(lan966x->dev, (dma_addr_t)db->dataptr,
-                        FDMA_DCB_STATUS_BLOCKL(db->status),
-                        DMA_FROM_DEVICE);
        skb_put(skb, FDMA_DCB_STATUS_BLOCKL(db->status));
 
        lan966x_ifh_get_src_port(skb->data, &src_port);
        if (WARN_ON(src_port >= lan966x->num_phys_ports))
                goto free_skb;
 
+       dma_unmap_single_attrs(lan966x->dev, (dma_addr_t)db->dataptr,
+                              PAGE_SIZE << rx->page_order, DMA_FROM_DEVICE,
+                              DMA_ATTR_SKIP_CPU_SYNC);
+
        skb->dev = lan966x->ports[src_port]->dev;
        skb_pull(skb, IFH_LEN * sizeof(u32));
 
 free_skb:
        kfree_skb(skb);
 unmap_page:
-       dma_unmap_page(lan966x->dev, (dma_addr_t)db->dataptr,
-                      FDMA_DCB_STATUS_BLOCKL(db->status),
-                      DMA_FROM_DEVICE);
+       dma_unmap_single_attrs(lan966x->dev, (dma_addr_t)db->dataptr,
+                              PAGE_SIZE << rx->page_order, DMA_FROM_DEVICE,
+                              DMA_ATTR_SKIP_CPU_SYNC);
        __free_pages(page, rx->page_order);
 
        return NULL;