sh_eth: add EDMR.NBST support
authorSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Fri, 18 May 2018 18:31:28 +0000 (21:31 +0300)
committerDavid S. Miller <davem@davemloft.net>
Sun, 20 May 2018 03:24:46 +0000 (23:24 -0400)
The R-Car V3H (AKA R8A77980) GEther controller adds the DMA burst mode bit
(NBST) in EDMR and the manual tells to always set it before doing any DMA.

Based on the original (and large) patch by Vladimir Barinov.

Signed-off-by: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Reviewed-by: Simon Horman <horms+renesas@verge.net.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/renesas/sh_eth.c
drivers/net/ethernet/renesas/sh_eth.h

index d214ec09d40185429591b60893e2409f92936cd3..800c196510eb2fc887b0e64a0be03c7061220dfd 100644 (file)
@@ -1434,6 +1434,10 @@ static int sh_eth_dev_init(struct net_device *ndev)
 
        sh_eth_write(ndev, mdp->cd->trscer_err_mask, TRSCER);
 
+       /* DMA transfer burst mode */
+       if (mdp->cd->nbst)
+               sh_eth_modify(ndev, EDMR, EDMR_NBST, EDMR_NBST);
+
        if (mdp->cd->bculr)
                sh_eth_write(ndev, 0x800, BCULR);       /* Burst sycle set */
 
index a5b792ce2ae7d046e78ec4c7bfa886a805bc00e8..7d5aaba1384a7cf7d5c6b7a32eaa72786c257b00 100644 (file)
@@ -184,6 +184,7 @@ enum GECMR_BIT {
 
 /* EDMR */
 enum DMAC_M_BIT {
+       EDMR_NBST = 0x80,
        EDMR_EL = 0x40, /* Litte endian */
        EDMR_DL1 = 0x20, EDMR_DL0 = 0x10,
        EDMR_SRST_GETHER = 0x03,
@@ -505,6 +506,7 @@ struct sh_eth_cpu_data {
        unsigned bculr:1;       /* EtherC have BCULR */
        unsigned tsu:1;         /* EtherC have TSU */
        unsigned hw_swap:1;     /* E-DMAC have DE bit in EDMR */
+       unsigned nbst:1;        /* E-DMAC has NBST bit in EDMR */
        unsigned rpadir:1;      /* E-DMAC have RPADIR */
        unsigned no_trimd:1;    /* E-DMAC DO NOT have TRIMD */
        unsigned no_ade:1;      /* E-DMAC DO NOT have ADE bit in EESR */