stmmac_main.c 124.8 KB
Newer Older
1 2 3 4
/*******************************************************************************
  This is the driver for the ST MAC 10/100/1000 on-chip Ethernet controllers.
  ST Ethernet IPs are built around a Synopsys IP Core.

5
	Copyright(C) 2007-2011 STMicroelectronics Ltd
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

  This program is free software; you can redistribute it and/or modify it
  under the terms and conditions of the GNU General Public License,
  version 2, as published by the Free Software Foundation.

  This program is distributed in the hope it will be useful, but WITHOUT
  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  more details.

  The full GNU General Public License is included in this distribution in
  the file called "COPYING".

  Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>

  Documentation available at:
	http://www.stlinux.com
  Support available at:
	https://bugzilla.stlinux.com/
*******************************************************************************/

27
#include <linux/clk.h>
28 29 30 31 32 33 34 35 36
#include <linux/kernel.h>
#include <linux/interrupt.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <linux/skbuff.h>
#include <linux/ethtool.h>
#include <linux/if_ether.h>
#include <linux/crc32.h>
#include <linux/mii.h>
37
#include <linux/if.h>
38 39
#include <linux/if_vlan.h>
#include <linux/dma-mapping.h>
40
#include <linux/slab.h>
41
#include <linux/prefetch.h>
42
#include <linux/pinctrl/consumer.h>
43
#ifdef CONFIG_DEBUG_FS
44 45
#include <linux/debugfs.h>
#include <linux/seq_file.h>
46
#endif /* CONFIG_DEBUG_FS */
47
#include <linux/net_tstamp.h>
48
#include <net/pkt_cls.h>
49
#include "stmmac_ptp.h"
50
#include "stmmac.h"
51
#include <linux/reset.h>
52
#include <linux/of_mdio.h>
53
#include "dwmac1000.h"
54
#include "hwif.h"
55 56

#define STMMAC_ALIGN(x)	L1_CACHE_ALIGN(x)
A
Alexandre TORGUE 已提交
57
#define	TSO_MAX_BUFF_SIZE	(SZ_16K - 1)
58 59

/* Module parameters */
60
#define TX_TIMEO	5000
61
static int watchdog = TX_TIMEO;
62
module_param(watchdog, int, 0644);
63
MODULE_PARM_DESC(watchdog, "Transmit timeout in milliseconds (default 5s)");
64

65
static int debug = -1;
66
module_param(debug, int, 0644);
67
MODULE_PARM_DESC(debug, "Message Level (-1: default, 0: no output, 16: all)");
68

69
static int phyaddr = -1;
70
module_param(phyaddr, int, 0444);
71 72
MODULE_PARM_DESC(phyaddr, "Physical device address");

73
#define STMMAC_TX_THRESH	(DMA_TX_SIZE / 4)
74
#define STMMAC_RX_THRESH	(DMA_RX_SIZE / 4)
75 76

static int flow_ctrl = FLOW_OFF;
77
module_param(flow_ctrl, int, 0644);
78 79 80
MODULE_PARM_DESC(flow_ctrl, "Flow control ability [on/off]");

static int pause = PAUSE_TIME;
81
module_param(pause, int, 0644);
82 83 84 85
MODULE_PARM_DESC(pause, "Flow Control Pause Time");

#define TC_DEFAULT 64
static int tc = TC_DEFAULT;
86
module_param(tc, int, 0644);
87 88
MODULE_PARM_DESC(tc, "DMA threshold control value");

89 90
#define	DEFAULT_BUFSIZE	1536
static int buf_sz = DEFAULT_BUFSIZE;
91
module_param(buf_sz, int, 0644);
92 93
MODULE_PARM_DESC(buf_sz, "DMA buffer size");

94 95
#define	STMMAC_RX_COPYBREAK	256

96 97 98 99
static const u32 default_msg_level = (NETIF_MSG_DRV | NETIF_MSG_PROBE |
				      NETIF_MSG_LINK | NETIF_MSG_IFUP |
				      NETIF_MSG_IFDOWN | NETIF_MSG_TIMER);

100 101
#define STMMAC_DEFAULT_LPI_TIMER	1000
static int eee_timer = STMMAC_DEFAULT_LPI_TIMER;
102
module_param(eee_timer, int, 0644);
103
MODULE_PARM_DESC(eee_timer, "LPI tx expiration time in msec");
G
Giuseppe CAVALLARO 已提交
104
#define STMMAC_LPI_T(x) (jiffies + msecs_to_jiffies(x))
105

106 107
/* By default the driver will use the ring mode to manage tx and rx descriptors,
 * but allow user to force to use the chain instead of the ring
108 109
 */
static unsigned int chain_mode;
110
module_param(chain_mode, int, 0444);
111 112
MODULE_PARM_DESC(chain_mode, "To use chain instead of ring mode");

113 114
static irqreturn_t stmmac_interrupt(int irq, void *dev_id);

115
#ifdef CONFIG_DEBUG_FS
116
static int stmmac_init_fs(struct net_device *dev);
117
static void stmmac_exit_fs(struct net_device *dev);
118 119
#endif

120 121
#define STMMAC_COAL_TIMER(x) (jiffies + usecs_to_jiffies(x))

122 123
/**
 * stmmac_verify_args - verify the driver parameters.
124 125
 * Description: it checks the driver parameters and set a default in case of
 * errors.
126 127 128 129 130
 */
static void stmmac_verify_args(void)
{
	if (unlikely(watchdog < 0))
		watchdog = TX_TIMEO;
131 132
	if (unlikely((buf_sz < DEFAULT_BUFSIZE) || (buf_sz > BUF_SIZE_16KiB)))
		buf_sz = DEFAULT_BUFSIZE;
133 134 135 136 137 138
	if (unlikely(flow_ctrl > 1))
		flow_ctrl = FLOW_AUTO;
	else if (likely(flow_ctrl < 0))
		flow_ctrl = FLOW_OFF;
	if (unlikely((pause < 0) || (pause > 0xffff)))
		pause = PAUSE_TIME;
139 140
	if (eee_timer < 0)
		eee_timer = STMMAC_DEFAULT_LPI_TIMER;
141 142
}

143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
/**
 * stmmac_disable_all_queues - Disable all queues
 * @priv: driver private structure
 */
static void stmmac_disable_all_queues(struct stmmac_priv *priv)
{
	u32 rx_queues_cnt = priv->plat->rx_queues_to_use;
	u32 queue;

	for (queue = 0; queue < rx_queues_cnt; queue++) {
		struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];

		napi_disable(&rx_q->napi);
	}
}

/**
 * stmmac_enable_all_queues - Enable all queues
 * @priv: driver private structure
 */
static void stmmac_enable_all_queues(struct stmmac_priv *priv)
{
	u32 rx_queues_cnt = priv->plat->rx_queues_to_use;
	u32 queue;

	for (queue = 0; queue < rx_queues_cnt; queue++) {
		struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];

		napi_enable(&rx_q->napi);
	}
}

/**
 * stmmac_stop_all_queues - Stop all queues
 * @priv: driver private structure
 */
static void stmmac_stop_all_queues(struct stmmac_priv *priv)
{
	u32 tx_queues_cnt = priv->plat->tx_queues_to_use;
	u32 queue;

	for (queue = 0; queue < tx_queues_cnt; queue++)
		netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, queue));
}

/**
 * stmmac_start_all_queues - Start all queues
 * @priv: driver private structure
 */
static void stmmac_start_all_queues(struct stmmac_priv *priv)
{
	u32 tx_queues_cnt = priv->plat->tx_queues_to_use;
	u32 queue;

	for (queue = 0; queue < tx_queues_cnt; queue++)
		netif_tx_start_queue(netdev_get_tx_queue(priv->dev, queue));
}

201 202 203 204 205 206 207 208 209 210 211 212 213 214
static void stmmac_service_event_schedule(struct stmmac_priv *priv)
{
	if (!test_bit(STMMAC_DOWN, &priv->state) &&
	    !test_and_set_bit(STMMAC_SERVICE_SCHED, &priv->state))
		queue_work(priv->wq, &priv->service_task);
}

static void stmmac_global_err(struct stmmac_priv *priv)
{
	netif_carrier_off(priv->dev);
	set_bit(STMMAC_RESET_REQUESTED, &priv->state);
	stmmac_service_event_schedule(priv);
}

215 216 217 218 219 220 221 222 223 224 225 226
/**
 * stmmac_clk_csr_set - dynamically set the MDC clock
 * @priv: driver private structure
 * Description: this is to dynamically set the MDC clock according to the csr
 * clock input.
 * Note:
 *	If a specific clk_csr value is passed from the platform
 *	this means that the CSR Clock Range selection cannot be
 *	changed at run-time and it is fixed (as reported in the driver
 *	documentation). Viceversa the driver will try to set the MDC
 *	clock dynamically according to the actual clock input.
 */
227 228 229 230
static void stmmac_clk_csr_set(struct stmmac_priv *priv)
{
	u32 clk_rate;

231
	clk_rate = clk_get_rate(priv->plat->stmmac_clk);
232 233

	/* Platform provided default clk_csr would be assumed valid
G
Giuseppe CAVALLARO 已提交
234 235 236 237 238 239
	 * for all other cases except for the below mentioned ones.
	 * For values higher than the IEEE 802.3 specified frequency
	 * we can not estimate the proper divider as it is not known
	 * the frequency of clk_csr_i. So we do not change the default
	 * divider.
	 */
240 241 242 243 244 245 246 247 248 249 250
	if (!(priv->clk_csr & MAC_CSR_H_FRQ_MASK)) {
		if (clk_rate < CSR_F_35M)
			priv->clk_csr = STMMAC_CSR_20_35M;
		else if ((clk_rate >= CSR_F_35M) && (clk_rate < CSR_F_60M))
			priv->clk_csr = STMMAC_CSR_35_60M;
		else if ((clk_rate >= CSR_F_60M) && (clk_rate < CSR_F_100M))
			priv->clk_csr = STMMAC_CSR_60_100M;
		else if ((clk_rate >= CSR_F_100M) && (clk_rate < CSR_F_150M))
			priv->clk_csr = STMMAC_CSR_100_150M;
		else if ((clk_rate >= CSR_F_150M) && (clk_rate < CSR_F_250M))
			priv->clk_csr = STMMAC_CSR_150_250M;
251
		else if ((clk_rate >= CSR_F_250M) && (clk_rate < CSR_F_300M))
252
			priv->clk_csr = STMMAC_CSR_250_300M;
G
Giuseppe CAVALLARO 已提交
253
	}
254 255 256 257 258 259 260 261 262 263 264

	if (priv->plat->has_sun8i) {
		if (clk_rate > 160000000)
			priv->clk_csr = 0x03;
		else if (clk_rate > 80000000)
			priv->clk_csr = 0x02;
		else if (clk_rate > 40000000)
			priv->clk_csr = 0x01;
		else
			priv->clk_csr = 0;
	}
265 266
}

267 268
static void print_pkt(unsigned char *buf, int len)
{
269 270
	pr_debug("len = %d byte, buf addr: 0x%p\n", len, buf);
	print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, buf, len);
271 272
}

273
static inline u32 stmmac_tx_avail(struct stmmac_priv *priv, u32 queue)
274
{
275
	struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
276
	u32 avail;
277

278 279
	if (tx_q->dirty_tx > tx_q->cur_tx)
		avail = tx_q->dirty_tx - tx_q->cur_tx - 1;
280
	else
281
		avail = DMA_TX_SIZE - tx_q->cur_tx + tx_q->dirty_tx - 1;
282 283 284 285

	return avail;
}

286 287 288 289 290 291
/**
 * stmmac_rx_dirty - Get RX queue dirty
 * @priv: driver private structure
 * @queue: RX queue index
 */
static inline u32 stmmac_rx_dirty(struct stmmac_priv *priv, u32 queue)
292
{
293
	struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
294
	u32 dirty;
295

296 297
	if (rx_q->dirty_rx <= rx_q->cur_rx)
		dirty = rx_q->cur_rx - rx_q->dirty_rx;
298
	else
299
		dirty = DMA_RX_SIZE - rx_q->dirty_rx + rx_q->cur_rx;
300 301

	return dirty;
302 303
}

304
/**
305
 * stmmac_hw_fix_mac_speed - callback for speed selection
306
 * @priv: driver private structure
307
 * Description: on some platforms (e.g. ST), some HW system configuration
308
 * registers have to be set according to the link speed negotiated.
309 310 311
 */
static inline void stmmac_hw_fix_mac_speed(struct stmmac_priv *priv)
{
312 313
	struct net_device *ndev = priv->dev;
	struct phy_device *phydev = ndev->phydev;
314 315

	if (likely(priv->plat->fix_mac_speed))
G
Giuseppe CAVALLARO 已提交
316
		priv->plat->fix_mac_speed(priv->plat->bsp_priv, phydev->speed);
317 318
}

319
/**
320
 * stmmac_enable_eee_mode - check and enter in LPI mode
321
 * @priv: driver private structure
322 323
 * Description: this function is to verify and enter in LPI mode in case of
 * EEE.
324
 */
325 326
static void stmmac_enable_eee_mode(struct stmmac_priv *priv)
{
327 328 329 330 331 332 333 334 335 336 337
	u32 tx_cnt = priv->plat->tx_queues_to_use;
	u32 queue;

	/* check if all TX queues have the work finished */
	for (queue = 0; queue < tx_cnt; queue++) {
		struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];

		if (tx_q->dirty_tx != tx_q->cur_tx)
			return; /* still unfinished work */
	}

338
	/* Check and enter in LPI mode */
339
	if (!priv->tx_path_in_lpi_mode)
340 341
		stmmac_set_eee_mode(priv, priv->hw,
				priv->plat->en_tx_lpi_clockgating);
342 343
}

344
/**
345
 * stmmac_disable_eee_mode - disable and exit from LPI mode
346 347 348 349
 * @priv: driver private structure
 * Description: this function is to exit and disable EEE in case of
 * LPI state is true. This is called by the xmit.
 */
350 351
void stmmac_disable_eee_mode(struct stmmac_priv *priv)
{
352
	stmmac_reset_eee_mode(priv, priv->hw);
353 354 355 356 357
	del_timer_sync(&priv->eee_ctrl_timer);
	priv->tx_path_in_lpi_mode = false;
}

/**
358
 * stmmac_eee_ctrl_timer - EEE TX SW timer.
359 360
 * @arg : data hook
 * Description:
361
 *  if there is no data transfer and if we are not in LPI state,
362 363
 *  then MAC Transmitter can be moved to LPI state.
 */
364
static void stmmac_eee_ctrl_timer(struct timer_list *t)
365
{
366
	struct stmmac_priv *priv = from_timer(priv, t, eee_ctrl_timer);
367 368

	stmmac_enable_eee_mode(priv);
G
Giuseppe CAVALLARO 已提交
369
	mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(eee_timer));
370 371 372
}

/**
373
 * stmmac_eee_init - init EEE
374
 * @priv: driver private structure
375
 * Description:
376 377 378
 *  if the GMAC supports the EEE (from the HW cap reg) and the phy device
 *  can also manage EEE, this function enable the LPI state and start related
 *  timer.
379 380 381
 */
bool stmmac_eee_init(struct stmmac_priv *priv)
{
382
	struct net_device *ndev = priv->dev;
383
	int interface = priv->plat->interface;
384
	unsigned long flags;
385 386
	bool ret = false;

387 388 389 390 391
	if ((interface != PHY_INTERFACE_MODE_MII) &&
	    (interface != PHY_INTERFACE_MODE_GMII) &&
	    !phy_interface_mode_is_rgmii(interface))
		goto out;

G
Giuseppe CAVALLARO 已提交
392 393 394
	/* Using PCS we cannot dial with the phy registers at this stage
	 * so we do not support extra feature like EEE.
	 */
395 396 397
	if ((priv->hw->pcs == STMMAC_PCS_RGMII) ||
	    (priv->hw->pcs == STMMAC_PCS_TBI) ||
	    (priv->hw->pcs == STMMAC_PCS_RTBI))
G
Giuseppe CAVALLARO 已提交
398 399
		goto out;

400 401
	/* MAC core supports the EEE feature. */
	if (priv->dma_cap.eee) {
402 403
		int tx_lpi_timer = priv->tx_lpi_timer;

404
		/* Check if the PHY supports EEE */
405
		if (phy_init_eee(ndev->phydev, 1)) {
406 407 408 409 410
			/* To manage at run-time if the EEE cannot be supported
			 * anymore (for example because the lp caps have been
			 * changed).
			 * In that case the driver disable own timers.
			 */
411
			spin_lock_irqsave(&priv->lock, flags);
412
			if (priv->eee_active) {
413
				netdev_dbg(priv->dev, "disable EEE\n");
414
				del_timer_sync(&priv->eee_ctrl_timer);
415 416
				stmmac_set_eee_timer(priv, priv->hw, 0,
						tx_lpi_timer);
417 418
			}
			priv->eee_active = 0;
419
			spin_unlock_irqrestore(&priv->lock, flags);
420
			goto out;
421 422
		}
		/* Activate the EEE and start timers */
423
		spin_lock_irqsave(&priv->lock, flags);
G
Giuseppe CAVALLARO 已提交
424 425
		if (!priv->eee_active) {
			priv->eee_active = 1;
426 427
			timer_setup(&priv->eee_ctrl_timer,
				    stmmac_eee_ctrl_timer, 0);
428 429
			mod_timer(&priv->eee_ctrl_timer,
				  STMMAC_LPI_T(eee_timer));
G
Giuseppe CAVALLARO 已提交
430

431 432
			stmmac_set_eee_timer(priv, priv->hw,
					STMMAC_DEFAULT_LIT_LS, tx_lpi_timer);
433 434
		}
		/* Set HW EEE according to the speed */
435
		stmmac_set_eee_pls(priv, priv->hw, ndev->phydev->link);
436 437

		ret = true;
438 439
		spin_unlock_irqrestore(&priv->lock, flags);

440
		netdev_dbg(priv->dev, "Energy-Efficient Ethernet initialized\n");
441 442 443 444 445
	}
out:
	return ret;
}

446
/* stmmac_get_tx_hwtstamp - get HW TX timestamps
447
 * @priv: driver private structure
448
 * @p : descriptor pointer
449 450 451 452 453 454
 * @skb : the socket buffer
 * Description :
 * This function will read timestamp from the descriptor & pass it to stack.
 * and also perform some sanity checks.
 */
static void stmmac_get_tx_hwtstamp(struct stmmac_priv *priv,
455
				   struct dma_desc *p, struct sk_buff *skb)
456 457 458 459 460 461 462
{
	struct skb_shared_hwtstamps shhwtstamp;
	u64 ns;

	if (!priv->hwts_tx_en)
		return;

G
Giuseppe CAVALLARO 已提交
463
	/* exit if skb doesn't support hw tstamp */
464
	if (likely(!skb || !(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)))
465 466 467
		return;

	/* check tx tstamp status */
468
	if (stmmac_get_tx_timestamp_status(priv, p)) {
469
		/* get the valid tstamp */
470
		stmmac_get_timestamp(priv, p, priv->adv_ts, &ns);
471

472 473
		memset(&shhwtstamp, 0, sizeof(struct skb_shared_hwtstamps));
		shhwtstamp.hwtstamp = ns_to_ktime(ns);
474

475
		netdev_dbg(priv->dev, "get valid TX hw timestamp %llu\n", ns);
476 477 478
		/* pass tstamp to stack */
		skb_tstamp_tx(skb, &shhwtstamp);
	}
479 480 481 482

	return;
}

483
/* stmmac_get_rx_hwtstamp - get HW RX timestamps
484
 * @priv: driver private structure
485 486
 * @p : descriptor pointer
 * @np : next descriptor pointer
487 488 489 490 491
 * @skb : the socket buffer
 * Description :
 * This function will read received packet's timestamp from the descriptor
 * and pass it to stack. It also perform some sanity checks.
 */
492 493
static void stmmac_get_rx_hwtstamp(struct stmmac_priv *priv, struct dma_desc *p,
				   struct dma_desc *np, struct sk_buff *skb)
494 495
{
	struct skb_shared_hwtstamps *shhwtstamp = NULL;
496
	struct dma_desc *desc = p;
497 498 499 500
	u64 ns;

	if (!priv->hwts_rx_en)
		return;
501 502 503
	/* For GMAC4, the valid timestamp is from CTX next desc. */
	if (priv->plat->has_gmac4)
		desc = np;
504

505
	/* Check if timestamp is available */
506 507
	if (stmmac_get_rx_timestamp_status(priv, p, np, priv->adv_ts)) {
		stmmac_get_timestamp(priv, desc, priv->adv_ts, &ns);
508
		netdev_dbg(priv->dev, "get valid RX hw timestamp %llu\n", ns);
509 510 511 512
		shhwtstamp = skb_hwtstamps(skb);
		memset(shhwtstamp, 0, sizeof(struct skb_shared_hwtstamps));
		shhwtstamp->hwtstamp = ns_to_ktime(ns);
	} else  {
513
		netdev_dbg(priv->dev, "cannot get RX hw timestamp\n");
514
	}
515 516 517 518 519
}

/**
 *  stmmac_hwtstamp_ioctl - control hardware timestamping.
 *  @dev: device pointer.
520
 *  @ifr: An IOCTL specific structure, that can contain a pointer to
521 522 523 524 525 526 527 528 529 530 531
 *  a proprietary structure used to pass information to the driver.
 *  Description:
 *  This function configures the MAC to enable/disable both outgoing(TX)
 *  and incoming(RX) packets time stamping based on user input.
 *  Return Value:
 *  0 on success and an appropriate -ve integer on failure.
 */
