| From 3d60fb22bd1b426f26924810233909d1610e9cbc Mon Sep 17 00:00:00 2001 |
| From: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| Date: Thu, 13 Jun 2013 22:12:45 +0400 |
| Subject: sh_eth: get R8A7740 Rx descriptor word 0 shift out of #ifdef |
| |
| The only R8A7740 specific #ifdef hindering ARM multiplatform build is left in |
| sh_eth_rx(): it covers the code shifting Rx buffer descriptor word 0 by 16. Get |
| rid of the #ifdef by adding 'shift_rd0' field to the 'struct sh_eth_cpu_data', |
| making the shift dependent on it, and setting it to 1 for the R8A7740 case... |
| |
| Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| (cherry picked from commit ac8025a643a0e0beb81f3f37ca693364c6b77858) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/net/ethernet/renesas/sh_eth.c | 6 +++--- |
| drivers/net/ethernet/renesas/sh_eth.h | 1 + |
| 2 files changed, 4 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c |
| index 110aa717..6ea2b9c4 100644 |
| --- a/drivers/net/ethernet/renesas/sh_eth.c |
| +++ b/drivers/net/ethernet/renesas/sh_eth.c |
| @@ -659,6 +659,7 @@ static struct sh_eth_cpu_data r8a7740_data = { |
| .no_ade = 1, |
| .tsu = 1, |
| .select_mii = 1, |
| + .shift_rd0 = 1, |
| }; |
| |
| static struct sh_eth_cpu_data sh7619_data = { |
| @@ -1262,7 +1263,6 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) |
| if (!(desc_status & RDFEND)) |
| ndev->stats.rx_length_errors++; |
| |
| -#if defined(CONFIG_ARCH_R8A7740) |
| /* |
| * In case of almost all GETHER/ETHERs, the Receive Frame State |
| * (RFS) bits in the Receive Descriptor 0 are from bit 9 to |
| @@ -1270,8 +1270,8 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) |
| * bits are from bit 25 to bit 16. So, the driver needs right |
| * shifting by 16. |
| */ |
| - desc_status >>= 16; |
| -#endif |
| + if (mdp->cd->shift_rd0) |
| + desc_status >>= 16; |
| |
| if (desc_status & (RD_RFS1 | RD_RFS2 | RD_RFS3 | RD_RFS4 | |
| RD_RFS5 | RD_RFS6 | RD_RFS10)) { |
| diff --git a/drivers/net/ethernet/renesas/sh_eth.h b/drivers/net/ethernet/renesas/sh_eth.h |
| index a0257f40..99995bf3 100644 |
| --- a/drivers/net/ethernet/renesas/sh_eth.h |
| +++ b/drivers/net/ethernet/renesas/sh_eth.h |
| @@ -481,6 +481,7 @@ struct sh_eth_cpu_data { |
| unsigned no_ade:1; /* E-DMAC DO NOT have ADE bit in EESR */ |
| unsigned hw_crc:1; /* E-DMAC have CSMR */ |
| unsigned select_mii:1; /* EtherC have RMII_MII (MII select register) */ |
| + unsigned shift_rd0:1; /* shift Rx descriptor word 0 right by 16 */ |
| }; |
| |
| struct sh_eth_private { |
| -- |
| 1.8.4.3.gca3854a |
| |