Linux Audio

Check our new training course

Linux BSP upgrade and security maintenance

Need help to get security updates for your Linux BSP?
Loading...
Note: File does not exist in v3.1.
   1/*
   2 *  SuperH Ethernet device driver
   3 *
   4 *  Copyright (C) 2006-2012 Nobuhiro Iwamatsu
   5 *  Copyright (C) 2008-2012 Renesas Solutions Corp.
   6 *
   7 *  This program is free software; you can redistribute it and/or modify it
   8 *  under the terms and conditions of the GNU General Public License,
   9 *  version 2, as published by the Free Software Foundation.
  10 *
  11 *  This program is distributed in the hope it will be useful, but WITHOUT
  12 *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13 *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  14 *  more details.
  15 *  You should have received a copy of the GNU General Public License along with
  16 *  this program; if not, write to the Free Software Foundation, Inc.,
  17 *  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
  18 *
  19 *  The full GNU General Public License is included in this distribution in
  20 *  the file called "COPYING".
  21 */
  22
  23#include <linux/init.h>
  24#include <linux/module.h>
  25#include <linux/kernel.h>
  26#include <linux/spinlock.h>
  27#include <linux/interrupt.h>
  28#include <linux/dma-mapping.h>
  29#include <linux/etherdevice.h>
  30#include <linux/delay.h>
  31#include <linux/platform_device.h>
  32#include <linux/mdio-bitbang.h>
  33#include <linux/netdevice.h>
  34#include <linux/phy.h>
  35#include <linux/cache.h>
  36#include <linux/io.h>
  37#include <linux/pm_runtime.h>
  38#include <linux/slab.h>
  39#include <linux/ethtool.h>
  40#include <linux/if_vlan.h>
  41#include <linux/clk.h>
  42#include <linux/sh_eth.h>
  43
  44#include "sh_eth.h"
  45
  46#define SH_ETH_DEF_MSG_ENABLE \
  47		(NETIF_MSG_LINK	| \
  48		NETIF_MSG_TIMER	| \
  49		NETIF_MSG_RX_ERR| \
  50		NETIF_MSG_TX_ERR)
  51
  52/* There is CPU dependent code */
  53#if defined(CONFIG_CPU_SUBTYPE_SH7724)
  54#define SH_ETH_RESET_DEFAULT	1
  55static void sh_eth_set_duplex(struct net_device *ndev)
  56{
  57	struct sh_eth_private *mdp = netdev_priv(ndev);
  58
  59	if (mdp->duplex) /* Full */
  60		sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | ECMR_DM, ECMR);
  61	else		/* Half */
  62		sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~ECMR_DM, ECMR);
  63}
  64
  65static void sh_eth_set_rate(struct net_device *ndev)
  66{
  67	struct sh_eth_private *mdp = netdev_priv(ndev);
  68
  69	switch (mdp->speed) {
  70	case 10: /* 10BASE */
  71		sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~ECMR_RTM, ECMR);
  72		break;
  73	case 100:/* 100BASE */
  74		sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | ECMR_RTM, ECMR);
  75		break;
  76	default:
  77		break;
  78	}
  79}
  80
  81/* SH7724 */
  82static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
  83	.set_duplex	= sh_eth_set_duplex,
  84	.set_rate	= sh_eth_set_rate,
  85
  86	.ecsr_value	= ECSR_PSRTO | ECSR_LCHNG | ECSR_ICD,
  87	.ecsipr_value	= ECSIPR_PSRTOIP | ECSIPR_LCHNGIP | ECSIPR_ICDIP,
  88	.eesipr_value	= DMAC_M_RFRMER | DMAC_M_ECI | 0x01ff009f,
  89
  90	.tx_check	= EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | EESR_RTO,
  91	.eesr_err_check	= EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE |
  92			  EESR_RFRMER | EESR_TFE | EESR_TDE | EESR_ECI,
  93	.tx_error_check	= EESR_TWB | EESR_TABT | EESR_TDE | EESR_TFE,
  94
  95	.apr		= 1,
  96	.mpr		= 1,
  97	.tpauser	= 1,
  98	.hw_swap	= 1,
  99	.rpadir		= 1,
 100	.rpadir_value	= 0x00020000, /* NET_IP_ALIGN assumed to be 2 */
 101};
 102#elif defined(CONFIG_CPU_SUBTYPE_SH7757)
 103#define SH_ETH_HAS_BOTH_MODULES	1
 104#define SH_ETH_HAS_TSU	1
 105static void sh_eth_set_duplex(struct net_device *ndev)
 106{
 107	struct sh_eth_private *mdp = netdev_priv(ndev);
 108
 109	if (mdp->duplex) /* Full */
 110		sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | ECMR_DM, ECMR);
 111	else		/* Half */
 112		sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~ECMR_DM, ECMR);
 113}
 114
 115static void sh_eth_set_rate(struct net_device *ndev)
 116{
 117	struct sh_eth_private *mdp = netdev_priv(ndev);
 118
 119	switch (mdp->speed) {
 120	case 10: /* 10BASE */
 121		sh_eth_write(ndev, 0, RTRATE);
 122		break;
 123	case 100:/* 100BASE */
 124		sh_eth_write(ndev, 1, RTRATE);
 125		break;
 126	default:
 127		break;
 128	}
 129}
 130
 131/* SH7757 */
 132static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
 133	.set_duplex		= sh_eth_set_duplex,
 134	.set_rate		= sh_eth_set_rate,
 135
 136	.eesipr_value	= DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff,
 137	.rmcr_value	= 0x00000001,
 138
 139	.tx_check	= EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | EESR_RTO,
 140	.eesr_err_check	= EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE |
 141			  EESR_RFRMER | EESR_TFE | EESR_TDE | EESR_ECI,
 142	.tx_error_check	= EESR_TWB | EESR_TABT | EESR_TDE | EESR_TFE,
 143
 144	.apr		= 1,
 145	.mpr		= 1,
 146	.tpauser	= 1,
 147	.hw_swap	= 1,
 148	.no_ade		= 1,
 149	.rpadir		= 1,
 150	.rpadir_value   = 2 << 16,
 151};
 152
 153#define SH_GIGA_ETH_BASE	0xfee00000
 154#define GIGA_MALR(port)		(SH_GIGA_ETH_BASE + 0x800 * (port) + 0x05c8)
 155#define GIGA_MAHR(port)		(SH_GIGA_ETH_BASE + 0x800 * (port) + 0x05c0)
 156static void sh_eth_chip_reset_giga(struct net_device *ndev)
 157{
 158	int i;
 159	unsigned long mahr[2], malr[2];
 160
 161	/* save MAHR and MALR */
 162	for (i = 0; i < 2; i++) {
 163		malr[i] = ioread32((void *)GIGA_MALR(i));
 164		mahr[i] = ioread32((void *)GIGA_MAHR(i));
 165	}
 166
 167	/* reset device */
 168	iowrite32(ARSTR_ARSTR, (void *)(SH_GIGA_ETH_BASE + 0x1800));
 169	mdelay(1);
 170
 171	/* restore MAHR and MALR */
 172	for (i = 0; i < 2; i++) {
 173		iowrite32(malr[i], (void *)GIGA_MALR(i));
 174		iowrite32(mahr[i], (void *)GIGA_MAHR(i));
 175	}
 176}
 177
 178static int sh_eth_is_gether(struct sh_eth_private *mdp);
 179static void sh_eth_reset(struct net_device *ndev)
 180{
 181	struct sh_eth_private *mdp = netdev_priv(ndev);
 182	int cnt = 100;
 183
 184	if (sh_eth_is_gether(mdp)) {
 185		sh_eth_write(ndev, 0x03, EDSR);
 186		sh_eth_write(ndev, sh_eth_read(ndev, EDMR) | EDMR_SRST_GETHER,
 187				EDMR);
 188		while (cnt > 0) {
 189			if (!(sh_eth_read(ndev, EDMR) & 0x3))
 190				break;
 191			mdelay(1);
 192			cnt--;
 193		}
 194		if (cnt < 0)
 195			printk(KERN_ERR "Device reset fail\n");
 196
 197		/* Table Init */
 198		sh_eth_write(ndev, 0x0, TDLAR);
 199		sh_eth_write(ndev, 0x0, TDFAR);
 200		sh_eth_write(ndev, 0x0, TDFXR);
 201		sh_eth_write(ndev, 0x0, TDFFR);
 202		sh_eth_write(ndev, 0x0, RDLAR);
 203		sh_eth_write(ndev, 0x0, RDFAR);
 204		sh_eth_write(ndev, 0x0, RDFXR);
 205		sh_eth_write(ndev, 0x0, RDFFR);
 206	} else {
 207		sh_eth_write(ndev, sh_eth_read(ndev, EDMR) | EDMR_SRST_ETHER,
 208				EDMR);
 209		mdelay(3);
 210		sh_eth_write(ndev, sh_eth_read(ndev, EDMR) & ~EDMR_SRST_ETHER,
 211				EDMR);
 212	}
 213}
 214
 215static void sh_eth_set_duplex_giga(struct net_device *ndev)
 216{
 217	struct sh_eth_private *mdp = netdev_priv(ndev);
 218
 219	if (mdp->duplex) /* Full */
 220		sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | ECMR_DM, ECMR);
 221	else		/* Half */
 222		sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~ECMR_DM, ECMR);
 223}
 224
 225static void sh_eth_set_rate_giga(struct net_device *ndev)
 226{
 227	struct sh_eth_private *mdp = netdev_priv(ndev);
 228
 229	switch (mdp->speed) {
 230	case 10: /* 10BASE */
 231		sh_eth_write(ndev, 0x00000000, GECMR);
 232		break;
 233	case 100:/* 100BASE */
 234		sh_eth_write(ndev, 0x00000010, GECMR);
 235		break;
 236	case 1000: /* 1000BASE */
 237		sh_eth_write(ndev, 0x00000020, GECMR);
 238		break;
 239	default:
 240		break;
 241	}
 242}
 243
 244/* SH7757(GETHERC) */
 245static struct sh_eth_cpu_data sh_eth_my_cpu_data_giga = {
 246	.chip_reset	= sh_eth_chip_reset_giga,
 247	.set_duplex	= sh_eth_set_duplex_giga,
 248	.set_rate	= sh_eth_set_rate_giga,
 249
 250	.ecsr_value	= ECSR_ICD | ECSR_MPD,
 251	.ecsipr_value	= ECSIPR_LCHNGIP | ECSIPR_ICDIP | ECSIPR_MPDIP,
 252	.eesipr_value	= DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff,
 253
 254	.tx_check	= EESR_TC1 | EESR_FTC,
 255	.eesr_err_check	= EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT | \
 256			  EESR_RDE | EESR_RFRMER | EESR_TFE | EESR_TDE | \
 257			  EESR_ECI,
 258	.tx_error_check	= EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_TDE | \
 259			  EESR_TFE,
 260	.fdr_value	= 0x0000072f,
 261	.rmcr_value	= 0x00000001,
 262
 263	.apr		= 1,
 264	.mpr		= 1,
 265	.tpauser	= 1,
 266	.bculr		= 1,
 267	.hw_swap	= 1,
 268	.rpadir		= 1,
 269	.rpadir_value   = 2 << 16,
 270	.no_trimd	= 1,
 271	.no_ade		= 1,
 272	.tsu		= 1,
 273};
 274
 275static struct sh_eth_cpu_data *sh_eth_get_cpu_data(struct sh_eth_private *mdp)
 276{
 277	if (sh_eth_is_gether(mdp))
 278		return &sh_eth_my_cpu_data_giga;
 279	else
 280		return &sh_eth_my_cpu_data;
 281}
 282
 283#elif defined(CONFIG_CPU_SUBTYPE_SH7734) || defined(CONFIG_CPU_SUBTYPE_SH7763)
 284#define SH_ETH_HAS_TSU	1
 285static void sh_eth_reset_hw_crc(struct net_device *ndev);
 286static void sh_eth_chip_reset(struct net_device *ndev)
 287{
 288	struct sh_eth_private *mdp = netdev_priv(ndev);
 289
 290	/* reset device */
 291	sh_eth_tsu_write(mdp, ARSTR_ARSTR, ARSTR);
 292	mdelay(1);
 293}
 294
 295static void sh_eth_reset(struct net_device *ndev)
 296{
 297	int cnt = 100;
 298
 299	sh_eth_write(ndev, EDSR_ENALL, EDSR);
 300	sh_eth_write(ndev, sh_eth_read(ndev, EDMR) | EDMR_SRST_GETHER, EDMR);
 301	while (cnt > 0) {
 302		if (!(sh_eth_read(ndev, EDMR) & 0x3))
 303			break;
 304		mdelay(1);
 305		cnt--;
 306	}
 307	if (cnt == 0)
 308		printk(KERN_ERR "Device reset fail\n");
 309
 310	/* Table Init */
 311	sh_eth_write(ndev, 0x0, TDLAR);
 312	sh_eth_write(ndev, 0x0, TDFAR);
 313	sh_eth_write(ndev, 0x0, TDFXR);
 314	sh_eth_write(ndev, 0x0, TDFFR);
 315	sh_eth_write(ndev, 0x0, RDLAR);
 316	sh_eth_write(ndev, 0x0, RDFAR);
 317	sh_eth_write(ndev, 0x0, RDFXR);
 318	sh_eth_write(ndev, 0x0, RDFFR);
 319
 320	/* Reset HW CRC register */
 321	sh_eth_reset_hw_crc(ndev);
 322}
 323
 324static void sh_eth_set_duplex(struct net_device *ndev)
 325{
 326	struct sh_eth_private *mdp = netdev_priv(ndev);
 327
 328	if (mdp->duplex) /* Full */
 329		sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | ECMR_DM, ECMR);
 330	else		/* Half */
 331		sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~ECMR_DM, ECMR);
 332}
 333
 334static void sh_eth_set_rate(struct net_device *ndev)
 335{
 336	struct sh_eth_private *mdp = netdev_priv(ndev);
 337
 338	switch (mdp->speed) {
 339	case 10: /* 10BASE */
 340		sh_eth_write(ndev, GECMR_10, GECMR);
 341		break;
 342	case 100:/* 100BASE */
 343		sh_eth_write(ndev, GECMR_100, GECMR);
 344		break;
 345	case 1000: /* 1000BASE */
 346		sh_eth_write(ndev, GECMR_1000, GECMR);
 347		break;
 348	default:
 349		break;
 350	}
 351}
 352
 353/* sh7763 */
 354static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
 355	.chip_reset	= sh_eth_chip_reset,
 356	.set_duplex	= sh_eth_set_duplex,
 357	.set_rate	= sh_eth_set_rate,
 358
 359	.ecsr_value	= ECSR_ICD | ECSR_MPD,
 360	.ecsipr_value	= ECSIPR_LCHNGIP | ECSIPR_ICDIP | ECSIPR_MPDIP,
 361	.eesipr_value	= DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff,
 362
 363	.tx_check	= EESR_TC1 | EESR_FTC,
 364	.eesr_err_check	= EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT | \
 365			  EESR_RDE | EESR_RFRMER | EESR_TFE | EESR_TDE | \
 366			  EESR_ECI,
 367	.tx_error_check	= EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_TDE | \
 368			  EESR_TFE,
 369
 370	.apr		= 1,
 371	.mpr		= 1,
 372	.tpauser	= 1,
 373	.bculr		= 1,
 374	.hw_swap	= 1,
 375	.no_trimd	= 1,
 376	.no_ade		= 1,
 377	.tsu		= 1,
 378#if defined(CONFIG_CPU_SUBTYPE_SH7734)
 379	.hw_crc     = 1,
 380#endif
 381};
 382
 383static void sh_eth_reset_hw_crc(struct net_device *ndev)
 384{
 385	if (sh_eth_my_cpu_data.hw_crc)
 386		sh_eth_write(ndev, 0x0, CSMR);
 387}
 388
 389#elif defined(CONFIG_ARCH_R8A7740)
 390#define SH_ETH_HAS_TSU	1
 391static void sh_eth_chip_reset(struct net_device *ndev)
 392{
 393	struct sh_eth_private *mdp = netdev_priv(ndev);
 394	unsigned long mii;
 395
 396	/* reset device */
 397	sh_eth_tsu_write(mdp, ARSTR_ARSTR, ARSTR);
 398	mdelay(1);
 399
 400	switch (mdp->phy_interface) {
 401	case PHY_INTERFACE_MODE_GMII:
 402		mii = 2;
 403		break;
 404	case PHY_INTERFACE_MODE_MII:
 405		mii = 1;
 406		break;
 407	case PHY_INTERFACE_MODE_RMII:
 408	default:
 409		mii = 0;
 410		break;
 411	}
 412	sh_eth_write(ndev, mii, RMII_MII);
 413}
 414
 415static void sh_eth_reset(struct net_device *ndev)
 416{
 417	int cnt = 100;
 418
 419	sh_eth_write(ndev, EDSR_ENALL, EDSR);
 420	sh_eth_write(ndev, sh_eth_read(ndev, EDMR) | EDMR_SRST_GETHER, EDMR);
 421	while (cnt > 0) {
 422		if (!(sh_eth_read(ndev, EDMR) & 0x3))
 423			break;
 424		mdelay(1);
 425		cnt--;
 426	}
 427	if (cnt == 0)
 428		printk(KERN_ERR "Device reset fail\n");
 429
 430	/* Table Init */
 431	sh_eth_write(ndev, 0x0, TDLAR);
 432	sh_eth_write(ndev, 0x0, TDFAR);
 433	sh_eth_write(ndev, 0x0, TDFXR);
 434	sh_eth_write(ndev, 0x0, TDFFR);
 435	sh_eth_write(ndev, 0x0, RDLAR);
 436	sh_eth_write(ndev, 0x0, RDFAR);
 437	sh_eth_write(ndev, 0x0, RDFXR);
 438	sh_eth_write(ndev, 0x0, RDFFR);
 439}
 440
 441static void sh_eth_set_duplex(struct net_device *ndev)
 442{
 443	struct sh_eth_private *mdp = netdev_priv(ndev);
 444
 445	if (mdp->duplex) /* Full */
 446		sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | ECMR_DM, ECMR);
 447	else		/* Half */
 448		sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~ECMR_DM, ECMR);
 449}
 450
 451static void sh_eth_set_rate(struct net_device *ndev)
 452{
 453	struct sh_eth_private *mdp = netdev_priv(ndev);
 454
 455	switch (mdp->speed) {
 456	case 10: /* 10BASE */
 457		sh_eth_write(ndev, GECMR_10, GECMR);
 458		break;
 459	case 100:/* 100BASE */
 460		sh_eth_write(ndev, GECMR_100, GECMR);
 461		break;
 462	case 1000: /* 1000BASE */
 463		sh_eth_write(ndev, GECMR_1000, GECMR);
 464		break;
 465	default:
 466		break;
 467	}
 468}
 469
 470/* R8A7740 */
 471static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
 472	.chip_reset	= sh_eth_chip_reset,
 473	.set_duplex	= sh_eth_set_duplex,
 474	.set_rate	= sh_eth_set_rate,
 475
 476	.ecsr_value	= ECSR_ICD | ECSR_MPD,
 477	.ecsipr_value	= ECSIPR_LCHNGIP | ECSIPR_ICDIP | ECSIPR_MPDIP,
 478	.eesipr_value	= DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff,
 479
 480	.tx_check	= EESR_TC1 | EESR_FTC,
 481	.eesr_err_check	= EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT | \
 482			  EESR_RDE | EESR_RFRMER | EESR_TFE | EESR_TDE | \
 483			  EESR_ECI,
 484	.tx_error_check	= EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_TDE | \
 485			  EESR_TFE,
 486
 487	.apr		= 1,
 488	.mpr		= 1,
 489	.tpauser	= 1,
 490	.bculr		= 1,
 491	.hw_swap	= 1,
 492	.no_trimd	= 1,
 493	.no_ade		= 1,
 494	.tsu		= 1,
 495};
 496
 497#elif defined(CONFIG_CPU_SUBTYPE_SH7619)
 498#define SH_ETH_RESET_DEFAULT	1
 499static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
 500	.eesipr_value	= DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff,
 501
 502	.apr		= 1,
 503	.mpr		= 1,
 504	.tpauser	= 1,
 505	.hw_swap	= 1,
 506};
 507#elif defined(CONFIG_CPU_SUBTYPE_SH7710) || defined(CONFIG_CPU_SUBTYPE_SH7712)
 508#define SH_ETH_RESET_DEFAULT	1
 509#define SH_ETH_HAS_TSU	1
 510static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
 511	.eesipr_value	= DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff,
 512	.tsu		= 1,
 513};
 514#endif
 515
 516static void sh_eth_set_default_cpu_data(struct sh_eth_cpu_data *cd)
 517{
 518	if (!cd->ecsr_value)
 519		cd->ecsr_value = DEFAULT_ECSR_INIT;
 520
 521	if (!cd->ecsipr_value)
 522		cd->ecsipr_value = DEFAULT_ECSIPR_INIT;
 523
 524	if (!cd->fcftr_value)
 525		cd->fcftr_value = DEFAULT_FIFO_F_D_RFF | \
 526				  DEFAULT_FIFO_F_D_RFD;
 527
 528	if (!cd->fdr_value)
 529		cd->fdr_value = DEFAULT_FDR_INIT;
 530
 531	if (!cd->rmcr_value)
 532		cd->rmcr_value = DEFAULT_RMCR_VALUE;
 533
 534	if (!cd->tx_check)
 535		cd->tx_check = DEFAULT_TX_CHECK;
 536
 537	if (!cd->eesr_err_check)
 538		cd->eesr_err_check = DEFAULT_EESR_ERR_CHECK;
 539
 540	if (!cd->tx_error_check)
 541		cd->tx_error_check = DEFAULT_TX_ERROR_CHECK;
 542}
 543
 544#if defined(SH_ETH_RESET_DEFAULT)
 545/* Chip Reset */
 546static void sh_eth_reset(struct net_device *ndev)
 547{
 548	sh_eth_write(ndev, sh_eth_read(ndev, EDMR) | EDMR_SRST_ETHER, EDMR);
 549	mdelay(3);
 550	sh_eth_write(ndev, sh_eth_read(ndev, EDMR) & ~EDMR_SRST_ETHER, EDMR);
 551}
 552#endif
 553
 554#if defined(CONFIG_CPU_SH4) || defined(CONFIG_ARCH_SHMOBILE)
 555static void sh_eth_set_receive_align(struct sk_buff *skb)
 556{
 557	int reserve;
 558
 559	reserve = SH4_SKB_RX_ALIGN - ((u32)skb->data & (SH4_SKB_RX_ALIGN - 1));
 560	if (reserve)
 561		skb_reserve(skb, reserve);
 562}
 563#else
 564static void sh_eth_set_receive_align(struct sk_buff *skb)
 565{
 566	skb_reserve(skb, SH2_SH3_SKB_RX_ALIGN);
 567}
 568#endif
 569
 570
 571/* CPU <-> EDMAC endian convert */
 572static inline __u32 cpu_to_edmac(struct sh_eth_private *mdp, u32 x)
 573{
 574	switch (mdp->edmac_endian) {
 575	case EDMAC_LITTLE_ENDIAN:
 576		return cpu_to_le32(x);
 577	case EDMAC_BIG_ENDIAN:
 578		return cpu_to_be32(x);
 579	}
 580	return x;
 581}
 582
 583static inline __u32 edmac_to_cpu(struct sh_eth_private *mdp, u32 x)
 584{
 585	switch (mdp->edmac_endian) {
 586	case EDMAC_LITTLE_ENDIAN:
 587		return le32_to_cpu(x);
 588	case EDMAC_BIG_ENDIAN:
 589		return be32_to_cpu(x);
 590	}
 591	return x;
 592}
 593
 594/*
 595 * Program the hardware MAC address from dev->dev_addr.
 596 */
 597static void update_mac_address(struct net_device *ndev)
 598{
 599	sh_eth_write(ndev,
 600		(ndev->dev_addr[0] << 24) | (ndev->dev_addr[1] << 16) |
 601		(ndev->dev_addr[2] << 8) | (ndev->dev_addr[3]), MAHR);
 602	sh_eth_write(ndev,
 603		(ndev->dev_addr[4] << 8) | (ndev->dev_addr[5]), MALR);
 604}
 605
 606/*
 607 * Get MAC address from SuperH MAC address register
 608 *
 609 * SuperH's Ethernet device doesn't have 'ROM' to MAC address.
 610 * This driver get MAC address that use by bootloader(U-boot or sh-ipl+g).
 611 * When you want use this device, you must set MAC address in bootloader.
 612 *
 613 */
 614static void read_mac_address(struct net_device *ndev, unsigned char *mac)
 615{
 616	if (mac[0] || mac[1] || mac[2] || mac[3] || mac[4] || mac[5]) {
 617		memcpy(ndev->dev_addr, mac, 6);
 618	} else {
 619		ndev->dev_addr[0] = (sh_eth_read(ndev, MAHR) >> 24);
 620		ndev->dev_addr[1] = (sh_eth_read(ndev, MAHR) >> 16) & 0xFF;
 621		ndev->dev_addr[2] = (sh_eth_read(ndev, MAHR) >> 8) & 0xFF;
 622		ndev->dev_addr[3] = (sh_eth_read(ndev, MAHR) & 0xFF);
 623		ndev->dev_addr[4] = (sh_eth_read(ndev, MALR) >> 8) & 0xFF;
 624		ndev->dev_addr[5] = (sh_eth_read(ndev, MALR) & 0xFF);
 625	}
 626}
 627
 628static int sh_eth_is_gether(struct sh_eth_private *mdp)
 629{
 630	if (mdp->reg_offset == sh_eth_offset_gigabit)
 631		return 1;
 632	else
 633		return 0;
 634}
 635
 636static unsigned long sh_eth_get_edtrr_trns(struct sh_eth_private *mdp)
 637{
 638	if (sh_eth_is_gether(mdp))
 639		return EDTRR_TRNS_GETHER;
 640	else
 641		return EDTRR_TRNS_ETHER;
 642}
 643
 644struct bb_info {
 645	void (*set_gate)(void *addr);
 646	struct mdiobb_ctrl ctrl;
 647	void *addr;
 648	u32 mmd_msk;/* MMD */
 649	u32 mdo_msk;
 650	u32 mdi_msk;
 651	u32 mdc_msk;
 652};
 653
 654/* PHY bit set */
 655static void bb_set(void *addr, u32 msk)
 656{
 657	iowrite32(ioread32(addr) | msk, addr);
 658}
 659
 660/* PHY bit clear */
 661static void bb_clr(void *addr, u32 msk)
 662{
 663	iowrite32((ioread32(addr) & ~msk), addr);
 664}
 665
 666/* PHY bit read */
 667static int bb_read(void *addr, u32 msk)
 668{
 669	return (ioread32(addr) & msk) != 0;
 670}
 671
 672/* Data I/O pin control */
 673static void sh_mmd_ctrl(struct mdiobb_ctrl *ctrl, int bit)
 674{
 675	struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl);
 676
 677	if (bitbang->set_gate)
 678		bitbang->set_gate(bitbang->addr);
 679
 680	if (bit)
 681		bb_set(bitbang->addr, bitbang->mmd_msk);
 682	else
 683		bb_clr(bitbang->addr, bitbang->mmd_msk);
 684}
 685
 686/* Set bit data*/
 687static void sh_set_mdio(struct mdiobb_ctrl *ctrl, int bit)
 688{
 689	struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl);
 690
 691	if (bitbang->set_gate)
 692		bitbang->set_gate(bitbang->addr);
 693
 694	if (bit)
 695		bb_set(bitbang->addr, bitbang->mdo_msk);
 696	else
 697		bb_clr(bitbang->addr, bitbang->mdo_msk);
 698}
 699
 700/* Get bit data*/
 701static int sh_get_mdio(struct mdiobb_ctrl *ctrl)
 702{
 703	struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl);
 704
 705	if (bitbang->set_gate)
 706		bitbang->set_gate(bitbang->addr);
 707
 708	return bb_read(bitbang->addr, bitbang->mdi_msk);
 709}
 710
 711/* MDC pin control */
 712static void sh_mdc_ctrl(struct mdiobb_ctrl *ctrl, int bit)
 713{
 714	struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl);
 715
 716	if (bitbang->set_gate)
 717		bitbang->set_gate(bitbang->addr);
 718
 719	if (bit)
 720		bb_set(bitbang->addr, bitbang->mdc_msk);
 721	else
 722		bb_clr(bitbang->addr, bitbang->mdc_msk);
 723}
 724
 725/* mdio bus control struct */
 726static struct mdiobb_ops bb_ops = {
 727	.owner = THIS_MODULE,
 728	.set_mdc = sh_mdc_ctrl,
 729	.set_mdio_dir = sh_mmd_ctrl,
 730	.set_mdio_data = sh_set_mdio,
 731	.get_mdio_data = sh_get_mdio,
 732};
 733
 734/* free skb and descriptor buffer */
 735static void sh_eth_ring_free(struct net_device *ndev)
 736{
 737	struct sh_eth_private *mdp = netdev_priv(ndev);
 738	int i;
 739
 740	/* Free Rx skb ringbuffer */
 741	if (mdp->rx_skbuff) {
 742		for (i = 0; i < RX_RING_SIZE; i++) {
 743			if (mdp->rx_skbuff[i])
 744				dev_kfree_skb(mdp->rx_skbuff[i]);
 745		}
 746	}
 747	kfree(mdp->rx_skbuff);
 748
 749	/* Free Tx skb ringbuffer */
 750	if (mdp->tx_skbuff) {
 751		for (i = 0; i < TX_RING_SIZE; i++) {
 752			if (mdp->tx_skbuff[i])
 753				dev_kfree_skb(mdp->tx_skbuff[i]);
 754		}
 755	}
 756	kfree(mdp->tx_skbuff);
 757}
 758
 759/* format skb and descriptor buffer */
 760static void sh_eth_ring_format(struct net_device *ndev)
 761{
 762	struct sh_eth_private *mdp = netdev_priv(ndev);
 763	int i;
 764	struct sk_buff *skb;
 765	struct sh_eth_rxdesc *rxdesc = NULL;
 766	struct sh_eth_txdesc *txdesc = NULL;
 767	int rx_ringsize = sizeof(*rxdesc) * RX_RING_SIZE;
 768	int tx_ringsize = sizeof(*txdesc) * TX_RING_SIZE;
 769
 770	mdp->cur_rx = mdp->cur_tx = 0;
 771	mdp->dirty_rx = mdp->dirty_tx = 0;
 772
 773	memset(mdp->rx_ring, 0, rx_ringsize);
 774
 775	/* build Rx ring buffer */
 776	for (i = 0; i < RX_RING_SIZE; i++) {
 777		/* skb */
 778		mdp->rx_skbuff[i] = NULL;
 779		skb = netdev_alloc_skb(ndev, mdp->rx_buf_sz);
 780		mdp->rx_skbuff[i] = skb;
 781		if (skb == NULL)
 782			break;
 783		dma_map_single(&ndev->dev, skb->data, mdp->rx_buf_sz,
 784				DMA_FROM_DEVICE);
 785		sh_eth_set_receive_align(skb);
 786
 787		/* RX descriptor */
 788		rxdesc = &mdp->rx_ring[i];
 789		rxdesc->addr = virt_to_phys(PTR_ALIGN(skb->data, 4));
 790		rxdesc->status = cpu_to_edmac(mdp, RD_RACT | RD_RFP);
 791
 792		/* The size of the buffer is 16 byte boundary. */
 793		rxdesc->buffer_length = ALIGN(mdp->rx_buf_sz, 16);
 794		/* Rx descriptor address set */
 795		if (i == 0) {
 796			sh_eth_write(ndev, mdp->rx_desc_dma, RDLAR);
 797			if (sh_eth_is_gether(mdp))
 798				sh_eth_write(ndev, mdp->rx_desc_dma, RDFAR);
 799		}
 800	}
 801
 802	mdp->dirty_rx = (u32) (i - RX_RING_SIZE);
 803
 804	/* Mark the last entry as wrapping the ring. */
 805	rxdesc->status |= cpu_to_edmac(mdp, RD_RDEL);
 806
 807	memset(mdp->tx_ring, 0, tx_ringsize);
 808
 809	/* build Tx ring buffer */
 810	for (i = 0; i < TX_RING_SIZE; i++) {
 811		mdp->tx_skbuff[i] = NULL;
 812		txdesc = &mdp->tx_ring[i];
 813		txdesc->status = cpu_to_edmac(mdp, TD_TFP);
 814		txdesc->buffer_length = 0;
 815		if (i == 0) {
 816			/* Tx descriptor address set */
 817			sh_eth_write(ndev, mdp->tx_desc_dma, TDLAR);
 818			if (sh_eth_is_gether(mdp))
 819				sh_eth_write(ndev, mdp->tx_desc_dma, TDFAR);
 820		}
 821	}
 822
 823	txdesc->status |= cpu_to_edmac(mdp, TD_TDLE);
 824}
 825
 826/* Get skb and descriptor buffer */
 827static int sh_eth_ring_init(struct net_device *ndev)
 828{
 829	struct sh_eth_private *mdp = netdev_priv(ndev);
 830	int rx_ringsize, tx_ringsize, ret = 0;
 831
 832	/*
 833	 * +26 gets the maximum ethernet encapsulation, +7 & ~7 because the
 834	 * card needs room to do 8 byte alignment, +2 so we can reserve
 835	 * the first 2 bytes, and +16 gets room for the status word from the
 836	 * card.
 837	 */
 838	mdp->rx_buf_sz = (ndev->mtu <= 1492 ? PKT_BUF_SZ :
 839			  (((ndev->mtu + 26 + 7) & ~7) + 2 + 16));
 840	if (mdp->cd->rpadir)
 841		mdp->rx_buf_sz += NET_IP_ALIGN;
 842
 843	/* Allocate RX and TX skb rings */
 844	mdp->rx_skbuff = kmalloc(sizeof(*mdp->rx_skbuff) * RX_RING_SIZE,
 845				GFP_KERNEL);
 846	if (!mdp->rx_skbuff) {
 847		dev_err(&ndev->dev, "Cannot allocate Rx skb\n");
 848		ret = -ENOMEM;
 849		return ret;
 850	}
 851
 852	mdp->tx_skbuff = kmalloc(sizeof(*mdp->tx_skbuff) * TX_RING_SIZE,
 853				GFP_KERNEL);
 854	if (!mdp->tx_skbuff) {
 855		dev_err(&ndev->dev, "Cannot allocate Tx skb\n");
 856		ret = -ENOMEM;
 857		goto skb_ring_free;
 858	}
 859
 860	/* Allocate all Rx descriptors. */
 861	rx_ringsize = sizeof(struct sh_eth_rxdesc) * RX_RING_SIZE;
 862	mdp->rx_ring = dma_alloc_coherent(NULL, rx_ringsize, &mdp->rx_desc_dma,
 863			GFP_KERNEL);
 864
 865	if (!mdp->rx_ring) {
 866		dev_err(&ndev->dev, "Cannot allocate Rx Ring (size %d bytes)\n",
 867			rx_ringsize);
 868		ret = -ENOMEM;
 869		goto desc_ring_free;
 870	}
 871
 872	mdp->dirty_rx = 0;
 873
 874	/* Allocate all Tx descriptors. */
 875	tx_ringsize = sizeof(struct sh_eth_txdesc) * TX_RING_SIZE;
 876	mdp->tx_ring = dma_alloc_coherent(NULL, tx_ringsize, &mdp->tx_desc_dma,
 877			GFP_KERNEL);
 878	if (!mdp->tx_ring) {
 879		dev_err(&ndev->dev, "Cannot allocate Tx Ring (size %d bytes)\n",
 880			tx_ringsize);
 881		ret = -ENOMEM;
 882		goto desc_ring_free;
 883	}
 884	return ret;
 885
 886desc_ring_free:
 887	/* free DMA buffer */
 888	dma_free_coherent(NULL, rx_ringsize, mdp->rx_ring, mdp->rx_desc_dma);
 889
 890skb_ring_free:
 891	/* Free Rx and Tx skb ring buffer */
 892	sh_eth_ring_free(ndev);
 893
 894	return ret;
 895}
 896
 897static int sh_eth_dev_init(struct net_device *ndev)
 898{
 899	int ret = 0;
 900	struct sh_eth_private *mdp = netdev_priv(ndev);
 901	u_int32_t rx_int_var, tx_int_var;
 902	u32 val;
 903
 904	/* Soft Reset */
 905	sh_eth_reset(ndev);
 906
 907	/* Descriptor format */
 908	sh_eth_ring_format(ndev);
 909	if (mdp->cd->rpadir)
 910		sh_eth_write(ndev, mdp->cd->rpadir_value, RPADIR);
 911
 912	/* all sh_eth int mask */
 913	sh_eth_write(ndev, 0, EESIPR);
 914
 915#if defined(__LITTLE_ENDIAN)
 916	if (mdp->cd->hw_swap)
 917		sh_eth_write(ndev, EDMR_EL, EDMR);
 918	else
 919#endif
 920		sh_eth_write(ndev, 0, EDMR);
 921
 922	/* FIFO size set */
 923	sh_eth_write(ndev, mdp->cd->fdr_value, FDR);
 924	sh_eth_write(ndev, 0, TFTR);
 925
 926	/* Frame recv control */
 927	sh_eth_write(ndev, mdp->cd->rmcr_value, RMCR);
 928
 929	rx_int_var = mdp->rx_int_var = DESC_I_RINT8 | DESC_I_RINT5;
 930	tx_int_var = mdp->tx_int_var = DESC_I_TINT2;
 931	sh_eth_write(ndev, rx_int_var | tx_int_var, TRSCER);
 932
 933	if (mdp->cd->bculr)
 934		sh_eth_write(ndev, 0x800, BCULR);	/* Burst sycle set */
 935
 936	sh_eth_write(ndev, mdp->cd->fcftr_value, FCFTR);
 937
 938	if (!mdp->cd->no_trimd)
 939		sh_eth_write(ndev, 0, TRIMD);
 940
 941	/* Recv frame limit set register */
 942	sh_eth_write(ndev, ndev->mtu + ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN,
 943		     RFLR);
 944
 945	sh_eth_write(ndev, sh_eth_read(ndev, EESR), EESR);
 946	sh_eth_write(ndev, mdp->cd->eesipr_value, EESIPR);
 947
 948	/* PAUSE Prohibition */
 949	val = (sh_eth_read(ndev, ECMR) & ECMR_DM) |
 950		ECMR_ZPF | (mdp->duplex ? ECMR_DM : 0) | ECMR_TE | ECMR_RE;
 951
 952	sh_eth_write(ndev, val, ECMR);
 953
 954	if (mdp->cd->set_rate)
 955		mdp->cd->set_rate(ndev);
 956
 957	/* E-MAC Status Register clear */
 958	sh_eth_write(ndev, mdp->cd->ecsr_value, ECSR);
 959
 960	/* E-MAC Interrupt Enable register */
 961	sh_eth_write(ndev, mdp->cd->ecsipr_value, ECSIPR);
 962
 963	/* Set MAC address */
 964	update_mac_address(ndev);
 965
 966	/* mask reset */
 967	if (mdp->cd->apr)
 968		sh_eth_write(ndev, APR_AP, APR);
 969	if (mdp->cd->mpr)
 970		sh_eth_write(ndev, MPR_MP, MPR);
 971	if (mdp->cd->tpauser)
 972		sh_eth_write(ndev, TPAUSER_UNLIMITED, TPAUSER);
 973
 974	/* Setting the Rx mode will start the Rx process. */
 975	sh_eth_write(ndev, EDRRR_R, EDRRR);
 976
 977	netif_start_queue(ndev);
 978
 979	return ret;
 980}
 981
 982/* free Tx skb function */
 983static int sh_eth_txfree(struct net_device *ndev)
 984{
 985	struct sh_eth_private *mdp = netdev_priv(ndev);
 986	struct sh_eth_txdesc *txdesc;
 987	int freeNum = 0;
 988	int entry = 0;
 989
 990	for (; mdp->cur_tx - mdp->dirty_tx > 0; mdp->dirty_tx++) {
 991		entry = mdp->dirty_tx % TX_RING_SIZE;
 992		txdesc = &mdp->tx_ring[entry];
 993		if (txdesc->status & cpu_to_edmac(mdp, TD_TACT))
 994			break;
 995		/* Free the original skb. */
 996		if (mdp->tx_skbuff[entry]) {
 997			dma_unmap_single(&ndev->dev, txdesc->addr,
 998					 txdesc->buffer_length, DMA_TO_DEVICE);
 999			dev_kfree_skb_irq(mdp->tx_skbuff[entry]);
1000			mdp->tx_skbuff[entry] = NULL;
1001			freeNum++;
1002		}
1003		txdesc->status = cpu_to_edmac(mdp, TD_TFP);
1004		if (entry >= TX_RING_SIZE - 1)
1005			txdesc->status |= cpu_to_edmac(mdp, TD_TDLE);
1006
1007		ndev->stats.tx_packets++;
1008		ndev->stats.tx_bytes += txdesc->buffer_length;
1009	}
1010	return freeNum;
1011}
1012
1013/* Packet receive function */
1014static int sh_eth_rx(struct net_device *ndev, u32 intr_status)
1015{
1016	struct sh_eth_private *mdp = netdev_priv(ndev);
1017	struct sh_eth_rxdesc *rxdesc;
1018
1019	int entry = mdp->cur_rx % RX_RING_SIZE;
1020	int boguscnt = (mdp->dirty_rx + RX_RING_SIZE) - mdp->cur_rx;
1021	struct sk_buff *skb;
1022	u16 pkt_len = 0;
1023	u32 desc_status;
1024
1025	rxdesc = &mdp->rx_ring[entry];
1026	while (!(rxdesc->status & cpu_to_edmac(mdp, RD_RACT))) {
1027		desc_status = edmac_to_cpu(mdp, rxdesc->status);
1028		pkt_len = rxdesc->frame_length;
1029
1030#if defined(CONFIG_ARCH_R8A7740)
1031		desc_status >>= 16;
1032#endif
1033
1034		if (--boguscnt < 0)
1035			break;
1036
1037		if (!(desc_status & RDFEND))
1038			ndev->stats.rx_length_errors++;
1039
1040		if (desc_status & (RD_RFS1 | RD_RFS2 | RD_RFS3 | RD_RFS4 |
1041				   RD_RFS5 | RD_RFS6 | RD_RFS10)) {
1042			ndev->stats.rx_errors++;
1043			if (desc_status & RD_RFS1)
1044				ndev->stats.rx_crc_errors++;
1045			if (desc_status & RD_RFS2)
1046				ndev->stats.rx_frame_errors++;
1047			if (desc_status & RD_RFS3)
1048				ndev->stats.rx_length_errors++;
1049			if (desc_status & RD_RFS4)
1050				ndev->stats.rx_length_errors++;
1051			if (desc_status & RD_RFS6)
1052				ndev->stats.rx_missed_errors++;
1053			if (desc_status & RD_RFS10)
1054				ndev->stats.rx_over_errors++;
1055		} else {
1056			if (!mdp->cd->hw_swap)
1057				sh_eth_soft_swap(
1058					phys_to_virt(ALIGN(rxdesc->addr, 4)),
1059					pkt_len + 2);
1060			skb = mdp->rx_skbuff[entry];
1061			mdp->rx_skbuff[entry] = NULL;
1062			if (mdp->cd->rpadir)
1063				skb_reserve(skb, NET_IP_ALIGN);
1064			skb_put(skb, pkt_len);
1065			skb->protocol = eth_type_trans(skb, ndev);
1066			netif_rx(skb);
1067			ndev->stats.rx_packets++;
1068			ndev->stats.rx_bytes += pkt_len;
1069		}
1070		rxdesc->status |= cpu_to_edmac(mdp, RD_RACT);
1071		entry = (++mdp->cur_rx) % RX_RING_SIZE;
1072		rxdesc = &mdp->rx_ring[entry];
1073	}
1074
1075	/* Refill the Rx ring buffers. */
1076	for (; mdp->cur_rx - mdp->dirty_rx > 0; mdp->dirty_rx++) {
1077		entry = mdp->dirty_rx % RX_RING_SIZE;
1078		rxdesc = &mdp->rx_ring[entry];
1079		/* The size of the buffer is 16 byte boundary. */
1080		rxdesc->buffer_length = ALIGN(mdp->rx_buf_sz, 16);
1081
1082		if (mdp->rx_skbuff[entry] == NULL) {
1083			skb = netdev_alloc_skb(ndev, mdp->rx_buf_sz);
1084			mdp->rx_skbuff[entry] = skb;
1085			if (skb == NULL)
1086				break;	/* Better luck next round. */
1087			dma_map_single(&ndev->dev, skb->data, mdp->rx_buf_sz,
1088					DMA_FROM_DEVICE);
1089			sh_eth_set_receive_align(skb);
1090
1091			skb_checksum_none_assert(skb);
1092			rxdesc->addr = virt_to_phys(PTR_ALIGN(skb->data, 4));
1093		}
1094		if (entry >= RX_RING_SIZE - 1)
1095			rxdesc->status |=
1096				cpu_to_edmac(mdp, RD_RACT | RD_RFP | RD_RDEL);
1097		else
1098			rxdesc->status |=
1099				cpu_to_edmac(mdp, RD_RACT | RD_RFP);
1100	}
1101
1102	/* Restart Rx engine if stopped. */
1103	/* If we don't need to check status, don't. -KDU */
1104	if (!(sh_eth_read(ndev, EDRRR) & EDRRR_R)) {
1105		/* fix the values for the next receiving if RDE is set */
1106		if (intr_status & EESR_RDE)
1107			mdp->cur_rx = mdp->dirty_rx =
1108				(sh_eth_read(ndev, RDFAR) -
1109				 sh_eth_read(ndev, RDLAR)) >> 4;
1110		sh_eth_write(ndev, EDRRR_R, EDRRR);
1111	}
1112
1113	return 0;
1114}
1115
1116static void sh_eth_rcv_snd_disable(struct net_device *ndev)
1117{
1118	/* disable tx and rx */
1119	sh_eth_write(ndev, sh_eth_read(ndev, ECMR) &
1120		~(ECMR_RE | ECMR_TE), ECMR);
1121}
1122
1123static void sh_eth_rcv_snd_enable(struct net_device *ndev)
1124{
1125	/* enable tx and rx */
1126	sh_eth_write(ndev, sh_eth_read(ndev, ECMR) |
1127		(ECMR_RE | ECMR_TE), ECMR);
1128}
1129
1130/* error control function */
1131static void sh_eth_error(struct net_device *ndev, int intr_status)
1132{
1133	struct sh_eth_private *mdp = netdev_priv(ndev);
1134	u32 felic_stat;
1135	u32 link_stat;
1136	u32 mask;
1137
1138	if (intr_status & EESR_ECI) {
1139		felic_stat = sh_eth_read(ndev, ECSR);
1140		sh_eth_write(ndev, felic_stat, ECSR);	/* clear int */
1141		if (felic_stat & ECSR_ICD)
1142			ndev->stats.tx_carrier_errors++;
1143		if (felic_stat & ECSR_LCHNG) {
1144			/* Link Changed */
1145			if (mdp->cd->no_psr || mdp->no_ether_link) {
1146				if (mdp->link == PHY_DOWN)
1147					link_stat = 0;
1148				else
1149					link_stat = PHY_ST_LINK;
1150			} else {
1151				link_stat = (sh_eth_read(ndev, PSR));
1152				if (mdp->ether_link_active_low)
1153					link_stat = ~link_stat;
1154			}
1155			if (!(link_stat & PHY_ST_LINK))
1156				sh_eth_rcv_snd_disable(ndev);
1157			else {
1158				/* Link Up */
1159				sh_eth_write(ndev, sh_eth_read(ndev, EESIPR) &
1160					  ~DMAC_M_ECI, EESIPR);
1161				/*clear int */
1162				sh_eth_write(ndev, sh_eth_read(ndev, ECSR),
1163					  ECSR);
1164				sh_eth_write(ndev, sh_eth_read(ndev, EESIPR) |
1165					  DMAC_M_ECI, EESIPR);
1166				/* enable tx and rx */
1167				sh_eth_rcv_snd_enable(ndev);
1168			}
1169		}
1170	}
1171
1172	if (intr_status & EESR_TWB) {
1173		/* Write buck end. unused write back interrupt */
1174		if (intr_status & EESR_TABT)	/* Transmit Abort int */
1175			ndev->stats.tx_aborted_errors++;
1176			if (netif_msg_tx_err(mdp))
1177				dev_err(&ndev->dev, "Transmit Abort\n");
1178	}
1179
1180	if (intr_status & EESR_RABT) {
1181		/* Receive Abort int */
1182		if (intr_status & EESR_RFRMER) {
1183			/* Receive Frame Overflow int */
1184			ndev->stats.rx_frame_errors++;
1185			if (netif_msg_rx_err(mdp))
1186				dev_err(&ndev->dev, "Receive Abort\n");
1187		}
1188	}
1189
1190	if (intr_status & EESR_TDE) {
1191		/* Transmit Descriptor Empty int */
1192		ndev->stats.tx_fifo_errors++;
1193		if (netif_msg_tx_err(mdp))
1194			dev_err(&ndev->dev, "Transmit Descriptor Empty\n");
1195	}
1196
1197	if (intr_status & EESR_TFE) {
1198		/* FIFO under flow */
1199		ndev->stats.tx_fifo_errors++;
1200		if (netif_msg_tx_err(mdp))
1201			dev_err(&ndev->dev, "Transmit FIFO Under flow\n");
1202	}
1203
1204	if (intr_status & EESR_RDE) {
1205		/* Receive Descriptor Empty int */
1206		ndev->stats.rx_over_errors++;
1207
1208		if (netif_msg_rx_err(mdp))
1209			dev_err(&ndev->dev, "Receive Descriptor Empty\n");
1210	}
1211
1212	if (intr_status & EESR_RFE) {
1213		/* Receive FIFO Overflow int */
1214		ndev->stats.rx_fifo_errors++;
1215		if (netif_msg_rx_err(mdp))
1216			dev_err(&ndev->dev, "Receive FIFO Overflow\n");
1217	}
1218
1219	if (!mdp->cd->no_ade && (intr_status & EESR_ADE)) {
1220		/* Address Error */
1221		ndev->stats.tx_fifo_errors++;
1222		if (netif_msg_tx_err(mdp))
1223			dev_err(&ndev->dev, "Address Error\n");
1224	}
1225
1226	mask = EESR_TWB | EESR_TABT | EESR_ADE | EESR_TDE | EESR_TFE;
1227	if (mdp->cd->no_ade)
1228		mask &= ~EESR_ADE;
1229	if (intr_status & mask) {
1230		/* Tx error */
1231		u32 edtrr = sh_eth_read(ndev, EDTRR);
1232		/* dmesg */
1233		dev_err(&ndev->dev, "TX error. status=%8.8x cur_tx=%8.8x ",
1234				intr_status, mdp->cur_tx);
1235		dev_err(&ndev->dev, "dirty_tx=%8.8x state=%8.8x EDTRR=%8.8x.\n",
1236				mdp->dirty_tx, (u32) ndev->state, edtrr);
1237		/* dirty buffer free */
1238		sh_eth_txfree(ndev);
1239
1240		/* SH7712 BUG */
1241		if (edtrr ^ sh_eth_get_edtrr_trns(mdp)) {
1242			/* tx dma start */
1243			sh_eth_write(ndev, sh_eth_get_edtrr_trns(mdp), EDTRR);
1244		}
1245		/* wakeup */
1246		netif_wake_queue(ndev);
1247	}
1248}
1249
1250static irqreturn_t sh_eth_interrupt(int irq, void *netdev)
1251{
1252	struct net_device *ndev = netdev;
1253	struct sh_eth_private *mdp = netdev_priv(ndev);
1254	struct sh_eth_cpu_data *cd = mdp->cd;
1255	irqreturn_t ret = IRQ_NONE;
1256	u32 intr_status = 0;
1257
1258	spin_lock(&mdp->lock);
1259
1260	/* Get interrpt stat */
1261	intr_status = sh_eth_read(ndev, EESR);
1262	/* Clear interrupt */
1263	if (intr_status & (EESR_FRC | EESR_RMAF | EESR_RRF |
1264			EESR_RTLF | EESR_RTSF | EESR_PRE | EESR_CERF |
1265			cd->tx_check | cd->eesr_err_check)) {
1266		sh_eth_write(ndev, intr_status, EESR);
1267		ret = IRQ_HANDLED;
1268	} else
1269		goto other_irq;
1270
1271	if (intr_status & (EESR_FRC | /* Frame recv*/
1272			EESR_RMAF | /* Multi cast address recv*/
1273			EESR_RRF  | /* Bit frame recv */
1274			EESR_RTLF | /* Long frame recv*/
1275			EESR_RTSF | /* short frame recv */
1276			EESR_PRE  | /* PHY-LSI recv error */
1277			EESR_CERF)){ /* recv frame CRC error */
1278		sh_eth_rx(ndev, intr_status);
1279	}
1280
1281	/* Tx Check */
1282	if (intr_status & cd->tx_check) {
1283		sh_eth_txfree(ndev);
1284		netif_wake_queue(ndev);
1285	}
1286
1287	if (intr_status & cd->eesr_err_check)
1288		sh_eth_error(ndev, intr_status);
1289
1290other_irq:
1291	spin_unlock(&mdp->lock);
1292
1293	return ret;
1294}
1295
1296static void sh_eth_timer(unsigned long data)
1297{
1298	struct net_device *ndev = (struct net_device *)data;
1299	struct sh_eth_private *mdp = netdev_priv(ndev);
1300
1301	mod_timer(&mdp->timer, jiffies + (10 * HZ));
1302}
1303
1304/* PHY state control function */
1305static void sh_eth_adjust_link(struct net_device *ndev)
1306{
1307	struct sh_eth_private *mdp = netdev_priv(ndev);
1308	struct phy_device *phydev = mdp->phydev;
1309	int new_state = 0;
1310
1311	if (phydev->link != PHY_DOWN) {
1312		if (phydev->duplex != mdp->duplex) {
1313			new_state = 1;
1314			mdp->duplex = phydev->duplex;
1315			if (mdp->cd->set_duplex)
1316				mdp->cd->set_duplex(ndev);
1317		}
1318
1319		if (phydev->speed != mdp->speed) {
1320			new_state = 1;
1321			mdp->speed = phydev->speed;
1322			if (mdp->cd->set_rate)
1323				mdp->cd->set_rate(ndev);
1324		}
1325		if (mdp->link == PHY_DOWN) {
1326			sh_eth_write(ndev,
1327				(sh_eth_read(ndev, ECMR) & ~ECMR_TXF), ECMR);
1328			new_state = 1;
1329			mdp->link = phydev->link;
1330		}
1331	} else if (mdp->link) {
1332		new_state = 1;
1333		mdp->link = PHY_DOWN;
1334		mdp->speed = 0;
1335		mdp->duplex = -1;
1336	}
1337
1338	if (new_state && netif_msg_link(mdp))
1339		phy_print_status(phydev);
1340}
1341
1342/* PHY init function */
1343static int sh_eth_phy_init(struct net_device *ndev)
1344{
1345	struct sh_eth_private *mdp = netdev_priv(ndev);
1346	char phy_id[MII_BUS_ID_SIZE + 3];
1347	struct phy_device *phydev = NULL;
1348
1349	snprintf(phy_id, sizeof(phy_id), PHY_ID_FMT,
1350		mdp->mii_bus->id , mdp->phy_id);
1351
1352	mdp->link = PHY_DOWN;
1353	mdp->speed = 0;
1354	mdp->duplex = -1;
1355
1356	/* Try connect to PHY */
1357	phydev = phy_connect(ndev, phy_id, sh_eth_adjust_link,
1358				0, mdp->phy_interface);
1359	if (IS_ERR(phydev)) {
1360		dev_err(&ndev->dev, "phy_connect failed\n");
1361		return PTR_ERR(phydev);
1362	}
1363
1364	dev_info(&ndev->dev, "attached phy %i to driver %s\n",
1365		phydev->addr, phydev->drv->name);
1366
1367	mdp->phydev = phydev;
1368
1369	return 0;
1370}
1371
1372/* PHY control start function */
1373static int sh_eth_phy_start(struct net_device *ndev)
1374{
1375	struct sh_eth_private *mdp = netdev_priv(ndev);
1376	int ret;
1377
1378	ret = sh_eth_phy_init(ndev);
1379	if (ret)
1380		return ret;
1381
1382	/* reset phy - this also wakes it from PDOWN */
1383	phy_write(mdp->phydev, MII_BMCR, BMCR_RESET);
1384	phy_start(mdp->phydev);
1385
1386	return 0;
1387}
1388
1389static int sh_eth_get_settings(struct net_device *ndev,
1390			struct ethtool_cmd *ecmd)
1391{
1392	struct sh_eth_private *mdp = netdev_priv(ndev);
1393	unsigned long flags;
1394	int ret;
1395
1396	spin_lock_irqsave(&mdp->lock, flags);
1397	ret = phy_ethtool_gset(mdp->phydev, ecmd);
1398	spin_unlock_irqrestore(&mdp->lock, flags);
1399
1400	return ret;
1401}
1402
1403static int sh_eth_set_settings(struct net_device *ndev,
1404		struct ethtool_cmd *ecmd)
1405{
1406	struct sh_eth_private *mdp = netdev_priv(ndev);
1407	unsigned long flags;
1408	int ret;
1409
1410	spin_lock_irqsave(&mdp->lock, flags);
1411
1412	/* disable tx and rx */
1413	sh_eth_rcv_snd_disable(ndev);
1414
1415	ret = phy_ethtool_sset(mdp->phydev, ecmd);
1416	if (ret)
1417		goto error_exit;
1418
1419	if (ecmd->duplex == DUPLEX_FULL)
1420		mdp->duplex = 1;
1421	else
1422		mdp->duplex = 0;
1423
1424	if (mdp->cd->set_duplex)
1425		mdp->cd->set_duplex(ndev);
1426
1427error_exit:
1428	mdelay(1);
1429
1430	/* enable tx and rx */
1431	sh_eth_rcv_snd_enable(ndev);
1432
1433	spin_unlock_irqrestore(&mdp->lock, flags);
1434
1435	return ret;
1436}
1437
1438static int sh_eth_nway_reset(struct net_device *ndev)
1439{
1440	struct sh_eth_private *mdp = netdev_priv(ndev);
1441	unsigned long flags;
1442	int ret;
1443
1444	spin_lock_irqsave(&mdp->lock, flags);
1445	ret = phy_start_aneg(mdp->phydev);
1446	spin_unlock_irqrestore(&mdp->lock, flags);
1447
1448	return ret;
1449}
1450
1451static u32 sh_eth_get_msglevel(struct net_device *ndev)
1452{
1453	struct sh_eth_private *mdp = netdev_priv(ndev);
1454	return mdp->msg_enable;
1455}
1456
1457static void sh_eth_set_msglevel(struct net_device *ndev, u32 value)
1458{
1459	struct sh_eth_private *mdp = netdev_priv(ndev);
1460	mdp->msg_enable = value;
1461}
1462
1463static const char sh_eth_gstrings_stats[][ETH_GSTRING_LEN] = {
1464	"rx_current", "tx_current",
1465	"rx_dirty", "tx_dirty",
1466};
1467#define SH_ETH_STATS_LEN  ARRAY_SIZE(sh_eth_gstrings_stats)
1468
1469static int sh_eth_get_sset_count(struct net_device *netdev, int sset)
1470{
1471	switch (sset) {
1472	case ETH_SS_STATS:
1473		return SH_ETH_STATS_LEN;
1474	default:
1475		return -EOPNOTSUPP;
1476	}
1477}
1478
1479static void sh_eth_get_ethtool_stats(struct net_device *ndev,
1480			struct ethtool_stats *stats, u64 *data)
1481{
1482	struct sh_eth_private *mdp = netdev_priv(ndev);
1483	int i = 0;
1484
1485	/* device-specific stats */
1486	data[i++] = mdp->cur_rx;
1487	data[i++] = mdp->cur_tx;
1488	data[i++] = mdp->dirty_rx;
1489	data[i++] = mdp->dirty_tx;
1490}
1491
1492static void sh_eth_get_strings(struct net_device *ndev, u32 stringset, u8 *data)
1493{
1494	switch (stringset) {
1495	case ETH_SS_STATS:
1496		memcpy(data, *sh_eth_gstrings_stats,
1497					sizeof(sh_eth_gstrings_stats));
1498		break;
1499	}
1500}
1501
1502static const struct ethtool_ops sh_eth_ethtool_ops = {
1503	.get_settings	= sh_eth_get_settings,
1504	.set_settings	= sh_eth_set_settings,
1505	.nway_reset	= sh_eth_nway_reset,
1506	.get_msglevel	= sh_eth_get_msglevel,
1507	.set_msglevel	= sh_eth_set_msglevel,
1508	.get_link	= ethtool_op_get_link,
1509	.get_strings	= sh_eth_get_strings,
1510	.get_ethtool_stats  = sh_eth_get_ethtool_stats,
1511	.get_sset_count     = sh_eth_get_sset_count,
1512};
1513
1514/* network device open function */
1515static int sh_eth_open(struct net_device *ndev)
1516{
1517	int ret = 0;
1518	struct sh_eth_private *mdp = netdev_priv(ndev);
1519
1520	pm_runtime_get_sync(&mdp->pdev->dev);
1521
1522	ret = request_irq(ndev->irq, sh_eth_interrupt,
1523#if defined(CONFIG_CPU_SUBTYPE_SH7763) || \
1524	defined(CONFIG_CPU_SUBTYPE_SH7764) || \
1525	defined(CONFIG_CPU_SUBTYPE_SH7757)
1526				IRQF_SHARED,
1527#else
1528				0,
1529#endif
1530				ndev->name, ndev);
1531	if (ret) {
1532		dev_err(&ndev->dev, "Can not assign IRQ number\n");
1533		return ret;
1534	}
1535
1536	/* Descriptor set */
1537	ret = sh_eth_ring_init(ndev);
1538	if (ret)
1539		goto out_free_irq;
1540
1541	/* device init */
1542	ret = sh_eth_dev_init(ndev);
1543	if (ret)
1544		goto out_free_irq;
1545
1546	/* PHY control start*/
1547	ret = sh_eth_phy_start(ndev);
1548	if (ret)
1549		goto out_free_irq;
1550
1551	/* Set the timer to check for link beat. */
1552	init_timer(&mdp->timer);
1553	mdp->timer.expires = (jiffies + (24 * HZ)) / 10;/* 2.4 sec. */
1554	setup_timer(&mdp->timer, sh_eth_timer, (unsigned long)ndev);
1555
1556	return ret;
1557
1558out_free_irq:
1559	free_irq(ndev->irq, ndev);
1560	pm_runtime_put_sync(&mdp->pdev->dev);
1561	return ret;
1562}
1563
1564/* Timeout function */
1565static void sh_eth_tx_timeout(struct net_device *ndev)
1566{
1567	struct sh_eth_private *mdp = netdev_priv(ndev);
1568	struct sh_eth_rxdesc *rxdesc;
1569	int i;
1570
1571	netif_stop_queue(ndev);
1572
1573	if (netif_msg_timer(mdp))
1574		dev_err(&ndev->dev, "%s: transmit timed out, status %8.8x,"
1575	       " resetting...\n", ndev->name, (int)sh_eth_read(ndev, EESR));
1576
1577	/* tx_errors count up */
1578	ndev->stats.tx_errors++;
1579
1580	/* timer off */
1581	del_timer_sync(&mdp->timer);
1582
1583	/* Free all the skbuffs in the Rx queue. */
1584	for (i = 0; i < RX_RING_SIZE; i++) {
1585		rxdesc = &mdp->rx_ring[i];
1586		rxdesc->status = 0;
1587		rxdesc->addr = 0xBADF00D0;
1588		if (mdp->rx_skbuff[i])
1589			dev_kfree_skb(mdp->rx_skbuff[i]);
1590		mdp->rx_skbuff[i] = NULL;
1591	}
1592	for (i = 0; i < TX_RING_SIZE; i++) {
1593		if (mdp->tx_skbuff[i])
1594			dev_kfree_skb(mdp->tx_skbuff[i]);
1595		mdp->tx_skbuff[i] = NULL;
1596	}
1597
1598	/* device init */
1599	sh_eth_dev_init(ndev);
1600
1601	/* timer on */
1602	mdp->timer.expires = (jiffies + (24 * HZ)) / 10;/* 2.4 sec. */
1603	add_timer(&mdp->timer);
1604}
1605
1606/* Packet transmit function */
1607static int sh_eth_start_xmit(struct sk_buff *skb, struct net_device *ndev)
1608{
1609	struct sh_eth_private *mdp = netdev_priv(ndev);
1610	struct sh_eth_txdesc *txdesc;
1611	u32 entry;
1612	unsigned long flags;
1613
1614	spin_lock_irqsave(&mdp->lock, flags);
1615	if ((mdp->cur_tx - mdp->dirty_tx) >= (TX_RING_SIZE - 4)) {
1616		if (!sh_eth_txfree(ndev)) {
1617			if (netif_msg_tx_queued(mdp))
1618				dev_warn(&ndev->dev, "TxFD exhausted.\n");
1619			netif_stop_queue(ndev);
1620			spin_unlock_irqrestore(&mdp->lock, flags);
1621			return NETDEV_TX_BUSY;
1622		}
1623	}
1624	spin_unlock_irqrestore(&mdp->lock, flags);
1625
1626	entry = mdp->cur_tx % TX_RING_SIZE;
1627	mdp->tx_skbuff[entry] = skb;
1628	txdesc = &mdp->tx_ring[entry];
1629	/* soft swap. */
1630	if (!mdp->cd->hw_swap)
1631		sh_eth_soft_swap(phys_to_virt(ALIGN(txdesc->addr, 4)),
1632				 skb->len + 2);
1633	txdesc->addr = dma_map_single(&ndev->dev, skb->data, skb->len,
1634				      DMA_TO_DEVICE);
1635	if (skb->len < ETHERSMALL)
1636		txdesc->buffer_length = ETHERSMALL;
1637	else
1638		txdesc->buffer_length = skb->len;
1639
1640	if (entry >= TX_RING_SIZE - 1)
1641		txdesc->status |= cpu_to_edmac(mdp, TD_TACT | TD_TDLE);
1642	else
1643		txdesc->status |= cpu_to_edmac(mdp, TD_TACT);
1644
1645	mdp->cur_tx++;
1646
1647	if (!(sh_eth_read(ndev, EDTRR) & sh_eth_get_edtrr_trns(mdp)))
1648		sh_eth_write(ndev, sh_eth_get_edtrr_trns(mdp), EDTRR);
1649
1650	return NETDEV_TX_OK;
1651}
1652
1653/* device close function */
1654static int sh_eth_close(struct net_device *ndev)
1655{
1656	struct sh_eth_private *mdp = netdev_priv(ndev);
1657	int ringsize;
1658
1659	netif_stop_queue(ndev);
1660
1661	/* Disable interrupts by clearing the interrupt mask. */
1662	sh_eth_write(ndev, 0x0000, EESIPR);
1663
1664	/* Stop the chip's Tx and Rx processes. */
1665	sh_eth_write(ndev, 0, EDTRR);
1666	sh_eth_write(ndev, 0, EDRRR);
1667
1668	/* PHY Disconnect */
1669	if (mdp->phydev) {
1670		phy_stop(mdp->phydev);
1671		phy_disconnect(mdp->phydev);
1672	}
1673
1674	free_irq(ndev->irq, ndev);
1675
1676	del_timer_sync(&mdp->timer);
1677
1678	/* Free all the skbuffs in the Rx queue. */
1679	sh_eth_ring_free(ndev);
1680
1681	/* free DMA buffer */
1682	ringsize = sizeof(struct sh_eth_rxdesc) * RX_RING_SIZE;
1683	dma_free_coherent(NULL, ringsize, mdp->rx_ring, mdp->rx_desc_dma);
1684
1685	/* free DMA buffer */
1686	ringsize = sizeof(struct sh_eth_txdesc) * TX_RING_SIZE;
1687	dma_free_coherent(NULL, ringsize, mdp->tx_ring, mdp->tx_desc_dma);
1688
1689	pm_runtime_put_sync(&mdp->pdev->dev);
1690
1691	return 0;
1692}
1693
1694static struct net_device_stats *sh_eth_get_stats(struct net_device *ndev)
1695{
1696	struct sh_eth_private *mdp = netdev_priv(ndev);
1697
1698	pm_runtime_get_sync(&mdp->pdev->dev);
1699
1700	ndev->stats.tx_dropped += sh_eth_read(ndev, TROCR);
1701	sh_eth_write(ndev, 0, TROCR);	/* (write clear) */
1702	ndev->stats.collisions += sh_eth_read(ndev, CDCR);
1703	sh_eth_write(ndev, 0, CDCR);	/* (write clear) */
1704	ndev->stats.tx_carrier_errors += sh_eth_read(ndev, LCCR);
1705	sh_eth_write(ndev, 0, LCCR);	/* (write clear) */
1706	if (sh_eth_is_gether(mdp)) {
1707		ndev->stats.tx_carrier_errors += sh_eth_read(ndev, CERCR);
1708		sh_eth_write(ndev, 0, CERCR);	/* (write clear) */
1709		ndev->stats.tx_carrier_errors += sh_eth_read(ndev, CEECR);
1710		sh_eth_write(ndev, 0, CEECR);	/* (write clear) */
1711	} else {
1712		ndev->stats.tx_carrier_errors += sh_eth_read(ndev, CNDCR);
1713		sh_eth_write(ndev, 0, CNDCR);	/* (write clear) */
1714	}
1715	pm_runtime_put_sync(&mdp->pdev->dev);
1716
1717	return &ndev->stats;
1718}
1719
1720/* ioctl to device function */
1721static int sh_eth_do_ioctl(struct net_device *ndev, struct ifreq *rq,
1722				int cmd)
1723{
1724	struct sh_eth_private *mdp = netdev_priv(ndev);
1725	struct phy_device *phydev = mdp->phydev;
1726
1727	if (!netif_running(ndev))
1728		return -EINVAL;
1729
1730	if (!phydev)
1731		return -ENODEV;
1732
1733	return phy_mii_ioctl(phydev, rq, cmd);
1734}
1735
1736#if defined(SH_ETH_HAS_TSU)
1737/* For TSU_POSTn. Please refer to the manual about this (strange) bitfields */
1738static void *sh_eth_tsu_get_post_reg_offset(struct sh_eth_private *mdp,
1739					    int entry)
1740{
1741	return sh_eth_tsu_get_offset(mdp, TSU_POST1) + (entry / 8 * 4);
1742}
1743
1744static u32 sh_eth_tsu_get_post_mask(int entry)
1745{
1746	return 0x0f << (28 - ((entry % 8) * 4));
1747}
1748
1749static u32 sh_eth_tsu_get_post_bit(struct sh_eth_private *mdp, int entry)
1750{
1751	return (0x08 >> (mdp->port << 1)) << (28 - ((entry % 8) * 4));
1752}
1753
1754static void sh_eth_tsu_enable_cam_entry_post(struct net_device *ndev,
1755					     int entry)
1756{
1757	struct sh_eth_private *mdp = netdev_priv(ndev);
1758	u32 tmp;
1759	void *reg_offset;
1760
1761	reg_offset = sh_eth_tsu_get_post_reg_offset(mdp, entry);
1762	tmp = ioread32(reg_offset);
1763	iowrite32(tmp | sh_eth_tsu_get_post_bit(mdp, entry), reg_offset);
1764}
1765
1766static bool sh_eth_tsu_disable_cam_entry_post(struct net_device *ndev,
1767					      int entry)
1768{
1769	struct sh_eth_private *mdp = netdev_priv(ndev);
1770	u32 post_mask, ref_mask, tmp;
1771	void *reg_offset;
1772
1773	reg_offset = sh_eth_tsu_get_post_reg_offset(mdp, entry);
1774	post_mask = sh_eth_tsu_get_post_mask(entry);
1775	ref_mask = sh_eth_tsu_get_post_bit(mdp, entry) & ~post_mask;
1776
1777	tmp = ioread32(reg_offset);
1778	iowrite32(tmp & ~post_mask, reg_offset);
1779
1780	/* If other port enables, the function returns "true" */
1781	return tmp & ref_mask;
1782}
1783
1784static int sh_eth_tsu_busy(struct net_device *ndev)
1785{
1786	int timeout = SH_ETH_TSU_TIMEOUT_MS * 100;
1787	struct sh_eth_private *mdp = netdev_priv(ndev);
1788
1789	while ((sh_eth_tsu_read(mdp, TSU_ADSBSY) & TSU_ADSBSY_0)) {
1790		udelay(10);
1791		timeout--;
1792		if (timeout <= 0) {
1793			dev_err(&ndev->dev, "%s: timeout\n", __func__);
1794			return -ETIMEDOUT;
1795		}
1796	}
1797
1798	return 0;
1799}
1800
1801static int sh_eth_tsu_write_entry(struct net_device *ndev, void *reg,
1802				  const u8 *addr)
1803{
1804	u32 val;
1805
1806	val = addr[0] << 24 | addr[1] << 16 | addr[2] << 8 | addr[3];
1807	iowrite32(val, reg);
1808	if (sh_eth_tsu_busy(ndev) < 0)
1809		return -EBUSY;
1810
1811	val = addr[4] << 8 | addr[5];
1812	iowrite32(val, reg + 4);
1813	if (sh_eth_tsu_busy(ndev) < 0)
1814		return -EBUSY;
1815
1816	return 0;
1817}
1818
1819static void sh_eth_tsu_read_entry(void *reg, u8 *addr)
1820{
1821	u32 val;
1822
1823	val = ioread32(reg);
1824	addr[0] = (val >> 24) & 0xff;
1825	addr[1] = (val >> 16) & 0xff;
1826	addr[2] = (val >> 8) & 0xff;
1827	addr[3] = val & 0xff;
1828	val = ioread32(reg + 4);
1829	addr[4] = (val >> 8) & 0xff;
1830	addr[5] = val & 0xff;
1831}
1832
1833
1834static int sh_eth_tsu_find_entry(struct net_device *ndev, const u8 *addr)
1835{
1836	struct sh_eth_private *mdp = netdev_priv(ndev);
1837	void *reg_offset = sh_eth_tsu_get_offset(mdp, TSU_ADRH0);
1838	int i;
1839	u8 c_addr[ETH_ALEN];
1840
1841	for (i = 0; i < SH_ETH_TSU_CAM_ENTRIES; i++, reg_offset += 8) {
1842		sh_eth_tsu_read_entry(reg_offset, c_addr);
1843		if (memcmp(addr, c_addr, ETH_ALEN) == 0)
1844			return i;
1845	}
1846
1847	return -ENOENT;
1848}
1849
1850static int sh_eth_tsu_find_empty(struct net_device *ndev)
1851{
1852	u8 blank[ETH_ALEN];
1853	int entry;
1854
1855	memset(blank, 0, sizeof(blank));
1856	entry = sh_eth_tsu_find_entry(ndev, blank);
1857	return (entry < 0) ? -ENOMEM : entry;
1858}
1859
1860static int sh_eth_tsu_disable_cam_entry_table(struct net_device *ndev,
1861					      int entry)
1862{
1863	struct sh_eth_private *mdp = netdev_priv(ndev);
1864	void *reg_offset = sh_eth_tsu_get_offset(mdp, TSU_ADRH0);
1865	int ret;
1866	u8 blank[ETH_ALEN];
1867
1868	sh_eth_tsu_write(mdp, sh_eth_tsu_read(mdp, TSU_TEN) &
1869			 ~(1 << (31 - entry)), TSU_TEN);
1870
1871	memset(blank, 0, sizeof(blank));
1872	ret = sh_eth_tsu_write_entry(ndev, reg_offset + entry * 8, blank);
1873	if (ret < 0)
1874		return ret;
1875	return 0;
1876}
1877
1878static int sh_eth_tsu_add_entry(struct net_device *ndev, const u8 *addr)
1879{
1880	struct sh_eth_private *mdp = netdev_priv(ndev);
1881	void *reg_offset = sh_eth_tsu_get_offset(mdp, TSU_ADRH0);
1882	int i, ret;
1883
1884	if (!mdp->cd->tsu)
1885		return 0;
1886
1887	i = sh_eth_tsu_find_entry(ndev, addr);
1888	if (i < 0) {
1889		/* No entry found, create one */
1890		i = sh_eth_tsu_find_empty(ndev);
1891		if (i < 0)
1892			return -ENOMEM;
1893		ret = sh_eth_tsu_write_entry(ndev, reg_offset + i * 8, addr);
1894		if (ret < 0)
1895			return ret;
1896
1897		/* Enable the entry */
1898		sh_eth_tsu_write(mdp, sh_eth_tsu_read(mdp, TSU_TEN) |
1899				 (1 << (31 - i)), TSU_TEN);
1900	}
1901
1902	/* Entry found or created, enable POST */
1903	sh_eth_tsu_enable_cam_entry_post(ndev, i);
1904
1905	return 0;
1906}
1907
1908static int sh_eth_tsu_del_entry(struct net_device *ndev, const u8 *addr)
1909{
1910	struct sh_eth_private *mdp = netdev_priv(ndev);
1911	int i, ret;
1912
1913	if (!mdp->cd->tsu)
1914		return 0;
1915
1916	i = sh_eth_tsu_find_entry(ndev, addr);
1917	if (i) {
1918		/* Entry found */
1919		if (sh_eth_tsu_disable_cam_entry_post(ndev, i))
1920			goto done;
1921
1922		/* Disable the entry if both ports was disabled */
1923		ret = sh_eth_tsu_disable_cam_entry_table(ndev, i);
1924		if (ret < 0)
1925			return ret;
1926	}
1927done:
1928	return 0;
1929}
1930
1931static int sh_eth_tsu_purge_all(struct net_device *ndev)
1932{
1933	struct sh_eth_private *mdp = netdev_priv(ndev);
1934	int i, ret;
1935
1936	if (unlikely(!mdp->cd->tsu))
1937		return 0;
1938
1939	for (i = 0; i < SH_ETH_TSU_CAM_ENTRIES; i++) {
1940		if (sh_eth_tsu_disable_cam_entry_post(ndev, i))
1941			continue;
1942
1943		/* Disable the entry if both ports was disabled */
1944		ret = sh_eth_tsu_disable_cam_entry_table(ndev, i);
1945		if (ret < 0)
1946			return ret;
1947	}
1948
1949	return 0;
1950}
1951
1952static void sh_eth_tsu_purge_mcast(struct net_device *ndev)
1953{
1954	struct sh_eth_private *mdp = netdev_priv(ndev);
1955	u8 addr[ETH_ALEN];
1956	void *reg_offset = sh_eth_tsu_get_offset(mdp, TSU_ADRH0);
1957	int i;
1958
1959	if (unlikely(!mdp->cd->tsu))
1960		return;
1961
1962	for (i = 0; i < SH_ETH_TSU_CAM_ENTRIES; i++, reg_offset += 8) {
1963		sh_eth_tsu_read_entry(reg_offset, addr);
1964		if (is_multicast_ether_addr(addr))
1965			sh_eth_tsu_del_entry(ndev, addr);
1966	}
1967}
1968
1969/* Multicast reception directions set */
1970static void sh_eth_set_multicast_list(struct net_device *ndev)
1971{
1972	struct sh_eth_private *mdp = netdev_priv(ndev);
1973	u32 ecmr_bits;
1974	int mcast_all = 0;
1975	unsigned long flags;
1976
1977	spin_lock_irqsave(&mdp->lock, flags);
1978	/*
1979	 * Initial condition is MCT = 1, PRM = 0.
1980	 * Depending on ndev->flags, set PRM or clear MCT
1981	 */
1982	ecmr_bits = (sh_eth_read(ndev, ECMR) & ~ECMR_PRM) | ECMR_MCT;
1983
1984	if (!(ndev->flags & IFF_MULTICAST)) {
1985		sh_eth_tsu_purge_mcast(ndev);
1986		mcast_all = 1;
1987	}
1988	if (ndev->flags & IFF_ALLMULTI) {
1989		sh_eth_tsu_purge_mcast(ndev);
1990		ecmr_bits &= ~ECMR_MCT;
1991		mcast_all = 1;
1992	}
1993
1994	if (ndev->flags & IFF_PROMISC) {
1995		sh_eth_tsu_purge_all(ndev);
1996		ecmr_bits = (ecmr_bits & ~ECMR_MCT) | ECMR_PRM;
1997	} else if (mdp->cd->tsu) {
1998		struct netdev_hw_addr *ha;
1999		netdev_for_each_mc_addr(ha, ndev) {
2000			if (mcast_all && is_multicast_ether_addr(ha->addr))
2001				continue;
2002
2003			if (sh_eth_tsu_add_entry(ndev, ha->addr) < 0) {
2004				if (!mcast_all) {
2005					sh_eth_tsu_purge_mcast(ndev);
2006					ecmr_bits &= ~ECMR_MCT;
2007					mcast_all = 1;
2008				}
2009			}
2010		}
2011	} else {
2012		/* Normal, unicast/broadcast-only mode. */
2013		ecmr_bits = (ecmr_bits & ~ECMR_PRM) | ECMR_MCT;
2014	}
2015
2016	/* update the ethernet mode */
2017	sh_eth_write(ndev, ecmr_bits, ECMR);
2018
2019	spin_unlock_irqrestore(&mdp->lock, flags);
2020}
2021
2022static int sh_eth_get_vtag_index(struct sh_eth_private *mdp)
2023{
2024	if (!mdp->port)
2025		return TSU_VTAG0;
2026	else
2027		return TSU_VTAG1;
2028}
2029
2030static int sh_eth_vlan_rx_add_vid(struct net_device *ndev, u16 vid)
2031{
2032	struct sh_eth_private *mdp = netdev_priv(ndev);
2033	int vtag_reg_index = sh_eth_get_vtag_index(mdp);
2034
2035	if (unlikely(!mdp->cd->tsu))
2036		return -EPERM;
2037
2038	/* No filtering if vid = 0 */
2039	if (!vid)
2040		return 0;
2041
2042	mdp->vlan_num_ids++;
2043
2044	/*
2045	 * The controller has one VLAN tag HW filter. So, if the filter is
2046	 * already enabled, the driver disables it and the filte
2047	 */
2048	if (mdp->vlan_num_ids > 1) {
2049		/* disable VLAN filter */
2050		sh_eth_tsu_write(mdp, 0, vtag_reg_index);
2051		return 0;
2052	}
2053
2054	sh_eth_tsu_write(mdp, TSU_VTAG_ENABLE | (vid & TSU_VTAG_VID_MASK),
2055			 vtag_reg_index);
2056
2057	return 0;
2058}
2059
2060static int sh_eth_vlan_rx_kill_vid(struct net_device *ndev, u16 vid)
2061{
2062	struct sh_eth_private *mdp = netdev_priv(ndev);
2063	int vtag_reg_index = sh_eth_get_vtag_index(mdp);
2064
2065	if (unlikely(!mdp->cd->tsu))
2066		return -EPERM;
2067
2068	/* No filtering if vid = 0 */
2069	if (!vid)
2070		return 0;
2071
2072	mdp->vlan_num_ids--;
2073	sh_eth_tsu_write(mdp, 0, vtag_reg_index);
2074
2075	return 0;
2076}
2077#endif /* SH_ETH_HAS_TSU */
2078
2079/* SuperH's TSU register init function */
2080static void sh_eth_tsu_init(struct sh_eth_private *mdp)
2081{
2082	sh_eth_tsu_write(mdp, 0, TSU_FWEN0);	/* Disable forward(0->1) */
2083	sh_eth_tsu_write(mdp, 0, TSU_FWEN1);	/* Disable forward(1->0) */
2084	sh_eth_tsu_write(mdp, 0, TSU_FCM);	/* forward fifo 3k-3k */
2085	sh_eth_tsu_write(mdp, 0xc, TSU_BSYSL0);
2086	sh_eth_tsu_write(mdp, 0xc, TSU_BSYSL1);
2087	sh_eth_tsu_write(mdp, 0, TSU_PRISL0);
2088	sh_eth_tsu_write(mdp, 0, TSU_PRISL1);
2089	sh_eth_tsu_write(mdp, 0, TSU_FWSL0);
2090	sh_eth_tsu_write(mdp, 0, TSU_FWSL1);
2091	sh_eth_tsu_write(mdp, TSU_FWSLC_POSTENU | TSU_FWSLC_POSTENL, TSU_FWSLC);
2092	if (sh_eth_is_gether(mdp)) {
2093		sh_eth_tsu_write(mdp, 0, TSU_QTAG0);	/* Disable QTAG(0->1) */
2094		sh_eth_tsu_write(mdp, 0, TSU_QTAG1);	/* Disable QTAG(1->0) */
2095	} else {
2096		sh_eth_tsu_write(mdp, 0, TSU_QTAGM0);	/* Disable QTAG(0->1) */
2097		sh_eth_tsu_write(mdp, 0, TSU_QTAGM1);	/* Disable QTAG(1->0) */
2098	}
2099	sh_eth_tsu_write(mdp, 0, TSU_FWSR);	/* all interrupt status clear */
2100	sh_eth_tsu_write(mdp, 0, TSU_FWINMK);	/* Disable all interrupt */
2101	sh_eth_tsu_write(mdp, 0, TSU_TEN);	/* Disable all CAM entry */
2102	sh_eth_tsu_write(mdp, 0, TSU_POST1);	/* Disable CAM entry [ 0- 7] */
2103	sh_eth_tsu_write(mdp, 0, TSU_POST2);	/* Disable CAM entry [ 8-15] */
2104	sh_eth_tsu_write(mdp, 0, TSU_POST3);	/* Disable CAM entry [16-23] */
2105	sh_eth_tsu_write(mdp, 0, TSU_POST4);	/* Disable CAM entry [24-31] */
2106}
2107
2108/* MDIO bus release function */
2109static int sh_mdio_release(struct net_device *ndev)
2110{
2111	struct mii_bus *bus = dev_get_drvdata(&ndev->dev);
2112
2113	/* unregister mdio bus */
2114	mdiobus_unregister(bus);
2115
2116	/* remove mdio bus info from net_device */
2117	dev_set_drvdata(&ndev->dev, NULL);
2118
2119	/* free interrupts memory */
2120	kfree(bus->irq);
2121
2122	/* free bitbang info */
2123	free_mdio_bitbang(bus);
2124
2125	return 0;
2126}
2127
2128/* MDIO bus init function */
2129static int sh_mdio_init(struct net_device *ndev, int id,
2130			struct sh_eth_plat_data *pd)
2131{
2132	int ret, i;
2133	struct bb_info *bitbang;
2134	struct sh_eth_private *mdp = netdev_priv(ndev);
2135
2136	/* create bit control struct for PHY */
2137	bitbang = kzalloc(sizeof(struct bb_info), GFP_KERNEL);
2138	if (!bitbang) {
2139		ret = -ENOMEM;
2140		goto out;
2141	}
2142
2143	/* bitbang init */
2144	bitbang->addr = mdp->addr + mdp->reg_offset[PIR];
2145	bitbang->set_gate = pd->set_mdio_gate;
2146	bitbang->mdi_msk = 0x08;
2147	bitbang->mdo_msk = 0x04;
2148	bitbang->mmd_msk = 0x02;/* MMD */
2149	bitbang->mdc_msk = 0x01;
2150	bitbang->ctrl.ops = &bb_ops;
2151
2152	/* MII controller setting */
2153	mdp->mii_bus = alloc_mdio_bitbang(&bitbang->ctrl);
2154	if (!mdp->mii_bus) {
2155		ret = -ENOMEM;
2156		goto out_free_bitbang;
2157	}
2158
2159	/* Hook up MII support for ethtool */
2160	mdp->mii_bus->name = "sh_mii";
2161	mdp->mii_bus->parent = &ndev->dev;
2162	snprintf(mdp->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
2163		mdp->pdev->name, id);
2164
2165	/* PHY IRQ */
2166	mdp->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
2167	if (!mdp->mii_bus->irq) {
2168		ret = -ENOMEM;
2169		goto out_free_bus;
2170	}
2171
2172	for (i = 0; i < PHY_MAX_ADDR; i++)
2173		mdp->mii_bus->irq[i] = PHY_POLL;
2174
2175	/* regist mdio bus */
2176	ret = mdiobus_register(mdp->mii_bus);
2177	if (ret)
2178		goto out_free_irq;
2179
2180	dev_set_drvdata(&ndev->dev, mdp->mii_bus);
2181
2182	return 0;
2183
2184out_free_irq:
2185	kfree(mdp->mii_bus->irq);
2186
2187out_free_bus:
2188	free_mdio_bitbang(mdp->mii_bus);
2189
2190out_free_bitbang:
2191	kfree(bitbang);
2192
2193out:
2194	return ret;
2195}
2196
2197static const u16 *sh_eth_get_register_offset(int register_type)
2198{
2199	const u16 *reg_offset = NULL;
2200
2201	switch (register_type) {
2202	case SH_ETH_REG_GIGABIT:
2203		reg_offset = sh_eth_offset_gigabit;
2204		break;
2205	case SH_ETH_REG_FAST_SH4:
2206		reg_offset = sh_eth_offset_fast_sh4;
2207		break;
2208	case SH_ETH_REG_FAST_SH3_SH2:
2209		reg_offset = sh_eth_offset_fast_sh3_sh2;
2210		break;
2211	default:
2212		printk(KERN_ERR "Unknown register type (%d)\n", register_type);
2213		break;
2214	}
2215
2216	return reg_offset;
2217}
2218
2219static const struct net_device_ops sh_eth_netdev_ops = {
2220	.ndo_open		= sh_eth_open,
2221	.ndo_stop		= sh_eth_close,
2222	.ndo_start_xmit		= sh_eth_start_xmit,
2223	.ndo_get_stats		= sh_eth_get_stats,
2224#if defined(SH_ETH_HAS_TSU)
2225	.ndo_set_rx_mode	= sh_eth_set_multicast_list,
2226	.ndo_vlan_rx_add_vid	= sh_eth_vlan_rx_add_vid,
2227	.ndo_vlan_rx_kill_vid	= sh_eth_vlan_rx_kill_vid,
2228#endif
2229	.ndo_tx_timeout		= sh_eth_tx_timeout,
2230	.ndo_do_ioctl		= sh_eth_do_ioctl,
2231	.ndo_validate_addr	= eth_validate_addr,
2232	.ndo_set_mac_address	= eth_mac_addr,
2233	.ndo_change_mtu		= eth_change_mtu,
2234};
2235
2236static int sh_eth_drv_probe(struct platform_device *pdev)
2237{
2238	int ret, devno = 0;
2239	struct resource *res;
2240	struct net_device *ndev = NULL;
2241	struct sh_eth_private *mdp = NULL;
2242	struct sh_eth_plat_data *pd;
2243
2244	/* get base addr */
2245	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2246	if (unlikely(res == NULL)) {
2247		dev_err(&pdev->dev, "invalid resource\n");
2248		ret = -EINVAL;
2249		goto out;
2250	}
2251
2252	ndev = alloc_etherdev(sizeof(struct sh_eth_private));
2253	if (!ndev) {
2254		ret = -ENOMEM;
2255		goto out;
2256	}
2257
2258	/* The sh Ether-specific entries in the device structure. */
2259	ndev->base_addr = res->start;
2260	devno = pdev->id;
2261	if (devno < 0)
2262		devno = 0;
2263
2264	ndev->dma = -1;
2265	ret = platform_get_irq(pdev, 0);
2266	if (ret < 0) {
2267		ret = -ENODEV;
2268		goto out_release;
2269	}
2270	ndev->irq = ret;
2271
2272	SET_NETDEV_DEV(ndev, &pdev->dev);
2273
2274	/* Fill in the fields of the device structure with ethernet values. */
2275	ether_setup(ndev);
2276
2277	mdp = netdev_priv(ndev);
2278	mdp->addr = ioremap(res->start, resource_size(res));
2279	if (mdp->addr == NULL) {
2280		ret = -ENOMEM;
2281		dev_err(&pdev->dev, "ioremap failed.\n");
2282		goto out_release;
2283	}
2284
2285	spin_lock_init(&mdp->lock);
2286	mdp->pdev = pdev;
2287	pm_runtime_enable(&pdev->dev);
2288	pm_runtime_resume(&pdev->dev);
2289
2290	pd = (struct sh_eth_plat_data *)(pdev->dev.platform_data);
2291	/* get PHY ID */
2292	mdp->phy_id = pd->phy;
2293	mdp->phy_interface = pd->phy_interface;
2294	/* EDMAC endian */
2295	mdp->edmac_endian = pd->edmac_endian;
2296	mdp->no_ether_link = pd->no_ether_link;
2297	mdp->ether_link_active_low = pd->ether_link_active_low;
2298	mdp->reg_offset = sh_eth_get_register_offset(pd->register_type);
2299
2300	/* set cpu data */
2301#if defined(SH_ETH_HAS_BOTH_MODULES)
2302	mdp->cd = sh_eth_get_cpu_data(mdp);
2303#else
2304	mdp->cd = &sh_eth_my_cpu_data;
2305#endif
2306	sh_eth_set_default_cpu_data(mdp->cd);
2307
2308	/* set function */
2309	ndev->netdev_ops = &sh_eth_netdev_ops;
2310	SET_ETHTOOL_OPS(ndev, &sh_eth_ethtool_ops);
2311	ndev->watchdog_timeo = TX_TIMEOUT;
2312
2313	/* debug message level */
2314	mdp->msg_enable = SH_ETH_DEF_MSG_ENABLE;
2315	mdp->post_rx = POST_RX >> (devno << 1);
2316	mdp->post_fw = POST_FW >> (devno << 1);
2317
2318	/* read and set MAC address */
2319	read_mac_address(ndev, pd->mac_addr);
2320
2321	/* ioremap the TSU registers */
2322	if (mdp->cd->tsu) {
2323		struct resource *rtsu;
2324		rtsu = platform_get_resource(pdev, IORESOURCE_MEM, 1);
2325		if (!rtsu) {
2326			dev_err(&pdev->dev, "Not found TSU resource\n");
2327			goto out_release;
2328		}
2329		mdp->tsu_addr = ioremap(rtsu->start,
2330					resource_size(rtsu));
2331		mdp->port = devno % 2;
2332		ndev->features = NETIF_F_HW_VLAN_FILTER;
2333	}
2334
2335	/* initialize first or needed device */
2336	if (!devno || pd->needs_init) {
2337		if (mdp->cd->chip_reset)
2338			mdp->cd->chip_reset(ndev);
2339
2340		if (mdp->cd->tsu) {
2341			/* TSU init (Init only)*/
2342			sh_eth_tsu_init(mdp);
2343		}
2344	}
2345
2346	/* network device register */
2347	ret = register_netdev(ndev);
2348	if (ret)
2349		goto out_release;
2350
2351	/* mdio bus init */
2352	ret = sh_mdio_init(ndev, pdev->id, pd);
2353	if (ret)
2354		goto out_unregister;
2355
2356	/* print device information */
2357	pr_info("Base address at 0x%x, %pM, IRQ %d.\n",
2358	       (u32)ndev->base_addr, ndev->dev_addr, ndev->irq);
2359
2360	platform_set_drvdata(pdev, ndev);
2361
2362	return ret;
2363
2364out_unregister:
2365	unregister_netdev(ndev);
2366
2367out_release:
2368	/* net_dev free */
2369	if (mdp && mdp->addr)
2370		iounmap(mdp->addr);
2371	if (mdp && mdp->tsu_addr)
2372		iounmap(mdp->tsu_addr);
2373	if (ndev)
2374		free_netdev(ndev);
2375
2376out:
2377	return ret;
2378}
2379
2380static int sh_eth_drv_remove(struct platform_device *pdev)
2381{
2382	struct net_device *ndev = platform_get_drvdata(pdev);
2383	struct sh_eth_private *mdp = netdev_priv(ndev);
2384
2385	if (mdp->cd->tsu)
2386		iounmap(mdp->tsu_addr);
2387	sh_mdio_release(ndev);
2388	unregister_netdev(ndev);
2389	pm_runtime_disable(&pdev->dev);
2390	iounmap(mdp->addr);
2391	free_netdev(ndev);
2392	platform_set_drvdata(pdev, NULL);
2393
2394	return 0;
2395}
2396
2397static int sh_eth_runtime_nop(struct device *dev)
2398{
2399	/*
2400	 * Runtime PM callback shared between ->runtime_suspend()
2401	 * and ->runtime_resume(). Simply returns success.
2402	 *
2403	 * This driver re-initializes all registers after
2404	 * pm_runtime_get_sync() anyway so there is no need
2405	 * to save and restore registers here.
2406	 */
2407	return 0;
2408}
2409
2410static struct dev_pm_ops sh_eth_dev_pm_ops = {
2411	.runtime_suspend = sh_eth_runtime_nop,
2412	.runtime_resume = sh_eth_runtime_nop,
2413};
2414
2415static struct platform_driver sh_eth_driver = {
2416	.probe = sh_eth_drv_probe,
2417	.remove = sh_eth_drv_remove,
2418	.driver = {
2419		   .name = CARDNAME,
2420		   .pm = &sh_eth_dev_pm_ops,
2421	},
2422};
2423
2424module_platform_driver(sh_eth_driver);
2425
2426MODULE_AUTHOR("Nobuhiro Iwamatsu, Yoshihiro Shimoda");
2427MODULE_DESCRIPTION("Renesas SuperH Ethernet driver");
2428MODULE_LICENSE("GPL v2");