static int stmmac_hwtstamp_ioctl(struct net_device *dev, struct ifreq *ifr)
{
	struct stmmac_priv *priv = netdev_priv(dev);
	struct hwtstamp_config config;
A
Arnd Bergmann 已提交
532
	struct timespec64 now;
533 534 535 536 537 538 539 540 541 542
	u64 temp = 0;
	u32 ptp_v2 = 0;
	u32 tstamp_all = 0;
	u32 ptp_over_ipv4_udp = 0;
	u32 ptp_over_ipv6_udp = 0;
	u32 ptp_over_ethernet = 0;
	u32 snap_type_sel = 0;
	u32 ts_master_en = 0;
	u32 ts_event_en = 0;
	u32 value = 0;
543
	u32 sec_inc;
544 545 546 547 548 549 550 551 552 553

	if (!(priv->dma_cap.time_stamp || priv->adv_ts)) {
		netdev_alert(priv->dev, "No support for HW time stamping\n");
		priv->hwts_tx_en = 0;
		priv->hwts_rx_en = 0;

		return -EOPNOTSUPP;
	}

	if (copy_from_user(&config, ifr->ifr_data,
G
Giuseppe CAVALLARO 已提交
554
			   sizeof(struct hwtstamp_config)))
555 556
		return -EFAULT;

557 558
	netdev_dbg(priv->dev, "%s config flags:0x%x, tx_type:0x%x, rx_filter:0x%x\n",
		   __func__, config.flags, config.tx_type, config.rx_filter);
559 560 561 562 563

	/* reserved for future extensions */
	if (config.flags)
		return -EINVAL;

564 565
	if (config.tx_type != HWTSTAMP_TX_OFF &&
	    config.tx_type != HWTSTAMP_TX_ON)
566 567 568 569 570
		return -ERANGE;

	if (priv->adv_ts) {
		switch (config.rx_filter) {
		case HWTSTAMP_FILTER_NONE:
G
Giuseppe CAVALLARO 已提交
571
			/* time stamp no incoming packet at all */
572 573 574 575
			config.rx_filter = HWTSTAMP_FILTER_NONE;
			break;

		case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
G
Giuseppe CAVALLARO 已提交
576
			/* PTP v1, UDP, any kind of event packet */
577 578
			config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
			/* take time stamp for all event messages */
579 580 581 582
			if (priv->plat->has_gmac4)
				snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1;
			else
				snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
583 584 585 586 587 588

			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
			break;

		case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
G
Giuseppe CAVALLARO 已提交
589
			/* PTP v1, UDP, Sync packet */
590 591 592 593 594 595 596 597 598
			config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC;
			/* take time stamp for SYNC messages only */
			ts_event_en = PTP_TCR_TSEVNTENA;

			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
			break;

		case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
G
Giuseppe CAVALLARO 已提交
599
			/* PTP v1, UDP, Delay_req packet */
600 601 602 603 604 605 606 607 608 609
			config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ;
			/* take time stamp for Delay_Req messages only */
			ts_master_en = PTP_TCR_TSMSTRENA;
			ts_event_en = PTP_TCR_TSEVNTENA;

			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
			break;

		case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
G
Giuseppe CAVALLARO 已提交
610
			/* PTP v2, UDP, any kind of event packet */
611 612 613
			config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
			ptp_v2 = PTP_TCR_TSVER2ENA;
			/* take time stamp for all event messages */
614 615 616 617
			if (priv->plat->has_gmac4)
				snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1;
			else
				snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
618 619 620 621 622 623

			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
			break;

		case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
G
Giuseppe CAVALLARO 已提交
624
			/* PTP v2, UDP, Sync packet */
625 626 627 628 629 630 631 632 633 634
			config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC;
			ptp_v2 = PTP_TCR_TSVER2ENA;
			/* take time stamp for SYNC messages only */
			ts_event_en = PTP_TCR_TSEVNTENA;

			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
			break;

		case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
G
Giuseppe CAVALLARO 已提交
635
			/* PTP v2, UDP, Delay_req packet */
636 637 638 639 640 641 642 643 644 645 646
			config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ;
			ptp_v2 = PTP_TCR_TSVER2ENA;
			/* take time stamp for Delay_Req messages only */
			ts_master_en = PTP_TCR_TSMSTRENA;
			ts_event_en = PTP_TCR_TSEVNTENA;

			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
			break;

		case HWTSTAMP_FILTER_PTP_V2_EVENT:
G
Giuseppe CAVALLARO 已提交
647
			/* PTP v2/802.AS1 any layer, any kind of event packet */
648 649 650
			config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
			ptp_v2 = PTP_TCR_TSVER2ENA;
			/* take time stamp for all event messages */
651 652 653 654
			if (priv->plat->has_gmac4)
				snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1;
			else
				snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
655 656 657 658 659 660 661

			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
			ptp_over_ethernet = PTP_TCR_TSIPENA;
			break;

		case HWTSTAMP_FILTER_PTP_V2_SYNC:
G
Giuseppe CAVALLARO 已提交
662
			/* PTP v2/802.AS1, any layer, Sync packet */
663 664 665 666 667 668 669 670 671 672 673
			config.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC;
			ptp_v2 = PTP_TCR_TSVER2ENA;
			/* take time stamp for SYNC messages only */
			ts_event_en = PTP_TCR_TSEVNTENA;

			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
			ptp_over_ethernet = PTP_TCR_TSIPENA;
			break;

		case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
G
Giuseppe CAVALLARO 已提交
674
			/* PTP v2/802.AS1, any layer, Delay_req packet */
675 676 677 678 679 680 681 682 683 684 685
			config.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ;
			ptp_v2 = PTP_TCR_TSVER2ENA;
			/* take time stamp for Delay_Req messages only */
			ts_master_en = PTP_TCR_TSMSTRENA;
			ts_event_en = PTP_TCR_TSEVNTENA;

			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
			ptp_over_ethernet = PTP_TCR_TSIPENA;
			break;

686
		case HWTSTAMP_FILTER_NTP_ALL:
687
		case HWTSTAMP_FILTER_ALL:
G
Giuseppe CAVALLARO 已提交
688
			/* time stamp any incoming packet */
689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707
			config.rx_filter = HWTSTAMP_FILTER_ALL;
			tstamp_all = PTP_TCR_TSENALL;
			break;

		default:
			return -ERANGE;
		}
	} else {
		switch (config.rx_filter) {
		case HWTSTAMP_FILTER_NONE:
			config.rx_filter = HWTSTAMP_FILTER_NONE;
			break;
		default:
			/* PTP v1, UDP, any kind of event packet */
			config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
			break;
		}
	}
	priv->hwts_rx_en = ((config.rx_filter == HWTSTAMP_FILTER_NONE) ? 0 : 1);
708
	priv->hwts_tx_en = config.tx_type == HWTSTAMP_TX_ON;
709 710

	if (!priv->hwts_tx_en && !priv->hwts_rx_en)
711
		stmmac_config_hw_tstamping(priv, priv->ptpaddr, 0);
712 713
	else {
		value = (PTP_TCR_TSENA | PTP_TCR_TSCFUPDT | PTP_TCR_TSCTRLSSR |
G
Giuseppe CAVALLARO 已提交
714 715 716
			 tstamp_all | ptp_v2 | ptp_over_ethernet |
			 ptp_over_ipv6_udp | ptp_over_ipv4_udp | ts_event_en |
			 ts_master_en | snap_type_sel);
717
		stmmac_config_hw_tstamping(priv, priv->ptpaddr, value);
718 719

		/* program Sub Second Increment reg */
720 721 722
		stmmac_config_sub_second_increment(priv,
				priv->ptpaddr, priv->plat->clk_ptp_rate,
				priv->plat->has_gmac4, &sec_inc);
723
		temp = div_u64(1000000000ULL, sec_inc);
724 725 726 727

		/* calculate default added value:
		 * formula is :
		 * addend = (2^32)/freq_div_ratio;
728
		 * where, freq_div_ratio = 1e9ns/sec_inc
729
		 */
730
		temp = (u64)(temp << 32);
731
		priv->default_addend = div_u64(temp, priv->plat->clk_ptp_rate);
732
		stmmac_config_addend(priv, priv->ptpaddr, priv->default_addend);
733 734

		/* initialize system time */
A
Arnd Bergmann 已提交
735 736 737
		ktime_get_real_ts64(&now);

		/* lower 32 bits of tv_sec are safe until y2106 */
738 739
		stmmac_init_systime(priv, priv->ptpaddr,
				(u32)now.tv_sec, now.tv_nsec);
740 741 742 743 744 745
	}

	return copy_to_user(ifr->ifr_data, &config,
			    sizeof(struct hwtstamp_config)) ? -EFAULT : 0;
}

746
/**
747
 * stmmac_init_ptp - init PTP
748
 * @priv: driver private structure
749
 * Description: this is to verify if the HW supports the PTPv1 or PTPv2.
750
 * This is done by looking at the HW cap. register.
751
 * This function also registers the ptp driver.
752
 */
753
static int stmmac_init_ptp(struct stmmac_priv *priv)
754
{
755 756 757
	if (!(priv->dma_cap.time_stamp || priv->dma_cap.atime_stamp))
		return -EOPNOTSUPP;

758
	priv->adv_ts = 0;
759 760 761 762 763
	/* Check if adv_ts can be enabled for dwmac 4.x core */
	if (priv->plat->has_gmac4 && priv->dma_cap.atime_stamp)
		priv->adv_ts = 1;
	/* Dwmac 3.x core with extend_desc can support adv_ts */
	else if (priv->extend_desc && priv->dma_cap.atime_stamp)
764 765
		priv->adv_ts = 1;

766 767
	if (priv->dma_cap.time_stamp)
		netdev_info(priv->dev, "IEEE 1588-2002 Timestamp supported\n");
768

769 770 771
	if (priv->adv_ts)
		netdev_info(priv->dev,
			    "IEEE 1588-2008 Advanced Timestamp supported\n");
772 773 774

	priv->hwts_tx_en = 0;
	priv->hwts_rx_en = 0;
775

776 777 778
	stmmac_ptp_register(priv);

	return 0;
779 780 781 782
}

static void stmmac_release_ptp(struct stmmac_priv *priv)
{
783 784
	if (priv->plat->clk_ptp_ref)
		clk_disable_unprepare(priv->plat->clk_ptp_ref);
785
	stmmac_ptp_unregister(priv);
786 787
}

788 789 790 791 792 793 794 795 796
/**
 *  stmmac_mac_flow_ctrl - Configure flow control in all queues
 *  @priv: driver private structure
 *  Description: It is used for configuring the flow control in all queues
 */
static void stmmac_mac_flow_ctrl(struct stmmac_priv *priv, u32 duplex)
{
	u32 tx_cnt = priv->plat->tx_queues_to_use;

797 798
	stmmac_flow_ctrl(priv, priv->hw, duplex, priv->flow_ctrl,
			priv->pause, tx_cnt);
799 800
}

801
/**
802
 * stmmac_adjust_link - adjusts the link parameters
803
 * @dev: net device structure
804 805 806 807 808
 * Description: this is the helper called by the physical abstraction layer
 * drivers to communicate the phy link status. According the speed and duplex
 * this driver can invoke registered glue-logic as well.
 * It also invoke the eee initialization because it could happen when switch
 * on different networks (that are eee capable).
809 810 811 812
 */
static void stmmac_adjust_link(struct net_device *dev)
{
	struct stmmac_priv *priv = netdev_priv(dev);
813
	struct phy_device *phydev = dev->phydev;
814
	unsigned long flags;
815
	bool new_state = false;
816

817
	if (!phydev)
818 819 820
		return;

	spin_lock_irqsave(&priv->lock, flags);
821

822
	if (phydev->link) {
823
		u32 ctrl = readl(priv->ioaddr + MAC_CTRL_REG);
824 825 826 827

		/* Now we make sure that we can be in full duplex mode.
		 * If not, we operate in half-duplex mode. */
		if (phydev->duplex != priv->oldduplex) {
828
			new_state = true;
829
			if (!phydev->duplex)
830
				ctrl &= ~priv->hw->link.duplex;
831
			else
832
				ctrl |= priv->hw->link.duplex;
833 834 835 836
			priv->oldduplex = phydev->duplex;
		}
		/* Flow Control operation */
		if (phydev->pause)
837
			stmmac_mac_flow_ctrl(priv, phydev->duplex);
838 839

		if (phydev->speed != priv->speed) {
840
			new_state = true;
841
			ctrl &= ~priv->hw->link.speed_mask;
842
			switch (phydev->speed) {
843
			case SPEED_1000:
844
				ctrl |= priv->hw->link.speed1000;
845
				break;
846
			case SPEED_100:
847
				ctrl |= priv->hw->link.speed100;
848
				break;
849
			case SPEED_10:
850
				ctrl |= priv->hw->link.speed10;
851 852
				break;
			default:
853
				netif_warn(priv, link, priv->dev,
854
					   "broken speed: %d\n", phydev->speed);
855
				phydev->speed = SPEED_UNKNOWN;
856 857
				break;
			}
858 859
			if (phydev->speed != SPEED_UNKNOWN)
				stmmac_hw_fix_mac_speed(priv);
860 861 862
			priv->speed = phydev->speed;
		}

863
		writel(ctrl, priv->ioaddr + MAC_CTRL_REG);
864 865

		if (!priv->oldlink) {
866
			new_state = true;
867
			priv->oldlink = true;
868 869
		}
	} else if (priv->oldlink) {
870
		new_state = true;
871
		priv->oldlink = false;
872 873
		priv->speed = SPEED_UNKNOWN;
		priv->oldduplex = DUPLEX_UNKNOWN;
874 875 876 877 878
	}

	if (new_state && netif_msg_link(priv))
		phy_print_status(phydev);

879 880
	spin_unlock_irqrestore(&priv->lock, flags);

881 882 883 884 885 886 887 888 889 890
	if (phydev->is_pseudo_fixed_link)
		/* Stop PHY layer to call the hook to adjust the link in case
		 * of a switch is attached to the stmmac driver.
		 */
		phydev->irq = PHY_IGNORE_INTERRUPT;
	else
		/* At this stage, init the EEE if supported.
		 * Never called in case of fixed_link.
		 */
		priv->eee_enabled = stmmac_eee_init(priv);
891 892
}

893
/**
894
 * stmmac_check_pcs_mode - verify if RGMII/SGMII is supported
895 896 897 898 899
 * @priv: driver private structure
 * Description: this is to verify if the HW supports the PCS.
 * Physical Coding Sublayer (PCS) interface that can be used when the MAC is
 * configured for the TBI, RTBI, or SGMII PHY interface.
 */
900 901 902 903 904
static void stmmac_check_pcs_mode(struct stmmac_priv *priv)
{
	int interface = priv->plat->interface;

	if (priv->dma_cap.pcs) {
B
Byungho An 已提交
905 906 907 908
		if ((interface == PHY_INTERFACE_MODE_RGMII) ||
		    (interface == PHY_INTERFACE_MODE_RGMII_ID) ||
		    (interface == PHY_INTERFACE_MODE_RGMII_RXID) ||
		    (interface == PHY_INTERFACE_MODE_RGMII_TXID)) {
909
			netdev_dbg(priv->dev, "PCS RGMII support enabled\n");
910
			priv->hw->pcs = STMMAC_PCS_RGMII;
B
Byungho An 已提交
911
		} else if (interface == PHY_INTERFACE_MODE_SGMII) {
912
			netdev_dbg(priv->dev, "PCS SGMII support enabled\n");
913
			priv->hw->pcs = STMMAC_PCS_SGMII;
914 915 916 917
		}
	}
}

918 919 920 921 922 923 924 925 926 927 928 929
/**
 * stmmac_init_phy - PHY initialization
 * @dev: net device structure
 * Description: it initializes the driver's PHY state, and attaches the PHY
 * to the mac driver.
 *  Return value:
 *  0 on success
 */
static int stmmac_init_phy(struct net_device *dev)
{
	struct stmmac_priv *priv = netdev_priv(dev);
	struct phy_device *phydev;
930
	char phy_id_fmt[MII_BUS_ID_SIZE + 3];
931
	char bus_id[MII_BUS_ID_SIZE];
932
	int interface = priv->plat->interface;
933
	int max_speed = priv->plat->max_speed;
934
	priv->oldlink = false;
935 936
	priv->speed = SPEED_UNKNOWN;
	priv->oldduplex = DUPLEX_UNKNOWN;
937

938 939 940 941
	if (priv->plat->phy_node) {
		phydev = of_phy_connect(dev, priv->plat->phy_node,
					&stmmac_adjust_link, 0, interface);
	} else {
G
Giuseppe CAVALLARO 已提交
942 943
		snprintf(bus_id, MII_BUS_ID_SIZE, "stmmac-%x",
			 priv->plat->bus_id);
944 945 946

		snprintf(phy_id_fmt, MII_BUS_ID_SIZE + 3, PHY_ID_FMT, bus_id,
			 priv->plat->phy_addr);
947
		netdev_dbg(priv->dev, "%s: trying to attach to %s\n", __func__,
948
			   phy_id_fmt);
949 950 951 952

		phydev = phy_connect(dev, phy_id_fmt, &stmmac_adjust_link,
				     interface);
	}
953

954
	if (IS_ERR_OR_NULL(phydev)) {
955
		netdev_err(priv->dev, "Could not attach to PHY\n");
956 957 958
		if (!phydev)
			return -ENODEV;

959 960 961
		return PTR_ERR(phydev);
	}

962
	/* Stop Advertising 1000BASE Capability if interface is not GMII */
963
	if ((interface == PHY_INTERFACE_MODE_MII) ||
964
	    (interface == PHY_INTERFACE_MODE_RMII) ||
P
Pavel Machek 已提交
965
		(max_speed < 1000 && max_speed > 0))
966 967
		phydev->advertising &= ~(SUPPORTED_1000baseT_Half |
					 SUPPORTED_1000baseT_Full);
968

969 970 971 972 973 974 975
	/*
	 * Broken HW is sometimes missing the pull-up resistor on the
	 * MDIO line, which results in reads to non-existent devices returning
	 * 0 rather than 0xffff. Catch this here and treat 0 as a non-existent
	 * device as well.
	 * Note: phydev->phy_id is the result of reading the UID PHY registers.
	 */
976
	if (!priv->plat->phy_node && phydev->phy_id == 0) {
977 978 979
		phy_disconnect(phydev);
		return -ENODEV;
	}
980

981 982 983 984 985 986 987
	/* stmmac_adjust_link will change this to PHY_IGNORE_INTERRUPT to avoid
	 * subsequent PHY polling, make sure we force a link transition if
	 * we have a UP/DOWN/UP transition
	 */
	if (phydev->is_pseudo_fixed_link)
		phydev->irq = PHY_POLL;

988
	phy_attached_info(phydev);
989 990 991
	return 0;
}

992
static void stmmac_display_rx_rings(struct stmmac_priv *priv)
993
{
994
	u32 rx_cnt = priv->plat->rx_queues_to_use;
995
	void *head_rx;
996
	u32 queue;
997

998 999 1000
	/* Display RX rings */
	for (queue = 0; queue < rx_cnt; queue++) {
		struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
1001

1002 1003 1004 1005 1006 1007 1008 1009
		pr_info("\tRX Queue %u rings\n", queue);

		if (priv->extend_desc)
			head_rx = (void *)rx_q->dma_erx;
		else
			head_rx = (void *)rx_q->dma_rx;

		/* Display RX ring */
1010
		stmmac_display_ring(priv, head_rx, DMA_RX_SIZE, true);
1011
	}
1012 1013 1014 1015
}

static void stmmac_display_tx_rings(struct stmmac_priv *priv)
{
1016
	u32 tx_cnt = priv->plat->tx_queues_to_use;
1017
	void *head_tx;
1018
	u32 queue;
1019

1020 1021 1022
	/* Display TX rings */
	for (queue = 0; queue < tx_cnt; queue++) {
		struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
1023

1024 1025 1026 1027 1028 1029 1030
		pr_info("\tTX Queue %d rings\n", queue);

		if (priv->extend_desc)
			head_tx = (void *)tx_q->dma_etx;
		else
			head_tx = (void *)tx_q->dma_tx;

1031
		stmmac_display_ring(priv, head_tx, DMA_TX_SIZE, false);
1032
	}
1033 1034
}

1035 1036 1037 1038 1039 1040 1041 1042 1043
static void stmmac_display_rings(struct stmmac_priv *priv)
{
	/* Display RX ring */
	stmmac_display_rx_rings(priv);

	/* Display TX ring */
	stmmac_display_tx_rings(priv);
}

1044 1045 1046 1047 1048 1049 1050 1051
static int stmmac_set_bfsize(int mtu, int bufsize)
{
	int ret = bufsize;

	if (mtu >= BUF_SIZE_4KiB)
		ret = BUF_SIZE_8KiB;
	else if (mtu >= BUF_SIZE_2KiB)
		ret = BUF_SIZE_4KiB;
1052
	else if (mtu > DEFAULT_BUFSIZE)
1053 1054
		ret = BUF_SIZE_2KiB;
	else
1055
		ret = DEFAULT_BUFSIZE;
1056 1057 1058 1059

	return ret;
}

1060
/**
1061
 * stmmac_clear_rx_descriptors - clear RX descriptors
1062
 * @priv: driver private structure
1063
 * @queue: RX queue index
1064
 * Description: this function is called to clear the RX descriptors
1065 1066
 * in case of both basic and extended descriptors are used.
 */
1067
static void stmmac_clear_rx_descriptors(struct stmmac_priv *priv, u32 queue)
1068
{
1069
	struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
1070
	int i;
1071

1072
	/* Clear the RX descriptors */
1073
	for (i = 0; i < DMA_RX_SIZE; i++)
1074
		if (priv->extend_desc)
1075 1076 1077
			stmmac_init_rx_desc(priv, &rx_q->dma_erx[i].basic,
					priv->use_riwt, priv->mode,
					(i == DMA_RX_SIZE - 1));
1078
		else
1079 1080 1081
			stmmac_init_rx_desc(priv, &rx_q->dma_rx[i],
					priv->use_riwt, priv->mode,
					(i == DMA_RX_SIZE - 1));
1082 1083 1084 1085 1086
}

/**
 * stmmac_clear_tx_descriptors - clear tx descriptors
 * @priv: driver private structure
1087
 * @queue: TX queue index.
1088 1089 1090
 * Description: this function is called to clear the TX descriptors
 * in case of both basic and extended descriptors are used.
 */
1091
static void stmmac_clear_tx_descriptors(struct stmmac_priv *priv, u32 queue)
1092
{
1093
	struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
1094 1095 1096
	int i;

	/* Clear the TX descriptors */
1097
	for (i = 0; i < DMA_TX_SIZE; i++)
1098
		if (priv->extend_desc)
1099 1100
			stmmac_init_tx_desc(priv, &tx_q->dma_etx[i].basic,
					priv->mode, (i == DMA_TX_SIZE - 1));
1101
		else
1102 1103
			stmmac_init_tx_desc(priv, &tx_q->dma_tx[i],
					priv->mode, (i == DMA_TX_SIZE - 1));
1104 1105
}

1106 1107 1108 1109 1110 1111 1112 1113
/**
 * stmmac_clear_descriptors - clear descriptors
 * @priv: driver private structure
 * Description: this function is called to clear the TX and RX descriptors
 * in case of both basic and extended descriptors are used.
 */
static void stmmac_clear_descriptors(struct stmmac_priv *priv)
{
1114
	u32 rx_queue_cnt = priv->plat->rx_queues_to_use;
1115
	u32 tx_queue_cnt = priv->plat->tx_queues_to_use;
1116 1117
	u32 queue;

1118
	/* Clear the RX descriptors */
1119 1120
	for (queue = 0; queue < rx_queue_cnt; queue++)
		stmmac_clear_rx_descriptors(priv, queue);
1121 1122

	/* Clear the TX descriptors */
1123 1124
	for (queue = 0; queue < tx_queue_cnt; queue++)
		stmmac_clear_tx_descriptors(priv, queue);
1125 1126
}

1127 1128 1129 1130 1131
/**
 * stmmac_init_rx_buffers - init the RX descriptor buffer.
 * @priv: driver private structure
 * @p: descriptor pointer
 * @i: descriptor index
1132 1133
 * @flags: gfp flag
 * @queue: RX queue index
1134 1135 1136
 * Description: this function is called to allocate a receive buffer, perform
 * the DMA mapping and init the descriptor.
 */
1137
static int stmmac_init_rx_buffers(struct stmmac_priv *priv, struct dma_desc *p,
1138
				  int i, gfp_t flags, u32 queue)
1139
{
1140
	struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
1141 1142
	struct sk_buff *skb;

1143
	skb = __netdev_alloc_skb_ip_align(priv->dev, priv->dma_buf_sz, flags);
1144
	if (!skb) {
1145 1146
		netdev_err(priv->dev,
			   "%s: Rx init fails; skb is NULL\n", __func__);
1147
		return -ENOMEM;
1148
	}
1149 1150
	rx_q->rx_skbuff[i] = skb;
	rx_q->rx_skbuff_dma[i] = dma_map_single(priv->device, skb->data,
1151 1152
						priv->dma_buf_sz,
						DMA_FROM_DEVICE);
1153
	if (dma_mapping_error(priv->device, rx_q->rx_skbuff_dma[i])) {
1154
		netdev_err(priv->dev, "%s: DMA mapping error\n", __func__);
1155 1156 1157
		dev_kfree_skb_any(skb);
		return -EINVAL;
	}
1158

1159
	stmmac_set_desc_addr(priv, p, rx_q->rx_skbuff_dma[i]);
1160

1161 1162
	if (priv->dma_buf_sz == BUF_SIZE_16KiB)
		stmmac_init_desc3(priv, p);
1163 1164 1165 1166

	return 0;
}

1167 1168 1169
/**
 * stmmac_free_rx_buffer - free RX dma buffers
 * @priv: private structure
1170
 * @queue: RX queue index
1171 1172
 * @i: buffer index.
 */
