summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/freescale/dpa
diff options
context:
space:
mode:
authorMarian-Cristian Rotariu <marian.rotariu@freescale.com>2014-10-31 15:26:46 (GMT)
committerMadalin Bucur <madalin.bucur@freescale.com>2015-03-11 16:05:52 (GMT)
commit9d039899453ec385f1b0949457800d15b25d95ee (patch)
tree12bf106924cd83a1676dbe63b07b058317293738 /drivers/net/ethernet/freescale/dpa
parent36f096f59e4804b37ddc200d7770380f622fd4ca (diff)
downloadlinux-fsl-qoriq-9d039899453ec385f1b0949457800d15b25d95ee.tar.xz
dpaa_eth: make the S/G rx routine endian portable
This patch modifies the shared S/G rx routine used by shared and macless driver to properly receive the S/G frames from FMan. Signed-off-by: Marian-Cristian Rotariu <marian.rotariu@freescale.com> Change-Id: Icc467cb9ced12db75db28876e606e23fd3ee7788 Reviewed-on: http://git.am.freescale.net:8181/22852 Reviewed-by: Madalin-Cristian Bucur <madalin.bucur@freescale.com> Reviewed-on: http://git.am.freescale.net:8181/32502
Diffstat (limited to 'drivers/net/ethernet/freescale/dpa')
-rw-r--r--drivers/net/ethernet/freescale/dpa/dpaa_eth_shared.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth_shared.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth_shared.c
index ea88db2..1ac0007 100644
--- a/drivers/net/ethernet/freescale/dpa/dpaa_eth_shared.c
+++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth_shared.c
@@ -269,18 +269,19 @@ shared_rx_dqrr(struct qman_portal *portal, struct qman_fq *fq,
if (fd->format == qm_fd_sg) {
if (dpa_bp->vaddr) {
- sgt = dpa_phys2virt(dpa_bp,
- qm_fd_addr(fd)) + dpa_fd_offset(fd);
+ sgt = dpa_phys2virt(dpa_bp, qm_fd_addr(fd)) +
+ dpa_fd_offset(fd);
for (i = 0; i < DPA_SGT_MAX_ENTRIES; i++) {
+ void *frag_addr = dpa_phys2virt(dpa_bp,
+ qm_sg_addr(&sgt[i]) +
+ be16_to_cpu(sgt[i].offset));
+ u32 frag_length = be32_to_cpu(sgt[i].length);
BUG_ON(sgt[i].extension);
/* copy from sgt[i] */
- memcpy(skb_put(skb, sgt[i].length),
- dpa_phys2virt(dpa_bp,
- qm_sg_addr(&sgt[i]) +
- sgt[i].offset),
- sgt[i].length);
+ memcpy(skb_put(skb, frag_length), frag_addr,
+ frag_length);
if (sgt[i].final)
break;
}
@@ -300,12 +301,13 @@ shared_rx_dqrr(struct qman_portal *portal, struct qman_fq *fq,
dpa_bp->size));
for (i = 0; i < DPA_SGT_MAX_ENTRIES; i++) {
+ u32 frag_length = be32_to_cpu(sgt[i].length);
BUG_ON(sgt[i].extension);
-
copy_from_unmapped_area(
- skb_put(skb, sgt[i].length),
- qm_sg_addr(&sgt[i]) + sgt[i].offset,
- sgt[i].length);
+ skb_put(skb, frag_length),
+ qm_sg_addr(&sgt[i]) +
+ be16_to_cpu(sgt[i].offset),
+ frag_length);
if (sgt[i].final)
break;