From: Thomas Petazzoni <thomas.petazzoni@xxxxxxxxxxxxxxxxxx> This commit adds the sh_eth_cpu_data structure that describes the SH7786 variant of the IP. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@xxxxxxxxxxxxxxxxxx> --- The patch is against DaveM's 'net-next.git' repo. Not posting it to netdev@xxxxxxxxxxxxxxx this time since the 'net-next' repo is still closed. Changes in version 2: - added a comment before 'sh7786_data' initializer; - added now mandatory soft_reset() method; - changed the 'register_type' initializer to SH_ETH_REG_FAST_RCAR; - added the 'ecsr_value' field initializer; - renamed EESR_RTO to EESR_TRO; - added the 'fdr_value' field initializer; - added the 'no_xdfar' field initializer. drivers/net/ethernet/renesas/sh_eth.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) Index: net-next/drivers/net/ethernet/renesas/sh_eth.c =================================================================== --- net-next.orig/drivers/net/ethernet/renesas/sh_eth.c +++ net-next/drivers/net/ethernet/renesas/sh_eth.c @@ -879,6 +879,36 @@ static struct sh_eth_cpu_data sh7724_dat .rpadir = 1, }; +/* SH7786 */ +static struct sh_eth_cpu_data sh7786_data = { + .soft_reset = sh_eth_soft_reset, + + .set_duplex = sh_eth_set_duplex, + + .register_type = SH_ETH_REG_FAST_RCAR, + + .edtrr_trns = EDTRR_TRNS_ETHER, + .ecsr_value = ECSR_PSRTO | ECSR_LCHNG | ECSR_ICD, + .ecsipr_value = ECSIPR_PSRTOIP | ECSIPR_LCHNGIP | ECSIPR_ICDIP, + .eesipr_value = EESIPR_RFCOFIP | EESIPR_ADEIP | EESIPR_ECIIP | + EESIPR_FTCIP | EESIPR_TDEIP | EESIPR_TFUFIP | + EESIPR_FRIP | EESIPR_RDEIP | EESIPR_RFOFIP | + EESIPR_RMAFIP | EESIPR_RRFIP | + EESIPR_RTLFIP | EESIPR_RTSFIP | + EESIPR_PREIP | EESIPR_CERFIP, + + .tx_check = EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | EESR_TRO, + .eesr_err_check = EESR_TWB | EESR_TABT | EESR_RABT | EESR_RFE | + EESR_RDE | EESR_RFRMER | EESR_TFE | EESR_TDE, + .fdr_value = 0x00000f0f, + + .apr = 1, + .mpr = 1, + .tpauser = 1, + .hw_swap = 1, + .no_xdfar = 1, +}; + static void sh_eth_set_rate_sh7757(struct net_device *ndev) { struct sh_eth_private *mdp = netdev_priv(ndev); @@ -3476,6 +3506,7 @@ static const struct platform_device_id s { "sh7757-ether", (kernel_ulong_t)&sh7757_data }, { "sh7757-gether", (kernel_ulong_t)&sh7757_data_giga }, { "sh7763-gether", (kernel_ulong_t)&sh7763_data }, + { "sh7786-ether", (kernel_ulong_t)&sh7786_data }, { } }; MODULE_DEVICE_TABLE(platform, sh_eth_id_table);