aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergei Shtylyov <sergei.shtylyov@cogentembedded.com>2018-03-31 17:22:08 -0400
committerDavid S. Miller <davem@davemloft.net>2018-04-01 14:09:53 -0400
commit6e80e55bd37a90b412f168b1667ffa7d2debd46b (patch)
treea6a8423964703c9d4f9a94223f4b086b0e2bbe77
parent16c3c91346961fdd733ad232311772795599be7f (diff)
sh_eth: add sh_eth_cpu_data::no_xdfar flag
The commit 6ded286555c2 ("sh_eth: Fix RX recovery on R-Car in case of RX ring underrun") added a check for an bad RDFAR offset in sh_eth_rx(), so that the code could work on the R-Car Ether controllers which don't have this register (and TDFAR), then the commit 3365711df02 ("sh_eth: WARN on access to a register not implemented in a particular chip") replaced offset 0 with 0xffff. Adding/checking the 'no_xdfar' bit field in the 'struct sh_eth_cpu_data' instead results in less object code... Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/renesas/sh_eth.c5
-rw-r--r--drivers/net/ethernet/renesas/sh_eth.h1
2 files changed, 4 insertions, 2 deletions
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
index 306558ef36b5..2bff03345b72 100644
--- a/drivers/net/ethernet/renesas/sh_eth.c
+++ b/drivers/net/ethernet/renesas/sh_eth.c
@@ -702,6 +702,7 @@ static struct sh_eth_cpu_data rcar_gen1_data = {
702 .mpr = 1, 702 .mpr = 1,
703 .tpauser = 1, 703 .tpauser = 1,
704 .hw_swap = 1, 704 .hw_swap = 1,
705 .no_xdfar = 1,
705}; 706};
706 707
707/* R-Car Gen2 and RZ/G1 */ 708/* R-Car Gen2 and RZ/G1 */
@@ -735,6 +736,7 @@ static struct sh_eth_cpu_data rcar_gen2_data = {
735 .mpr = 1, 736 .mpr = 1,
736 .tpauser = 1, 737 .tpauser = 1,
737 .hw_swap = 1, 738 .hw_swap = 1,
739 .no_xdfar = 1,
738 .rmiimode = 1, 740 .rmiimode = 1,
739 .magic = 1, 741 .magic = 1,
740}; 742};
@@ -1615,8 +1617,7 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
1615 /* If we don't need to check status, don't. -KDU */ 1617 /* If we don't need to check status, don't. -KDU */
1616 if (!(sh_eth_read(ndev, EDRRR) & EDRRR_R)) { 1618 if (!(sh_eth_read(ndev, EDRRR) & EDRRR_R)) {
1617 /* fix the values for the next receiving if RDE is set */ 1619 /* fix the values for the next receiving if RDE is set */
1618 if (intr_status & EESR_RDE && 1620 if (intr_status & EESR_RDE && !mdp->cd->no_xdfar) {
1619 mdp->reg_offset[RDFAR] != SH_ETH_OFFSET_INVALID) {
1620 u32 count = (sh_eth_read(ndev, RDFAR) - 1621 u32 count = (sh_eth_read(ndev, RDFAR) -
1621 sh_eth_read(ndev, RDLAR)) >> 4; 1622 sh_eth_read(ndev, RDLAR)) >> 4;
1622 1623
diff --git a/drivers/net/ethernet/renesas/sh_eth.h b/drivers/net/ethernet/renesas/sh_eth.h
index a0416e04306a..a5b792ce2ae7 100644
--- a/drivers/net/ethernet/renesas/sh_eth.h
+++ b/drivers/net/ethernet/renesas/sh_eth.h
@@ -508,6 +508,7 @@ struct sh_eth_cpu_data {
508 unsigned rpadir:1; /* E-DMAC have RPADIR */ 508 unsigned rpadir:1; /* E-DMAC have RPADIR */
509 unsigned no_trimd:1; /* E-DMAC DO NOT have TRIMD */ 509 unsigned no_trimd:1; /* E-DMAC DO NOT have TRIMD */
510 unsigned no_ade:1; /* E-DMAC DO NOT have ADE bit in EESR */ 510 unsigned no_ade:1; /* E-DMAC DO NOT have ADE bit in EESR */
511 unsigned no_xdfar:1; /* E-DMAC DOES NOT have RDFAR/TDFAR */
511 unsigned xdfar_rw:1; /* E-DMAC has writeable RDFAR/TDFAR */ 512 unsigned xdfar_rw:1; /* E-DMAC has writeable RDFAR/TDFAR */
512 unsigned hw_checksum:1; /* E-DMAC has CSMR */ 513 unsigned hw_checksum:1; /* E-DMAC has CSMR */
513 unsigned select_mii:1; /* EtherC have RMII_MII (MII select register) */ 514 unsigned select_mii:1; /* EtherC have RMII_MII (MII select register) */