diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c
index 425fe81..5451916 100644
--- a/drivers/net/ethernet/broadcom/bgmac.c
+++ b/drivers/net/ethernet/broadcom/bgmac.c
@@ -308,9 +308,9 @@ static int bgmac_dma_rx_read(struct bgmac *bgmac, struct bgmac_dma_ring *ring,
 		u16 len, flags;
 		bool resync_skb = true;
 
-		/* Unmap buffer to make it accessible to the CPU */
+		/* Synchronize the header to make it accessible to the CPU */
 		dma_sync_single_for_cpu(dma_dev, slot->dma_addr,
-					BGMAC_RX_BUF_SIZE, DMA_FROM_DEVICE);
+					sizeof(struct bgmac_rx_header), DMA_FROM_DEVICE);
 
 		/* Get info from the header */
 		rx = (struct bgmac_rx_header *)skb->data;
@@ -355,6 +355,10 @@ static int bgmac_dma_rx_read(struct bgmac *bgmac, struct bgmac_dma_ring *ring,
 			} else {
 				struct sk_buff *new_skb;
 
+				/* Synchronize the data to make it accessible to the CPU */
+				dma_sync_single_for_cpu(dma_dev, slot->dma_addr + BGMAC_RX_FRAME_OFFSET,
+							len, DMA_FROM_DEVICE);
+
 				/* Poison the old skb */
 				rx->len = cpu_to_le16(0xdead);
 				rx->flags = cpu_to_le16(0xbeef);
@@ -379,10 +383,10 @@ static int bgmac_dma_rx_read(struct bgmac *bgmac, struct bgmac_dma_ring *ring,
 			handled++;
 		} while (0);
 
-		/* Make it back accessible to the hardware */
+		/* Make the header back accessible to the hardware */
 		if (resync_skb)
-		dma_sync_single_for_device(dma_dev, slot->dma_addr,
-					   BGMAC_RX_BUF_SIZE, DMA_FROM_DEVICE);
+			dma_sync_single_for_device(dma_dev, slot->dma_addr,
+						   sizeof(struct bgmac_rx_header), DMA_FROM_DEVICE);
 
 		if (++ring->start >= BGMAC_RX_RING_SLOTS)
 			ring->start = 0;
