| From 472236b8c7802c7df26ead68f38d2b1fa20c2197 Mon Sep 17 00:00:00 2001 |
| From: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| Date: Fri, 18 May 2018 21:31:28 +0300 |
| Subject: [PATCH 1232/1795] sh_eth: add EDMR.NBST support |
| |
| 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> |
| (cherry picked from commit 93f0fa75190fefee55408a1c0812fa54f576c61b) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| --- |
| drivers/net/ethernet/renesas/sh_eth.c | 4 ++++ |
| drivers/net/ethernet/renesas/sh_eth.h | 2 ++ |
| 2 files changed, 6 insertions(+) |
| |
| diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c |
| index c9060768ffcf..19ebb6e9f91a 100644 |
| --- a/drivers/net/ethernet/renesas/sh_eth.c |
| +++ b/drivers/net/ethernet/renesas/sh_eth.c |
| @@ -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 */ |
| |
| diff --git a/drivers/net/ethernet/renesas/sh_eth.h b/drivers/net/ethernet/renesas/sh_eth.h |
| index 1bf930d4a1e5..6dd24fc515ca 100644 |
| --- a/drivers/net/ethernet/renesas/sh_eth.h |
| +++ b/drivers/net/ethernet/renesas/sh_eth.h |
| @@ -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 */ |
| -- |
| 2.19.0 |
| |