1173
static void stmmac_free_rx_buffer(struct stmmac_priv *priv, u32 queue, int i)
1174
{
1175 1176 1177 1178
	struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];

	if (rx_q->rx_skbuff[i]) {
		dma_unmap_single(priv->device, rx_q->rx_skbuff_dma[i],
1179
				 priv->dma_buf_sz, DMA_FROM_DEVICE);
1180
		dev_kfree_skb_any(rx_q->rx_skbuff[i]);
1181
	}
1182
	rx_q->rx_skbuff[i] = NULL;
1183 1184 1185
}

/**
1186 1187
 * stmmac_free_tx_buffer - free RX dma buffers
 * @priv: private structure
1188
 * @queue: RX queue index
1189 1190
 * @i: buffer index.
 */
1191
static void stmmac_free_tx_buffer(struct stmmac_priv *priv, u32 queue, int i)
1192
{
1193 1194 1195 1196
	struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];

	if (tx_q->tx_skbuff_dma[i].buf) {
		if (tx_q->tx_skbuff_dma[i].map_as_page)
1197
			dma_unmap_page(priv->device,
1198 1199
				       tx_q->tx_skbuff_dma[i].buf,
				       tx_q->tx_skbuff_dma[i].len,
1200 1201 1202
				       DMA_TO_DEVICE);
		else
			dma_unmap_single(priv->device,
1203 1204
					 tx_q->tx_skbuff_dma[i].buf,
					 tx_q->tx_skbuff_dma[i].len,
1205 1206 1207
					 DMA_TO_DEVICE);
	}

1208 1209 1210 1211 1212
	if (tx_q->tx_skbuff[i]) {
		dev_kfree_skb_any(tx_q->tx_skbuff[i]);
		tx_q->tx_skbuff[i] = NULL;
		tx_q->tx_skbuff_dma[i].buf = 0;
		tx_q->tx_skbuff_dma[i].map_as_page = false;
1213 1214 1215 1216 1217
	}
}

/**
 * init_dma_rx_desc_rings - init the RX descriptor rings
1218
 * @dev: net device structure
1219
 * @flags: gfp flag.
1220
 * Description: this function initializes the DMA RX descriptors
1221
 * and allocates the socket buffers. It supports the chained and ring
1222
 * modes.
1223
 */
1224
static int init_dma_rx_desc_rings(struct net_device *dev, gfp_t flags)
1225 1226
{
	struct stmmac_priv *priv = netdev_priv(dev);
1227
	u32 rx_count = priv->plat->rx_queues_to_use;
1228
	int ret = -ENOMEM;
1229
	int bfsize = 0;
1230
	int queue;
1231
	int i;
1232

1233 1234 1235
	bfsize = stmmac_set_16kib_bfsize(priv, dev->mtu);
	if (bfsize < 0)
		bfsize = 0;
1236

1237
	if (bfsize < BUF_SIZE_16KiB)
1238
		bfsize = stmmac_set_bfsize(dev->mtu, priv->dma_buf_sz);
1239

1240 1241
	priv->dma_buf_sz = bfsize;

1242
	/* RX INITIALIZATION */
1243 1244
	netif_dbg(priv, probe, priv->dev,
		  "SKB addresses:\nskb\t\tskb data\tdma data\n");
1245

1246 1247
	for (queue = 0; queue < rx_count; queue++) {
		struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
1248

1249 1250 1251
		netif_dbg(priv, probe, priv->dev,
			  "(%s) dma_rx_phy=0x%08x\n", __func__,
			  (u32)rx_q->dma_rx_phy);
A
Alexandre TORGUE 已提交
1252

1253 1254
		for (i = 0; i < DMA_RX_SIZE; i++) {
			struct dma_desc *p;
1255

1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278
			if (priv->extend_desc)
				p = &((rx_q->dma_erx + i)->basic);
			else
				p = rx_q->dma_rx + i;

			ret = stmmac_init_rx_buffers(priv, p, i, flags,
						     queue);
			if (ret)
				goto err_init_rx_buffers;

			netif_dbg(priv, probe, priv->dev, "[%p]\t[%p]\t[%x]\n",
				  rx_q->rx_skbuff[i], rx_q->rx_skbuff[i]->data,
				  (unsigned int)rx_q->rx_skbuff_dma[i]);
		}

		rx_q->cur_rx = 0;
		rx_q->dirty_rx = (unsigned int)(i - DMA_RX_SIZE);

		stmmac_clear_rx_descriptors(priv, queue);

		/* Setup the chained descriptor addresses */
		if (priv->mode == STMMAC_CHAIN_MODE) {
			if (priv->extend_desc)
1279 1280
				stmmac_mode_init(priv, rx_q->dma_erx,
						rx_q->dma_rx_phy, DMA_RX_SIZE, 1);
1281
			else
1282 1283
				stmmac_mode_init(priv, rx_q->dma_rx,
						rx_q->dma_rx_phy, DMA_RX_SIZE, 0);
1284
		}
1285 1286
	}

1287 1288
	buf_sz = bfsize;

1289
	return 0;
1290

1291
err_init_rx_buffers:
1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302
	while (queue >= 0) {
		while (--i >= 0)
			stmmac_free_rx_buffer(priv, queue, i);

		if (queue == 0)
			break;

		i = DMA_RX_SIZE;
		queue--;
	}

1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315
	return ret;
}

/**
 * init_dma_tx_desc_rings - init the TX descriptor rings
 * @dev: net device structure.
 * Description: this function initializes the DMA TX descriptors
 * and allocates the socket buffers. It supports the chained and ring
 * modes.
 */
static int init_dma_tx_desc_rings(struct net_device *dev)
{
	struct stmmac_priv *priv = netdev_priv(dev);
1316 1317
	u32 tx_queue_cnt = priv->plat->tx_queues_to_use;
	u32 queue;
1318 1319
	int i;

1320 1321
	for (queue = 0; queue < tx_queue_cnt; queue++) {
		struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
1322

1323 1324 1325
		netif_dbg(priv, probe, priv->dev,
			  "(%s) dma_tx_phy=0x%08x\n", __func__,
			 (u32)tx_q->dma_tx_phy);
A
Alexandre TORGUE 已提交
1326

1327 1328 1329
		/* Setup the chained descriptor addresses */
		if (priv->mode == STMMAC_CHAIN_MODE) {
			if (priv->extend_desc)
1330 1331
				stmmac_mode_init(priv, tx_q->dma_etx,
						tx_q->dma_tx_phy, DMA_TX_SIZE, 1);
1332
			else
1333 1334
				stmmac_mode_init(priv, tx_q->dma_tx,
						tx_q->dma_tx_phy, DMA_TX_SIZE, 0);
1335
		}
1336

1337 1338 1339 1340 1341 1342 1343
		for (i = 0; i < DMA_TX_SIZE; i++) {
			struct dma_desc *p;
			if (priv->extend_desc)
				p = &((tx_q->dma_etx + i)->basic);
			else
				p = tx_q->dma_tx + i;

1344
			stmmac_clear_desc(priv, p);
1345 1346 1347 1348 1349 1350

			tx_q->tx_skbuff_dma[i].buf = 0;
			tx_q->tx_skbuff_dma[i].map_as_page = false;
			tx_q->tx_skbuff_dma[i].len = 0;
			tx_q->tx_skbuff_dma[i].last_segment = false;
			tx_q->tx_skbuff[i] = NULL;
1351
		}
1352

1353 1354
		tx_q->dirty_tx = 0;
		tx_q->cur_tx = 0;
1355
		tx_q->mss = 0;
1356

1357 1358
		netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, queue));
	}
1359

1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381
	return 0;
}

/**
 * init_dma_desc_rings - init the RX/TX descriptor rings
 * @dev: net device structure
 * @flags: gfp flag.
 * Description: this function initializes the DMA RX/TX descriptors
 * and allocates the socket buffers. It supports the chained and ring
 * modes.
 */
static int init_dma_desc_rings(struct net_device *dev, gfp_t flags)
{
	struct stmmac_priv *priv = netdev_priv(dev);
	int ret;

	ret = init_dma_rx_desc_rings(dev, flags);
	if (ret)
		return ret;

	ret = init_dma_tx_desc_rings(dev);

1382
	stmmac_clear_descriptors(priv);
1383

1384 1385
	if (netif_msg_hw(priv))
		stmmac_display_rings(priv);
1386 1387

	return ret;
1388 1389
}

1390 1391 1392
/**
 * dma_free_rx_skbufs - free RX dma buffers
 * @priv: private structure
1393
 * @queue: RX queue index
1394
 */
1395
static void dma_free_rx_skbufs(struct stmmac_priv *priv, u32 queue)
1396 1397 1398
{
	int i;

1399
	for (i = 0; i < DMA_RX_SIZE; i++)
1400
		stmmac_free_rx_buffer(priv, queue, i);
1401 1402
}

1403 1404 1405
/**
 * dma_free_tx_skbufs - free TX dma buffers
 * @priv: private structure
1406
 * @queue: TX queue index
1407
 */
1408
static void dma_free_tx_skbufs(struct stmmac_priv *priv, u32 queue)
1409 1410 1411
{
	int i;

1412
	for (i = 0; i < DMA_TX_SIZE; i++)
1413
		stmmac_free_tx_buffer(priv, queue, i);
1414 1415
}

1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446
/**
 * free_dma_rx_desc_resources - free RX dma desc resources
 * @priv: private structure
 */
static void free_dma_rx_desc_resources(struct stmmac_priv *priv)
{
	u32 rx_count = priv->plat->rx_queues_to_use;
	u32 queue;

	/* Free RX queue resources */
	for (queue = 0; queue < rx_count; queue++) {
		struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];

		/* Release the DMA RX socket buffers */
		dma_free_rx_skbufs(priv, queue);

		/* Free DMA regions of consistent memory previously allocated */
		if (!priv->extend_desc)
			dma_free_coherent(priv->device,
					  DMA_RX_SIZE * sizeof(struct dma_desc),
					  rx_q->dma_rx, rx_q->dma_rx_phy);
		else
			dma_free_coherent(priv->device, DMA_RX_SIZE *
					  sizeof(struct dma_extended_desc),
					  rx_q->dma_erx, rx_q->dma_rx_phy);

		kfree(rx_q->rx_skbuff_dma);
		kfree(rx_q->rx_skbuff);
	}
}

1447 1448 1449 1450 1451 1452 1453
/**
 * free_dma_tx_desc_resources - free TX dma desc resources
 * @priv: private structure
 */
static void free_dma_tx_desc_resources(struct stmmac_priv *priv)
{
	u32 tx_count = priv->plat->tx_queues_to_use;
1454
	u32 queue;
1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477

	/* Free TX queue resources */
	for (queue = 0; queue < tx_count; queue++) {
		struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];

		/* Release the DMA TX socket buffers */
		dma_free_tx_skbufs(priv, queue);

		/* Free DMA regions of consistent memory previously allocated */
		if (!priv->extend_desc)
			dma_free_coherent(priv->device,
					  DMA_TX_SIZE * sizeof(struct dma_desc),
					  tx_q->dma_tx, tx_q->dma_tx_phy);
		else
			dma_free_coherent(priv->device, DMA_TX_SIZE *
					  sizeof(struct dma_extended_desc),
					  tx_q->dma_etx, tx_q->dma_tx_phy);

		kfree(tx_q->tx_skbuff_dma);
		kfree(tx_q->tx_skbuff);
	}
}

1478
/**
1479
 * alloc_dma_rx_desc_resources - alloc RX resources.
1480 1481
 * @priv: private structure
 * Description: according to which descriptor can be used (extend or basic)
1482 1483 1484
 * this function allocates the resources for TX and RX paths. In case of
 * reception, for example, it pre-allocated the RX socket buffer in order to
 * allow zero-copy mechanism.
1485
 */
1486
static int alloc_dma_rx_desc_resources(struct stmmac_priv *priv)
1487
{
1488
	u32 rx_count = priv->plat->rx_queues_to_use;
1489
	int ret = -ENOMEM;
1490
	u32 queue;
1491

1492 1493 1494
	/* RX queues buffers and DMA */
	for (queue = 0; queue < rx_count; queue++) {
		struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
1495

1496 1497
		rx_q->queue_index = queue;
		rx_q->priv_data = priv;
1498

1499 1500
		rx_q->rx_skbuff_dma = kmalloc_array(DMA_RX_SIZE,
						    sizeof(dma_addr_t),
1501
						    GFP_KERNEL);
1502
		if (!rx_q->rx_skbuff_dma)
1503
			goto err_dma;
1504

1505 1506 1507 1508
		rx_q->rx_skbuff = kmalloc_array(DMA_RX_SIZE,
						sizeof(struct sk_buff *),
						GFP_KERNEL);
		if (!rx_q->rx_skbuff)
1509
			goto err_dma;
1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530

		if (priv->extend_desc) {
			rx_q->dma_erx = dma_zalloc_coherent(priv->device,
							    DMA_RX_SIZE *
							    sizeof(struct
							    dma_extended_desc),
							    &rx_q->dma_rx_phy,
							    GFP_KERNEL);
			if (!rx_q->dma_erx)
				goto err_dma;

		} else {
			rx_q->dma_rx = dma_zalloc_coherent(priv->device,
							   DMA_RX_SIZE *
							   sizeof(struct
							   dma_desc),
							   &rx_q->dma_rx_phy,
							   GFP_KERNEL);
			if (!rx_q->dma_rx)
				goto err_dma;
		}
1531 1532 1533 1534 1535
	}

	return 0;

err_dma:
1536 1537
	free_dma_rx_desc_resources(priv);

1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550
	return ret;
}

/**
 * alloc_dma_tx_desc_resources - alloc TX resources.
 * @priv: private structure
 * Description: according to which descriptor can be used (extend or basic)
 * this function allocates the resources for TX and RX paths. In case of
 * reception, for example, it pre-allocated the RX socket buffer in order to
 * allow zero-copy mechanism.
 */
static int alloc_dma_tx_desc_resources(struct stmmac_priv *priv)
{
1551
	u32 tx_count = priv->plat->tx_queues_to_use;
1552
	int ret = -ENOMEM;
1553
	u32 queue;
1554

1555 1556 1557
	/* TX queues buffers and DMA */
	for (queue = 0; queue < tx_count; queue++) {
		struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
1558

1559 1560
		tx_q->queue_index = queue;
		tx_q->priv_data = priv;
1561

1562 1563
		tx_q->tx_skbuff_dma = kmalloc_array(DMA_TX_SIZE,
						    sizeof(*tx_q->tx_skbuff_dma),
1564
						    GFP_KERNEL);
1565
		if (!tx_q->tx_skbuff_dma)
1566
			goto err_dma;
1567 1568 1569 1570 1571

		tx_q->tx_skbuff = kmalloc_array(DMA_TX_SIZE,
						sizeof(struct sk_buff *),
						GFP_KERNEL);
		if (!tx_q->tx_skbuff)
1572
			goto err_dma;
1573 1574 1575 1576 1577 1578 1579 1580 1581

		if (priv->extend_desc) {
			tx_q->dma_etx = dma_zalloc_coherent(priv->device,
							    DMA_TX_SIZE *
							    sizeof(struct
							    dma_extended_desc),
							    &tx_q->dma_tx_phy,
							    GFP_KERNEL);
			if (!tx_q->dma_etx)
1582
				goto err_dma;
1583 1584 1585 1586 1587 1588 1589 1590
		} else {
			tx_q->dma_tx = dma_zalloc_coherent(priv->device,
							   DMA_TX_SIZE *
							   sizeof(struct
								  dma_desc),
							   &tx_q->dma_tx_phy,
							   GFP_KERNEL);
			if (!tx_q->dma_tx)
1591
				goto err_dma;
1592
		}
1593 1594 1595 1596
	}

	return 0;

1597
err_dma:
1598 1599
	free_dma_tx_desc_resources(priv);

1600 1601 1602
	return ret;
}

1603 1604 1605 1606 1607 1608 1609 1610 1611 1612
/**
 * alloc_dma_desc_resources - alloc TX/RX resources.
 * @priv: private structure
 * Description: according to which descriptor can be used (extend or basic)
 * this function allocates the resources for TX and RX paths. In case of
 * reception, for example, it pre-allocated the RX socket buffer in order to
 * allow zero-copy mechanism.
 */
static int alloc_dma_desc_resources(struct stmmac_priv *priv)
{
1613
	/* RX Allocation */
1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636
	int ret = alloc_dma_rx_desc_resources(priv);

	if (ret)
		return ret;

	ret = alloc_dma_tx_desc_resources(priv);

	return ret;
}

/**
 * free_dma_desc_resources - free dma desc resources
 * @priv: private structure
 */
static void free_dma_desc_resources(struct stmmac_priv *priv)
{
	/* Release the DMA RX socket buffers */
	free_dma_rx_desc_resources(priv);

	/* Release the DMA TX socket buffers */
	free_dma_tx_desc_resources(priv);
}

J
jpinto 已提交
1637 1638 1639 1640 1641 1642 1643
/**
 *  stmmac_mac_enable_rx_queues - Enable MAC rx queues
 *  @priv: driver private structure
 *  Description: It is used for enabling the rx queues in the MAC
 */
static void stmmac_mac_enable_rx_queues(struct stmmac_priv *priv)
{
1644 1645 1646
	u32 rx_queues_count = priv->plat->rx_queues_to_use;
	int queue;
	u8 mode;
J
jpinto 已提交
1647

1648 1649
	for (queue = 0; queue < rx_queues_count; queue++) {
		mode = priv->plat->rx_queues_cfg[queue].mode_to_use;
1650
		stmmac_rx_queue_enable(priv, priv->hw, mode, queue);
1651
	}
J
jpinto 已提交
1652 1653
}

1654 1655 1656 1657 1658 1659 1660 1661 1662 1663
/**
 * stmmac_start_rx_dma - start RX DMA channel
 * @priv: driver private structure
 * @chan: RX channel index
 * Description:
 * This starts a RX DMA channel
 */
static void stmmac_start_rx_dma(struct stmmac_priv *priv, u32 chan)
{
	netdev_dbg(priv->dev, "DMA RX processes started in channel %d\n", chan);
1664
	stmmac_start_rx(priv, priv->ioaddr, chan);
1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676
}

/**
 * stmmac_start_tx_dma - start TX DMA channel
 * @priv: driver private structure
 * @chan: TX channel index
 * Description:
 * This starts a TX DMA channel
 */
static void stmmac_start_tx_dma(struct stmmac_priv *priv, u32 chan)
{
	netdev_dbg(priv->dev, "DMA TX processes started in channel %d\n", chan);
1677
	stmmac_start_tx(priv, priv->ioaddr, chan);
1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689
}

/**
 * stmmac_stop_rx_dma - stop RX DMA channel
 * @priv: driver private structure
 * @chan: RX channel index
 * Description:
 * This stops a RX DMA channel
 */
static void stmmac_stop_rx_dma(struct stmmac_priv *priv, u32 chan)
{
	netdev_dbg(priv->dev, "DMA RX processes stopped in channel %d\n", chan);
1690
	stmmac_stop_rx(priv, priv->ioaddr, chan);
1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702
}

/**
 * stmmac_stop_tx_dma - stop TX DMA channel
 * @priv: driver private structure
 * @chan: TX channel index
 * Description:
 * This stops a TX DMA channel
 */
static void stmmac_stop_tx_dma(struct stmmac_priv *priv, u32 chan)
{
	netdev_dbg(priv->dev, "DMA TX processes stopped in channel %d\n", chan);
1703
	stmmac_stop_tx(priv, priv->ioaddr, chan);
1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743
}

/**
 * stmmac_start_all_dma - start all RX and TX DMA channels
 * @priv: driver private structure
 * Description:
 * This starts all the RX and TX DMA channels
 */
static void stmmac_start_all_dma(struct stmmac_priv *priv)
{
	u32 rx_channels_count = priv->plat->rx_queues_to_use;
	u32 tx_channels_count = priv->plat->tx_queues_to_use;
	u32 chan = 0;

	for (chan = 0; chan < rx_channels_count; chan++)
		stmmac_start_rx_dma(priv, chan);

	for (chan = 0; chan < tx_channels_count; chan++)
		stmmac_start_tx_dma(priv, chan);
}

/**
 * stmmac_stop_all_dma - stop all RX and TX DMA channels
 * @priv: driver private structure
 * Description:
 * This stops the RX and TX DMA channels
 */
static void stmmac_stop_all_dma(struct stmmac_priv *priv)
{
	u32 rx_channels_count = priv->plat->rx_queues_to_use;
	u32 tx_channels_count = priv->plat->tx_queues_to_use;
	u32 chan = 0;

	for (chan = 0; chan < rx_channels_count; chan++)
		stmmac_stop_rx_dma(priv, chan);

	for (chan = 0; chan < tx_channels_count; chan++)
		stmmac_stop_tx_dma(priv, chan);
}

1744 1745
/**
 *  stmmac_dma_operation_mode - HW DMA operation mode
1746
 *  @priv: driver private structure
1747 1748
 *  Description: it is used for configuring the DMA operation mode register in
 *  order to program the tx/rx DMA thresholds or Store-And-Forward mode.
1749 1750 1751
 */
static void stmmac_dma_operation_mode(struct stmmac_priv *priv)
{
1752 1753
	u32 rx_channels_count = priv->plat->rx_queues_to_use;
	u32 tx_channels_count = priv->plat->tx_queues_to_use;
1754
	int rxfifosz = priv->plat->rx_fifo_size;
1755
	int txfifosz = priv->plat->tx_fifo_size;
1756 1757 1758
	u32 txmode = 0;
	u32 rxmode = 0;
	u32 chan = 0;
1759
	u8 qmode = 0;
1760

1761 1762
	if (rxfifosz == 0)
		rxfifosz = priv->dma_cap.rx_fifo_size;
1763 1764 1765 1766 1767 1768
	if (txfifosz == 0)
		txfifosz = priv->dma_cap.tx_fifo_size;

	/* Adjust for real per queue fifo size */
	rxfifosz /= rx_channels_count;
	txfifosz /= tx_channels_count;
1769

1770 1771 1772 1773
	if (priv->plat->force_thresh_dma_mode) {
		txmode = tc;
		rxmode = tc;
	} else if (priv->plat->force_sf_dma_mode || priv->plat->tx_coe) {
1774 1775 1776
		/*
		 * In case of GMAC, SF mode can be enabled
		 * to perform the TX COE in HW. This depends on:
1777 1778 1779 1780
		 * 1) TX COE if actually supported
		 * 2) There is no bugged Jumbo frame support
		 *    that needs to not insert csum in the TDES.
		 */
1781 1782
		txmode = SF_DMA_MODE;
		rxmode = SF_DMA_MODE;
1783
		priv->xstats.threshold = SF_DMA_MODE;
1784 1785 1786 1787 1788 1789
	} else {
		txmode = tc;
		rxmode = SF_DMA_MODE;
	}

	/* configure all channels */
1790 1791
	for (chan = 0; chan < rx_channels_count; chan++) {
		qmode = priv->plat->rx_queues_cfg[chan].mode_to_use;
1792

1793 1794 1795
		stmmac_dma_rx_mode(priv, priv->ioaddr, rxmode, chan,
				rxfifosz, qmode);
	}
1796

1797 1798
	for (chan = 0; chan < tx_channels_count; chan++) {
		qmode = priv->plat->tx_queues_cfg[chan].mode_to_use;
1799

1800 1801
		stmmac_dma_tx_mode(priv, priv->ioaddr, txmode, chan,
				txfifosz, qmode);
1802
	}
1803 1804 1805
}

/**
1806
 * stmmac_tx_clean - to manage the transmission completion
1807
 * @priv: driver private structure
1808
 * @queue: TX queue index
1809
 * Description: it reclaims the transmit resources after transmission completes.
1810
 */
1811
static void stmmac_tx_clean(struct stmmac_priv *priv, u32 queue)
1812
{
1813
	struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
B
Beniamino Galvani 已提交
1814
	unsigned int bytes_compl = 0, pkts_compl = 0;
1815
	unsigned int entry;
1816

1817
	netif_tx_lock(priv->dev);
1818

1819 1820
	priv->xstats.tx_clean++;

1821
	entry = tx_q->dirty_tx;
1822 1823
	while (entry != tx_q->cur_tx) {
		struct sk_buff *skb = tx_q->tx_skbuff[entry];
1824
		struct dma_desc *p;
1825
		int status;
1826 1827

		if (priv->extend_desc)
1828
			p = (struct dma_desc *)(tx_q->dma_etx + entry);
1829
		else
1830
			p = tx_q->dma_tx + entry;
1831

1832 1833
		status = stmmac_tx_status(priv, &priv->dev->stats,
				&priv->xstats, p, priv->ioaddr);
1834 1835 1836 1837
		/* Check if the descriptor is owned by the DMA */
		if (unlikely(status & tx_dma_own))
			break;

1838 1839 1840 1841 1842
		/* Make sure descriptor fields are read after reading
		 * the own bit.
		 */
		dma_rmb();

1843 1844 1845 1846 1847 1848
		/* Just consider the last segment and ...*/
		if (likely(!(status & tx_not_ls))) {
			/* ... verify the status error condition */
			if (unlikely(status & tx_err)) {
				priv->dev->stats.tx_errors++;
			} else {
1849 1850
				priv->dev->stats.tx_packets++;
				priv->xstats.tx_pkt_n++;
1851
			}
1852
			stmmac_get_tx_hwtstamp(priv, p, skb);
1853 1854
		}

1855 1856
		if (likely(tx_q->tx_skbuff_dma[entry].buf)) {
			if (tx_q->tx_skbuff_dma[entry].map_as_page)
G
Giuseppe CAVALLARO 已提交
1857
				dma_unmap_page(priv->device,
1858 1859
					       tx_q->tx_skbuff_dma[entry].buf,
					       tx_q->tx_skbuff_dma[entry].len,
G
Giuseppe CAVALLARO 已提交
1860 1861 1862
					       DMA_TO_DEVICE);
			else
				dma_unmap_single(priv->device,
1863 1864
						 tx_q->tx_skbuff_dma[entry].buf,
						 tx_q->tx_skbuff_dma[entry].len,
G
Giuseppe CAVALLARO 已提交
1865
						 DMA_TO_DEVICE);
1866 1867 1868
			tx_q->tx_skbuff_dma[entry].buf = 0;
			tx_q->tx_skbuff_dma[entry].len = 0;
			tx_q->tx_skbuff_dma[entry].map_as_page = false;
1869
		}
A
Alexandre TORGUE 已提交
1870

1871
		stmmac_clean_desc3(priv, tx_q, p);
A
Alexandre TORGUE 已提交
1872

1873 1874
		tx_q->tx_skbuff_dma[entry].last_segment = false;
		tx_q->tx_skbuff_dma[entry].is_jumbo = false;
1875 1876

		if (likely(skb != NULL)) {
B
Beniamino Galvani 已提交
1877 1878
			pkts_compl++;
			bytes_compl += skb->len;
1879
			dev_consume_skb_any(skb);
1880
			tx_q->tx_skbuff[entry] = NULL;
1881 1882
		}

1883
		stmmac_release_tx_desc(priv, p, priv->mode);
1884

1885
		entry = STMMAC_GET_ENTRY(entry, DMA_TX_SIZE);
1886
	}
1887
	tx_q->dirty_tx = entry;
B
Beniamino Galvani 已提交
1888

1889 1890 1891 1892 1893 1894
	netdev_tx_completed_queue(netdev_get_tx_queue(priv->dev, queue),
				  pkts_compl, bytes_compl);

	if (unlikely(netif_tx_queue_stopped(netdev_get_tx_queue(priv->dev,
								queue))) &&
	    stmmac_tx_avail(priv, queue) > STMMAC_TX_THRESH) {
B
Beniamino Galvani 已提交
1895

1896 1897
		netif_dbg(priv, tx_done, priv->dev,
			  "%s: restart transmit\n", __func__);
1898
		netif_tx_wake_queue(netdev_get_tx_queue(priv->dev, queue));
1899
	}
1900 1901 1902

	if ((priv->eee_enabled) && (!priv->tx_path_in_lpi_mode)) {
		stmmac_enable_eee_mode(priv);
G
Giuseppe CAVALLARO 已提交
1903
		mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(eee_timer));
1904
	}
1905
	netif_tx_unlock(priv->dev);
1906 1907 1908
}

/**
1909
 * stmmac_tx_err - to manage the tx error
1910
 * @priv: driver private structure
1911
 * @chan: channel index
1912
 * Description: it cleans the descriptors and restarts the transmission
1913
 * in case of transmission errors.
1914
 */
1915
static void stmmac_tx_err(struct stmmac_priv *priv, u32 chan)
1916
{
1917
	struct stmmac_tx_queue *tx_q = &priv->tx_queue[chan];
1918
	int i;
1919

1920
	netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, chan));
1921

1922
	stmmac_stop_tx_dma(priv, chan);
1923
	dma_free_tx_skbufs(priv, chan);
1924
	for (i = 0; i < DMA_TX_SIZE; i++)
1925
		if (priv->extend_desc)
1926 1927
			stmmac_init_tx_desc(priv, &tx_q->dma_etx[i].basic,
					priv->mode, (i == DMA_TX_SIZE - 1));
1928
		else
1929 1930
			stmmac_init_tx_desc(priv, &tx_q->dma_tx[i],
					priv->mode, (i == DMA_TX_SIZE - 1));
1931 1932
	tx_q->dirty_tx = 0;
	tx_q->cur_tx = 0;
1933
	tx_q->mss = 0;
1934
	netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, chan));
1935
	stmmac_start_tx_dma(priv, chan);
1936 1937

	priv->dev->stats.tx_errors++;
1938
	netif_tx_wake_queue(netdev_get_tx_queue(priv->dev, chan));
1939 1940
}

1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953
/**
 *  stmmac_set_dma_operation_mode - Set DMA operation mode by channel
 *  @priv: driver private structure
 *  @txmode: TX operating mode
 *  @rxmode: RX operating mode
 *  @chan: channel index
 *  Description: it is used for configuring of the DMA operation mode in
 *  runtime in order to program the tx/rx DMA thresholds or Store-And-Forward
 *  mode.
 */
static void stmmac_set_dma_operation_mode(struct stmmac_priv *priv, u32 txmode,
					  u32 rxmode, u32 chan)
{
1954 1955
	u8 rxqmode = priv->plat->rx_queues_cfg[chan].mode_to_use;
	u8 txqmode = priv->plat->tx_queues_cfg[chan].mode_to_use;
1956 1957
	u32 rx_channels_count = priv->plat->rx_queues_to_use;
	u32 tx_channels_count = priv->plat->tx_queues_to_use;
1958
	int rxfifosz = priv->plat->rx_fifo_size;
1959
	int txfifosz = priv->plat->tx_fifo_size;
1960 1961 1962

	if (rxfifosz == 0)
		rxfifosz = priv->dma_cap.rx_fifo_size;
1963 1964 1965 1966 1967 1968
	if (txfifosz == 0)
		txfifosz = priv->dma_cap.tx_fifo_size;

	/* Adjust for real per queue fifo size */
	rxfifosz /= rx_channels_count;
	txfifosz /= tx_channels_count;
1969

1970 1971
	stmmac_dma_rx_mode(priv, priv->ioaddr, rxmode, chan, rxfifosz, rxqmode);
	stmmac_dma_tx_mode(priv, priv->ioaddr, txmode, chan, txfifosz, txqmode);
1972 1973
}

1974 1975
static bool stmmac_safety_feat_interrupt(struct stmmac_priv *priv)
{
1976
	int ret;
1977

1978 1979 1980
	ret = stmmac_safety_feat_irq_status(priv, priv->dev,
			priv->ioaddr, priv->dma_cap.asp, &priv->sstats);
	if (ret && (ret != -EINVAL)) {
1981
		stmmac_global_err(priv);
1982 1983 1984 1985
		return true;
	}

	return false;
1986 1987
}

1988
/**
1989
 * stmmac_dma_interrupt - DMA ISR
1990 1991
 * @priv: driver private structure
 * Description: this is the DMA ISR. It is called by the main ISR.
1992 1993
 * It calls the dwmac dma routine and schedule poll method in case of some
 * work can be done.
1994
 */
1995 1996
static void stmmac_dma_interrupt(struct stmmac_priv *priv)
{
1997
	u32 tx_channel_count = priv->plat->tx_queues_to_use;
1998 1999 2000
	u32 rx_channel_count = priv->plat->rx_queues_to_use;
	u32 channels_to_check = tx_channel_count > rx_channel_count ?
				tx_channel_count : rx_channel_count;
2001
	u32 chan;
2002
	bool poll_scheduled = false;
K
Kees Cook 已提交
2003 2004 2005 2006 2007
	int status[max_t(u32, MTL_MAX_TX_QUEUES, MTL_MAX_RX_QUEUES)];

	/* Make sure we never check beyond our status buffer. */
	if (WARN_ON_ONCE(channels_to_check > ARRAY_SIZE(status)))
		channels_to_check = ARRAY_SIZE(status);
2008 2009 2010 2011 2012 2013 2014 2015

	/* Each DMA channel can be used for rx and tx simultaneously, yet
	 * napi_struct is embedded in struct stmmac_rx_queue rather than in a
	 * stmmac_channel struct.
	 * Because of this, stmmac_poll currently checks (and possibly wakes)
	 * all tx queues rather than just a single tx queue.
	 */
	for (chan = 0; chan < channels_to_check; chan++)
2016 2017
		status[chan] = stmmac_dma_interrupt_status(priv, priv->ioaddr,
				&priv->xstats, chan);
2018

2019 2020 2021
	for (chan = 0; chan < rx_channel_count; chan++) {
		if (likely(status[chan] & handle_rx)) {
			struct stmmac_rx_queue *rx_q = &priv->rx_queue[chan];
2022 2023

			if (likely(napi_schedule_prep(&rx_q->napi))) {
2024
				stmmac_disable_dma_irq(priv, priv->ioaddr, chan);
2025
				__napi_schedule(&rx_q->napi);
2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044
				poll_scheduled = true;
			}
		}
	}

	/* If we scheduled poll, we already know that tx queues will be checked.
	 * If we didn't schedule poll, see if any DMA channel (used by tx) has a
	 * completed transmission, if so, call stmmac_poll (once).
	 */
	if (!poll_scheduled) {
		for (chan = 0; chan < tx_channel_count; chan++) {
			if (status[chan] & handle_tx) {
				/* It doesn't matter what rx queue we choose
				 * here. We use 0 since it always exists.
				 */
				struct stmmac_rx_queue *rx_q =
					&priv->rx_queue[0];

				if (likely(napi_schedule_prep(&rx_q->napi))) {
2045 2046
					stmmac_disable_dma_irq(priv,
							priv->ioaddr, chan);
2047 2048 2049
					__napi_schedule(&rx_q->napi);
				}
				break;
2050
			}
2051
		}
2052
	}
2053

2054 2055
	for (chan = 0; chan < tx_channel_count; chan++) {
		if (unlikely(status[chan] & tx_hard_error_bump_tc)) {
2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071
			/* Try to bump up the dma threshold on this failure */
			if (unlikely(priv->xstats.threshold != SF_DMA_MODE) &&
			    (tc <= 256)) {
				tc += 64;
				if (priv->plat->force_thresh_dma_mode)
					stmmac_set_dma_operation_mode(priv,
								      tc,
								      tc,
								      chan);
				else
					stmmac_set_dma_operation_mode(priv,
								    tc,
								    SF_DMA_MODE,
								    chan);
				priv->xstats.threshold = tc;
			}
2072
		} else if (unlikely(status[chan] == tx_hard_error)) {
2073
			stmmac_tx_err(priv, chan);
2074
		}
2075
	}
2076 2077
}

2078 2079 2080 2081 2082
/**
 * stmmac_mmc_setup: setup the Mac Management Counters (MMC)
 * @priv: driver private structure
 * Description: this masks the MMC irq, in fact, the counters are managed in SW.
 */
2083 2084 2085
static void stmmac_mmc_setup(struct stmmac_priv *priv)
{
	unsigned int mode = MMC_CNTRL_RESET_ON_READ | MMC_CNTRL_COUNTER_RESET |
2086
			    MMC_CNTRL_PRESET | MMC_CNTRL_FULL_HALF_PRESET;
2087

2088
	dwmac_mmc_intr_all_mask(priv->mmcaddr);
G
Giuseppe CAVALLARO 已提交
2089 2090

	if (priv->dma_cap.rmon) {
2091
		dwmac_mmc_ctrl(priv->mmcaddr, mode);
G
Giuseppe CAVALLARO 已提交
2092 2093
		memset(&priv->mmc, 0, sizeof(struct stmmac_counters));
	} else
2094
		netdev_info(priv->dev, "No MAC Management Counters available\n");
2095 2096
}

2097
/**
2098
 * stmmac_get_hw_features - get MAC capabilities from the HW cap. register.
2099
 * @priv: driver private structure
2100 2101 2102 2103 2104
 * Description:
 *  new GMAC chip generations have a new register to indicate the
 *  presence of the optional feature/functions.
 *  This can be also used to override the value passed through the
 *  platform and necessary for old MAC10/100 and GMAC chips.
2105 2106 2107
 */
static int stmmac_get_hw_features(struct stmmac_priv *priv)
{
2108
	return stmmac_get_hw_feature(priv, priv->ioaddr, &priv->dma_cap) == 0;
2109 2110
}

2111
/**
2112
 * stmmac_check_ether_addr - check if the MAC addr is valid
2113 2114 2115 2116 2117
 * @priv: driver private structure
 * Description:
 * it is to verify if the MAC address is valid, in case of failures it
 * generates a random MAC address
 */
2118 2119 2120
static void stmmac_check_ether_addr(struct stmmac_priv *priv)
{
	if (!is_valid_ether_addr(priv->dev->dev_addr)) {
2121
		stmmac_get_umac_addr(priv, priv->hw, priv->dev->dev_addr, 0);
G
Giuseppe CAVALLARO 已提交
2122
		if (!is_valid_ether_addr(priv->dev->dev_addr))
2123
			eth_hw_addr_random(priv->dev);
2124 2125
		netdev_info(priv->dev, "device MAC address %pM\n",
			    priv->dev->dev_addr);
2126 2127 2128
	}
}

2129
/**
2130
 * stmmac_init_dma_engine - DMA init.
2131 2132 2133 2134 2135 2136
 * @priv: driver private structure
 * Description:
 * It inits the DMA invoking the specific MAC/GMAC callback.
 * Some DMA parameters can be passed from the platform;
 * in case of these are not passed a default is kept for the MAC or GMAC.
 */
2137 2138
static int stmmac_init_dma_engine(struct stmmac_priv *priv)
{
2139 2140
	u32 rx_channels_count = priv->plat->rx_queues_to_use;
	u32 tx_channels_count = priv->plat->tx_queues_to_use;
2141
	u32 dma_csr_ch = max(rx_channels_count, tx_channels_count);
2142
	struct stmmac_rx_queue *rx_q;
2143
	struct stmmac_tx_queue *tx_q;
2144
	u32 chan = 0;
2145
	int atds = 0;
2146
	int ret = 0;
2147

2148 2149
	if (!priv->plat->dma_cfg || !priv->plat->dma_cfg->pbl) {
		dev_err(priv->device, "Invalid DMA configuration\n");
2150
		return -EINVAL;
2151 2152
	}

2153 2154 2155
	if (priv->extend_desc && (priv->mode == STMMAC_RING_MODE))
		atds = 1;

2156
	ret = stmmac_reset(priv, priv->ioaddr);
2157 2158 2159 2160 2161
	if (ret) {
		dev_err(priv->device, "Failed to reset the dma\n");
		return ret;
	}

2162 2163 2164
	/* DMA RX Channel Configuration */
	for (chan = 0; chan < rx_channels_count; chan++) {
		rx_q = &priv->rx_queue[chan];
2165

2166 2167
		stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
				    rx_q->dma_rx_phy, chan);
2168

2169 2170 2171 2172 2173
		rx_q->rx_tail_addr = rx_q->dma_rx_phy +
			    (DMA_RX_SIZE * sizeof(struct dma_desc));
		stmmac_set_rx_tail_ptr(priv, priv->ioaddr,
				       rx_q->rx_tail_addr, chan);
	}
2174

2175 2176 2177
	/* DMA TX Channel Configuration */
	for (chan = 0; chan < tx_channels_count; chan++) {
		tx_q = &priv->tx_queue[chan];
2178

2179 2180
		stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
				    tx_q->dma_tx_phy, chan);
2181

2182 2183 2184 2185 2186
		tx_q->tx_tail_addr = tx_q->dma_tx_phy +
			    (DMA_TX_SIZE * sizeof(struct dma_desc));
		stmmac_set_tx_tail_ptr(priv, priv->ioaddr,
				       tx_q->tx_tail_addr, chan);
	}
2187

2188 2189 2190
	/* DMA CSR Channel configuration */
	for (chan = 0; chan < dma_csr_ch; chan++)
		stmmac_init_chan(priv, priv->ioaddr, priv->plat->dma_cfg, chan);
2191

2192 2193
	/* DMA Configuration */
	stmmac_dma_init(priv, priv->ioaddr, priv->plat->dma_cfg, atds);
A
Alexandre TORGUE 已提交
2194

2195 2196
	if (priv->plat->axi)
		stmmac_axi(priv, priv->ioaddr, priv->plat->axi);
2197

2198
	return ret;
2199 2200
}

2201
/**
2202
 * stmmac_tx_timer - mitigation sw timer for tx.
2203 2204 2205 2206
 * @data: data pointer
 * Description:
 * This is the timer handler to directly invoke the stmmac_tx_clean.
 */
2207
static void stmmac_tx_timer(struct timer_list *t)
2208
{
2209
	struct stmmac_priv *priv = from_timer(priv, t, txtimer);
2210 2211
	u32 tx_queues_count = priv->plat->tx_queues_to_use;
	u32 queue;
2212

2213 2214 2215
	/* let's scan all the tx queues */
	for (queue = 0; queue < tx_queues_count; queue++)
		stmmac_tx_clean(priv, queue);
2216 2217 2218
}

/**
2219
 * stmmac_init_tx_coalesce - init tx mitigation options.
2220
 * @priv: driver private structure
2221 2222 2223 2224 2225 2226 2227 2228 2229
 * Description:
 * This inits the transmit coalesce parameters: i.e. timer rate,
 * timer handler and default threshold used for enabling the
 * interrupt on completion bit.
 */
static void stmmac_init_tx_coalesce(struct stmmac_priv *priv)
{
	priv->tx_coal_frames = STMMAC_TX_FRAMES;
	priv->tx_coal_timer = STMMAC_COAL_TX_TIMER;
2230
	timer_setup(&priv->txtimer, stmmac_tx_timer, 0);
2231 2232 2233 2234
	priv->txtimer.expires = STMMAC_COAL_TIMER(priv->tx_coal_timer);
	add_timer(&priv->txtimer);
}

2235 2236 2237 2238 2239 2240 2241
static void stmmac_set_rings_length(struct stmmac_priv *priv)
{
	u32 rx_channels_count = priv->plat->rx_queues_to_use;
	u32 tx_channels_count = priv->plat->tx_queues_to_use;
	u32 chan;

	/* set TX ring length */
2242 2243 2244
	for (chan = 0; chan < tx_channels_count; chan++)
		stmmac_set_tx_ring_len(priv, priv->ioaddr,
				(DMA_TX_SIZE - 1), chan);
2245 2246

	/* set RX ring length */
2247 2248 2249
	for (chan = 0; chan < rx_channels_count; chan++)
		stmmac_set_rx_ring_len(priv, priv->ioaddr,
				(DMA_RX_SIZE - 1), chan);
2250 2251
}

2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264
/**
 *  stmmac_set_tx_queue_weight - Set TX queue weight
 *  @priv: driver private structure
 *  Description: It is used for setting TX queues weight
 */
static void stmmac_set_tx_queue_weight(struct stmmac_priv *priv)
{
	u32 tx_queues_count = priv->plat->tx_queues_to_use;
	u32 weight;
	u32 queue;

	for (queue = 0; queue < tx_queues_count; queue++) {
		weight = priv->plat->tx_queues_cfg[queue].weight;
2265
		stmmac_set_mtl_tx_queue_weight(priv, priv->hw, weight, queue);
2266 2267 2268
	}
}

2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279
/**
 *  stmmac_configure_cbs - Configure CBS in TX queue
 *  @priv: driver private structure
 *  Description: It is used for configuring CBS in AVB TX queues
 */
static void stmmac_configure_cbs(struct stmmac_priv *priv)
{
	u32 tx_queues_count = priv->plat->tx_queues_to_use;
	u32 mode_to_use;
	u32 queue;

J
Joao Pinto 已提交
2280 2281
	/* queue 0 is reserved for legacy traffic */
	for (queue = 1; queue < tx_queues_count; queue++) {
2282 2283 2284 2285
		mode_to_use = priv->plat->tx_queues_cfg[queue].mode_to_use;
		if (mode_to_use == MTL_QUEUE_DCB)
			continue;

2286
		stmmac_config_cbs(priv, priv->hw,
2287 2288 2289 2290 2291 2292 2293 2294
				priv->plat->tx_queues_cfg[queue].send_slope,
				priv->plat->tx_queues_cfg[queue].idle_slope,
				priv->plat->tx_queues_cfg[queue].high_credit,
				priv->plat->tx_queues_cfg[queue].low_credit,
				queue);
	}
}

2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307
/**
 *  stmmac_rx_queue_dma_chan_map - Map RX queue to RX dma channel
 *  @priv: driver private structure
 *  Description: It is used for mapping RX queues to RX dma channels
 */
static void stmmac_rx_queue_dma_chan_map(struct stmmac_priv *priv)
{
	u32 rx_queues_count = priv->plat->rx_queues_to_use;
	u32 queue;
	u32 chan;

	for (queue = 0; queue < rx_queues_count; queue++) {
		chan = priv->plat->rx_queues_cfg[queue].chan;
2308
		stmmac_map_mtl_to_dma(priv, priv->hw, queue, chan);
2309 2310 2311
	}
}

2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327
/**
 *  stmmac_mac_config_rx_queues_prio - Configure RX Queue priority
 *  @priv: driver private structure
 *  Description: It is used for configuring the RX Queue Priority
 */
static void stmmac_mac_config_rx_queues_prio(struct stmmac_priv *priv)
{
	u32 rx_queues_count = priv->plat->rx_queues_to_use;
	u32 queue;
	u32 prio;

	for (queue = 0; queue < rx_queues_count; queue++) {
		if (!priv->plat->rx_queues_cfg[queue].use_prio)
			continue;

		prio = priv->plat->rx_queues_cfg[queue].prio;
2328
		stmmac_rx_queue_prio(priv, priv->hw, prio, queue);
2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347
	}
}

/**
 *  stmmac_mac_config_tx_queues_prio - Configure TX Queue priority
 *  @priv: driver private structure
 *  Description: It is used for configuring the TX Queue Priority
 */
static void stmmac_mac_config_tx_queues_prio(struct stmmac_priv *priv)
{
	u32 tx_queues_count = priv->plat->tx_queues_to_use;
	u32 queue;
	u32 prio;

	for (queue = 0; queue < tx_queues_count; queue++) {
		if (!priv->plat->tx_queues_cfg[queue].use_prio)
			continue;

		prio = priv->plat->tx_queues_cfg[queue].prio;
2348
		stmmac_tx_queue_prio(priv, priv->hw, prio, queue);
2349 2350 2351
	}
}

2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368
/**
 *  stmmac_mac_config_rx_queues_routing - Configure RX Queue Routing
 *  @priv: driver private structure
 *  Description: It is used for configuring the RX queue routing
 */
static void stmmac_mac_config_rx_queues_routing(struct stmmac_priv *priv)
{
	u32 rx_queues_count = priv->plat->rx_queues_to_use;
	u32 queue;
	u8 packet;

	for (queue = 0; queue < rx_queues_count; queue++) {
		/* no specific packet type routing specified for the queue */
		if (priv->plat->rx_queues_cfg[queue].pkt_route == 0x0)
			continue;

		packet = priv->plat->rx_queues_cfg[queue].pkt_route;
2369
		stmmac_rx_queue_routing(priv, priv->hw, packet, queue);
2370 2371 2372
	}
}

2373 2374 2375 2376 2377 2378 2379 2380 2381 2382
/**
 *  stmmac_mtl_configuration - Configure MTL
 *  @priv: driver private structure
 *  Description: It is used for configurring MTL
 */
static void stmmac_mtl_configuration(struct stmmac_priv *priv)
{
	u32 rx_queues_count = priv->plat->rx_queues_to_use;
	u32 tx_queues_count = priv->plat->tx_queues_to_use;

2383
	if (tx_queues_count > 1)
2384 2385
		stmmac_set_tx_queue_weight(priv);

2386
	/* Configure MTL RX algorithms */
2387 2388 2389
	if (rx_queues_count > 1)
		stmmac_prog_mtl_rx_algorithms(priv, priv->hw,
				priv->plat->rx_sched_algorithm);
2390 2391

	/* Configure MTL TX algorithms */
2392 2393 2394
	if (tx_queues_count > 1)
		stmmac_prog_mtl_tx_algorithms(priv, priv->hw,
				priv->plat->tx_sched_algorithm);
2395

2396
	/* Configure CBS in AVB TX queues */
2397
	if (tx_queues_count > 1)
2398 2399
		stmmac_configure_cbs(priv);

2400
	/* Map RX MTL to DMA channels */
2401
	stmmac_rx_queue_dma_chan_map(priv);
2402

2403
	/* Enable MAC RX Queues */
2404
	stmmac_mac_enable_rx_queues(priv);
2405

2406
	/* Set RX priorities */
2407
	if (rx_queues_count > 1)
2408 2409 2410
		stmmac_mac_config_rx_queues_prio(priv);

	/* Set TX priorities */
2411
	if (tx_queues_count > 1)
2412
		stmmac_mac_config_tx_queues_prio(priv);
2413 2414

	/* Set RX routing */
2415
	if (rx_queues_count > 1)
2416
		stmmac_mac_config_rx_queues_routing(priv);
2417 2418
}

2419 2420
static void stmmac_safety_feat_configuration(struct stmmac_priv *priv)
{
2421
	if (priv->dma_cap.asp) {
2422
		netdev_info(priv->dev, "Enabling Safety Features\n");
2423
		stmmac_safety_feat_config(priv, priv->ioaddr, priv->dma_cap.asp);
2424 2425 2426 2427 2428
	} else {
		netdev_info(priv->dev, "No Safety Features support found\n");
	}
}

2429
/**
2430
 * stmmac_hw_setup - setup mac in a usable state.
2431 2432
 *  @dev : pointer to the device structure.
 *  Description:
2433 2434 2435 2436
 *  this is the main function to setup the HW in a usable state because the
 *  dma engine is reset, the core registers are configured (e.g. AXI,
 *  Checksum features, timers). The DMA is ready to start receiving and
 *  transmitting.
2437 2438 2439 2440
 *  Return value:
 *  0 on success and an appropriate (-)ve integer as defined in errno.h
 *  file on failure.
 */
2441
static int stmmac_hw_setup(struct net_device *dev, bool init_ptp)
2442 2443
{
	struct stmmac_priv *priv = netdev_priv(dev);
2444
	u32 rx_cnt = priv->plat->rx_queues_to_use;
2445 2446
	u32 tx_cnt = priv->plat->tx_queues_to_use;
	u32 chan;
2447 2448 2449 2450 2451
	int ret;

	/* DMA initialization and SW reset */
	ret = stmmac_init_dma_engine(priv);
	if (ret < 0) {
2452 2453
		netdev_err(priv->dev, "%s: DMA engine initialization failed\n",
			   __func__);
2454 2455 2456 2457
		return ret;
	}

	/* Copy the MAC addr into the HW  */
2458
	stmmac_set_umac_addr(priv, priv->hw, dev->dev_addr, 0);
2459

2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472
	/* PS and related bits will be programmed according to the speed */
	if (priv->hw->pcs) {
		int speed = priv->plat->mac_port_sel_speed;

		if ((speed == SPEED_10) || (speed == SPEED_100) ||
		    (speed == SPEED_1000)) {
			priv->hw->ps = speed;
		} else {
			dev_warn(priv->device, "invalid port speed\n");
			priv->hw->ps = 0;
		}
	}

2473
	/* Initialize the MAC Core */
2474
	stmmac_core_init(priv, priv->hw, dev);
2475

2476
	/* Initialize MTL*/
2477
	stmmac_mtl_configuration(priv);
J
jpinto 已提交
2478

2479
	/* Initialize Safety Features */
2480
	stmmac_safety_feat_configuration(priv);
2481

2482
	ret = stmmac_rx_ipc(priv, priv->hw);
2483
	if (!ret) {
2484
		netdev_warn(priv->dev, "RX IPC Checksum Offload disabled\n");
2485
		priv->plat->rx_coe = STMMAC_RX_COE_NONE;
2486
		priv->hw->rx_csum = 0;
2487 2488
	}

2489
	/* Enable the MAC Rx/Tx */
2490
	stmmac_mac_set(priv, priv->ioaddr, true);
2491

2492 2493 2494
	/* Set the HW DMA mode and the COE */
	stmmac_dma_operation_mode(priv);

2495 2496
	stmmac_mmc_setup(priv);

2497
	if (init_ptp) {
2498 2499 2500 2501
		ret = clk_prepare_enable(priv->plat->clk_ptp_ref);
		if (ret < 0)
			netdev_warn(priv->dev, "failed to enable PTP reference clock: %d\n", ret);

2502
		ret = stmmac_init_ptp(priv);
2503 2504 2505 2506
		if (ret == -EOPNOTSUPP)
			netdev_warn(priv->dev, "PTP not supported by HW\n");
		else if (ret)
			netdev_warn(priv->dev, "PTP init failed\n");
2507
	}
2508

2509
#ifdef CONFIG_DEBUG_FS
2510 2511
	ret = stmmac_init_fs(dev);
	if (ret < 0)
2512 2513
		netdev_warn(priv->dev, "%s: failed debugFS registration\n",
			    __func__);
2514 2515
#endif
	/* Start the ball rolling... */
2516
	stmmac_start_all_dma(priv);
2517 2518 2519

	priv->tx_lpi_timer = STMMAC_DEFAULT_TWT_LS;

2520 2521 2522 2523
	if (priv->use_riwt) {
		ret = stmmac_rx_watchdog(priv, priv->ioaddr, MAX_DMA_RIWT, rx_cnt);
		if (!ret)
			priv->rx_riwt = MAX_DMA_RIWT;
2524 2525
	}

2526 2527
	if (priv->hw->pcs)
		stmmac_pcs_ctrl_ane(priv, priv->hw, 1, priv->hw->ps, 0);
2528

2529 2530 2531
	/* set TX and RX rings length */
	stmmac_set_rings_length(priv);

A
Alexandre TORGUE 已提交
2532
	/* Enable TSO */
2533 2534
	if (priv->tso) {
		for (chan = 0; chan < tx_cnt; chan++)
2535
			stmmac_enable_tso(priv, priv->ioaddr, 1, chan);
2536
	}
A
Alexandre TORGUE 已提交
2537

2538 2539 2540
	return 0;
}

2541 2542 2543 2544 2545 2546 2547
static void stmmac_hw_teardown(struct net_device *dev)
{
	struct stmmac_priv *priv = netdev_priv(dev);

	clk_disable_unprepare(priv->plat->clk_ptp_ref);
}

2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561
/**
 *  stmmac_open - open entry point of the driver
 *  @dev : pointer to the device structure.
 *  Description:
 *  This function is the open entry point of the driver.
 *  Return value:
 *  0 on success and an appropriate (-)ve integer as defined in errno.h
 *  file on failure.
 */
static int stmmac_open(struct net_device *dev)
{
	struct stmmac_priv *priv = netdev_priv(dev);
	int ret;

2562 2563
	stmmac_check_ether_addr(priv);

2564 2565 2566
	if (priv->hw->pcs != STMMAC_PCS_RGMII &&
	    priv->hw->pcs != STMMAC_PCS_TBI &&
	    priv->hw->pcs != STMMAC_PCS_RTBI) {
2567 2568
		ret = stmmac_init_phy(dev);
		if (ret) {
2569 2570 2571
			netdev_err(priv->dev,
				   "%s: Cannot attach to PHY (error: %d)\n",
				   __func__, ret);
2572
			return ret;
2573
		}
2574
	}
2575

2576 2577 2578 2579
	/* Extra statistics */
	memset(&priv->xstats, 0, sizeof(struct stmmac_extra_stats));
	priv->xstats.threshold = tc;

2580
	priv->dma_buf_sz = STMMAC_ALIGN(buf_sz);
2581
	priv->rx_copybreak = STMMAC_RX_COPYBREAK;
2582

2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596
	ret = alloc_dma_desc_resources(priv);
	if (ret < 0) {
		netdev_err(priv->dev, "%s: DMA descriptors allocation failed\n",
			   __func__);
		goto dma_desc_error;
	}

	ret = init_dma_desc_rings(dev, GFP_KERNEL);
	if (ret < 0) {
		netdev_err(priv->dev, "%s: DMA descriptors initialization failed\n",
			   __func__);
		goto init_error;
	}

2597
	ret = stmmac_hw_setup(dev, true);
2598
	if (ret < 0) {
2599
		netdev_err(priv->dev, "%s: Hw setup failed\n", __func__);
2600
		goto init_error;
2601 2602
	}

2603 2604
	stmmac_init_tx_coalesce(priv);

2605 2606
	if (dev->phydev)
		phy_start(dev->phydev);
2607

2608 2609
	/* Request the IRQ lines */
	ret = request_irq(dev->irq, stmmac_interrupt,
G
Giuseppe CAVALLARO 已提交
2610
			  IRQF_SHARED, dev->name, dev);
2611
	if (unlikely(ret < 0)) {
2612 2613 2614
		netdev_err(priv->dev,
			   "%s: ERROR: allocating the IRQ %d (error: %d)\n",
			   __func__, dev->irq, ret);
2615
		goto irq_error;
2616 2617
	}

2618 2619 2620 2621 2622
	/* Request the Wake IRQ in case of another line is used for WoL */
	if (priv->wol_irq != dev->irq) {
		ret = request_irq(priv->wol_irq, stmmac_interrupt,
				  IRQF_SHARED, dev->name, dev);
		if (unlikely(ret < 0)) {
2623 2624 2625
			netdev_err(priv->dev,
				   "%s: ERROR: allocating the WoL IRQ %d (%d)\n",
				   __func__, priv->wol_irq, ret);
2626
			goto wolirq_error;
2627 2628 2629
		}
	}

2630
	/* Request the IRQ lines */
2631
	if (priv->lpi_irq > 0) {
2632 2633 2634
		ret = request_irq(priv->lpi_irq, stmmac_interrupt, IRQF_SHARED,
				  dev->name, dev);
		if (unlikely(ret < 0)) {
2635 2636 2637
			netdev_err(priv->dev,
				   "%s: ERROR: allocating the LPI IRQ %d (%d)\n",
				   __func__, priv->lpi_irq, ret);
2638
			goto lpiirq_error;
2639 2640 2641
		}
	}

2642 2643
	stmmac_enable_all_queues(priv);
	stmmac_start_all_queues(priv);
2644

2645
	return 0;
2646

2647
lpiirq_error:
2648 2649
	if (priv->wol_irq != dev->irq)
		free_irq(priv->wol_irq, dev);
2650
wolirq_error:
2651
	free_irq(dev->irq, dev);
2652 2653 2654
irq_error:
	if (dev->phydev)
		phy_stop(dev->phydev);
2655

2656
	del_timer_sync(&priv->txtimer);
2657
	stmmac_hw_teardown(dev);
2658 2659
init_error:
	free_dma_desc_resources(priv);
2660
dma_desc_error:
2661 2662
	if (dev->phydev)
		phy_disconnect(dev->phydev);
2663

2664
	return ret;
2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676
}

/**
 *  stmmac_release - close entry point of the driver
 *  @dev : device pointer.
 *  Description:
 *  This is the stop entry point of the driver.
 */
static int stmmac_release(struct net_device *dev)
{
	struct stmmac_priv *priv = netdev_priv(dev);

2677 2678 2679
	if (priv->eee_enabled)
		del_timer_sync(&priv->eee_ctrl_timer);

2680
	/* Stop and disconnect the PHY */
2681 2682 2683
	if (dev->phydev) {
		phy_stop(dev->phydev);
		phy_disconnect(dev->phydev);
2684 2685
	}

2686
	stmmac_stop_all_queues(priv);
2687

2688
	stmmac_disable_all_queues(priv);
2689

2690 2691
	del_timer_sync(&priv->txtimer);

2692 2693
	/* Free the IRQ lines */
	free_irq(dev->irq, dev);
2694 2695
	if (priv->wol_irq != dev->irq)
		free_irq(priv->wol_irq, dev);
2696
	if (priv->lpi_irq > 0)
2697
		free_irq(priv->lpi_irq, dev);
2698 2699

	/* Stop TX/RX DMA and clear the descriptors */
2700
	stmmac_stop_all_dma(priv);
2701 2702 2703 2704

	/* Release and free the Rx/Tx resources */
	free_dma_desc_resources(priv);

2705
	/* Disable the MAC Rx/Tx */
2706
	stmmac_mac_set(priv, priv->ioaddr, false);
2707 2708 2709

	netif_carrier_off(dev);

2710
#ifdef CONFIG_DEBUG_FS
2711
	stmmac_exit_fs(dev);
2712 2713
#endif

2714 2715
	stmmac_release_ptp(priv);

2716 2717 2718
	return 0;
}

A
Alexandre TORGUE 已提交
2719 2720 2721 2722 2723 2724
/**
 *  stmmac_tso_allocator - close entry point of the driver
 *  @priv: driver private structure
 *  @des: buffer start address
 *  @total_len: total length to fill in descriptors
 *  @last_segmant: condition for the last descriptor
2725
 *  @queue: TX queue index
A
Alexandre TORGUE 已提交
2726 2727 2728 2729 2730
 *  Description:
 *  This function fills descriptor and request new descriptors according to
 *  buffer length to fill
 */
static void stmmac_tso_allocator(struct stmmac_priv *priv, unsigned int des,
2731
				 int total_len, bool last_segment, u32 queue)
A
Alexandre TORGUE 已提交
2732
{
2733
	struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
A
Alexandre TORGUE 已提交
2734
	struct dma_desc *desc;
2735
	u32 buff_size;
2736
	int tmp_len;
A
Alexandre TORGUE 已提交
2737 2738 2739 2740

	tmp_len = total_len;

	while (tmp_len > 0) {
2741
		tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, DMA_TX_SIZE);
2742
		WARN_ON(tx_q->tx_skbuff[tx_q->cur_tx]);
2743
		desc = tx_q->dma_tx + tx_q->cur_tx;
A
Alexandre TORGUE 已提交
2744

2745
		desc->des0 = cpu_to_le32(des + (total_len - tmp_len));
A
Alexandre TORGUE 已提交
2746 2747 2748
		buff_size = tmp_len >= TSO_MAX_BUFF_SIZE ?
			    TSO_MAX_BUFF_SIZE : tmp_len;

2749 2750 2751 2752
		stmmac_prepare_tso_tx_desc(priv, desc, 0, buff_size,
				0, 1,
				(last_segment) && (tmp_len <= TSO_MAX_BUFF_SIZE),
				0, 0);
A
Alexandre TORGUE 已提交
2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786

		tmp_len -= TSO_MAX_BUFF_SIZE;
	}
}

/**
 *  stmmac_tso_xmit - Tx entry point of the driver for oversized frames (TSO)
 *  @skb : the socket buffer
 *  @dev : device pointer
 *  Description: this is the transmit function that is called on TSO frames
 *  (support available on GMAC4 and newer chips).
 *  Diagram below show the ring programming in case of TSO frames:
 *
 *  First Descriptor
 *   --------
 *   | DES0 |---> buffer1 = L2/L3/L4 header
 *   | DES1 |---> TCP Payload (can continue on next descr...)
 *   | DES2 |---> buffer 1 and 2 len
 *   | DES3 |---> must set TSE, TCP hdr len-> [22:19]. TCP payload len [17:0]
 *   --------
 *	|
 *     ...
 *	|
 *   --------
 *   | DES0 | --| Split TCP Payload on Buffers 1 and 2
 *   | DES1 | --|
 *   | DES2 | --> buffer 1 and 2 len
 *   | DES3 |
 *   --------
 *
 * mss is fixed when enable tso, so w/o programming the TDES3 ctx field.
 */
static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev)
{
2787
	struct dma_desc *desc, *first, *mss_desc = NULL;
A
Alexandre TORGUE 已提交
2788 2789
	struct stmmac_priv *priv = netdev_priv(dev);
	int nfrags = skb_shinfo(skb)->nr_frags;
2790
	u32 queue = skb_get_queue_mapping(skb);
A
Alexandre TORGUE 已提交
2791
	unsigned int first_entry, des;
2792 2793 2794
	struct stmmac_tx_queue *tx_q;
	int tmp_pay_len = 0;
	u32 pay_len, mss;
A
Alexandre TORGUE 已提交
2795 2796 2797
	u8 proto_hdr_len;
	int i;

2798 2799
	tx_q = &priv->tx_queue[queue];

A
Alexandre TORGUE 已提交
2800 2801 2802 2803
	/* Compute header lengths */
	proto_hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);

	/* Desc availability based on threshold should be enough safe */
2804
	if (unlikely(stmmac_tx_avail(priv, queue) <
A
Alexandre TORGUE 已提交
2805
		(((skb->len - proto_hdr_len) / TSO_MAX_BUFF_SIZE + 1)))) {
2806 2807 2808
		if (!netif_tx_queue_stopped(netdev_get_tx_queue(dev, queue))) {
			netif_tx_stop_queue(netdev_get_tx_queue(priv->dev,
								queue));
A
Alexandre TORGUE 已提交
2809
			/* This is a hard error, log it. */
2810 2811 2812
			netdev_err(priv->dev,
				   "%s: Tx Ring full when queue awake\n",
				   __func__);
A
Alexandre TORGUE 已提交
2813 2814 2815 2816 2817 2818 2819 2820 2821
		}
		return NETDEV_TX_BUSY;
	}

	pay_len = skb_headlen(skb) - proto_hdr_len; /* no frags */

	mss = skb_shinfo(skb)->gso_size;

	/* set new MSS value if needed */
2822
	if (mss != tx_q->mss) {
2823
		mss_desc = tx_q->dma_tx + tx_q->cur_tx;
2824
		stmmac_set_mss(priv, mss_desc, mss);
2825
		tx_q->mss = mss;
2826
		tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, DMA_TX_SIZE);
2827
		WARN_ON(tx_q->tx_skbuff[tx_q->cur_tx]);
A
Alexandre TORGUE 已提交
2828 2829 2830 2831 2832 2833 2834 2835 2836
	}

	if (netif_msg_tx_queued(priv)) {
		pr_info("%s: tcphdrlen %d, hdr_len %d, pay_len %d, mss %d\n",
			__func__, tcp_hdrlen(skb), proto_hdr_len, pay_len, mss);
		pr_info("\tskb->len %d, skb->data_len %d\n", skb->len,
			skb->data_len);
	}

2837
	first_entry = tx_q->cur_tx;
2838
	WARN_ON(tx_q->tx_skbuff[first_entry]);
A
Alexandre TORGUE 已提交
2839

2840
	desc = tx_q->dma_tx + first_entry;
A
Alexandre TORGUE 已提交
2841 2842 2843 2844 2845 2846 2847 2848
	first = desc;

	/* first descriptor: fill Headers on Buf1 */
	des = dma_map_single(priv->device, skb->data, skb_headlen(skb),
			     DMA_TO_DEVICE);
	if (dma_mapping_error(priv->device, des))
		goto dma_map_err;

2849 2850
	tx_q->tx_skbuff_dma[first_entry].buf = des;
	tx_q->tx_skbuff_dma[first_entry].len = skb_headlen(skb);
A
Alexandre TORGUE 已提交
2851

2852
	first->des0 = cpu_to_le32(des);
A
Alexandre TORGUE 已提交
2853 2854 2855

	/* Fill start of payload in buff2 of first descriptor */
	if (pay_len)
2856
		first->des1 = cpu_to_le32(des + proto_hdr_len);
A
Alexandre TORGUE 已提交
2857 2858 2859 2860

	/* If needed take extra descriptors to fill the remaining payload */
	tmp_pay_len = pay_len - TSO_MAX_BUFF_SIZE;

2861
	stmmac_tso_allocator(priv, des, tmp_pay_len, (nfrags == 0), queue);
A
Alexandre TORGUE 已提交
2862 2863 2864 2865 2866 2867 2868 2869

	/* Prepare fragments */
	for (i = 0; i < nfrags; i++) {
		const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];

		des = skb_frag_dma_map(priv->device, frag, 0,
				       skb_frag_size(frag),
				       DMA_TO_DEVICE);
2870 2871
		if (dma_mapping_error(priv->device, des))
			goto dma_map_err;
A
Alexandre TORGUE 已提交
2872 2873

		stmmac_tso_allocator(priv, des, skb_frag_size(frag),
2874
				     (i == nfrags - 1), queue);
A
Alexandre TORGUE 已提交
2875

2876 2877 2878
		tx_q->tx_skbuff_dma[tx_q->cur_tx].buf = des;
		tx_q->tx_skbuff_dma[tx_q->cur_tx].len = skb_frag_size(frag);
		tx_q->tx_skbuff_dma[tx_q->cur_tx].map_as_page = true;
A
Alexandre TORGUE 已提交
2879 2880
	}

2881
	tx_q->tx_skbuff_dma[tx_q->cur_tx].last_segment = true;
A
Alexandre TORGUE 已提交
2882

2883 2884 2885 2886 2887 2888 2889 2890
	/* Only the last descriptor gets to point to the skb. */
	tx_q->tx_skbuff[tx_q->cur_tx] = skb;

	/* We've used all descriptors we need for this skb, however,
	 * advance cur_tx so that it references a fresh descriptor.
	 * ndo_start_xmit will fill this descriptor the next time it's
	 * called and stmmac_tx_clean may clean up to this descriptor.
	 */
2891
	tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, DMA_TX_SIZE);
A
Alexandre TORGUE 已提交
2892

2893
	if (unlikely(stmmac_tx_avail(priv, queue) <= (MAX_SKB_FRAGS + 1))) {
2894 2895
		netif_dbg(priv, hw, priv->dev, "%s: stop transmitted packets\n",
			  __func__);
2896
		netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, queue));
A
Alexandre TORGUE 已提交
2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909
	}

	dev->stats.tx_bytes += skb->len;
	priv->xstats.tx_tso_frames++;
	priv->xstats.tx_tso_nfrags += nfrags;

	/* Manage tx mitigation */
	priv->tx_count_frames += nfrags + 1;
	if (likely(priv->tx_coal_frames > priv->tx_count_frames)) {
		mod_timer(&priv->txtimer,
			  STMMAC_COAL_TIMER(priv->tx_coal_timer));
	} else {
		priv->tx_count_frames = 0;
2910
		stmmac_set_tx_ic(priv, desc);
A
Alexandre TORGUE 已提交
2911 2912 2913
		priv->xstats.tx_set_ic_bit++;
	}

2914
	skb_tx_timestamp(skb);
A
Alexandre TORGUE 已提交
2915 2916 2917 2918 2919

	if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
		     priv->hwts_tx_en)) {
		/* declare that device is doing timestamping */
		skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
2920
		stmmac_enable_tx_timestamp(priv, first);
A
Alexandre TORGUE 已提交
2921 2922 2923
	}

	/* Complete the first descriptor before granting the DMA */
2924
	stmmac_prepare_tso_tx_desc(priv, first, 1,
A
Alexandre TORGUE 已提交
2925 2926
			proto_hdr_len,
			pay_len,
2927
			1, tx_q->tx_skbuff_dma[first_entry].last_segment,
A
Alexandre TORGUE 已提交
2928 2929 2930
			tcp_hdrlen(skb) / 4, (skb->len - proto_hdr_len));

	/* If context desc is used to change MSS */
2931 2932 2933 2934 2935 2936 2937
	if (mss_desc) {
		/* Make sure that first descriptor has been completely
		 * written, including its own bit. This is because MSS is
		 * actually before first descriptor, so we need to make
		 * sure that MSS's own bit is the last thing written.
		 */
		dma_wmb();
2938
		stmmac_set_tx_owner(priv, mss_desc);
2939
	}
A
Alexandre TORGUE 已提交
2940 2941 2942 2943 2944

	/* The own bit must be the latest setting done when prepare the
	 * descriptor and then barrier is needed to make sure that
	 * all is coherent before granting the DMA engine.
	 */
2945
	wmb();
A
Alexandre TORGUE 已提交
2946 2947 2948

	if (netif_msg_pktdata(priv)) {
		pr_info("%s: curr=%d dirty=%d f=%d, e=%d, f_p=%p, nfrags %d\n",
2949 2950
			__func__, tx_q->cur_tx, tx_q->dirty_tx, first_entry,
			tx_q->cur_tx, first, nfrags);
A
Alexandre TORGUE 已提交
2951

2952
		stmmac_display_ring(priv, (void *)tx_q->dma_tx, DMA_TX_SIZE, 0);
A
Alexandre TORGUE 已提交
2953 2954 2955 2956 2957

		pr_info(">>> frame to be transmitted: ");
		print_pkt(skb->data, skb_headlen(skb));
	}

2958
	netdev_tx_sent_queue(netdev_get_tx_queue(dev, queue), skb->len);
A
Alexandre TORGUE 已提交
2959

2960
	stmmac_set_tx_tail_ptr(priv, priv->ioaddr, tx_q->tx_tail_addr, queue);
A
Alexandre TORGUE 已提交
2961 2962 2963 2964 2965 2966 2967 2968 2969 2970

	return NETDEV_TX_OK;

dma_map_err:
	dev_err(priv->device, "Tx dma map failed\n");
	dev_kfree_skb(skb);
	priv->dev->stats.tx_dropped++;
	return NETDEV_TX_OK;
}

2971
/**
2972
 *  stmmac_xmit - Tx entry point of the driver
2973 2974
 *  @skb : the socket buffer
 *  @dev : device pointer
2975 2976 2977
 *  Description : this is the tx entry point of the driver.
 *  It programs the chain or the ring and supports oversized frames
 *  and SG feature.
2978 2979 2980 2981
 */
static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
{
	struct stmmac_priv *priv = netdev_priv(dev);
2982
	unsigned int nopaged_len = skb_headlen(skb);
2983
	int i, csum_insertion = 0, is_jumbo = 0;
2984
	u32 queue = skb_get_queue_mapping(skb);
2985
	int nfrags = skb_shinfo(skb)->nr_frags;
2986 2987
	int entry;
	unsigned int first_entry;
2988
	struct dma_desc *desc, *first;
2989
	struct stmmac_tx_queue *tx_q;
2990
	unsigned int enh_desc;
A
Alexandre TORGUE 已提交
2991 2992
	unsigned int des;

2993 2994
	tx_q = &priv->tx_queue[queue];

A
Alexandre TORGUE 已提交
2995 2996
	/* Manage oversized TCP frames for GMAC4 device */
	if (skb_is_gso(skb) && priv->tso) {
N
Niklas Cassel 已提交
2997
		if (skb_shinfo(skb)->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))
A
Alexandre TORGUE 已提交
2998 2999
			return stmmac_tso_xmit(skb, dev);
	}
3000

3001
	if (unlikely(stmmac_tx_avail(priv, queue) < nfrags + 1)) {
3002 3003 3004
		if (!netif_tx_queue_stopped(netdev_get_tx_queue(dev, queue))) {
			netif_tx_stop_queue(netdev_get_tx_queue(priv->dev,
								queue));
3005
			/* This is a hard error, log it. */
3006 3007 3008
			netdev_err(priv->dev,
				   "%s: Tx Ring full when queue awake\n",
				   __func__);
3009 3010 3011 3012
		}
		return NETDEV_TX_BUSY;
	}

3013 3014 3015
	if (priv->tx_path_in_lpi_mode)
		stmmac_disable_eee_mode(priv);

3016
	entry = tx_q->cur_tx;
3017
	first_entry = entry;
3018
	WARN_ON(tx_q->tx_skbuff[first_entry]);
3019

3020
	csum_insertion = (skb->ip_summed == CHECKSUM_PARTIAL);
3021

3022
	if (likely(priv->extend_desc))
3023
		desc = (struct dma_desc *)(tx_q->dma_etx + entry);
3024
	else
3025
		desc = tx_q->dma_tx + entry;
3026

3027 3028
	first = desc;

3029
	enh_desc = priv->plat->enh_desc;
3030
	/* To program the descriptors according to the size of the frame */
G
Giuseppe CAVALLARO 已提交
3031
	if (enh_desc)
3032
		is_jumbo = stmmac_is_jumbo_frm(priv, skb->len, enh_desc);
G
Giuseppe CAVALLARO 已提交
3033

3034
	if (unlikely(is_jumbo)) {
3035
		entry = stmmac_jumbo_frm(priv, tx_q, skb, csum_insertion);
3036
		if (unlikely(entry < 0) && (entry != -EINVAL))
G
Giuseppe CAVALLARO 已提交
3037
			goto dma_map_err;
G
Giuseppe CAVALLARO 已提交
3038
	}
3039 3040

	for (i = 0; i < nfrags; i++) {
E
Eric Dumazet 已提交
3041 3042
		const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
		int len = skb_frag_size(frag);
3043
		bool last_segment = (i == (nfrags - 1));
3044

3045
		entry = STMMAC_GET_ENTRY(entry, DMA_TX_SIZE);
3046
		WARN_ON(tx_q->tx_skbuff[entry]);
3047

3048
		if (likely(priv->extend_desc))
3049
			desc = (struct dma_desc *)(tx_q->dma_etx + entry);
3050
		else
3051
			desc = tx_q->dma_tx + entry;
3052

A
Alexandre TORGUE 已提交
3053 3054 3055
		des = skb_frag_dma_map(priv->device, frag, 0, len,
				       DMA_TO_DEVICE);
		if (dma_mapping_error(priv->device, des))
G
Giuseppe CAVALLARO 已提交
3056 3057
			goto dma_map_err; /* should reuse desc w/o issues */

3058
		tx_q->tx_skbuff_dma[entry].buf = des;
3059 3060

		stmmac_set_desc_addr(priv, desc, des);
A
Alexandre TORGUE 已提交
3061

3062 3063 3064
		tx_q->tx_skbuff_dma[entry].map_as_page = true;
		tx_q->tx_skbuff_dma[entry].len = len;
		tx_q->tx_skbuff_dma[entry].last_segment = last_segment;
3065 3066

		/* Prepare the descriptor and set the own bit too */
3067 3068
		stmmac_prepare_tx_desc(priv, desc, 0, len, csum_insertion,
				priv->mode, 1, last_segment, skb->len);
3069 3070
	}

3071 3072
	/* Only the last descriptor gets to point to the skb. */
	tx_q->tx_skbuff[entry] = skb;
3073

3074 3075 3076 3077 3078 3079
	/* We've used all descriptors we need for this skb, however,
	 * advance cur_tx so that it references a fresh descriptor.
	 * ndo_start_xmit will fill this descriptor the next time it's
	 * called and stmmac_tx_clean may clean up to this descriptor.
	 */
	entry = STMMAC_GET_ENTRY(entry, DMA_TX_SIZE);
3080
	tx_q->cur_tx = entry;
3081 3082

	if (netif_msg_pktdata(priv)) {
3083 3084
		void *tx_head;

3085 3086
		netdev_dbg(priv->dev,
			   "%s: curr=%d dirty=%d f=%d, e=%d, first=%p, nfrags=%d",
3087
			   __func__, tx_q->cur_tx, tx_q->dirty_tx, first_entry,
3088
			   entry, first, nfrags);
3089

3090
		if (priv->extend_desc)
3091
			tx_head = (void *)tx_q->dma_etx;
3092
		else
3093
			tx_head = (void *)tx_q->dma_tx;
3094

3095
		stmmac_display_ring(priv, tx_head, DMA_TX_SIZE, false);
3096

3097
		netdev_dbg(priv->dev, ">>> frame to be transmitted: ");
3098 3099
		print_pkt(skb->data, skb->len);
	}
3100

3101
	if (unlikely(stmmac_tx_avail(priv, queue) <= (MAX_SKB_FRAGS + 1))) {
3102 3103
		netif_dbg(priv, hw, priv->dev, "%s: stop transmitted packets\n",
			  __func__);
3104
		netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, queue));
3105 3106 3107 3108
	}

	dev->stats.tx_bytes += skb->len;

3109 3110 3111 3112 3113 3114
	/* According to the coalesce parameter the IC bit for the latest
	 * segment is reset and the timer re-started to clean the tx status.
	 * This approach takes care about the fragments: desc is the first
	 * element in case of no SG.
	 */
	priv->tx_count_frames += nfrags + 1;
3115 3116
	if (likely(priv->tx_coal_frames > priv->tx_count_frames) &&
	    !priv->tx_timer_armed) {
3117 3118
		mod_timer(&priv->txtimer,
			  STMMAC_COAL_TIMER(priv->tx_coal_timer));
3119
		priv->tx_timer_armed = true;
3120 3121
	} else {
		priv->tx_count_frames = 0;
3122
		stmmac_set_tx_ic(priv, desc);
3123
		priv->xstats.tx_set_ic_bit++;
3124
		priv->tx_timer_armed = false;
3125 3126
	}

3127
	skb_tx_timestamp(skb);
3128

3129 3130 3131 3132 3133 3134 3135
	/* Ready to fill the first descriptor and set the OWN bit w/o any
	 * problems because all the descriptors are actually ready to be
	 * passed to the DMA engine.
	 */
	if (likely(!is_jumbo)) {
		bool last_segment = (nfrags == 0);

A
Alexandre TORGUE 已提交
3136 3137 3138
		des = dma_map_single(priv->device, skb->data,
				     nopaged_len, DMA_TO_DEVICE);
		if (dma_mapping_error(priv->device, des))
3139 3140
			goto dma_map_err;

3141
		tx_q->tx_skbuff_dma[first_entry].buf = des;
3142 3143

		stmmac_set_desc_addr(priv, first, des);
A
Alexandre TORGUE 已提交
3144

3145 3146
		tx_q->tx_skbuff_dma[first_entry].len = nopaged_len;
		tx_q->tx_skbuff_dma[first_entry].last_segment = last_segment;
3147 3148 3149 3150 3151

		if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
			     priv->hwts_tx_en)) {
			/* declare that device is doing timestamping */
			skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
3152
			stmmac_enable_tx_timestamp(priv, first);
3153 3154 3155
		}

		/* Prepare the first descriptor setting the OWN bit too */
3156 3157 3158
		stmmac_prepare_tx_desc(priv, first, 1, nopaged_len,
				csum_insertion, priv->mode, 1, last_segment,
				skb->len);
3159 3160 3161 3162 3163

		/* The own bit must be the latest setting done when prepare the
		 * descriptor and then barrier is needed to make sure that
		 * all is coherent before granting the DMA engine.
		 */
3164
		wmb();
3165 3166
	}

3167
	netdev_tx_sent_queue(netdev_get_tx_queue(dev, queue), skb->len);
A
Alexandre TORGUE 已提交
3168

3169 3170
	stmmac_enable_dma_transmission(priv, priv->ioaddr);
	stmmac_set_tx_tail_ptr(priv, priv->ioaddr, tx_q->tx_tail_addr, queue);
3171

G
Giuseppe CAVALLARO 已提交
3172
	return NETDEV_TX_OK;
3173

G
Giuseppe CAVALLARO 已提交
3174
dma_map_err:
3175
	netdev_err(priv->dev, "Tx DMA map failed\n");
G
Giuseppe CAVALLARO 已提交
3176 3177
	dev_kfree_skb(skb);
	priv->dev->stats.tx_dropped++;
3178 3179 3180
	return NETDEV_TX_OK;
}

3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197
static void stmmac_rx_vlan(struct net_device *dev, struct sk_buff *skb)
{
	struct ethhdr *ehdr;
	u16 vlanid;

	if ((dev->features & NETIF_F_HW_VLAN_CTAG_RX) ==
	    NETIF_F_HW_VLAN_CTAG_RX &&
	    !__vlan_get_tag(skb, &vlanid)) {
		/* pop the vlan tag */
		ehdr = (struct ethhdr *)skb->data;
		memmove(skb->data + VLAN_HLEN, ehdr, ETH_ALEN * 2);
		skb_pull(skb, VLAN_HLEN);
		__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlanid);
	}
}


3198
static inline int stmmac_rx_threshold_count(struct stmmac_rx_queue *rx_q)
3199
{
3200
	if (rx_q->rx_zeroc_thresh < STMMAC_RX_THRESH)
3201 3202 3203 3204 3205
		return 0;

	return 1;
}

3206
/**
3207
 * stmmac_rx_refill - refill used skb preallocated buffers
3208
 * @priv: driver private structure
3209
 * @queue: RX queue index
3210 3211 3212
 * Description : this is to reallocate the skb for the reception process
 * that is based on zero-copy.
 */
3213
static inline void stmmac_rx_refill(struct stmmac_priv *priv, u32 queue)
3214
{
3215 3216 3217 3218
	struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
	int dirty = stmmac_rx_dirty(priv, queue);
	unsigned int entry = rx_q->dirty_rx;

3219 3220
	int bfsize = priv->dma_buf_sz;

3221
	while (dirty-- > 0) {
3222 3223 3224
		struct dma_desc *p;

		if (priv->extend_desc)
3225
			p = (struct dma_desc *)(rx_q->dma_erx + entry);
3226
		else
3227
			p = rx_q->dma_rx + entry;
3228

3229
		if (likely(!rx_q->rx_skbuff[entry])) {
3230 3231
			struct sk_buff *skb;

E
Eric Dumazet 已提交
3232
			skb = netdev_alloc_skb_ip_align(priv->dev, bfsize);
3233 3234
			if (unlikely(!skb)) {
				/* so for a while no zero-copy! */
3235
				rx_q->rx_zeroc_thresh = STMMAC_RX_THRESH;
3236 3237 3238 3239
				if (unlikely(net_ratelimit()))
					dev_err(priv->device,
						"fail to alloc skb entry %d\n",
						entry);
3240
				break;
3241
			}
3242

3243 3244
			rx_q->rx_skbuff[entry] = skb;
			rx_q->rx_skbuff_dma[entry] =
3245 3246
			    dma_map_single(priv->device, skb->data, bfsize,
					   DMA_FROM_DEVICE);
G
Giuseppe CAVALLARO 已提交
3247
			if (dma_mapping_error(priv->device,
3248
					      rx_q->rx_skbuff_dma[entry])) {
3249
				netdev_err(priv->dev, "Rx DMA map failed\n");
G
Giuseppe CAVALLARO 已提交
3250 3251 3252
				dev_kfree_skb(skb);
				break;
			}
3253

3254
			stmmac_set_desc_addr(priv, p, rx_q->rx_skbuff_dma[entry]);
3255
			stmmac_refill_desc3(priv, rx_q, p);
3256

3257 3258
			if (rx_q->rx_zeroc_thresh > 0)
				rx_q->rx_zeroc_thresh--;
3259

3260 3261
			netif_dbg(priv, rx_status, priv->dev,
				  "refill entry #%d\n", entry);
3262
		}
P
Pavel Machek 已提交
3263
		dma_wmb();
A
Alexandre TORGUE 已提交
3264

3265
		stmmac_set_rx_owner(priv, p, priv->use_riwt);
A
Alexandre TORGUE 已提交
3266

P
Pavel Machek 已提交
3267
		dma_wmb();
3268 3269

		entry = STMMAC_GET_ENTRY(entry, DMA_RX_SIZE);
3270
	}
3271
	rx_q->dirty_rx = entry;
3272 3273
}

3274
/**
3275
 * stmmac_rx - manage the receive process
3276
 * @priv: driver private structure
3277 3278
 * @limit: napi bugget
 * @queue: RX queue index.
3279 3280 3281
 * Description :  this the function called by the napi poll method.
 * It gets all the frames inside the ring.
 */
3282
static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
3283
{
3284 3285 3286
	struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
	unsigned int entry = rx_q->cur_rx;
	int coe = priv->hw->rx_csum;
3287 3288 3289
	unsigned int next_entry;
	unsigned int count = 0;

3290
	if (netif_msg_rx_status(priv)) {
3291 3292
		void *rx_head;

3293
		netdev_dbg(priv->dev, "%s: descriptor ring:\n", __func__);
3294
		if (priv->extend_desc)
3295
			rx_head = (void *)rx_q->dma_erx;
3296
		else
3297
			rx_head = (void *)rx_q->dma_rx;
3298

3299
		stmmac_display_ring(priv, rx_head, DMA_RX_SIZE, true);
3300
	}
3301
	while (count < limit) {
3302
		int status;
3303
		struct dma_desc *p;
3304
		struct dma_desc *np;
3305

3306
		if (priv->extend_desc)
3307
			p = (struct dma_desc *)(rx_q->dma_erx + entry);
3308
		else
3309
			p = rx_q->dma_rx + entry;
3310

3311
		/* read the status of the incoming frame */
3312 3313
		status = stmmac_rx_status(priv, &priv->dev->stats,
				&priv->xstats, p);
3314 3315
		/* check if managed by the DMA otherwise go ahead */
		if (unlikely(status & dma_own))
3316 3317 3318 3319
			break;

		count++;

3320 3321
		rx_q->cur_rx = STMMAC_GET_ENTRY(rx_q->cur_rx, DMA_RX_SIZE);
		next_entry = rx_q->cur_rx;
3322

3323
		if (priv->extend_desc)
3324
			np = (struct dma_desc *)(rx_q->dma_erx + next_entry);
3325
		else
3326
			np = rx_q->dma_rx + next_entry;
3327 3328

		prefetch(np);
3329

3330 3331 3332
		if (priv->extend_desc)
			stmmac_rx_extended_status(priv, &priv->dev->stats,
					&priv->xstats, rx_q->dma_erx + entry);
3333
		if (unlikely(status == discard_frame)) {
3334
			priv->dev->stats.rx_errors++;
3335
			if (priv->hwts_rx_en && !priv->extend_desc) {
3336
				/* DESC2 & DESC3 will be overwritten by device
3337 3338 3339 3340
				 * with timestamp value, hence reinitialize
				 * them in stmmac_rx_refill() function so that
				 * device can reuse it.
				 */
3341
				dev_kfree_skb_any(rx_q->rx_skbuff[entry]);
3342
				rx_q->rx_skbuff[entry] = NULL;
3343
				dma_unmap_single(priv->device,
3344
						 rx_q->rx_skbuff_dma[entry],
G
Giuseppe CAVALLARO 已提交
3345 3346
						 priv->dma_buf_sz,
						 DMA_FROM_DEVICE);
3347 3348
			}
		} else {
3349
			struct sk_buff *skb;
3350
			int frame_len;
A
Alexandre TORGUE 已提交
3351 3352
			unsigned int des;

3353
			stmmac_get_desc_addr(priv, p, &des);
3354
			frame_len = stmmac_get_rx_frame_len(priv, p, coe);
G
Giuseppe CAVALLARO 已提交
3355

3356
			/*  If frame length is greater than skb buffer size
A
Alexandre TORGUE 已提交
3357 3358 3359
			 *  (preallocated during init) then the packet is
			 *  ignored
			 */
3360
			if (frame_len > priv->dma_buf_sz) {
3361 3362 3363
				netdev_err(priv->dev,
					   "len %d larger than size (%d)\n",
					   frame_len, priv->dma_buf_sz);
3364 3365 3366 3367
				priv->dev->stats.rx_length_errors++;
				break;
			}

3368
			/* ACS is set; GMAC core strips PAD/FCS for IEEE 802.3
G
Giuseppe CAVALLARO 已提交
3369
			 * Type frames (LLC/LLC-SNAP)
3370 3371 3372 3373
			 *
			 * llc_snap is never checked in GMAC >= 4, so this ACS
			 * feature is always disabled and packets need to be
			 * stripped manually.
G
Giuseppe CAVALLARO 已提交
3374
			 */
3375 3376
			if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00) ||
			    unlikely(status != llc_snap))
3377
				frame_len -= ETH_FCS_LEN;
3378

3379
			if (netif_msg_rx_status(priv)) {
3380 3381
				netdev_dbg(priv->dev, "\tdesc: %p [entry %d] buff=0x%x\n",
					   p, entry, des);
3382 3383
				netdev_dbg(priv->dev, "frame size %d, COE: %d\n",
					   frame_len, status);
3384
			}
3385

A
Alexandre TORGUE 已提交
3386 3387 3388 3389 3390 3391
			/* The zero-copy is always used for all the sizes
			 * in case of GMAC4 because it needs
			 * to refill the used descriptors, always.
			 */
			if (unlikely(!priv->plat->has_gmac4 &&
				     ((frame_len < priv->rx_copybreak) ||
3392
				     stmmac_rx_threshold_count(rx_q)))) {
3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403
				skb = netdev_alloc_skb_ip_align(priv->dev,
								frame_len);
				if (unlikely(!skb)) {
					if (net_ratelimit())
						dev_warn(priv->device,
							 "packet dropped\n");
					priv->dev->stats.rx_dropped++;
					break;
				}

				dma_sync_single_for_cpu(priv->device,
3404
							rx_q->rx_skbuff_dma
3405 3406 3407
							[entry], frame_len,
							DMA_FROM_DEVICE);
				skb_copy_to_linear_data(skb,
3408
							rx_q->
3409 3410 3411 3412 3413
							rx_skbuff[entry]->data,
							frame_len);

				skb_put(skb, frame_len);
				dma_sync_single_for_device(priv->device,
3414
							   rx_q->rx_skbuff_dma
3415 3416 3417
							   [entry], frame_len,
							   DMA_FROM_DEVICE);
			} else {
3418
				skb = rx_q->rx_skbuff[entry];
3419
				if (unlikely(!skb)) {
3420 3421 3422
					netdev_err(priv->dev,
						   "%s: Inconsistent Rx chain\n",
						   priv->dev->name);
3423 3424 3425 3426
					priv->dev->stats.rx_dropped++;
					break;
				}
				prefetch(skb->data - NET_IP_ALIGN);
3427 3428
				rx_q->rx_skbuff[entry] = NULL;
				rx_q->rx_zeroc_thresh++;
3429 3430 3431

				skb_put(skb, frame_len);
				dma_unmap_single(priv->device,
3432
						 rx_q->rx_skbuff_dma[entry],
3433 3434
						 priv->dma_buf_sz,
						 DMA_FROM_DEVICE);
3435 3436 3437
			}

			if (netif_msg_pktdata(priv)) {
3438 3439
				netdev_dbg(priv->dev, "frame received (%dbytes)",
					   frame_len);
3440 3441
				print_pkt(skb->data, frame_len);
			}
3442

3443 3444
			stmmac_get_rx_hwtstamp(priv, p, np, skb);

3445 3446
			stmmac_rx_vlan(priv->dev, skb);

3447 3448
			skb->protocol = eth_type_trans(skb, priv->dev);

G
Giuseppe CAVALLARO 已提交
3449
			if (unlikely(!coe))
3450
				skb_checksum_none_assert(skb);
3451
			else
3452
				skb->ip_summed = CHECKSUM_UNNECESSARY;
3453

3454
			napi_gro_receive(&rx_q->napi, skb);
3455 3456 3457 3458 3459 3460 3461

			priv->dev->stats.rx_packets++;
			priv->dev->stats.rx_bytes += frame_len;
		}
		entry = next_entry;
	}

3462
	stmmac_rx_refill(priv, queue);
3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474

	priv->xstats.rx_pkt_n += count;

	return count;
}

/**
 *  stmmac_poll - stmmac poll method (NAPI)
 *  @napi : pointer to the napi structure.
 *  @budget : maximum number of packets that the current CPU can receive from
 *	      all interfaces.
 *  Description :
3475
 *  To look at the incoming frames and clear the tx resources.
3476 3477 3478
 */
static int stmmac_poll(struct napi_struct *napi, int budget)
{
3479 3480 3481
	struct stmmac_rx_queue *rx_q =
		container_of(napi, struct stmmac_rx_queue, napi);
	struct stmmac_priv *priv = rx_q->priv_data;
3482
	u32 tx_count = priv->plat->tx_queues_to_use;
3483
	u32 chan = rx_q->queue_index;
3484
	int work_done = 0;
3485
	u32 queue;
3486

3487
	priv->xstats.napi_poll++;
3488 3489 3490 3491 3492

	/* check all the queues */
	for (queue = 0; queue < tx_count; queue++)
		stmmac_tx_clean(priv, queue);

3493
	work_done = stmmac_rx(priv, budget, rx_q->queue_index);
3494
	if (work_done < budget) {
3495
		napi_complete_done(napi, work_done);
3496
		stmmac_enable_dma_irq(priv, priv->ioaddr, chan);
3497 3498 3499 3500 3501 3502 3503 3504
	}
	return work_done;
}

/**
 *  stmmac_tx_timeout
 *  @dev : Pointer to net device structure
 *  Description: this function is called when a packet transmission fails to
3505
 *   complete within a reasonable time. The driver will mark the error in the
3506 3507 3508 3509 3510 3511 3512
 *   netdev structure and arrange for the device to be reset to a sane state
 *   in order to transmit a new packet.
 */
static void stmmac_tx_timeout(struct net_device *dev)
{
	struct stmmac_priv *priv = netdev_priv(dev);

3513
	stmmac_global_err(priv);
3514 3515 3516
}

/**
3517
 *  stmmac_set_rx_mode - entry point for multicast addressing
3518 3519 3520 3521 3522 3523 3524
 *  @dev : pointer to the device structure
 *  Description:
 *  This function is a driver entry point which gets called by the kernel
 *  whenever multicast addresses must be enabled/disabled.
 *  Return value:
 *  void.
 */
3525
static void stmmac_set_rx_mode(struct net_device *dev)
3526 3527 3528
{
	struct stmmac_priv *priv = netdev_priv(dev);

3529
	stmmac_set_filter(priv, priv->hw, dev);
3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544
}

/**
 *  stmmac_change_mtu - entry point to change MTU size for the device.
 *  @dev : device pointer.
 *  @new_mtu : the new MTU size for the device.
 *  Description: the Maximum Transfer Unit (MTU) is used by the network layer
 *  to drive packet transmission. Ethernet has an MTU of 1500 octets
 *  (ETH_DATA_LEN). This value can be changed with ifconfig.
 *  Return value:
 *  0 on success and an appropriate (-)ve integer as defined in errno.h
 *  file on failure.
 */
static int stmmac_change_mtu(struct net_device *dev, int new_mtu)
{
3545 3546
	struct stmmac_priv *priv = netdev_priv(dev);

3547
	if (netif_running(dev)) {
3548
		netdev_err(priv->dev, "must be stopped to change its MTU\n");
3549 3550 3551
		return -EBUSY;
	}

3552
	dev->mtu = new_mtu;
A
Alexandre TORGUE 已提交
3553

3554 3555 3556 3557 3558
	netdev_update_features(dev);

	return 0;
}

3559
static netdev_features_t stmmac_fix_features(struct net_device *dev,
G
Giuseppe CAVALLARO 已提交
3560
					     netdev_features_t features)
3561 3562 3563
{
	struct stmmac_priv *priv = netdev_priv(dev);

3564
	if (priv->plat->rx_coe == STMMAC_RX_COE_NONE)
3565
		features &= ~NETIF_F_RXCSUM;
3566

3567
	if (!priv->plat->tx_coe)
3568
		features &= ~NETIF_F_CSUM_MASK;
3569

3570 3571 3572
	/* Some GMAC devices have a bugged Jumbo frame support that
	 * needs to have the Tx COE disabled for oversized frames
	 * (due to limited buffer sizes). In this case we disable
3573
	 * the TX csum insertion in the TDES and not use SF.
G
Giuseppe CAVALLARO 已提交
3574
	 */
3575
	if (priv->plat->bugged_jumbo && (dev->mtu > ETH_DATA_LEN))
3576
		features &= ~NETIF_F_CSUM_MASK;
3577

A
Alexandre TORGUE 已提交
3578 3579 3580 3581 3582 3583 3584 3585
	/* Disable tso if asked by ethtool */
	if ((priv->plat->tso_en) && (priv->dma_cap.tsoen)) {
		if (features & NETIF_F_TSO)
			priv->tso = true;
		else
			priv->tso = false;
	}

3586
	return features;
3587 3588
}

3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601
static int stmmac_set_features(struct net_device *netdev,
			       netdev_features_t features)
{
	struct stmmac_priv *priv = netdev_priv(netdev);

	/* Keep the COE Type in case of csum is supporting */
	if (features & NETIF_F_RXCSUM)
		priv->hw->rx_csum = priv->plat->rx_coe;
	else
		priv->hw->rx_csum = 0;
	/* No check needed because rx_coe has been set before and it will be
	 * fixed in case of issue.
	 */
3602
	stmmac_rx_ipc(priv, priv->hw);
3603 3604 3605 3606

	return 0;
}

3607 3608 3609 3610 3611
/**
 *  stmmac_interrupt - main ISR
 *  @irq: interrupt number.
 *  @dev_id: to pass the net device pointer.
 *  Description: this is the main driver interrupt service routine.
3612 3613 3614 3615 3616
 *  It can call:
 *  o DMA service routine (to manage incoming frame reception and transmission
 *    status)
 *  o Core interrupts to manage: remote wake-up, management counter, LPI
 *    interrupts.
3617
 */
3618 3619 3620 3621
static irqreturn_t stmmac_interrupt(int irq, void *dev_id)
{
	struct net_device *dev = (struct net_device *)dev_id;
	struct stmmac_priv *priv = netdev_priv(dev);
3622 3623 3624 3625 3626 3627
	u32 rx_cnt = priv->plat->rx_queues_to_use;
	u32 tx_cnt = priv->plat->tx_queues_to_use;
	u32 queues_count;
	u32 queue;

	queues_count = (rx_cnt > tx_cnt) ? rx_cnt : tx_cnt;
3628

3629 3630 3631
	if (priv->irq_wake)
		pm_wakeup_event(priv->device, 0);

3632
	if (unlikely(!dev)) {
3633
		netdev_err(priv->dev, "%s: invalid dev pointer\n", __func__);
3634 3635 3636
		return IRQ_NONE;
	}

3637 3638 3639
	/* Check if adapter is up */
	if (test_bit(STMMAC_DOWN, &priv->state))
		return IRQ_HANDLED;
3640 3641 3642
	/* Check if a fatal error happened */
	if (stmmac_safety_feat_interrupt(priv))
		return IRQ_HANDLED;
3643

3644
	/* To handle GMAC own interrupts */
A
Alexandre TORGUE 已提交
3645
	if ((priv->plat->has_gmac) || (priv->plat->has_gmac4)) {
3646
		int status = stmmac_host_irq_status(priv, priv->hw, &priv->xstats);
3647
		int mtl_status;
3648

3649 3650
		if (unlikely(status)) {
			/* For LPI we need to save the tx status */
3651
			if (status & CORE_IRQ_TX_PATH_IN_LPI_MODE)
3652
				priv->tx_path_in_lpi_mode = true;
3653
			if (status & CORE_IRQ_TX_PATH_EXIT_LPI_MODE)
3654
				priv->tx_path_in_lpi_mode = false;
3655 3656
		}

3657 3658
		for (queue = 0; queue < queues_count; queue++) {
			struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
3659

3660 3661 3662 3663
			mtl_status = stmmac_host_mtl_irq_status(priv, priv->hw,
								queue);
			if (mtl_status != -EINVAL)
				status |= mtl_status;
3664

3665 3666 3667 3668
			if (status & CORE_IRQ_MTL_RX_OVERFLOW)
				stmmac_set_rx_tail_ptr(priv, priv->ioaddr,
						       rx_q->rx_tail_addr,
						       queue);
3669
		}
3670 3671

		/* PCS link status */
3672
		if (priv->hw->pcs) {
3673 3674 3675 3676 3677
			if (priv->xstats.pcs_link)
				netif_carrier_on(dev);
			else
				netif_carrier_off(dev);
		}
3678
	}
3679

3680
	/* To handle DMA interrupts */
3681
	stmmac_dma_interrupt(priv);
3682 3683 3684 3685 3686 3687

	return IRQ_HANDLED;
}

#ifdef CONFIG_NET_POLL_CONTROLLER
/* Polling receive - used by NETCONSOLE and other diagnostic tools
G
Giuseppe CAVALLARO 已提交
3688 3689
 * to allow network I/O with interrupts disabled.
 */
3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704
static void stmmac_poll_controller(struct net_device *dev)
{
	disable_irq(dev->irq);
	stmmac_interrupt(dev->irq, dev);
	enable_irq(dev->irq);
}
#endif

/**
 *  stmmac_ioctl - Entry point for the Ioctl
 *  @dev: Device pointer.
 *  @rq: An IOCTL specefic structure, that can contain a pointer to
 *  a proprietary structure used to pass information to the driver.
 *  @cmd: IOCTL command
 *  Description:
3705
 *  Currently it supports the phy_mii_ioctl(...) and HW time stamping.
3706 3707 3708
 */
static int stmmac_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
{
3709
	int ret = -EOPNOTSUPP;
3710 3711 3712 3713

	if (!netif_running(dev))
		return -EINVAL;

3714 3715 3716 3717
	switch (cmd) {
	case SIOCGMIIPHY:
	case SIOCGMIIREG:
	case SIOCSMIIREG:
3718
		if (!dev->phydev)
3719
			return -EINVAL;
3720
		ret = phy_mii_ioctl(dev->phydev, rq, cmd);
3721 3722 3723 3724 3725 3726 3727
		break;
	case SIOCSHWTSTAMP:
		ret = stmmac_hwtstamp_ioctl(dev, rq);
		break;
	default:
		break;
	}
3728

3729 3730 3731
	return ret;
}

3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783
static int stmmac_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
				    void *cb_priv)
{
	struct stmmac_priv *priv = cb_priv;
	int ret = -EOPNOTSUPP;

	stmmac_disable_all_queues(priv);

	switch (type) {
	case TC_SETUP_CLSU32:
		if (tc_cls_can_offload_and_chain0(priv->dev, type_data))
			ret = stmmac_tc_setup_cls_u32(priv, priv, type_data);
		break;
	default:
		break;
	}

	stmmac_enable_all_queues(priv);
	return ret;
}

static int stmmac_setup_tc_block(struct stmmac_priv *priv,
				 struct tc_block_offload *f)
{
	if (f->binder_type != TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS)
		return -EOPNOTSUPP;

	switch (f->command) {
	case TC_BLOCK_BIND:
		return tcf_block_cb_register(f->block, stmmac_setup_tc_block_cb,
				priv, priv);
	case TC_BLOCK_UNBIND:
		tcf_block_cb_unregister(f->block, stmmac_setup_tc_block_cb, priv);
		return 0;
	default:
		return -EOPNOTSUPP;
	}
}

static int stmmac_setup_tc(struct net_device *ndev, enum tc_setup_type type,
			   void *type_data)
{
	struct stmmac_priv *priv = netdev_priv(ndev);

	switch (type) {
	case TC_SETUP_BLOCK:
		return stmmac_setup_tc_block(priv, type_data);
	default:
		return -EOPNOTSUPP;
	}
}

3784 3785 3786 3787 3788 3789 3790 3791 3792
static int stmmac_set_mac_address(struct net_device *ndev, void *addr)
{
	struct stmmac_priv *priv = netdev_priv(ndev);
	int ret = 0;

	ret = eth_mac_addr(ndev, addr);
	if (ret)
		return ret;

3793
	stmmac_set_umac_addr(priv, priv->hw, ndev->dev_addr, 0);
3794 3795 3796 3797

	return ret;
}

3798
#ifdef CONFIG_DEBUG_FS
3799 3800
static struct dentry *stmmac_fs_dir;

3801
static void sysfs_display_ring(void *head, int size, int extend_desc,
G
Giuseppe CAVALLARO 已提交
3802
			       struct seq_file *seq)
3803 3804
{
	int i;
G
Giuseppe CAVALLARO 已提交
3805 3806
	struct dma_extended_desc *ep = (struct dma_extended_desc *)head;
	struct dma_desc *p = (struct dma_desc *)head;
3807

3808 3809 3810
	for (i = 0; i < size; i++) {
		if (extend_desc) {
			seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n",
G
Giuseppe CAVALLARO 已提交
3811
				   i, (unsigned int)virt_to_phys(ep),
3812 3813 3814 3815
				   le32_to_cpu(ep->basic.des0),
				   le32_to_cpu(ep->basic.des1),
				   le32_to_cpu(ep->basic.des2),
				   le32_to_cpu(ep->basic.des3));
3816 3817 3818
			ep++;
		} else {
			seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n",
3819
				   i, (unsigned int)virt_to_phys(p),
3820 3821
				   le32_to_cpu(p->des0), le32_to_cpu(p->des1),
				   le32_to_cpu(p->des2), le32_to_cpu(p->des3));
3822 3823
			p++;
		}
3824 3825
		seq_printf(seq, "\n");
	}
3826
}
3827

3828 3829 3830 3831
static int stmmac_sysfs_ring_read(struct seq_file *seq, void *v)
{
	struct net_device *dev = seq->private;
	struct stmmac_priv *priv = netdev_priv(dev);
3832
	u32 rx_count = priv->plat->rx_queues_to_use;
3833
	u32 tx_count = priv->plat->tx_queues_to_use;
3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850
	u32 queue;

	for (queue = 0; queue < rx_count; queue++) {
		struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];

		seq_printf(seq, "RX Queue %d:\n", queue);

		if (priv->extend_desc) {
			seq_printf(seq, "Extended descriptor ring:\n");
			sysfs_display_ring((void *)rx_q->dma_erx,
					   DMA_RX_SIZE, 1, seq);
		} else {
			seq_printf(seq, "Descriptor ring:\n");
			sysfs_display_ring((void *)rx_q->dma_rx,
					   DMA_RX_SIZE, 0, seq);
		}
	}
3851

3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865
	for (queue = 0; queue < tx_count; queue++) {
		struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];

		seq_printf(seq, "TX Queue %d:\n", queue);

		if (priv->extend_desc) {
			seq_printf(seq, "Extended descriptor ring:\n");
			sysfs_display_ring((void *)tx_q->dma_etx,
					   DMA_TX_SIZE, 1, seq);
		} else {
			seq_printf(seq, "Descriptor ring:\n");
			sysfs_display_ring((void *)tx_q->dma_tx,
					   DMA_TX_SIZE, 0, seq);
		}
3866 3867 3868 3869 3870 3871 3872 3873 3874 3875
	}

	return 0;
}

static int stmmac_sysfs_ring_open(struct inode *inode, struct file *file)
{
	return single_open(file, stmmac_sysfs_ring_read, inode->i_private);
}

3876 3877
/* Debugfs files, should appear in /sys/kernel/debug/stmmaceth/eth0 */

3878 3879 3880 3881 3882
static const struct file_operations stmmac_rings_status_fops = {
	.owner = THIS_MODULE,
	.open = stmmac_sysfs_ring_open,
	.read = seq_read,
	.llseek = seq_lseek,
3883
	.release = single_release,
3884 3885
};

3886 3887 3888 3889 3890
static int stmmac_sysfs_dma_cap_read(struct seq_file *seq, void *v)
{
	struct net_device *dev = seq->private;
	struct stmmac_priv *priv = netdev_priv(dev);

3891
	if (!priv->hw_cap_support) {
3892 3893 3894 3895 3896 3897 3898 3899
		seq_printf(seq, "DMA HW features not supported\n");
		return 0;
	}

	seq_printf(seq, "==============================\n");
	seq_printf(seq, "\tDMA HW features\n");
	seq_printf(seq, "==============================\n");

3900
	seq_printf(seq, "\t10/100 Mbps: %s\n",
3901
		   (priv->dma_cap.mbps_10_100) ? "Y" : "N");
3902
	seq_printf(seq, "\t1000 Mbps: %s\n",
3903
		   (priv->dma_cap.mbps_1000) ? "Y" : "N");
3904
	seq_printf(seq, "\tHalf duplex: %s\n",
3905 3906 3907 3908 3909
		   (priv->dma_cap.half_duplex) ? "Y" : "N");
	seq_printf(seq, "\tHash Filter: %s\n",
		   (priv->dma_cap.hash_filter) ? "Y" : "N");
	seq_printf(seq, "\tMultiple MAC address registers: %s\n",
		   (priv->dma_cap.multi_addr) ? "Y" : "N");
3910
	seq_printf(seq, "\tPCS (TBI/SGMII/RTBI PHY interfaces): %s\n",
3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921
		   (priv->dma_cap.pcs) ? "Y" : "N");
	seq_printf(seq, "\tSMA (MDIO) Interface: %s\n",
		   (priv->dma_cap.sma_mdio) ? "Y" : "N");
	seq_printf(seq, "\tPMT Remote wake up: %s\n",
		   (priv->dma_cap.pmt_remote_wake_up) ? "Y" : "N");
	seq_printf(seq, "\tPMT Magic Frame: %s\n",
		   (priv->dma_cap.pmt_magic_frame) ? "Y" : "N");
	seq_printf(seq, "\tRMON module: %s\n",
		   (priv->dma_cap.rmon) ? "Y" : "N");
	seq_printf(seq, "\tIEEE 1588-2002 Time Stamp: %s\n",
		   (priv->dma_cap.time_stamp) ? "Y" : "N");
3922
	seq_printf(seq, "\tIEEE 1588-2008 Advanced Time Stamp: %s\n",
3923
		   (priv->dma_cap.atime_stamp) ? "Y" : "N");
3924
	seq_printf(seq, "\t802.3az - Energy-Efficient Ethernet (EEE): %s\n",
3925 3926 3927 3928
		   (priv->dma_cap.eee) ? "Y" : "N");
	seq_printf(seq, "\tAV features: %s\n", (priv->dma_cap.av) ? "Y" : "N");
	seq_printf(seq, "\tChecksum Offload in TX: %s\n",
		   (priv->dma_cap.tx_coe) ? "Y" : "N");
A
Alexandre TORGUE 已提交
3929 3930 3931 3932 3933 3934 3935 3936 3937
	if (priv->synopsys_id >= DWMAC_CORE_4_00) {
		seq_printf(seq, "\tIP Checksum Offload in RX: %s\n",
			   (priv->dma_cap.rx_coe) ? "Y" : "N");
	} else {
		seq_printf(seq, "\tIP Checksum Offload (type1) in RX: %s\n",
			   (priv->dma_cap.rx_coe_type1) ? "Y" : "N");
		seq_printf(seq, "\tIP Checksum Offload (type2) in RX: %s\n",
			   (priv->dma_cap.rx_coe_type2) ? "Y" : "N");
	}
3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959
	seq_printf(seq, "\tRXFIFO > 2048bytes: %s\n",
		   (priv->dma_cap.rxfifo_over_2048) ? "Y" : "N");
	seq_printf(seq, "\tNumber of Additional RX channel: %d\n",
		   priv->dma_cap.number_rx_channel);
	seq_printf(seq, "\tNumber of Additional TX channel: %d\n",
		   priv->dma_cap.number_tx_channel);
	seq_printf(seq, "\tEnhanced descriptors: %s\n",
		   (priv->dma_cap.enh_desc) ? "Y" : "N");

	return 0;
}

static int stmmac_sysfs_dma_cap_open(struct inode *inode, struct file *file)
{
	return single_open(file, stmmac_sysfs_dma_cap_read, inode->i_private);
}

static const struct file_operations stmmac_dma_cap_fops = {
	.owner = THIS_MODULE,
	.open = stmmac_sysfs_dma_cap_open,
	.read = seq_read,
	.llseek = seq_lseek,
3960
	.release = single_release,
3961 3962
};

3963 3964
static int stmmac_init_fs(struct net_device *dev)
{
3965 3966 3967 3968
	struct stmmac_priv *priv = netdev_priv(dev);

	/* Create per netdev entries */
	priv->dbgfs_dir = debugfs_create_dir(dev->name, stmmac_fs_dir);
3969

3970
	if (!priv->dbgfs_dir || IS_ERR(priv->dbgfs_dir)) {
3971
		netdev_err(priv->dev, "ERROR failed to create debugfs directory\n");
3972 3973 3974 3975 3976

		return -ENOMEM;
	}

	/* Entry to report DMA RX/TX rings */
3977
	priv->dbgfs_rings_status =
3978
		debugfs_create_file("descriptors_status", 0444,
3979 3980
				    priv->dbgfs_dir, dev,
				    &stmmac_rings_status_fops);
3981

3982
	if (!priv->dbgfs_rings_status || IS_ERR(priv->dbgfs_rings_status)) {
3983
		netdev_err(priv->dev, "ERROR creating stmmac ring debugfs file\n");
3984
		debugfs_remove_recursive(priv->dbgfs_dir);
3985 3986 3987 3988

		return -ENOMEM;
	}

3989
	/* Entry to report the DMA HW features */
3990 3991 3992
	priv->dbgfs_dma_cap = debugfs_create_file("dma_cap", 0444,
						  priv->dbgfs_dir,
						  dev, &stmmac_dma_cap_fops);
3993

3994
	if (!priv->dbgfs_dma_cap || IS_ERR(priv->dbgfs_dma_cap)) {
3995
		netdev_err(priv->dev, "ERROR creating stmmac MMC debugfs file\n");
3996
		debugfs_remove_recursive(priv->dbgfs_dir);
3997 3998 3999 4000

		return -ENOMEM;
	}

4001 4002 4003
	return 0;
}

4004
static void stmmac_exit_fs(struct net_device *dev)
4005
{
4006 4007 4008
	struct stmmac_priv *priv = netdev_priv(dev);

	debugfs_remove_recursive(priv->dbgfs_dir);
4009
}
4010
#endif /* CONFIG_DEBUG_FS */
4011

4012 4013 4014 4015 4016
static const struct net_device_ops stmmac_netdev_ops = {
	.ndo_open = stmmac_open,
	.ndo_start_xmit = stmmac_xmit,
	.ndo_stop = stmmac_release,
	.ndo_change_mtu = stmmac_change_mtu,
4017
	.ndo_fix_features = stmmac_fix_features,
4018
	.ndo_set_features = stmmac_set_features,
4019
	.ndo_set_rx_mode = stmmac_set_rx_mode,
4020 4021
	.ndo_tx_timeout = stmmac_tx_timeout,
	.ndo_do_ioctl = stmmac_ioctl,
4022
	.ndo_setup_tc = stmmac_setup_tc,
4023 4024 4025
#ifdef CONFIG_NET_POLL_CONTROLLER
	.ndo_poll_controller = stmmac_poll_controller,
#endif
4026
	.ndo_set_mac_address = stmmac_set_mac_address,
4027 4028
};

4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059
static void stmmac_reset_subtask(struct stmmac_priv *priv)
{
	if (!test_and_clear_bit(STMMAC_RESET_REQUESTED, &priv->state))
		return;
	if (test_bit(STMMAC_DOWN, &priv->state))
		return;

	netdev_err(priv->dev, "Reset adapter.\n");

	rtnl_lock();
	netif_trans_update(priv->dev);
	while (test_and_set_bit(STMMAC_RESETING, &priv->state))
		usleep_range(1000, 2000);

	set_bit(STMMAC_DOWN, &priv->state);
	dev_close(priv->dev);
	dev_open(priv->dev);
	clear_bit(STMMAC_DOWN, &priv->state);
	clear_bit(STMMAC_RESETING, &priv->state);
	rtnl_unlock();
}

static void stmmac_service_task(struct work_struct *work)
{
	struct stmmac_priv *priv = container_of(work, struct stmmac_priv,
			service_task);

	stmmac_reset_subtask(priv);
	clear_bit(STMMAC_SERVICE_SCHED, &priv->state);
}

4060 4061
/**
 *  stmmac_hw_init - Init the MAC device
4062
 *  @priv: driver private structure
4063 4064 4065 4066
 *  Description: this function is to configure the MAC device according to
 *  some platform parameters or the HW capability register. It prepares the
 *  driver to use either ring or chain modes and to setup either enhanced or
 *  normal descriptors.
4067 4068 4069
 */
static int stmmac_hw_init(struct stmmac_priv *priv)
{
4070
	int ret;
4071

4072 4073 4074
	/* dwmac-sun8i only work in chain mode */
	if (priv->plat->has_sun8i)
		chain_mode = 1;
4075
	priv->chain_mode = chain_mode;
4076

4077 4078 4079 4080
	/* Initialize HW Interface */
	ret = stmmac_hwif_init(priv);
	if (ret)
		return ret;
4081

4082 4083 4084
	/* Get the HW capability (new GMAC newer than 3.50a) */
	priv->hw_cap_support = stmmac_get_hw_features(priv);
	if (priv->hw_cap_support) {
4085
		dev_info(priv->device, "DMA HW capability register supported\n");
4086 4087 4088 4089 4090 4091 4092 4093

		/* We can override some gmac/dma configuration fields: e.g.
		 * enh_desc, tx_coe (e.g. that are passed through the
		 * platform) with the values from the HW capability
		 * register (if supported).
		 */
		priv->plat->enh_desc = priv->dma_cap.enh_desc;
		priv->plat->pmt = priv->dma_cap.pmt_remote_wake_up;
4094
		priv->hw->pmt = priv->plat->pmt;
4095

4096 4097 4098 4099 4100 4101
		/* TXCOE doesn't work in thresh DMA mode */
		if (priv->plat->force_thresh_dma_mode)
			priv->plat->tx_coe = 0;
		else
			priv->plat->tx_coe = priv->dma_cap.tx_coe;

A
Alexandre TORGUE 已提交
4102 4103
		/* In case of GMAC4 rx_coe is from HW cap register. */
		priv->plat->rx_coe = priv->dma_cap.rx_coe;
4104 4105 4106 4107 4108 4109

		if (priv->dma_cap.rx_coe_type2)
			priv->plat->rx_coe = STMMAC_RX_COE_TYPE2;
		else if (priv->dma_cap.rx_coe_type1)
			priv->plat->rx_coe = STMMAC_RX_COE_TYPE1;

4110 4111 4112
	} else {
		dev_info(priv->device, "No HW DMA feature register supported\n");
	}
4113

4114 4115
	if (priv->plat->rx_coe) {
		priv->hw->rx_csum = priv->plat->rx_coe;
4116
		dev_info(priv->device, "RX Checksum Offload Engine supported\n");
A
Alexandre TORGUE 已提交
4117
		if (priv->synopsys_id < DWMAC_CORE_4_00)
4118
			dev_info(priv->device, "COE Type %d\n", priv->hw->rx_csum);
4119
	}
4120
	if (priv->plat->tx_coe)
4121
		dev_info(priv->device, "TX Checksum insertion supported\n");
4122 4123

	if (priv->plat->pmt) {
4124
		dev_info(priv->device, "Wake-Up On Lan supported\n");
4125 4126 4127
		device_set_wakeup_capable(priv->device, 1);
	}

A
Alexandre TORGUE 已提交
4128
	if (priv->dma_cap.tsoen)
4129
		dev_info(priv->device, "TSO supported\n");
A
Alexandre TORGUE 已提交
4130

4131
	return 0;
4132 4133
}

4134
/**
4135 4136
 * stmmac_dvr_probe
 * @device: device pointer
4137
 * @plat_dat: platform data pointer
4138
 * @res: stmmac resource pointer
4139 4140
 * Description: this is the main probe function used to
 * call the alloc_etherdev, allocate the priv structure.
4141
 * Return:
4142
 * returns 0 on success, otherwise errno.
4143
 */
4144 4145 4146
int stmmac_dvr_probe(struct device *device,
		     struct plat_stmmacenet_data *plat_dat,
		     struct stmmac_resources *res)
4147
{
4148 4149
	struct net_device *ndev = NULL;
	struct stmmac_priv *priv;
4150 4151
	int ret = 0;
	u32 queue;
4152

4153 4154 4155
	ndev = alloc_etherdev_mqs(sizeof(struct stmmac_priv),
				  MTL_MAX_TX_QUEUES,
				  MTL_MAX_RX_QUEUES);
4156
	if (!ndev)
4157
		return -ENOMEM;
4158 4159 4160 4161 4162 4163

	SET_NETDEV_DEV(ndev, device);

	priv = netdev_priv(ndev);
	priv->device = device;
	priv->dev = ndev;
4164

4165
	stmmac_set_ethtool_ops(ndev);
4166 4167
	priv->pause = pause;
	priv->plat = plat_dat;
4168 4169 4170 4171 4172 4173 4174 4175 4176
	priv->ioaddr = res->addr;
	priv->dev->base_addr = (unsigned long)res->addr;

	priv->dev->irq = res->irq;
	priv->wol_irq = res->wol_irq;
	priv->lpi_irq = res->lpi_irq;

	if (res->mac)
		memcpy(priv->dev->dev_addr, res->mac, ETH_ALEN);
4177

4178
	dev_set_drvdata(device, priv->dev);
4179

4180 4181
	/* Verify driver arguments */
	stmmac_verify_args();
4182

4183 4184 4185 4186 4187 4188 4189 4190 4191
	/* Allocate workqueue */
	priv->wq = create_singlethread_workqueue("stmmac_wq");
	if (!priv->wq) {
		dev_err(priv->device, "failed to create workqueue\n");
		goto error_wq;
	}

	INIT_WORK(&priv->service_task, stmmac_service_task);

4192
	/* Override with kernel parameters if supplied XXX CRS XXX
G
Giuseppe CAVALLARO 已提交
4193 4194
	 * this needs to have multiple instances
	 */
4195 4196 4197
	if ((phyaddr >= 0) && (phyaddr <= 31))
		priv->plat->phy_addr = phyaddr;

4198 4199
	if (priv->plat->stmmac_rst) {
		ret = reset_control_assert(priv->plat->stmmac_rst);
4200
		reset_control_deassert(priv->plat->stmmac_rst);
4201 4202 4203 4204 4205 4206
		/* Some reset controllers have only reset callback instead of
		 * assert + deassert callbacks pair.
		 */
		if (ret == -ENOTSUPP)
			reset_control_reset(priv->plat->stmmac_rst);
	}
4207

4208
	/* Init MAC and get the capabilities */
4209 4210
	ret = stmmac_hw_init(priv);
	if (ret)
4211
		goto error_hw_init;
4212

4213
	/* Configure real RX and TX queues */
4214 4215
	netif_set_real_num_rx_queues(ndev, priv->plat->rx_queues_to_use);
	netif_set_real_num_tx_queues(ndev, priv->plat->tx_queues_to_use);
4216

4217
	ndev->netdev_ops = &stmmac_netdev_ops;
4218

4219 4220
	ndev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
			    NETIF_F_RXCSUM;
A
Alexandre TORGUE 已提交
4221

4222 4223 4224 4225 4226
	ret = stmmac_tc_init(priv, priv);
	if (!ret) {
		ndev->hw_features |= NETIF_F_HW_TC;
	}

A
Alexandre TORGUE 已提交
4227
	if ((priv->plat->tso_en) && (priv->dma_cap.tsoen)) {
N
Niklas Cassel 已提交
4228
		ndev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6;
A
Alexandre TORGUE 已提交
4229
		priv->tso = true;
4230
		dev_info(priv->device, "TSO feature enabled\n");
A
Alexandre TORGUE 已提交
4231
	}
4232 4233
	ndev->features |= ndev->hw_features | NETIF_F_HIGHDMA;
	ndev->watchdog_timeo = msecs_to_jiffies(watchdog);
4234 4235
#ifdef STMMAC_VLAN_TAG_USED
	/* Both mac100 and gmac support receive VLAN tag detection */
4236
	ndev->features |= NETIF_F_HW_VLAN_CTAG_RX;
4237 4238 4239
#endif
	priv->msg_enable = netif_msg_init(debug, default_msg_level);

4240 4241 4242 4243 4244 4245
	/* MTU range: 46 - hw-specific max */
	ndev->min_mtu = ETH_ZLEN - ETH_HLEN;
	if ((priv->plat->enh_desc) || (priv->synopsys_id >= DWMAC_CORE_4_00))
		ndev->max_mtu = JUMBO_LEN;
	else
		ndev->max_mtu = SKB_MAX_HEAD(NET_SKB_PAD + NET_IP_ALIGN);
4246 4247 4248 4249 4250
	/* Will not overwrite ndev->max_mtu if plat->maxmtu > ndev->max_mtu
	 * as well as plat->maxmtu < ndev->min_mtu which is a invalid range.
	 */
	if ((priv->plat->maxmtu < ndev->max_mtu) &&
	    (priv->plat->maxmtu >= ndev->min_mtu))
4251
		ndev->max_mtu = priv->plat->maxmtu;
4252
	else if (priv->plat->maxmtu < ndev->min_mtu)
4253 4254 4255
		dev_warn(priv->device,
			 "%s: warning: maxmtu having invalid value (%d)\n",
			 __func__, priv->plat->maxmtu);
4256

4257 4258 4259
	if (flow_ctrl)
		priv->flow_ctrl = FLOW_AUTO;	/* RX/TX pause on */

4260 4261 4262 4263 4264 4265 4266
	/* Rx Watchdog is available in the COREs newer than the 3.40.
	 * In some case, for example on bugged HW this feature
	 * has to be disable and this can be done by passing the
	 * riwt_off field from the platform.
	 */
	if ((priv->synopsys_id >= DWMAC_CORE_3_50) && (!priv->plat->riwt_off)) {
		priv->use_riwt = 1;
4267 4268
		dev_info(priv->device,
			 "Enable RX Mitigation via HW Watchdog Timer\n");
4269 4270
	}

4271 4272 4273 4274 4275 4276
	for (queue = 0; queue < priv->plat->rx_queues_to_use; queue++) {
		struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];

		netif_napi_add(ndev, &rx_q->napi, stmmac_poll,
			       (8 * priv->plat->rx_queues_to_use));
	}
4277

4278 4279
	spin_lock_init(&priv->lock);

4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290
	/* If a specific clk_csr value is passed from the platform
	 * this means that the CSR Clock Range selection cannot be
	 * changed at run-time and it is fixed. Viceversa the driver'll try to
	 * set the MDC clock dynamically according to the csr actual
	 * clock input.
	 */
	if (!priv->plat->clk_csr)
		stmmac_clk_csr_set(priv);
	else
		priv->clk_csr = priv->plat->clk_csr;

4291 4292
	stmmac_check_pcs_mode(priv);

4293 4294 4295
	if (priv->hw->pcs != STMMAC_PCS_RGMII  &&
	    priv->hw->pcs != STMMAC_PCS_TBI &&
	    priv->hw->pcs != STMMAC_PCS_RTBI) {
4296 4297 4298
		/* MDIO bus Registration */
		ret = stmmac_mdio_register(ndev);
		if (ret < 0) {
4299 4300 4301
			dev_err(priv->device,
				"%s: MDIO bus (id: %d) registration failed",
				__func__, priv->plat->bus_id);
4302 4303
			goto error_mdio_register;
		}
4304 4305
	}

4306
	ret = register_netdev(ndev);
4307
	if (ret) {
4308 4309
		dev_err(priv->device, "%s: ERROR %i registering the device\n",
			__func__, ret);
4310 4311
		goto error_netdev_register;
	}
4312 4313

	return ret;
4314

4315
error_netdev_register:
4316 4317 4318 4319
	if (priv->hw->pcs != STMMAC_PCS_RGMII &&
	    priv->hw->pcs != STMMAC_PCS_TBI &&
	    priv->hw->pcs != STMMAC_PCS_RTBI)
		stmmac_mdio_unregister(ndev);
4320
error_mdio_register:
4321 4322 4323 4324 4325
	for (queue = 0; queue < priv->plat->rx_queues_to_use; queue++) {
		struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];

		netif_napi_del(&rx_q->napi);
	}
4326
error_hw_init:
4327 4328
	destroy_workqueue(priv->wq);
error_wq:
4329
	free_netdev(ndev);
4330

4331
	return ret;
4332
}
4333
EXPORT_SYMBOL_GPL(stmmac_dvr_probe);
4334 4335 4336

/**
 * stmmac_dvr_remove
4337
 * @dev: device pointer
4338
 * Description: this function resets the TX/RX processes, disables the MAC RX/TX
4339
 * changes the link status, releases the DMA descriptor rings.
4340
 */
4341
int stmmac_dvr_remove(struct device *dev)
4342
{
4343
	struct net_device *ndev = dev_get_drvdata(dev);
4344
	struct stmmac_priv *priv = netdev_priv(ndev);
4345

4346
	netdev_info(priv->dev, "%s: removing driver", __func__);
4347

4348
	stmmac_stop_all_dma(priv);
4349

4350
	stmmac_mac_set(priv, priv->ioaddr, false);
4351 4352
	netif_carrier_off(ndev);
	unregister_netdev(ndev);
4353 4354 4355 4356
	if (priv->plat->stmmac_rst)
		reset_control_assert(priv->plat->stmmac_rst);
	clk_disable_unprepare(priv->plat->pclk);
	clk_disable_unprepare(priv->plat->stmmac_clk);
4357 4358 4359
	if (priv->hw->pcs != STMMAC_PCS_RGMII &&
	    priv->hw->pcs != STMMAC_PCS_TBI &&
	    priv->hw->pcs != STMMAC_PCS_RTBI)
4360
		stmmac_mdio_unregister(ndev);
4361
	destroy_workqueue(priv->wq);
4362 4363 4364 4365
	free_netdev(ndev);

	return 0;
}
4366
EXPORT_SYMBOL_GPL(stmmac_dvr_remove);
4367

4368 4369
/**
 * stmmac_suspend - suspend callback
4370
 * @dev: device pointer
4371 4372 4373 4374
 * Description: this is the function to suspend the device and it is called
 * by the platform driver to stop the network queue, release the resources,
 * program the PMT register (for WoL), clean and release driver resources.
 */
4375
int stmmac_suspend(struct device *dev)
4376
{
4377
	struct net_device *ndev = dev_get_drvdata(dev);
4378
	struct stmmac_priv *priv = netdev_priv(ndev);
4379
	unsigned long flags;
4380

4381
	if (!ndev || !netif_running(ndev))
4382 4383
		return 0;

4384 4385
	if (ndev->phydev)
		phy_stop(ndev->phydev);
4386

4387
	spin_lock_irqsave(&priv->lock, flags);
4388

4389
	netif_device_detach(ndev);
4390
	stmmac_stop_all_queues(priv);
4391

4392
	stmmac_disable_all_queues(priv);
4393 4394

	/* Stop TX/RX DMA */
4395
	stmmac_stop_all_dma(priv);
4396

4397
	/* Enable Power down mode by programming the PMT regs */
4398
	if (device_may_wakeup(priv->device)) {
4399
		stmmac_pmt(priv, priv->hw, priv->wolopts);
4400 4401
		priv->irq_wake = 1;
	} else {
4402
		stmmac_mac_set(priv, priv->ioaddr, false);
4403
		pinctrl_pm_select_sleep_state(priv->device);
4404
		/* Disable clock in case of PWM is off */
4405 4406
		clk_disable(priv->plat->pclk);
		clk_disable(priv->plat->stmmac_clk);
4407
	}
4408
	spin_unlock_irqrestore(&priv->lock, flags);
4409

4410
	priv->oldlink = false;
4411 4412
	priv->speed = SPEED_UNKNOWN;
	priv->oldduplex = DUPLEX_UNKNOWN;
4413 4414
	return 0;
}
4415
EXPORT_SYMBOL_GPL(stmmac_suspend);
4416

4417 4418 4419 4420 4421 4422 4423
/**
 * stmmac_reset_queues_param - reset queue parameters
 * @dev: device pointer
 */
static void stmmac_reset_queues_param(struct stmmac_priv *priv)
{
	u32 rx_cnt = priv->plat->rx_queues_to_use;
4424
	u32 tx_cnt = priv->plat->tx_queues_to_use;
4425 4426 4427 4428 4429 4430 4431 4432 4433
	u32 queue;

	for (queue = 0; queue < rx_cnt; queue++) {
		struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];

		rx_q->cur_rx = 0;
		rx_q->dirty_rx = 0;
	}

4434 4435 4436 4437 4438
	for (queue = 0; queue < tx_cnt; queue++) {
		struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];

		tx_q->cur_tx = 0;
		tx_q->dirty_tx = 0;
4439
		tx_q->mss = 0;
4440
	}
4441 4442
}

4443 4444
/**
 * stmmac_resume - resume callback
4445
 * @dev: device pointer
4446 4447 4448
 * Description: when resume this function is invoked to setup the DMA and CORE
 * in a usable state.
 */
4449
int stmmac_resume(struct device *dev)
4450
{
4451
	struct net_device *ndev = dev_get_drvdata(dev);
4452
	struct stmmac_priv *priv = netdev_priv(ndev);
4453
	unsigned long flags;
4454

4455
	if (!netif_running(ndev))
4456 4457 4458 4459 4460 4461
		return 0;

	/* Power Down bit, into the PM register, is cleared
	 * automatically as soon as a magic packet or a Wake-up frame
	 * is received. Anyway, it's better to manually clear
	 * this bit because it can generate problems while resuming
G
Giuseppe CAVALLARO 已提交
4462 4463
	 * from another devices (e.g. serial console).
	 */
4464
	if (device_may_wakeup(priv->device)) {
4465
		spin_lock_irqsave(&priv->lock, flags);
4466
		stmmac_pmt(priv, priv->hw, 0);
4467
		spin_unlock_irqrestore(&priv->lock, flags);
4468
		priv->irq_wake = 0;
4469
	} else {
4470
		pinctrl_pm_select_default_state(priv->device);
4471
		/* enable the clk previously disabled */
4472 4473
		clk_enable(priv->plat->stmmac_clk);
		clk_enable(priv->plat->pclk);
4474 4475 4476 4477
		/* reset the phy so that it's ready */
		if (priv->mii)
			stmmac_mdio_reset(priv->mii);
	}
4478

4479
	netif_device_attach(ndev);
4480

4481 4482
	spin_lock_irqsave(&priv->lock, flags);

4483 4484
	stmmac_reset_queues_param(priv);

4485 4486
	stmmac_clear_descriptors(priv);

4487
	stmmac_hw_setup(ndev, false);
4488
	stmmac_init_tx_coalesce(priv);
4489
	stmmac_set_rx_mode(ndev);
4490

4491
	stmmac_enable_all_queues(priv);
4492

4493
	stmmac_start_all_queues(priv);
4494

4495
	spin_unlock_irqrestore(&priv->lock, flags);
4496

4497 4498
	if (ndev->phydev)
		phy_start(ndev->phydev);
4499

4500 4501
	return 0;
}
4502
EXPORT_SYMBOL_GPL(stmmac_resume);
4503

4504 4505 4506 4507 4508 4509 4510 4511
#ifndef MODULE
static int __init stmmac_cmdline_opt(char *str)
{
	char *opt;

	if (!str || !*str)
		return -EINVAL;
	while ((opt = strsep(&str, ",")) != NULL) {
4512
		if (!strncmp(opt, "debug:", 6)) {
4513
			if (kstrtoint(opt + 6, 0, &debug))
4514 4515
				goto err;
		} else if (!strncmp(opt, "phyaddr:", 8)) {
4516
			if (kstrtoint(opt + 8, 0, &phyaddr))
4517 4518
				goto err;
		} else if (!strncmp(opt, "buf_sz:", 7)) {
4519
			if (kstrtoint(opt + 7, 0, &buf_sz))
4520 4521
				goto err;
		} else if (!strncmp(opt, "tc:", 3)) {
4522
			if (kstrtoint(opt + 3, 0, &tc))
4523 4524
				goto err;
		} else if (!strncmp(opt, "watchdog:", 9)) {
4525
			if (kstrtoint(opt + 9, 0, &watchdog))
4526 4527
				goto err;
		} else if (!strncmp(opt, "flow_ctrl:", 10)) {
4528
			if (kstrtoint(opt + 10, 0, &flow_ctrl))
4529 4530
				goto err;
		} else if (!strncmp(opt, "pause:", 6)) {
4531
			if (kstrtoint(opt + 6, 0, &pause))
4532
				goto err;
4533
		} else if (!strncmp(opt, "eee_timer:", 10)) {
4534 4535
			if (kstrtoint(opt + 10, 0, &eee_timer))
				goto err;
4536 4537 4538
		} else if (!strncmp(opt, "chain_mode:", 11)) {
			if (kstrtoint(opt + 11, 0, &chain_mode))
				goto err;
4539
		}
4540 4541
	}
	return 0;
4542 4543 4544 4545

err:
	pr_err("%s: ERROR broken module parameter conversion", __func__);
	return -EINVAL;
4546 4547 4548
}

__setup("stmmaceth=", stmmac_cmdline_opt);
G
Giuseppe CAVALLARO 已提交
4549
#endif /* MODULE */
4550

4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579
static int __init stmmac_init(void)
{
#ifdef CONFIG_DEBUG_FS
	/* Create debugfs main directory if it doesn't exist yet */
	if (!stmmac_fs_dir) {
		stmmac_fs_dir = debugfs_create_dir(STMMAC_RESOURCE_NAME, NULL);

		if (!stmmac_fs_dir || IS_ERR(stmmac_fs_dir)) {
			pr_err("ERROR %s, debugfs create directory failed\n",
			       STMMAC_RESOURCE_NAME);

			return -ENOMEM;
		}
	}
#endif

	return 0;
}

static void __exit stmmac_exit(void)
{
#ifdef CONFIG_DEBUG_FS
	debugfs_remove_recursive(stmmac_fs_dir);
#endif
}

module_init(stmmac_init)
module_exit(stmmac_exit)

4580 4581 4582
MODULE_DESCRIPTION("STMMAC 10/100/1000 Ethernet device driver");
MODULE_AUTHOR("Giuseppe Cavallaro <peppe.cavallaro@st.com>");
MODULE_LICENSE("GPL");