8089 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*******************************************************************************3 This is the driver for the ST MAC 10/100/1000 on-chip Ethernet controllers.4 ST Ethernet IPs are built around a Synopsys IP Core.5 6 Copyright(C) 2007-2011 STMicroelectronics Ltd7 8 9 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>10 11 Documentation available at:12 http://www.stlinux.com13 Support available at:14 https://bugzilla.stlinux.com/15*******************************************************************************/16 17#include <linux/clk.h>18#include <linux/kernel.h>19#include <linux/interrupt.h>20#include <linux/ip.h>21#include <linux/tcp.h>22#include <linux/skbuff.h>23#include <linux/ethtool.h>24#include <linux/if_ether.h>25#include <linux/crc32.h>26#include <linux/mii.h>27#include <linux/if.h>28#include <linux/if_vlan.h>29#include <linux/dma-mapping.h>30#include <linux/slab.h>31#include <linux/pm_runtime.h>32#include <linux/prefetch.h>33#include <linux/pinctrl/consumer.h>34#ifdef CONFIG_DEBUG_FS35#include <linux/debugfs.h>36#include <linux/seq_file.h>37#endif /* CONFIG_DEBUG_FS */38#include <linux/net_tstamp.h>39#include <linux/phylink.h>40#include <linux/udp.h>41#include <linux/bpf_trace.h>42#include <net/page_pool/helpers.h>43#include <net/pkt_cls.h>44#include <net/xdp_sock_drv.h>45#include "stmmac_ptp.h"46#include "stmmac.h"47#include "stmmac_xdp.h"48#include <linux/reset.h>49#include <linux/of_mdio.h>50#include "dwmac1000.h"51#include "dwxgmac2.h"52#include "hwif.h"53 54/* As long as the interface is active, we keep the timestamping counter enabled55 * with fine resolution and binary rollover. This avoid non-monotonic behavior56 * (clock jumps) when changing timestamping settings at runtime.57 */58#define STMMAC_HWTS_ACTIVE (PTP_TCR_TSENA | PTP_TCR_TSCFUPDT | \59 PTP_TCR_TSCTRLSSR)60 61#define STMMAC_ALIGN(x) ALIGN(ALIGN(x, SMP_CACHE_BYTES), 16)62#define TSO_MAX_BUFF_SIZE (SZ_16K - 1)63 64/* Module parameters */65#define TX_TIMEO 500066static int watchdog = TX_TIMEO;67module_param(watchdog, int, 0644);68MODULE_PARM_DESC(watchdog, "Transmit timeout in milliseconds (default 5s)");69 70static int debug = -1;71module_param(debug, int, 0644);72MODULE_PARM_DESC(debug, "Message Level (-1: default, 0: no output, 16: all)");73 74static int phyaddr = -1;75module_param(phyaddr, int, 0444);76MODULE_PARM_DESC(phyaddr, "Physical device address");77 78#define STMMAC_TX_THRESH(x) ((x)->dma_conf.dma_tx_size / 4)79#define STMMAC_RX_THRESH(x) ((x)->dma_conf.dma_rx_size / 4)80 81/* Limit to make sure XDP TX and slow path can coexist */82#define STMMAC_XSK_TX_BUDGET_MAX 25683#define STMMAC_TX_XSK_AVAIL 1684#define STMMAC_RX_FILL_BATCH 1685 86#define STMMAC_XDP_PASS 087#define STMMAC_XDP_CONSUMED BIT(0)88#define STMMAC_XDP_TX BIT(1)89#define STMMAC_XDP_REDIRECT BIT(2)90 91static int flow_ctrl = FLOW_AUTO;92module_param(flow_ctrl, int, 0644);93MODULE_PARM_DESC(flow_ctrl, "Flow control ability [on/off]");94 95static int pause = PAUSE_TIME;96module_param(pause, int, 0644);97MODULE_PARM_DESC(pause, "Flow Control Pause Time");98 99#define TC_DEFAULT 64100static int tc = TC_DEFAULT;101module_param(tc, int, 0644);102MODULE_PARM_DESC(tc, "DMA threshold control value");103 104#define DEFAULT_BUFSIZE 1536105static int buf_sz = DEFAULT_BUFSIZE;106module_param(buf_sz, int, 0644);107MODULE_PARM_DESC(buf_sz, "DMA buffer size");108 109#define STMMAC_RX_COPYBREAK 256110 111static const u32 default_msg_level = (NETIF_MSG_DRV | NETIF_MSG_PROBE |112 NETIF_MSG_LINK | NETIF_MSG_IFUP |113 NETIF_MSG_IFDOWN | NETIF_MSG_TIMER);114 115#define STMMAC_DEFAULT_LPI_TIMER 1000116static int eee_timer = STMMAC_DEFAULT_LPI_TIMER;117module_param(eee_timer, int, 0644);118MODULE_PARM_DESC(eee_timer, "LPI tx expiration time in msec");119#define STMMAC_LPI_T(x) (jiffies + usecs_to_jiffies(x))120 121/* By default the driver will use the ring mode to manage tx and rx descriptors,122 * but allow user to force to use the chain instead of the ring123 */124static unsigned int chain_mode;125module_param(chain_mode, int, 0444);126MODULE_PARM_DESC(chain_mode, "To use chain instead of ring mode");127 128static irqreturn_t stmmac_interrupt(int irq, void *dev_id);129/* For MSI interrupts handling */130static irqreturn_t stmmac_mac_interrupt(int irq, void *dev_id);131static irqreturn_t stmmac_safety_interrupt(int irq, void *dev_id);132static irqreturn_t stmmac_msi_intr_tx(int irq, void *data);133static irqreturn_t stmmac_msi_intr_rx(int irq, void *data);134static void stmmac_reset_rx_queue(struct stmmac_priv *priv, u32 queue);135static void stmmac_reset_tx_queue(struct stmmac_priv *priv, u32 queue);136static void stmmac_reset_queues_param(struct stmmac_priv *priv);137static void stmmac_tx_timer_arm(struct stmmac_priv *priv, u32 queue);138static void stmmac_flush_tx_descriptors(struct stmmac_priv *priv, int queue);139static void stmmac_set_dma_operation_mode(struct stmmac_priv *priv, u32 txmode,140 u32 rxmode, u32 chan);141 142#ifdef CONFIG_DEBUG_FS143static const struct net_device_ops stmmac_netdev_ops;144static void stmmac_init_fs(struct net_device *dev);145static void stmmac_exit_fs(struct net_device *dev);146#endif147 148#define STMMAC_COAL_TIMER(x) (ns_to_ktime((x) * NSEC_PER_USEC))149 150int stmmac_bus_clks_config(struct stmmac_priv *priv, bool enabled)151{152 int ret = 0;153 154 if (enabled) {155 ret = clk_prepare_enable(priv->plat->stmmac_clk);156 if (ret)157 return ret;158 ret = clk_prepare_enable(priv->plat->pclk);159 if (ret) {160 clk_disable_unprepare(priv->plat->stmmac_clk);161 return ret;162 }163 if (priv->plat->clks_config) {164 ret = priv->plat->clks_config(priv->plat->bsp_priv, enabled);165 if (ret) {166 clk_disable_unprepare(priv->plat->stmmac_clk);167 clk_disable_unprepare(priv->plat->pclk);168 return ret;169 }170 }171 } else {172 clk_disable_unprepare(priv->plat->stmmac_clk);173 clk_disable_unprepare(priv->plat->pclk);174 if (priv->plat->clks_config)175 priv->plat->clks_config(priv->plat->bsp_priv, enabled);176 }177 178 return ret;179}180EXPORT_SYMBOL_GPL(stmmac_bus_clks_config);181 182/**183 * stmmac_verify_args - verify the driver parameters.184 * Description: it checks the driver parameters and set a default in case of185 * errors.186 */187static void stmmac_verify_args(void)188{189 if (unlikely(watchdog < 0))190 watchdog = TX_TIMEO;191 if (unlikely((buf_sz < DEFAULT_BUFSIZE) || (buf_sz > BUF_SIZE_16KiB)))192 buf_sz = DEFAULT_BUFSIZE;193 if (unlikely(flow_ctrl > 1))194 flow_ctrl = FLOW_AUTO;195 else if (likely(flow_ctrl < 0))196 flow_ctrl = FLOW_OFF;197 if (unlikely((pause < 0) || (pause > 0xffff)))198 pause = PAUSE_TIME;199 if (eee_timer < 0)200 eee_timer = STMMAC_DEFAULT_LPI_TIMER;201}202 203static void __stmmac_disable_all_queues(struct stmmac_priv *priv)204{205 u32 rx_queues_cnt = priv->plat->rx_queues_to_use;206 u32 tx_queues_cnt = priv->plat->tx_queues_to_use;207 u32 maxq = max(rx_queues_cnt, tx_queues_cnt);208 u32 queue;209 210 for (queue = 0; queue < maxq; queue++) {211 struct stmmac_channel *ch = &priv->channel[queue];212 213 if (stmmac_xdp_is_enabled(priv) &&214 test_bit(queue, priv->af_xdp_zc_qps)) {215 napi_disable(&ch->rxtx_napi);216 continue;217 }218 219 if (queue < rx_queues_cnt)220 napi_disable(&ch->rx_napi);221 if (queue < tx_queues_cnt)222 napi_disable(&ch->tx_napi);223 }224}225 226/**227 * stmmac_disable_all_queues - Disable all queues228 * @priv: driver private structure229 */230static void stmmac_disable_all_queues(struct stmmac_priv *priv)231{232 u32 rx_queues_cnt = priv->plat->rx_queues_to_use;233 struct stmmac_rx_queue *rx_q;234 u32 queue;235 236 /* synchronize_rcu() needed for pending XDP buffers to drain */237 for (queue = 0; queue < rx_queues_cnt; queue++) {238 rx_q = &priv->dma_conf.rx_queue[queue];239 if (rx_q->xsk_pool) {240 synchronize_rcu();241 break;242 }243 }244 245 __stmmac_disable_all_queues(priv);246}247 248/**249 * stmmac_enable_all_queues - Enable all queues250 * @priv: driver private structure251 */252static void stmmac_enable_all_queues(struct stmmac_priv *priv)253{254 u32 rx_queues_cnt = priv->plat->rx_queues_to_use;255 u32 tx_queues_cnt = priv->plat->tx_queues_to_use;256 u32 maxq = max(rx_queues_cnt, tx_queues_cnt);257 u32 queue;258 259 for (queue = 0; queue < maxq; queue++) {260 struct stmmac_channel *ch = &priv->channel[queue];261 262 if (stmmac_xdp_is_enabled(priv) &&263 test_bit(queue, priv->af_xdp_zc_qps)) {264 napi_enable(&ch->rxtx_napi);265 continue;266 }267 268 if (queue < rx_queues_cnt)269 napi_enable(&ch->rx_napi);270 if (queue < tx_queues_cnt)271 napi_enable(&ch->tx_napi);272 }273}274 275static void stmmac_service_event_schedule(struct stmmac_priv *priv)276{277 if (!test_bit(STMMAC_DOWN, &priv->state) &&278 !test_and_set_bit(STMMAC_SERVICE_SCHED, &priv->state))279 queue_work(priv->wq, &priv->service_task);280}281 282static void stmmac_global_err(struct stmmac_priv *priv)283{284 netif_carrier_off(priv->dev);285 set_bit(STMMAC_RESET_REQUESTED, &priv->state);286 stmmac_service_event_schedule(priv);287}288 289/**290 * stmmac_clk_csr_set - dynamically set the MDC clock291 * @priv: driver private structure292 * Description: this is to dynamically set the MDC clock according to the csr293 * clock input.294 * Note:295 * If a specific clk_csr value is passed from the platform296 * this means that the CSR Clock Range selection cannot be297 * changed at run-time and it is fixed (as reported in the driver298 * documentation). Viceversa the driver will try to set the MDC299 * clock dynamically according to the actual clock input.300 */301static void stmmac_clk_csr_set(struct stmmac_priv *priv)302{303 u32 clk_rate;304 305 clk_rate = clk_get_rate(priv->plat->stmmac_clk);306 307 /* Platform provided default clk_csr would be assumed valid308 * for all other cases except for the below mentioned ones.309 * For values higher than the IEEE 802.3 specified frequency310 * we can not estimate the proper divider as it is not known311 * the frequency of clk_csr_i. So we do not change the default312 * divider.313 */314 if (!(priv->clk_csr & MAC_CSR_H_FRQ_MASK)) {315 if (clk_rate < CSR_F_35M)316 priv->clk_csr = STMMAC_CSR_20_35M;317 else if ((clk_rate >= CSR_F_35M) && (clk_rate < CSR_F_60M))318 priv->clk_csr = STMMAC_CSR_35_60M;319 else if ((clk_rate >= CSR_F_60M) && (clk_rate < CSR_F_100M))320 priv->clk_csr = STMMAC_CSR_60_100M;321 else if ((clk_rate >= CSR_F_100M) && (clk_rate < CSR_F_150M))322 priv->clk_csr = STMMAC_CSR_100_150M;323 else if ((clk_rate >= CSR_F_150M) && (clk_rate < CSR_F_250M))324 priv->clk_csr = STMMAC_CSR_150_250M;325 else if ((clk_rate >= CSR_F_250M) && (clk_rate <= CSR_F_300M))326 priv->clk_csr = STMMAC_CSR_250_300M;327 }328 329 if (priv->plat->flags & STMMAC_FLAG_HAS_SUN8I) {330 if (clk_rate > 160000000)331 priv->clk_csr = 0x03;332 else if (clk_rate > 80000000)333 priv->clk_csr = 0x02;334 else if (clk_rate > 40000000)335 priv->clk_csr = 0x01;336 else337 priv->clk_csr = 0;338 }339 340 if (priv->plat->has_xgmac) {341 if (clk_rate > 400000000)342 priv->clk_csr = 0x5;343 else if (clk_rate > 350000000)344 priv->clk_csr = 0x4;345 else if (clk_rate > 300000000)346 priv->clk_csr = 0x3;347 else if (clk_rate > 250000000)348 priv->clk_csr = 0x2;349 else if (clk_rate > 150000000)350 priv->clk_csr = 0x1;351 else352 priv->clk_csr = 0x0;353 }354}355 356static void print_pkt(unsigned char *buf, int len)357{358 pr_debug("len = %d byte, buf addr: 0x%p\n", len, buf);359 print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, buf, len);360}361 362static inline u32 stmmac_tx_avail(struct stmmac_priv *priv, u32 queue)363{364 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];365 u32 avail;366 367 if (tx_q->dirty_tx > tx_q->cur_tx)368 avail = tx_q->dirty_tx - tx_q->cur_tx - 1;369 else370 avail = priv->dma_conf.dma_tx_size - tx_q->cur_tx + tx_q->dirty_tx - 1;371 372 return avail;373}374 375/**376 * stmmac_rx_dirty - Get RX queue dirty377 * @priv: driver private structure378 * @queue: RX queue index379 */380static inline u32 stmmac_rx_dirty(struct stmmac_priv *priv, u32 queue)381{382 struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];383 u32 dirty;384 385 if (rx_q->dirty_rx <= rx_q->cur_rx)386 dirty = rx_q->cur_rx - rx_q->dirty_rx;387 else388 dirty = priv->dma_conf.dma_rx_size - rx_q->dirty_rx + rx_q->cur_rx;389 390 return dirty;391}392 393static void stmmac_lpi_entry_timer_config(struct stmmac_priv *priv, bool en)394{395 int tx_lpi_timer;396 397 /* Clear/set the SW EEE timer flag based on LPI ET enablement */398 priv->eee_sw_timer_en = en ? 0 : 1;399 tx_lpi_timer = en ? priv->tx_lpi_timer : 0;400 stmmac_set_eee_lpi_timer(priv, priv->hw, tx_lpi_timer);401}402 403/**404 * stmmac_enable_eee_mode - check and enter in LPI mode405 * @priv: driver private structure406 * Description: this function is to verify and enter in LPI mode in case of407 * EEE.408 */409static int stmmac_enable_eee_mode(struct stmmac_priv *priv)410{411 u32 tx_cnt = priv->plat->tx_queues_to_use;412 u32 queue;413 414 /* check if all TX queues have the work finished */415 for (queue = 0; queue < tx_cnt; queue++) {416 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];417 418 if (tx_q->dirty_tx != tx_q->cur_tx)419 return -EBUSY; /* still unfinished work */420 }421 422 /* Check and enter in LPI mode */423 if (!priv->tx_path_in_lpi_mode)424 stmmac_set_eee_mode(priv, priv->hw,425 priv->plat->flags & STMMAC_FLAG_EN_TX_LPI_CLOCKGATING);426 return 0;427}428 429/**430 * stmmac_disable_eee_mode - disable and exit from LPI mode431 * @priv: driver private structure432 * Description: this function is to exit and disable EEE in case of433 * LPI state is true. This is called by the xmit.434 */435void stmmac_disable_eee_mode(struct stmmac_priv *priv)436{437 if (!priv->eee_sw_timer_en) {438 stmmac_lpi_entry_timer_config(priv, 0);439 return;440 }441 442 stmmac_reset_eee_mode(priv, priv->hw);443 del_timer_sync(&priv->eee_ctrl_timer);444 priv->tx_path_in_lpi_mode = false;445}446 447/**448 * stmmac_eee_ctrl_timer - EEE TX SW timer.449 * @t: timer_list struct containing private info450 * Description:451 * if there is no data transfer and if we are not in LPI state,452 * then MAC Transmitter can be moved to LPI state.453 */454static void stmmac_eee_ctrl_timer(struct timer_list *t)455{456 struct stmmac_priv *priv = from_timer(priv, t, eee_ctrl_timer);457 458 if (stmmac_enable_eee_mode(priv))459 mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(priv->tx_lpi_timer));460}461 462/**463 * stmmac_eee_init - init EEE464 * @priv: driver private structure465 * Description:466 * if the GMAC supports the EEE (from the HW cap reg) and the phy device467 * can also manage EEE, this function enable the LPI state and start related468 * timer.469 */470bool stmmac_eee_init(struct stmmac_priv *priv)471{472 int eee_tw_timer = priv->eee_tw_timer;473 474 /* Check if MAC core supports the EEE feature. */475 if (!priv->dma_cap.eee)476 return false;477 478 mutex_lock(&priv->lock);479 480 /* Check if it needs to be deactivated */481 if (!priv->eee_active) {482 if (priv->eee_enabled) {483 netdev_dbg(priv->dev, "disable EEE\n");484 stmmac_lpi_entry_timer_config(priv, 0);485 del_timer_sync(&priv->eee_ctrl_timer);486 stmmac_set_eee_timer(priv, priv->hw, 0, eee_tw_timer);487 if (priv->hw->xpcs)488 xpcs_config_eee(priv->hw->xpcs,489 priv->plat->mult_fact_100ns,490 false);491 }492 mutex_unlock(&priv->lock);493 return false;494 }495 496 if (priv->eee_active && !priv->eee_enabled) {497 timer_setup(&priv->eee_ctrl_timer, stmmac_eee_ctrl_timer, 0);498 stmmac_set_eee_timer(priv, priv->hw, STMMAC_DEFAULT_LIT_LS,499 eee_tw_timer);500 if (priv->hw->xpcs)501 xpcs_config_eee(priv->hw->xpcs,502 priv->plat->mult_fact_100ns,503 true);504 }505 506 if (priv->plat->has_gmac4 && priv->tx_lpi_timer <= STMMAC_ET_MAX) {507 del_timer_sync(&priv->eee_ctrl_timer);508 priv->tx_path_in_lpi_mode = false;509 stmmac_lpi_entry_timer_config(priv, 1);510 } else {511 stmmac_lpi_entry_timer_config(priv, 0);512 mod_timer(&priv->eee_ctrl_timer,513 STMMAC_LPI_T(priv->tx_lpi_timer));514 }515 516 mutex_unlock(&priv->lock);517 netdev_dbg(priv->dev, "Energy-Efficient Ethernet initialized\n");518 return true;519}520 521/* stmmac_get_tx_hwtstamp - get HW TX timestamps522 * @priv: driver private structure523 * @p : descriptor pointer524 * @skb : the socket buffer525 * Description :526 * This function will read timestamp from the descriptor & pass it to stack.527 * and also perform some sanity checks.528 */529static void stmmac_get_tx_hwtstamp(struct stmmac_priv *priv,530 struct dma_desc *p, struct sk_buff *skb)531{532 struct skb_shared_hwtstamps shhwtstamp;533 bool found = false;534 u64 ns = 0;535 536 if (!priv->hwts_tx_en)537 return;538 539 /* exit if skb doesn't support hw tstamp */540 if (likely(!skb || !(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)))541 return;542 543 /* check tx tstamp status */544 if (stmmac_get_tx_timestamp_status(priv, p)) {545 stmmac_get_timestamp(priv, p, priv->adv_ts, &ns);546 found = true;547 } else if (!stmmac_get_mac_tx_timestamp(priv, priv->hw, &ns)) {548 found = true;549 }550 551 if (found) {552 ns -= priv->plat->cdc_error_adj;553 554 memset(&shhwtstamp, 0, sizeof(struct skb_shared_hwtstamps));555 shhwtstamp.hwtstamp = ns_to_ktime(ns);556 557 netdev_dbg(priv->dev, "get valid TX hw timestamp %llu\n", ns);558 /* pass tstamp to stack */559 skb_tstamp_tx(skb, &shhwtstamp);560 }561}562 563/* stmmac_get_rx_hwtstamp - get HW RX timestamps564 * @priv: driver private structure565 * @p : descriptor pointer566 * @np : next descriptor pointer567 * @skb : the socket buffer568 * Description :569 * This function will read received packet's timestamp from the descriptor570 * and pass it to stack. It also perform some sanity checks.571 */572static void stmmac_get_rx_hwtstamp(struct stmmac_priv *priv, struct dma_desc *p,573 struct dma_desc *np, struct sk_buff *skb)574{575 struct skb_shared_hwtstamps *shhwtstamp = NULL;576 struct dma_desc *desc = p;577 u64 ns = 0;578 579 if (!priv->hwts_rx_en)580 return;581 /* For GMAC4, the valid timestamp is from CTX next desc. */582 if (priv->plat->has_gmac4 || priv->plat->has_xgmac)583 desc = np;584 585 /* Check if timestamp is available */586 if (stmmac_get_rx_timestamp_status(priv, p, np, priv->adv_ts)) {587 stmmac_get_timestamp(priv, desc, priv->adv_ts, &ns);588 589 ns -= priv->plat->cdc_error_adj;590 591 netdev_dbg(priv->dev, "get valid RX hw timestamp %llu\n", ns);592 shhwtstamp = skb_hwtstamps(skb);593 memset(shhwtstamp, 0, sizeof(struct skb_shared_hwtstamps));594 shhwtstamp->hwtstamp = ns_to_ktime(ns);595 } else {596 netdev_dbg(priv->dev, "cannot get RX hw timestamp\n");597 }598}599 600/**601 * stmmac_hwtstamp_set - control hardware timestamping.602 * @dev: device pointer.603 * @ifr: An IOCTL specific structure, that can contain a pointer to604 * a proprietary structure used to pass information to the driver.605 * Description:606 * This function configures the MAC to enable/disable both outgoing(TX)607 * and incoming(RX) packets time stamping based on user input.608 * Return Value:609 * 0 on success and an appropriate -ve integer on failure.610 */611static int stmmac_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)612{613 struct stmmac_priv *priv = netdev_priv(dev);614 struct hwtstamp_config config;615 u32 ptp_v2 = 0;616 u32 tstamp_all = 0;617 u32 ptp_over_ipv4_udp = 0;618 u32 ptp_over_ipv6_udp = 0;619 u32 ptp_over_ethernet = 0;620 u32 snap_type_sel = 0;621 u32 ts_master_en = 0;622 u32 ts_event_en = 0;623 624 if (!(priv->dma_cap.time_stamp || priv->adv_ts)) {625 netdev_alert(priv->dev, "No support for HW time stamping\n");626 priv->hwts_tx_en = 0;627 priv->hwts_rx_en = 0;628 629 return -EOPNOTSUPP;630 }631 632 if (copy_from_user(&config, ifr->ifr_data,633 sizeof(config)))634 return -EFAULT;635 636 netdev_dbg(priv->dev, "%s config flags:0x%x, tx_type:0x%x, rx_filter:0x%x\n",637 __func__, config.flags, config.tx_type, config.rx_filter);638 639 if (config.tx_type != HWTSTAMP_TX_OFF &&640 config.tx_type != HWTSTAMP_TX_ON)641 return -ERANGE;642 643 if (priv->adv_ts) {644 switch (config.rx_filter) {645 case HWTSTAMP_FILTER_NONE:646 /* time stamp no incoming packet at all */647 config.rx_filter = HWTSTAMP_FILTER_NONE;648 break;649 650 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:651 /* PTP v1, UDP, any kind of event packet */652 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;653 /* 'xmac' hardware can support Sync, Pdelay_Req and654 * Pdelay_resp by setting bit14 and bits17/16 to 01655 * This leaves Delay_Req timestamps out.656 * Enable all events *and* general purpose message657 * timestamping658 */659 snap_type_sel = PTP_TCR_SNAPTYPSEL_1;660 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;661 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;662 break;663 664 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:665 /* PTP v1, UDP, Sync packet */666 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC;667 /* take time stamp for SYNC messages only */668 ts_event_en = PTP_TCR_TSEVNTENA;669 670 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;671 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;672 break;673 674 case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:675 /* PTP v1, UDP, Delay_req packet */676 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ;677 /* take time stamp for Delay_Req messages only */678 ts_master_en = PTP_TCR_TSMSTRENA;679 ts_event_en = PTP_TCR_TSEVNTENA;680 681 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;682 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;683 break;684 685 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:686 /* PTP v2, UDP, any kind of event packet */687 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;688 ptp_v2 = PTP_TCR_TSVER2ENA;689 /* take time stamp for all event messages */690 snap_type_sel = PTP_TCR_SNAPTYPSEL_1;691 692 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;693 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;694 break;695 696 case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:697 /* PTP v2, UDP, Sync packet */698 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC;699 ptp_v2 = PTP_TCR_TSVER2ENA;700 /* take time stamp for SYNC messages only */701 ts_event_en = PTP_TCR_TSEVNTENA;702 703 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;704 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;705 break;706 707 case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:708 /* PTP v2, UDP, Delay_req packet */709 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ;710 ptp_v2 = PTP_TCR_TSVER2ENA;711 /* take time stamp for Delay_Req messages only */712 ts_master_en = PTP_TCR_TSMSTRENA;713 ts_event_en = PTP_TCR_TSEVNTENA;714 715 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;716 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;717 break;718 719 case HWTSTAMP_FILTER_PTP_V2_EVENT:720 /* PTP v2/802.AS1 any layer, any kind of event packet */721 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;722 ptp_v2 = PTP_TCR_TSVER2ENA;723 snap_type_sel = PTP_TCR_SNAPTYPSEL_1;724 if (priv->synopsys_id < DWMAC_CORE_4_10)725 ts_event_en = PTP_TCR_TSEVNTENA;726 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;727 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;728 ptp_over_ethernet = PTP_TCR_TSIPENA;729 break;730 731 case HWTSTAMP_FILTER_PTP_V2_SYNC:732 /* PTP v2/802.AS1, any layer, Sync packet */733 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC;734 ptp_v2 = PTP_TCR_TSVER2ENA;735 /* take time stamp for SYNC messages only */736 ts_event_en = PTP_TCR_TSEVNTENA;737 738 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;739 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;740 ptp_over_ethernet = PTP_TCR_TSIPENA;741 break;742 743 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:744 /* PTP v2/802.AS1, any layer, Delay_req packet */745 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ;746 ptp_v2 = PTP_TCR_TSVER2ENA;747 /* take time stamp for Delay_Req messages only */748 ts_master_en = PTP_TCR_TSMSTRENA;749 ts_event_en = PTP_TCR_TSEVNTENA;750 751 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;752 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;753 ptp_over_ethernet = PTP_TCR_TSIPENA;754 break;755 756 case HWTSTAMP_FILTER_NTP_ALL:757 case HWTSTAMP_FILTER_ALL:758 /* time stamp any incoming packet */759 config.rx_filter = HWTSTAMP_FILTER_ALL;760 tstamp_all = PTP_TCR_TSENALL;761 break;762 763 default:764 return -ERANGE;765 }766 } else {767 switch (config.rx_filter) {768 case HWTSTAMP_FILTER_NONE:769 config.rx_filter = HWTSTAMP_FILTER_NONE;770 break;771 default:772 /* PTP v1, UDP, any kind of event packet */773 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;774 break;775 }776 }777 priv->hwts_rx_en = ((config.rx_filter == HWTSTAMP_FILTER_NONE) ? 0 : 1);778 priv->hwts_tx_en = config.tx_type == HWTSTAMP_TX_ON;779 780 priv->systime_flags = STMMAC_HWTS_ACTIVE;781 782 if (priv->hwts_tx_en || priv->hwts_rx_en) {783 priv->systime_flags |= tstamp_all | ptp_v2 |784 ptp_over_ethernet | ptp_over_ipv6_udp |785 ptp_over_ipv4_udp | ts_event_en |786 ts_master_en | snap_type_sel;787 }788 789 stmmac_config_hw_tstamping(priv, priv->ptpaddr, priv->systime_flags);790 791 memcpy(&priv->tstamp_config, &config, sizeof(config));792 793 return copy_to_user(ifr->ifr_data, &config,794 sizeof(config)) ? -EFAULT : 0;795}796 797/**798 * stmmac_hwtstamp_get - read hardware timestamping.799 * @dev: device pointer.800 * @ifr: An IOCTL specific structure, that can contain a pointer to801 * a proprietary structure used to pass information to the driver.802 * Description:803 * This function obtain the current hardware timestamping settings804 * as requested.805 */806static int stmmac_hwtstamp_get(struct net_device *dev, struct ifreq *ifr)807{808 struct stmmac_priv *priv = netdev_priv(dev);809 struct hwtstamp_config *config = &priv->tstamp_config;810 811 if (!(priv->dma_cap.time_stamp || priv->dma_cap.atime_stamp))812 return -EOPNOTSUPP;813 814 return copy_to_user(ifr->ifr_data, config,815 sizeof(*config)) ? -EFAULT : 0;816}817 818/**819 * stmmac_init_tstamp_counter - init hardware timestamping counter820 * @priv: driver private structure821 * @systime_flags: timestamping flags822 * Description:823 * Initialize hardware counter for packet timestamping.824 * This is valid as long as the interface is open and not suspended.825 * Will be rerun after resuming from suspend, case in which the timestamping826 * flags updated by stmmac_hwtstamp_set() also need to be restored.827 */828int stmmac_init_tstamp_counter(struct stmmac_priv *priv, u32 systime_flags)829{830 bool xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac;831 struct timespec64 now;832 u32 sec_inc = 0;833 u64 temp = 0;834 835 if (!(priv->dma_cap.time_stamp || priv->dma_cap.atime_stamp))836 return -EOPNOTSUPP;837 838 stmmac_config_hw_tstamping(priv, priv->ptpaddr, systime_flags);839 priv->systime_flags = systime_flags;840 841 /* program Sub Second Increment reg */842 stmmac_config_sub_second_increment(priv, priv->ptpaddr,843 priv->plat->clk_ptp_rate,844 xmac, &sec_inc);845 temp = div_u64(1000000000ULL, sec_inc);846 847 /* Store sub second increment for later use */848 priv->sub_second_inc = sec_inc;849 850 /* calculate default added value:851 * formula is :852 * addend = (2^32)/freq_div_ratio;853 * where, freq_div_ratio = 1e9ns/sec_inc854 */855 temp = (u64)(temp << 32);856 priv->default_addend = div_u64(temp, priv->plat->clk_ptp_rate);857 stmmac_config_addend(priv, priv->ptpaddr, priv->default_addend);858 859 /* initialize system time */860 ktime_get_real_ts64(&now);861 862 /* lower 32 bits of tv_sec are safe until y2106 */863 stmmac_init_systime(priv, priv->ptpaddr, (u32)now.tv_sec, now.tv_nsec);864 865 return 0;866}867EXPORT_SYMBOL_GPL(stmmac_init_tstamp_counter);868 869/**870 * stmmac_init_ptp - init PTP871 * @priv: driver private structure872 * Description: this is to verify if the HW supports the PTPv1 or PTPv2.873 * This is done by looking at the HW cap. register.874 * This function also registers the ptp driver.875 */876static int stmmac_init_ptp(struct stmmac_priv *priv)877{878 bool xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac;879 int ret;880 881 if (priv->plat->ptp_clk_freq_config)882 priv->plat->ptp_clk_freq_config(priv);883 884 ret = stmmac_init_tstamp_counter(priv, STMMAC_HWTS_ACTIVE);885 if (ret)886 return ret;887 888 priv->adv_ts = 0;889 /* Check if adv_ts can be enabled for dwmac 4.x / xgmac core */890 if (xmac && priv->dma_cap.atime_stamp)891 priv->adv_ts = 1;892 /* Dwmac 3.x core with extend_desc can support adv_ts */893 else if (priv->extend_desc && priv->dma_cap.atime_stamp)894 priv->adv_ts = 1;895 896 if (priv->dma_cap.time_stamp)897 netdev_info(priv->dev, "IEEE 1588-2002 Timestamp supported\n");898 899 if (priv->adv_ts)900 netdev_info(priv->dev,901 "IEEE 1588-2008 Advanced Timestamp supported\n");902 903 priv->hwts_tx_en = 0;904 priv->hwts_rx_en = 0;905 906 if (priv->plat->flags & STMMAC_FLAG_HWTSTAMP_CORRECT_LATENCY)907 stmmac_hwtstamp_correct_latency(priv, priv);908 909 return 0;910}911 912static void stmmac_release_ptp(struct stmmac_priv *priv)913{914 clk_disable_unprepare(priv->plat->clk_ptp_ref);915 stmmac_ptp_unregister(priv);916}917 918/**919 * stmmac_mac_flow_ctrl - Configure flow control in all queues920 * @priv: driver private structure921 * @duplex: duplex passed to the next function922 * Description: It is used for configuring the flow control in all queues923 */924static void stmmac_mac_flow_ctrl(struct stmmac_priv *priv, u32 duplex)925{926 u32 tx_cnt = priv->plat->tx_queues_to_use;927 928 stmmac_flow_ctrl(priv, priv->hw, duplex, priv->flow_ctrl,929 priv->pause, tx_cnt);930}931 932static unsigned long stmmac_mac_get_caps(struct phylink_config *config,933 phy_interface_t interface)934{935 struct stmmac_priv *priv = netdev_priv(to_net_dev(config->dev));936 937 /* Refresh the MAC-specific capabilities */938 stmmac_mac_update_caps(priv);939 940 config->mac_capabilities = priv->hw->link.caps;941 942 if (priv->plat->max_speed)943 phylink_limit_mac_speed(config, priv->plat->max_speed);944 945 return config->mac_capabilities;946}947 948static struct phylink_pcs *stmmac_mac_select_pcs(struct phylink_config *config,949 phy_interface_t interface)950{951 struct stmmac_priv *priv = netdev_priv(to_net_dev(config->dev));952 struct phylink_pcs *pcs;953 954 if (priv->plat->select_pcs) {955 pcs = priv->plat->select_pcs(priv, interface);956 if (!IS_ERR(pcs))957 return pcs;958 }959 960 return NULL;961}962 963static void stmmac_mac_config(struct phylink_config *config, unsigned int mode,964 const struct phylink_link_state *state)965{966 /* Nothing to do, xpcs_config() handles everything */967}968 969static void stmmac_fpe_link_state_handle(struct stmmac_priv *priv, bool is_up)970{971 struct stmmac_fpe_cfg *fpe_cfg = &priv->fpe_cfg;972 unsigned long flags;973 974 timer_shutdown_sync(&fpe_cfg->verify_timer);975 976 spin_lock_irqsave(&fpe_cfg->lock, flags);977 978 if (is_up && fpe_cfg->pmac_enabled) {979 /* VERIFY process requires pmac enabled when NIC comes up */980 stmmac_fpe_configure(priv, priv->ioaddr, fpe_cfg,981 priv->plat->tx_queues_to_use,982 priv->plat->rx_queues_to_use,983 false, true);984 985 /* New link => maybe new partner => new verification process */986 stmmac_fpe_apply(priv);987 } else {988 /* No link => turn off EFPE */989 stmmac_fpe_configure(priv, priv->ioaddr, fpe_cfg,990 priv->plat->tx_queues_to_use,991 priv->plat->rx_queues_to_use,992 false, false);993 }994 995 spin_unlock_irqrestore(&fpe_cfg->lock, flags);996}997 998static void stmmac_mac_link_down(struct phylink_config *config,999 unsigned int mode, phy_interface_t interface)1000{1001 struct stmmac_priv *priv = netdev_priv(to_net_dev(config->dev));1002 1003 stmmac_mac_set(priv, priv->ioaddr, false);1004 priv->eee_active = false;1005 priv->tx_lpi_enabled = false;1006 priv->eee_enabled = stmmac_eee_init(priv);1007 stmmac_set_eee_pls(priv, priv->hw, false);1008 1009 if (priv->dma_cap.fpesel)1010 stmmac_fpe_link_state_handle(priv, false);1011}1012 1013static void stmmac_mac_link_up(struct phylink_config *config,1014 struct phy_device *phy,1015 unsigned int mode, phy_interface_t interface,1016 int speed, int duplex,1017 bool tx_pause, bool rx_pause)1018{1019 struct stmmac_priv *priv = netdev_priv(to_net_dev(config->dev));1020 u32 old_ctrl, ctrl;1021 1022 if ((priv->plat->flags & STMMAC_FLAG_SERDES_UP_AFTER_PHY_LINKUP) &&1023 priv->plat->serdes_powerup)1024 priv->plat->serdes_powerup(priv->dev, priv->plat->bsp_priv);1025 1026 old_ctrl = readl(priv->ioaddr + MAC_CTRL_REG);1027 ctrl = old_ctrl & ~priv->hw->link.speed_mask;1028 1029 if (interface == PHY_INTERFACE_MODE_USXGMII) {1030 switch (speed) {1031 case SPEED_10000:1032 ctrl |= priv->hw->link.xgmii.speed10000;1033 break;1034 case SPEED_5000:1035 ctrl |= priv->hw->link.xgmii.speed5000;1036 break;1037 case SPEED_2500:1038 ctrl |= priv->hw->link.xgmii.speed2500;1039 break;1040 default:1041 return;1042 }1043 } else if (interface == PHY_INTERFACE_MODE_XLGMII) {1044 switch (speed) {1045 case SPEED_100000:1046 ctrl |= priv->hw->link.xlgmii.speed100000;1047 break;1048 case SPEED_50000:1049 ctrl |= priv->hw->link.xlgmii.speed50000;1050 break;1051 case SPEED_40000:1052 ctrl |= priv->hw->link.xlgmii.speed40000;1053 break;1054 case SPEED_25000:1055 ctrl |= priv->hw->link.xlgmii.speed25000;1056 break;1057 case SPEED_10000:1058 ctrl |= priv->hw->link.xgmii.speed10000;1059 break;1060 case SPEED_2500:1061 ctrl |= priv->hw->link.speed2500;1062 break;1063 case SPEED_1000:1064 ctrl |= priv->hw->link.speed1000;1065 break;1066 default:1067 return;1068 }1069 } else {1070 switch (speed) {1071 case SPEED_2500:1072 ctrl |= priv->hw->link.speed2500;1073 break;1074 case SPEED_1000:1075 ctrl |= priv->hw->link.speed1000;1076 break;1077 case SPEED_100:1078 ctrl |= priv->hw->link.speed100;1079 break;1080 case SPEED_10:1081 ctrl |= priv->hw->link.speed10;1082 break;1083 default:1084 return;1085 }1086 }1087 1088 priv->speed = speed;1089 1090 if (priv->plat->fix_mac_speed)1091 priv->plat->fix_mac_speed(priv->plat->bsp_priv, speed, mode);1092 1093 if (!duplex)1094 ctrl &= ~priv->hw->link.duplex;1095 else1096 ctrl |= priv->hw->link.duplex;1097 1098 /* Flow Control operation */1099 if (rx_pause && tx_pause)1100 priv->flow_ctrl = FLOW_AUTO;1101 else if (rx_pause && !tx_pause)1102 priv->flow_ctrl = FLOW_RX;1103 else if (!rx_pause && tx_pause)1104 priv->flow_ctrl = FLOW_TX;1105 else1106 priv->flow_ctrl = FLOW_OFF;1107 1108 stmmac_mac_flow_ctrl(priv, duplex);1109 1110 if (ctrl != old_ctrl)1111 writel(ctrl, priv->ioaddr + MAC_CTRL_REG);1112 1113 stmmac_mac_set(priv, priv->ioaddr, true);1114 if (phy && priv->dma_cap.eee) {1115 priv->eee_active =1116 phy_init_eee(phy, !(priv->plat->flags &1117 STMMAC_FLAG_RX_CLK_RUNS_IN_LPI)) >= 0;1118 priv->eee_enabled = stmmac_eee_init(priv);1119 priv->tx_lpi_enabled = priv->eee_enabled;1120 stmmac_set_eee_pls(priv, priv->hw, true);1121 }1122 1123 if (priv->dma_cap.fpesel)1124 stmmac_fpe_link_state_handle(priv, true);1125 1126 if (priv->plat->flags & STMMAC_FLAG_HWTSTAMP_CORRECT_LATENCY)1127 stmmac_hwtstamp_correct_latency(priv, priv);1128}1129 1130static const struct phylink_mac_ops stmmac_phylink_mac_ops = {1131 .mac_get_caps = stmmac_mac_get_caps,1132 .mac_select_pcs = stmmac_mac_select_pcs,1133 .mac_config = stmmac_mac_config,1134 .mac_link_down = stmmac_mac_link_down,1135 .mac_link_up = stmmac_mac_link_up,1136};1137 1138/**1139 * stmmac_check_pcs_mode - verify if RGMII/SGMII is supported1140 * @priv: driver private structure1141 * Description: this is to verify if the HW supports the PCS.1142 * Physical Coding Sublayer (PCS) interface that can be used when the MAC is1143 * configured for the TBI, RTBI, or SGMII PHY interface.1144 */1145static void stmmac_check_pcs_mode(struct stmmac_priv *priv)1146{1147 int interface = priv->plat->mac_interface;1148 1149 if (priv->dma_cap.pcs) {1150 if ((interface == PHY_INTERFACE_MODE_RGMII) ||1151 (interface == PHY_INTERFACE_MODE_RGMII_ID) ||1152 (interface == PHY_INTERFACE_MODE_RGMII_RXID) ||1153 (interface == PHY_INTERFACE_MODE_RGMII_TXID)) {1154 netdev_dbg(priv->dev, "PCS RGMII support enabled\n");1155 priv->hw->pcs = STMMAC_PCS_RGMII;1156 } else if (interface == PHY_INTERFACE_MODE_SGMII) {1157 netdev_dbg(priv->dev, "PCS SGMII support enabled\n");1158 priv->hw->pcs = STMMAC_PCS_SGMII;1159 }1160 }1161}1162 1163/**1164 * stmmac_init_phy - PHY initialization1165 * @dev: net device structure1166 * Description: it initializes the driver's PHY state, and attaches the PHY1167 * to the mac driver.1168 * Return value:1169 * 0 on success1170 */1171static int stmmac_init_phy(struct net_device *dev)1172{1173 struct stmmac_priv *priv = netdev_priv(dev);1174 struct fwnode_handle *phy_fwnode;1175 struct fwnode_handle *fwnode;1176 int ret;1177 1178 if (!phylink_expects_phy(priv->phylink))1179 return 0;1180 1181 fwnode = priv->plat->port_node;1182 if (!fwnode)1183 fwnode = dev_fwnode(priv->device);1184 1185 if (fwnode)1186 phy_fwnode = fwnode_get_phy_node(fwnode);1187 else1188 phy_fwnode = NULL;1189 1190 /* Some DT bindings do not set-up the PHY handle. Let's try to1191 * manually parse it1192 */1193 if (!phy_fwnode || IS_ERR(phy_fwnode)) {1194 int addr = priv->plat->phy_addr;1195 struct phy_device *phydev;1196 1197 if (addr < 0) {1198 netdev_err(priv->dev, "no phy found\n");1199 return -ENODEV;1200 }1201 1202 phydev = mdiobus_get_phy(priv->mii, addr);1203 if (!phydev) {1204 netdev_err(priv->dev, "no phy at addr %d\n", addr);1205 return -ENODEV;1206 }1207 1208 ret = phylink_connect_phy(priv->phylink, phydev);1209 } else {1210 fwnode_handle_put(phy_fwnode);1211 ret = phylink_fwnode_phy_connect(priv->phylink, fwnode, 0);1212 }1213 1214 if (!priv->plat->pmt) {1215 struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };1216 1217 phylink_ethtool_get_wol(priv->phylink, &wol);1218 device_set_wakeup_capable(priv->device, !!wol.supported);1219 device_set_wakeup_enable(priv->device, !!wol.wolopts);1220 }1221 1222 return ret;1223}1224 1225static int stmmac_phy_setup(struct stmmac_priv *priv)1226{1227 struct stmmac_mdio_bus_data *mdio_bus_data;1228 int mode = priv->plat->phy_interface;1229 struct fwnode_handle *fwnode;1230 struct phylink *phylink;1231 1232 priv->phylink_config.dev = &priv->dev->dev;1233 priv->phylink_config.type = PHYLINK_NETDEV;1234 priv->phylink_config.mac_managed_pm = true;1235 1236 /* Stmmac always requires an RX clock for hardware initialization */1237 priv->phylink_config.mac_requires_rxc = true;1238 1239 mdio_bus_data = priv->plat->mdio_bus_data;1240 if (mdio_bus_data)1241 priv->phylink_config.default_an_inband =1242 mdio_bus_data->default_an_inband;1243 1244 /* Set the platform/firmware specified interface mode. Note, phylink1245 * deals with the PHY interface mode, not the MAC interface mode.1246 */1247 __set_bit(mode, priv->phylink_config.supported_interfaces);1248 1249 /* If we have an xpcs, it defines which PHY interfaces are supported. */1250 if (priv->hw->xpcs)1251 xpcs_get_interfaces(priv->hw->xpcs,1252 priv->phylink_config.supported_interfaces);1253 1254 fwnode = priv->plat->port_node;1255 if (!fwnode)1256 fwnode = dev_fwnode(priv->device);1257 1258 phylink = phylink_create(&priv->phylink_config, fwnode,1259 mode, &stmmac_phylink_mac_ops);1260 if (IS_ERR(phylink))1261 return PTR_ERR(phylink);1262 1263 priv->phylink = phylink;1264 return 0;1265}1266 1267static void stmmac_display_rx_rings(struct stmmac_priv *priv,1268 struct stmmac_dma_conf *dma_conf)1269{1270 u32 rx_cnt = priv->plat->rx_queues_to_use;1271 unsigned int desc_size;1272 void *head_rx;1273 u32 queue;1274 1275 /* Display RX rings */1276 for (queue = 0; queue < rx_cnt; queue++) {1277 struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];1278 1279 pr_info("\tRX Queue %u rings\n", queue);1280 1281 if (priv->extend_desc) {1282 head_rx = (void *)rx_q->dma_erx;1283 desc_size = sizeof(struct dma_extended_desc);1284 } else {1285 head_rx = (void *)rx_q->dma_rx;1286 desc_size = sizeof(struct dma_desc);1287 }1288 1289 /* Display RX ring */1290 stmmac_display_ring(priv, head_rx, dma_conf->dma_rx_size, true,1291 rx_q->dma_rx_phy, desc_size);1292 }1293}1294 1295static void stmmac_display_tx_rings(struct stmmac_priv *priv,1296 struct stmmac_dma_conf *dma_conf)1297{1298 u32 tx_cnt = priv->plat->tx_queues_to_use;1299 unsigned int desc_size;1300 void *head_tx;1301 u32 queue;1302 1303 /* Display TX rings */1304 for (queue = 0; queue < tx_cnt; queue++) {1305 struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[queue];1306 1307 pr_info("\tTX Queue %d rings\n", queue);1308 1309 if (priv->extend_desc) {1310 head_tx = (void *)tx_q->dma_etx;1311 desc_size = sizeof(struct dma_extended_desc);1312 } else if (tx_q->tbs & STMMAC_TBS_AVAIL) {1313 head_tx = (void *)tx_q->dma_entx;1314 desc_size = sizeof(struct dma_edesc);1315 } else {1316 head_tx = (void *)tx_q->dma_tx;1317 desc_size = sizeof(struct dma_desc);1318 }1319 1320 stmmac_display_ring(priv, head_tx, dma_conf->dma_tx_size, false,1321 tx_q->dma_tx_phy, desc_size);1322 }1323}1324 1325static void stmmac_display_rings(struct stmmac_priv *priv,1326 struct stmmac_dma_conf *dma_conf)1327{1328 /* Display RX ring */1329 stmmac_display_rx_rings(priv, dma_conf);1330 1331 /* Display TX ring */1332 stmmac_display_tx_rings(priv, dma_conf);1333}1334 1335static int stmmac_set_bfsize(int mtu, int bufsize)1336{1337 int ret = bufsize;1338 1339 if (mtu >= BUF_SIZE_8KiB)1340 ret = BUF_SIZE_16KiB;1341 else if (mtu >= BUF_SIZE_4KiB)1342 ret = BUF_SIZE_8KiB;1343 else if (mtu >= BUF_SIZE_2KiB)1344 ret = BUF_SIZE_4KiB;1345 else if (mtu > DEFAULT_BUFSIZE)1346 ret = BUF_SIZE_2KiB;1347 else1348 ret = DEFAULT_BUFSIZE;1349 1350 return ret;1351}1352 1353/**1354 * stmmac_clear_rx_descriptors - clear RX descriptors1355 * @priv: driver private structure1356 * @dma_conf: structure to take the dma data1357 * @queue: RX queue index1358 * Description: this function is called to clear the RX descriptors1359 * in case of both basic and extended descriptors are used.1360 */1361static void stmmac_clear_rx_descriptors(struct stmmac_priv *priv,1362 struct stmmac_dma_conf *dma_conf,1363 u32 queue)1364{1365 struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];1366 int i;1367 1368 /* Clear the RX descriptors */1369 for (i = 0; i < dma_conf->dma_rx_size; i++)1370 if (priv->extend_desc)1371 stmmac_init_rx_desc(priv, &rx_q->dma_erx[i].basic,1372 priv->use_riwt, priv->mode,1373 (i == dma_conf->dma_rx_size - 1),1374 dma_conf->dma_buf_sz);1375 else1376 stmmac_init_rx_desc(priv, &rx_q->dma_rx[i],1377 priv->use_riwt, priv->mode,1378 (i == dma_conf->dma_rx_size - 1),1379 dma_conf->dma_buf_sz);1380}1381 1382/**1383 * stmmac_clear_tx_descriptors - clear tx descriptors1384 * @priv: driver private structure1385 * @dma_conf: structure to take the dma data1386 * @queue: TX queue index.1387 * Description: this function is called to clear the TX descriptors1388 * in case of both basic and extended descriptors are used.1389 */1390static void stmmac_clear_tx_descriptors(struct stmmac_priv *priv,1391 struct stmmac_dma_conf *dma_conf,1392 u32 queue)1393{1394 struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[queue];1395 int i;1396 1397 /* Clear the TX descriptors */1398 for (i = 0; i < dma_conf->dma_tx_size; i++) {1399 int last = (i == (dma_conf->dma_tx_size - 1));1400 struct dma_desc *p;1401 1402 if (priv->extend_desc)1403 p = &tx_q->dma_etx[i].basic;1404 else if (tx_q->tbs & STMMAC_TBS_AVAIL)1405 p = &tx_q->dma_entx[i].basic;1406 else1407 p = &tx_q->dma_tx[i];1408 1409 stmmac_init_tx_desc(priv, p, priv->mode, last);1410 }1411}1412 1413/**1414 * stmmac_clear_descriptors - clear descriptors1415 * @priv: driver private structure1416 * @dma_conf: structure to take the dma data1417 * Description: this function is called to clear the TX and RX descriptors1418 * in case of both basic and extended descriptors are used.1419 */1420static void stmmac_clear_descriptors(struct stmmac_priv *priv,1421 struct stmmac_dma_conf *dma_conf)1422{1423 u32 rx_queue_cnt = priv->plat->rx_queues_to_use;1424 u32 tx_queue_cnt = priv->plat->tx_queues_to_use;1425 u32 queue;1426 1427 /* Clear the RX descriptors */1428 for (queue = 0; queue < rx_queue_cnt; queue++)1429 stmmac_clear_rx_descriptors(priv, dma_conf, queue);1430 1431 /* Clear the TX descriptors */1432 for (queue = 0; queue < tx_queue_cnt; queue++)1433 stmmac_clear_tx_descriptors(priv, dma_conf, queue);1434}1435 1436/**1437 * stmmac_init_rx_buffers - init the RX descriptor buffer.1438 * @priv: driver private structure1439 * @dma_conf: structure to take the dma data1440 * @p: descriptor pointer1441 * @i: descriptor index1442 * @flags: gfp flag1443 * @queue: RX queue index1444 * Description: this function is called to allocate a receive buffer, perform1445 * the DMA mapping and init the descriptor.1446 */1447static int stmmac_init_rx_buffers(struct stmmac_priv *priv,1448 struct stmmac_dma_conf *dma_conf,1449 struct dma_desc *p,1450 int i, gfp_t flags, u32 queue)1451{1452 struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];1453 struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];1454 gfp_t gfp = (GFP_ATOMIC | __GFP_NOWARN);1455 1456 if (priv->dma_cap.host_dma_width <= 32)1457 gfp |= GFP_DMA32;1458 1459 if (!buf->page) {1460 buf->page = page_pool_alloc_pages(rx_q->page_pool, gfp);1461 if (!buf->page)1462 return -ENOMEM;1463 buf->page_offset = stmmac_rx_offset(priv);1464 }1465 1466 if (priv->sph && !buf->sec_page) {1467 buf->sec_page = page_pool_alloc_pages(rx_q->page_pool, gfp);1468 if (!buf->sec_page)1469 return -ENOMEM;1470 1471 buf->sec_addr = page_pool_get_dma_addr(buf->sec_page);1472 stmmac_set_desc_sec_addr(priv, p, buf->sec_addr, true);1473 } else {1474 buf->sec_page = NULL;1475 stmmac_set_desc_sec_addr(priv, p, buf->sec_addr, false);1476 }1477 1478 buf->addr = page_pool_get_dma_addr(buf->page) + buf->page_offset;1479 1480 stmmac_set_desc_addr(priv, p, buf->addr);1481 if (dma_conf->dma_buf_sz == BUF_SIZE_16KiB)1482 stmmac_init_desc3(priv, p);1483 1484 return 0;1485}1486 1487/**1488 * stmmac_free_rx_buffer - free RX dma buffers1489 * @priv: private structure1490 * @rx_q: RX queue1491 * @i: buffer index.1492 */1493static void stmmac_free_rx_buffer(struct stmmac_priv *priv,1494 struct stmmac_rx_queue *rx_q,1495 int i)1496{1497 struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];1498 1499 if (buf->page)1500 page_pool_put_full_page(rx_q->page_pool, buf->page, false);1501 buf->page = NULL;1502 1503 if (buf->sec_page)1504 page_pool_put_full_page(rx_q->page_pool, buf->sec_page, false);1505 buf->sec_page = NULL;1506}1507 1508/**1509 * stmmac_free_tx_buffer - free RX dma buffers1510 * @priv: private structure1511 * @dma_conf: structure to take the dma data1512 * @queue: RX queue index1513 * @i: buffer index.1514 */1515static void stmmac_free_tx_buffer(struct stmmac_priv *priv,1516 struct stmmac_dma_conf *dma_conf,1517 u32 queue, int i)1518{1519 struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[queue];1520 1521 if (tx_q->tx_skbuff_dma[i].buf &&1522 tx_q->tx_skbuff_dma[i].buf_type != STMMAC_TXBUF_T_XDP_TX) {1523 if (tx_q->tx_skbuff_dma[i].map_as_page)1524 dma_unmap_page(priv->device,1525 tx_q->tx_skbuff_dma[i].buf,1526 tx_q->tx_skbuff_dma[i].len,1527 DMA_TO_DEVICE);1528 else1529 dma_unmap_single(priv->device,1530 tx_q->tx_skbuff_dma[i].buf,1531 tx_q->tx_skbuff_dma[i].len,1532 DMA_TO_DEVICE);1533 }1534 1535 if (tx_q->xdpf[i] &&1536 (tx_q->tx_skbuff_dma[i].buf_type == STMMAC_TXBUF_T_XDP_TX ||1537 tx_q->tx_skbuff_dma[i].buf_type == STMMAC_TXBUF_T_XDP_NDO)) {1538 xdp_return_frame(tx_q->xdpf[i]);1539 tx_q->xdpf[i] = NULL;1540 }1541 1542 if (tx_q->tx_skbuff_dma[i].buf_type == STMMAC_TXBUF_T_XSK_TX)1543 tx_q->xsk_frames_done++;1544 1545 if (tx_q->tx_skbuff[i] &&1546 tx_q->tx_skbuff_dma[i].buf_type == STMMAC_TXBUF_T_SKB) {1547 dev_kfree_skb_any(tx_q->tx_skbuff[i]);1548 tx_q->tx_skbuff[i] = NULL;1549 }1550 1551 tx_q->tx_skbuff_dma[i].buf = 0;1552 tx_q->tx_skbuff_dma[i].map_as_page = false;1553}1554 1555/**1556 * dma_free_rx_skbufs - free RX dma buffers1557 * @priv: private structure1558 * @dma_conf: structure to take the dma data1559 * @queue: RX queue index1560 */1561static void dma_free_rx_skbufs(struct stmmac_priv *priv,1562 struct stmmac_dma_conf *dma_conf,1563 u32 queue)1564{1565 struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];1566 int i;1567 1568 for (i = 0; i < dma_conf->dma_rx_size; i++)1569 stmmac_free_rx_buffer(priv, rx_q, i);1570}1571 1572static int stmmac_alloc_rx_buffers(struct stmmac_priv *priv,1573 struct stmmac_dma_conf *dma_conf,1574 u32 queue, gfp_t flags)1575{1576 struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];1577 int i;1578 1579 for (i = 0; i < dma_conf->dma_rx_size; i++) {1580 struct dma_desc *p;1581 int ret;1582 1583 if (priv->extend_desc)1584 p = &((rx_q->dma_erx + i)->basic);1585 else1586 p = rx_q->dma_rx + i;1587 1588 ret = stmmac_init_rx_buffers(priv, dma_conf, p, i, flags,1589 queue);1590 if (ret)1591 return ret;1592 1593 rx_q->buf_alloc_num++;1594 }1595 1596 return 0;1597}1598 1599/**1600 * dma_free_rx_xskbufs - free RX dma buffers from XSK pool1601 * @priv: private structure1602 * @dma_conf: structure to take the dma data1603 * @queue: RX queue index1604 */1605static void dma_free_rx_xskbufs(struct stmmac_priv *priv,1606 struct stmmac_dma_conf *dma_conf,1607 u32 queue)1608{1609 struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];1610 int i;1611 1612 for (i = 0; i < dma_conf->dma_rx_size; i++) {1613 struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];1614 1615 if (!buf->xdp)1616 continue;1617 1618 xsk_buff_free(buf->xdp);1619 buf->xdp = NULL;1620 }1621}1622 1623static int stmmac_alloc_rx_buffers_zc(struct stmmac_priv *priv,1624 struct stmmac_dma_conf *dma_conf,1625 u32 queue)1626{1627 struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];1628 int i;1629 1630 /* struct stmmac_xdp_buff is using cb field (maximum size of 24 bytes)1631 * in struct xdp_buff_xsk to stash driver specific information. Thus,1632 * use this macro to make sure no size violations.1633 */1634 XSK_CHECK_PRIV_TYPE(struct stmmac_xdp_buff);1635 1636 for (i = 0; i < dma_conf->dma_rx_size; i++) {1637 struct stmmac_rx_buffer *buf;1638 dma_addr_t dma_addr;1639 struct dma_desc *p;1640 1641 if (priv->extend_desc)1642 p = (struct dma_desc *)(rx_q->dma_erx + i);1643 else1644 p = rx_q->dma_rx + i;1645 1646 buf = &rx_q->buf_pool[i];1647 1648 buf->xdp = xsk_buff_alloc(rx_q->xsk_pool);1649 if (!buf->xdp)1650 return -ENOMEM;1651 1652 dma_addr = xsk_buff_xdp_get_dma(buf->xdp);1653 stmmac_set_desc_addr(priv, p, dma_addr);1654 rx_q->buf_alloc_num++;1655 }1656 1657 return 0;1658}1659 1660static struct xsk_buff_pool *stmmac_get_xsk_pool(struct stmmac_priv *priv, u32 queue)1661{1662 if (!stmmac_xdp_is_enabled(priv) || !test_bit(queue, priv->af_xdp_zc_qps))1663 return NULL;1664 1665 return xsk_get_pool_from_qid(priv->dev, queue);1666}1667 1668/**1669 * __init_dma_rx_desc_rings - init the RX descriptor ring (per queue)1670 * @priv: driver private structure1671 * @dma_conf: structure to take the dma data1672 * @queue: RX queue index1673 * @flags: gfp flag.1674 * Description: this function initializes the DMA RX descriptors1675 * and allocates the socket buffers. It supports the chained and ring1676 * modes.1677 */1678static int __init_dma_rx_desc_rings(struct stmmac_priv *priv,1679 struct stmmac_dma_conf *dma_conf,1680 u32 queue, gfp_t flags)1681{1682 struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];1683 int ret;1684 1685 netif_dbg(priv, probe, priv->dev,1686 "(%s) dma_rx_phy=0x%08x\n", __func__,1687 (u32)rx_q->dma_rx_phy);1688 1689 stmmac_clear_rx_descriptors(priv, dma_conf, queue);1690 1691 xdp_rxq_info_unreg_mem_model(&rx_q->xdp_rxq);1692 1693 rx_q->xsk_pool = stmmac_get_xsk_pool(priv, queue);1694 1695 if (rx_q->xsk_pool) {1696 WARN_ON(xdp_rxq_info_reg_mem_model(&rx_q->xdp_rxq,1697 MEM_TYPE_XSK_BUFF_POOL,1698 NULL));1699 netdev_info(priv->dev,1700 "Register MEM_TYPE_XSK_BUFF_POOL RxQ-%d\n",1701 rx_q->queue_index);1702 xsk_pool_set_rxq_info(rx_q->xsk_pool, &rx_q->xdp_rxq);1703 } else {1704 WARN_ON(xdp_rxq_info_reg_mem_model(&rx_q->xdp_rxq,1705 MEM_TYPE_PAGE_POOL,1706 rx_q->page_pool));1707 netdev_info(priv->dev,1708 "Register MEM_TYPE_PAGE_POOL RxQ-%d\n",1709 rx_q->queue_index);1710 }1711 1712 if (rx_q->xsk_pool) {1713 /* RX XDP ZC buffer pool may not be populated, e.g.1714 * xdpsock TX-only.1715 */1716 stmmac_alloc_rx_buffers_zc(priv, dma_conf, queue);1717 } else {1718 ret = stmmac_alloc_rx_buffers(priv, dma_conf, queue, flags);1719 if (ret < 0)1720 return -ENOMEM;1721 }1722 1723 /* Setup the chained descriptor addresses */1724 if (priv->mode == STMMAC_CHAIN_MODE) {1725 if (priv->extend_desc)1726 stmmac_mode_init(priv, rx_q->dma_erx,1727 rx_q->dma_rx_phy,1728 dma_conf->dma_rx_size, 1);1729 else1730 stmmac_mode_init(priv, rx_q->dma_rx,1731 rx_q->dma_rx_phy,1732 dma_conf->dma_rx_size, 0);1733 }1734 1735 return 0;1736}1737 1738static int init_dma_rx_desc_rings(struct net_device *dev,1739 struct stmmac_dma_conf *dma_conf,1740 gfp_t flags)1741{1742 struct stmmac_priv *priv = netdev_priv(dev);1743 u32 rx_count = priv->plat->rx_queues_to_use;1744 int queue;1745 int ret;1746 1747 /* RX INITIALIZATION */1748 netif_dbg(priv, probe, priv->dev,1749 "SKB addresses:\nskb\t\tskb data\tdma data\n");1750 1751 for (queue = 0; queue < rx_count; queue++) {1752 ret = __init_dma_rx_desc_rings(priv, dma_conf, queue, flags);1753 if (ret)1754 goto err_init_rx_buffers;1755 }1756 1757 return 0;1758 1759err_init_rx_buffers:1760 while (queue >= 0) {1761 struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];1762 1763 if (rx_q->xsk_pool)1764 dma_free_rx_xskbufs(priv, dma_conf, queue);1765 else1766 dma_free_rx_skbufs(priv, dma_conf, queue);1767 1768 rx_q->buf_alloc_num = 0;1769 rx_q->xsk_pool = NULL;1770 1771 queue--;1772 }1773 1774 return ret;1775}1776 1777/**1778 * __init_dma_tx_desc_rings - init the TX descriptor ring (per queue)1779 * @priv: driver private structure1780 * @dma_conf: structure to take the dma data1781 * @queue: TX queue index1782 * Description: this function initializes the DMA TX descriptors1783 * and allocates the socket buffers. It supports the chained and ring1784 * modes.1785 */1786static int __init_dma_tx_desc_rings(struct stmmac_priv *priv,1787 struct stmmac_dma_conf *dma_conf,1788 u32 queue)1789{1790 struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[queue];1791 int i;1792 1793 netif_dbg(priv, probe, priv->dev,1794 "(%s) dma_tx_phy=0x%08x\n", __func__,1795 (u32)tx_q->dma_tx_phy);1796 1797 /* Setup the chained descriptor addresses */1798 if (priv->mode == STMMAC_CHAIN_MODE) {1799 if (priv->extend_desc)1800 stmmac_mode_init(priv, tx_q->dma_etx,1801 tx_q->dma_tx_phy,1802 dma_conf->dma_tx_size, 1);1803 else if (!(tx_q->tbs & STMMAC_TBS_AVAIL))1804 stmmac_mode_init(priv, tx_q->dma_tx,1805 tx_q->dma_tx_phy,1806 dma_conf->dma_tx_size, 0);1807 }1808 1809 tx_q->xsk_pool = stmmac_get_xsk_pool(priv, queue);1810 1811 for (i = 0; i < dma_conf->dma_tx_size; i++) {1812 struct dma_desc *p;1813 1814 if (priv->extend_desc)1815 p = &((tx_q->dma_etx + i)->basic);1816 else if (tx_q->tbs & STMMAC_TBS_AVAIL)1817 p = &((tx_q->dma_entx + i)->basic);1818 else1819 p = tx_q->dma_tx + i;1820 1821 stmmac_clear_desc(priv, p);1822 1823 tx_q->tx_skbuff_dma[i].buf = 0;1824 tx_q->tx_skbuff_dma[i].map_as_page = false;1825 tx_q->tx_skbuff_dma[i].len = 0;1826 tx_q->tx_skbuff_dma[i].last_segment = false;1827 tx_q->tx_skbuff[i] = NULL;1828 }1829 1830 return 0;1831}1832 1833static int init_dma_tx_desc_rings(struct net_device *dev,1834 struct stmmac_dma_conf *dma_conf)1835{1836 struct stmmac_priv *priv = netdev_priv(dev);1837 u32 tx_queue_cnt;1838 u32 queue;1839 1840 tx_queue_cnt = priv->plat->tx_queues_to_use;1841 1842 for (queue = 0; queue < tx_queue_cnt; queue++)1843 __init_dma_tx_desc_rings(priv, dma_conf, queue);1844 1845 return 0;1846}1847 1848/**1849 * init_dma_desc_rings - init the RX/TX descriptor rings1850 * @dev: net device structure1851 * @dma_conf: structure to take the dma data1852 * @flags: gfp flag.1853 * Description: this function initializes the DMA RX/TX descriptors1854 * and allocates the socket buffers. It supports the chained and ring1855 * modes.1856 */1857static int init_dma_desc_rings(struct net_device *dev,1858 struct stmmac_dma_conf *dma_conf,1859 gfp_t flags)1860{1861 struct stmmac_priv *priv = netdev_priv(dev);1862 int ret;1863 1864 ret = init_dma_rx_desc_rings(dev, dma_conf, flags);1865 if (ret)1866 return ret;1867 1868 ret = init_dma_tx_desc_rings(dev, dma_conf);1869 1870 stmmac_clear_descriptors(priv, dma_conf);1871 1872 if (netif_msg_hw(priv))1873 stmmac_display_rings(priv, dma_conf);1874 1875 return ret;1876}1877 1878/**1879 * dma_free_tx_skbufs - free TX dma buffers1880 * @priv: private structure1881 * @dma_conf: structure to take the dma data1882 * @queue: TX queue index1883 */1884static void dma_free_tx_skbufs(struct stmmac_priv *priv,1885 struct stmmac_dma_conf *dma_conf,1886 u32 queue)1887{1888 struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[queue];1889 int i;1890 1891 tx_q->xsk_frames_done = 0;1892 1893 for (i = 0; i < dma_conf->dma_tx_size; i++)1894 stmmac_free_tx_buffer(priv, dma_conf, queue, i);1895 1896 if (tx_q->xsk_pool && tx_q->xsk_frames_done) {1897 xsk_tx_completed(tx_q->xsk_pool, tx_q->xsk_frames_done);1898 tx_q->xsk_frames_done = 0;1899 tx_q->xsk_pool = NULL;1900 }1901}1902 1903/**1904 * stmmac_free_tx_skbufs - free TX skb buffers1905 * @priv: private structure1906 */1907static void stmmac_free_tx_skbufs(struct stmmac_priv *priv)1908{1909 u32 tx_queue_cnt = priv->plat->tx_queues_to_use;1910 u32 queue;1911 1912 for (queue = 0; queue < tx_queue_cnt; queue++)1913 dma_free_tx_skbufs(priv, &priv->dma_conf, queue);1914}1915 1916/**1917 * __free_dma_rx_desc_resources - free RX dma desc resources (per queue)1918 * @priv: private structure1919 * @dma_conf: structure to take the dma data1920 * @queue: RX queue index1921 */1922static void __free_dma_rx_desc_resources(struct stmmac_priv *priv,1923 struct stmmac_dma_conf *dma_conf,1924 u32 queue)1925{1926 struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];1927 1928 /* Release the DMA RX socket buffers */1929 if (rx_q->xsk_pool)1930 dma_free_rx_xskbufs(priv, dma_conf, queue);1931 else1932 dma_free_rx_skbufs(priv, dma_conf, queue);1933 1934 rx_q->buf_alloc_num = 0;1935 rx_q->xsk_pool = NULL;1936 1937 /* Free DMA regions of consistent memory previously allocated */1938 if (!priv->extend_desc)1939 dma_free_coherent(priv->device, dma_conf->dma_rx_size *1940 sizeof(struct dma_desc),1941 rx_q->dma_rx, rx_q->dma_rx_phy);1942 else1943 dma_free_coherent(priv->device, dma_conf->dma_rx_size *1944 sizeof(struct dma_extended_desc),1945 rx_q->dma_erx, rx_q->dma_rx_phy);1946 1947 if (xdp_rxq_info_is_reg(&rx_q->xdp_rxq))1948 xdp_rxq_info_unreg(&rx_q->xdp_rxq);1949 1950 kfree(rx_q->buf_pool);1951 if (rx_q->page_pool)1952 page_pool_destroy(rx_q->page_pool);1953}1954 1955static void free_dma_rx_desc_resources(struct stmmac_priv *priv,1956 struct stmmac_dma_conf *dma_conf)1957{1958 u32 rx_count = priv->plat->rx_queues_to_use;1959 u32 queue;1960 1961 /* Free RX queue resources */1962 for (queue = 0; queue < rx_count; queue++)1963 __free_dma_rx_desc_resources(priv, dma_conf, queue);1964}1965 1966/**1967 * __free_dma_tx_desc_resources - free TX dma desc resources (per queue)1968 * @priv: private structure1969 * @dma_conf: structure to take the dma data1970 * @queue: TX queue index1971 */1972static void __free_dma_tx_desc_resources(struct stmmac_priv *priv,1973 struct stmmac_dma_conf *dma_conf,1974 u32 queue)1975{1976 struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[queue];1977 size_t size;1978 void *addr;1979 1980 /* Release the DMA TX socket buffers */1981 dma_free_tx_skbufs(priv, dma_conf, queue);1982 1983 if (priv->extend_desc) {1984 size = sizeof(struct dma_extended_desc);1985 addr = tx_q->dma_etx;1986 } else if (tx_q->tbs & STMMAC_TBS_AVAIL) {1987 size = sizeof(struct dma_edesc);1988 addr = tx_q->dma_entx;1989 } else {1990 size = sizeof(struct dma_desc);1991 addr = tx_q->dma_tx;1992 }1993 1994 size *= dma_conf->dma_tx_size;1995 1996 dma_free_coherent(priv->device, size, addr, tx_q->dma_tx_phy);1997 1998 kfree(tx_q->tx_skbuff_dma);1999 kfree(tx_q->tx_skbuff);2000}2001 2002static void free_dma_tx_desc_resources(struct stmmac_priv *priv,2003 struct stmmac_dma_conf *dma_conf)2004{2005 u32 tx_count = priv->plat->tx_queues_to_use;2006 u32 queue;2007 2008 /* Free TX queue resources */2009 for (queue = 0; queue < tx_count; queue++)2010 __free_dma_tx_desc_resources(priv, dma_conf, queue);2011}2012 2013/**2014 * __alloc_dma_rx_desc_resources - alloc RX resources (per queue).2015 * @priv: private structure2016 * @dma_conf: structure to take the dma data2017 * @queue: RX queue index2018 * Description: according to which descriptor can be used (extend or basic)2019 * this function allocates the resources for TX and RX paths. In case of2020 * reception, for example, it pre-allocated the RX socket buffer in order to2021 * allow zero-copy mechanism.2022 */2023static int __alloc_dma_rx_desc_resources(struct stmmac_priv *priv,2024 struct stmmac_dma_conf *dma_conf,2025 u32 queue)2026{2027 struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];2028 struct stmmac_channel *ch = &priv->channel[queue];2029 bool xdp_prog = stmmac_xdp_is_enabled(priv);2030 struct page_pool_params pp_params = { 0 };2031 unsigned int num_pages;2032 unsigned int napi_id;2033 int ret;2034 2035 rx_q->queue_index = queue;2036 rx_q->priv_data = priv;2037 2038 pp_params.flags = PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV;2039 pp_params.pool_size = dma_conf->dma_rx_size;2040 num_pages = DIV_ROUND_UP(dma_conf->dma_buf_sz, PAGE_SIZE);2041 pp_params.order = ilog2(num_pages);2042 pp_params.nid = dev_to_node(priv->device);2043 pp_params.dev = priv->device;2044 pp_params.dma_dir = xdp_prog ? DMA_BIDIRECTIONAL : DMA_FROM_DEVICE;2045 pp_params.offset = stmmac_rx_offset(priv);2046 pp_params.max_len = STMMAC_MAX_RX_BUF_SIZE(num_pages);2047 2048 rx_q->page_pool = page_pool_create(&pp_params);2049 if (IS_ERR(rx_q->page_pool)) {2050 ret = PTR_ERR(rx_q->page_pool);2051 rx_q->page_pool = NULL;2052 return ret;2053 }2054 2055 rx_q->buf_pool = kcalloc(dma_conf->dma_rx_size,2056 sizeof(*rx_q->buf_pool),2057 GFP_KERNEL);2058 if (!rx_q->buf_pool)2059 return -ENOMEM;2060 2061 if (priv->extend_desc) {2062 rx_q->dma_erx = dma_alloc_coherent(priv->device,2063 dma_conf->dma_rx_size *2064 sizeof(struct dma_extended_desc),2065 &rx_q->dma_rx_phy,2066 GFP_KERNEL);2067 if (!rx_q->dma_erx)2068 return -ENOMEM;2069 2070 } else {2071 rx_q->dma_rx = dma_alloc_coherent(priv->device,2072 dma_conf->dma_rx_size *2073 sizeof(struct dma_desc),2074 &rx_q->dma_rx_phy,2075 GFP_KERNEL);2076 if (!rx_q->dma_rx)2077 return -ENOMEM;2078 }2079 2080 if (stmmac_xdp_is_enabled(priv) &&2081 test_bit(queue, priv->af_xdp_zc_qps))2082 napi_id = ch->rxtx_napi.napi_id;2083 else2084 napi_id = ch->rx_napi.napi_id;2085 2086 ret = xdp_rxq_info_reg(&rx_q->xdp_rxq, priv->dev,2087 rx_q->queue_index,2088 napi_id);2089 if (ret) {2090 netdev_err(priv->dev, "Failed to register xdp rxq info\n");2091 return -EINVAL;2092 }2093 2094 return 0;2095}2096 2097static int alloc_dma_rx_desc_resources(struct stmmac_priv *priv,2098 struct stmmac_dma_conf *dma_conf)2099{2100 u32 rx_count = priv->plat->rx_queues_to_use;2101 u32 queue;2102 int ret;2103 2104 /* RX queues buffers and DMA */2105 for (queue = 0; queue < rx_count; queue++) {2106 ret = __alloc_dma_rx_desc_resources(priv, dma_conf, queue);2107 if (ret)2108 goto err_dma;2109 }2110 2111 return 0;2112 2113err_dma:2114 free_dma_rx_desc_resources(priv, dma_conf);2115 2116 return ret;2117}2118 2119/**2120 * __alloc_dma_tx_desc_resources - alloc TX resources (per queue).2121 * @priv: private structure2122 * @dma_conf: structure to take the dma data2123 * @queue: TX queue index2124 * Description: according to which descriptor can be used (extend or basic)2125 * this function allocates the resources for TX and RX paths. In case of2126 * reception, for example, it pre-allocated the RX socket buffer in order to2127 * allow zero-copy mechanism.2128 */2129static int __alloc_dma_tx_desc_resources(struct stmmac_priv *priv,2130 struct stmmac_dma_conf *dma_conf,2131 u32 queue)2132{2133 struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[queue];2134 size_t size;2135 void *addr;2136 2137 tx_q->queue_index = queue;2138 tx_q->priv_data = priv;2139 2140 tx_q->tx_skbuff_dma = kcalloc(dma_conf->dma_tx_size,2141 sizeof(*tx_q->tx_skbuff_dma),2142 GFP_KERNEL);2143 if (!tx_q->tx_skbuff_dma)2144 return -ENOMEM;2145 2146 tx_q->tx_skbuff = kcalloc(dma_conf->dma_tx_size,2147 sizeof(struct sk_buff *),2148 GFP_KERNEL);2149 if (!tx_q->tx_skbuff)2150 return -ENOMEM;2151 2152 if (priv->extend_desc)2153 size = sizeof(struct dma_extended_desc);2154 else if (tx_q->tbs & STMMAC_TBS_AVAIL)2155 size = sizeof(struct dma_edesc);2156 else2157 size = sizeof(struct dma_desc);2158 2159 size *= dma_conf->dma_tx_size;2160 2161 addr = dma_alloc_coherent(priv->device, size,2162 &tx_q->dma_tx_phy, GFP_KERNEL);2163 if (!addr)2164 return -ENOMEM;2165 2166 if (priv->extend_desc)2167 tx_q->dma_etx = addr;2168 else if (tx_q->tbs & STMMAC_TBS_AVAIL)2169 tx_q->dma_entx = addr;2170 else2171 tx_q->dma_tx = addr;2172 2173 return 0;2174}2175 2176static int alloc_dma_tx_desc_resources(struct stmmac_priv *priv,2177 struct stmmac_dma_conf *dma_conf)2178{2179 u32 tx_count = priv->plat->tx_queues_to_use;2180 u32 queue;2181 int ret;2182 2183 /* TX queues buffers and DMA */2184 for (queue = 0; queue < tx_count; queue++) {2185 ret = __alloc_dma_tx_desc_resources(priv, dma_conf, queue);2186 if (ret)2187 goto err_dma;2188 }2189 2190 return 0;2191 2192err_dma:2193 free_dma_tx_desc_resources(priv, dma_conf);2194 return ret;2195}2196 2197/**2198 * alloc_dma_desc_resources - alloc TX/RX resources.2199 * @priv: private structure2200 * @dma_conf: structure to take the dma data2201 * Description: according to which descriptor can be used (extend or basic)2202 * this function allocates the resources for TX and RX paths. In case of2203 * reception, for example, it pre-allocated the RX socket buffer in order to2204 * allow zero-copy mechanism.2205 */2206static int alloc_dma_desc_resources(struct stmmac_priv *priv,2207 struct stmmac_dma_conf *dma_conf)2208{2209 /* RX Allocation */2210 int ret = alloc_dma_rx_desc_resources(priv, dma_conf);2211 2212 if (ret)2213 return ret;2214 2215 ret = alloc_dma_tx_desc_resources(priv, dma_conf);2216 2217 return ret;2218}2219 2220/**2221 * free_dma_desc_resources - free dma desc resources2222 * @priv: private structure2223 * @dma_conf: structure to take the dma data2224 */2225static void free_dma_desc_resources(struct stmmac_priv *priv,2226 struct stmmac_dma_conf *dma_conf)2227{2228 /* Release the DMA TX socket buffers */2229 free_dma_tx_desc_resources(priv, dma_conf);2230 2231 /* Release the DMA RX socket buffers later2232 * to ensure all pending XDP_TX buffers are returned.2233 */2234 free_dma_rx_desc_resources(priv, dma_conf);2235}2236 2237/**2238 * stmmac_mac_enable_rx_queues - Enable MAC rx queues2239 * @priv: driver private structure2240 * Description: It is used for enabling the rx queues in the MAC2241 */2242static void stmmac_mac_enable_rx_queues(struct stmmac_priv *priv)2243{2244 u32 rx_queues_count = priv->plat->rx_queues_to_use;2245 int queue;2246 u8 mode;2247 2248 for (queue = 0; queue < rx_queues_count; queue++) {2249 mode = priv->plat->rx_queues_cfg[queue].mode_to_use;2250 stmmac_rx_queue_enable(priv, priv->hw, mode, queue);2251 }2252}2253 2254/**2255 * stmmac_start_rx_dma - start RX DMA channel2256 * @priv: driver private structure2257 * @chan: RX channel index2258 * Description:2259 * This starts a RX DMA channel2260 */2261static void stmmac_start_rx_dma(struct stmmac_priv *priv, u32 chan)2262{2263 netdev_dbg(priv->dev, "DMA RX processes started in channel %d\n", chan);2264 stmmac_start_rx(priv, priv->ioaddr, chan);2265}2266 2267/**2268 * stmmac_start_tx_dma - start TX DMA channel2269 * @priv: driver private structure2270 * @chan: TX channel index2271 * Description:2272 * This starts a TX DMA channel2273 */2274static void stmmac_start_tx_dma(struct stmmac_priv *priv, u32 chan)2275{2276 netdev_dbg(priv->dev, "DMA TX processes started in channel %d\n", chan);2277 stmmac_start_tx(priv, priv->ioaddr, chan);2278}2279 2280/**2281 * stmmac_stop_rx_dma - stop RX DMA channel2282 * @priv: driver private structure2283 * @chan: RX channel index2284 * Description:2285 * This stops a RX DMA channel2286 */2287static void stmmac_stop_rx_dma(struct stmmac_priv *priv, u32 chan)2288{2289 netdev_dbg(priv->dev, "DMA RX processes stopped in channel %d\n", chan);2290 stmmac_stop_rx(priv, priv->ioaddr, chan);2291}2292 2293/**2294 * stmmac_stop_tx_dma - stop TX DMA channel2295 * @priv: driver private structure2296 * @chan: TX channel index2297 * Description:2298 * This stops a TX DMA channel2299 */2300static void stmmac_stop_tx_dma(struct stmmac_priv *priv, u32 chan)2301{2302 netdev_dbg(priv->dev, "DMA TX processes stopped in channel %d\n", chan);2303 stmmac_stop_tx(priv, priv->ioaddr, chan);2304}2305 2306static void stmmac_enable_all_dma_irq(struct stmmac_priv *priv)2307{2308 u32 rx_channels_count = priv->plat->rx_queues_to_use;2309 u32 tx_channels_count = priv->plat->tx_queues_to_use;2310 u32 dma_csr_ch = max(rx_channels_count, tx_channels_count);2311 u32 chan;2312 2313 for (chan = 0; chan < dma_csr_ch; chan++) {2314 struct stmmac_channel *ch = &priv->channel[chan];2315 unsigned long flags;2316 2317 spin_lock_irqsave(&ch->lock, flags);2318 stmmac_enable_dma_irq(priv, priv->ioaddr, chan, 1, 1);2319 spin_unlock_irqrestore(&ch->lock, flags);2320 }2321}2322 2323/**2324 * stmmac_start_all_dma - start all RX and TX DMA channels2325 * @priv: driver private structure2326 * Description:2327 * This starts all the RX and TX DMA channels2328 */2329static void stmmac_start_all_dma(struct stmmac_priv *priv)2330{2331 u32 rx_channels_count = priv->plat->rx_queues_to_use;2332 u32 tx_channels_count = priv->plat->tx_queues_to_use;2333 u32 chan = 0;2334 2335 for (chan = 0; chan < rx_channels_count; chan++)2336 stmmac_start_rx_dma(priv, chan);2337 2338 for (chan = 0; chan < tx_channels_count; chan++)2339 stmmac_start_tx_dma(priv, chan);2340}2341 2342/**2343 * stmmac_stop_all_dma - stop all RX and TX DMA channels2344 * @priv: driver private structure2345 * Description:2346 * This stops the RX and TX DMA channels2347 */2348static void stmmac_stop_all_dma(struct stmmac_priv *priv)2349{2350 u32 rx_channels_count = priv->plat->rx_queues_to_use;2351 u32 tx_channels_count = priv->plat->tx_queues_to_use;2352 u32 chan = 0;2353 2354 for (chan = 0; chan < rx_channels_count; chan++)2355 stmmac_stop_rx_dma(priv, chan);2356 2357 for (chan = 0; chan < tx_channels_count; chan++)2358 stmmac_stop_tx_dma(priv, chan);2359}2360 2361/**2362 * stmmac_dma_operation_mode - HW DMA operation mode2363 * @priv: driver private structure2364 * Description: it is used for configuring the DMA operation mode register in2365 * order to program the tx/rx DMA thresholds or Store-And-Forward mode.2366 */2367static void stmmac_dma_operation_mode(struct stmmac_priv *priv)2368{2369 u32 rx_channels_count = priv->plat->rx_queues_to_use;2370 u32 tx_channels_count = priv->plat->tx_queues_to_use;2371 int rxfifosz = priv->plat->rx_fifo_size;2372 int txfifosz = priv->plat->tx_fifo_size;2373 u32 txmode = 0;2374 u32 rxmode = 0;2375 u32 chan = 0;2376 u8 qmode = 0;2377 2378 if (rxfifosz == 0)2379 rxfifosz = priv->dma_cap.rx_fifo_size;2380 if (txfifosz == 0)2381 txfifosz = priv->dma_cap.tx_fifo_size;2382 2383 /* Split up the shared Tx/Rx FIFO memory on DW QoS Eth and DW XGMAC */2384 if (priv->plat->has_gmac4 || priv->plat->has_xgmac) {2385 rxfifosz /= rx_channels_count;2386 txfifosz /= tx_channels_count;2387 }2388 2389 if (priv->plat->force_thresh_dma_mode) {2390 txmode = tc;2391 rxmode = tc;2392 } else if (priv->plat->force_sf_dma_mode || priv->plat->tx_coe) {2393 /*2394 * In case of GMAC, SF mode can be enabled2395 * to perform the TX COE in HW. This depends on:2396 * 1) TX COE if actually supported2397 * 2) There is no bugged Jumbo frame support2398 * that needs to not insert csum in the TDES.2399 */2400 txmode = SF_DMA_MODE;2401 rxmode = SF_DMA_MODE;2402 priv->xstats.threshold = SF_DMA_MODE;2403 } else {2404 txmode = tc;2405 rxmode = SF_DMA_MODE;2406 }2407 2408 /* configure all channels */2409 for (chan = 0; chan < rx_channels_count; chan++) {2410 struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[chan];2411 u32 buf_size;2412 2413 qmode = priv->plat->rx_queues_cfg[chan].mode_to_use;2414 2415 stmmac_dma_rx_mode(priv, priv->ioaddr, rxmode, chan,2416 rxfifosz, qmode);2417 2418 if (rx_q->xsk_pool) {2419 buf_size = xsk_pool_get_rx_frame_size(rx_q->xsk_pool);2420 stmmac_set_dma_bfsize(priv, priv->ioaddr,2421 buf_size,2422 chan);2423 } else {2424 stmmac_set_dma_bfsize(priv, priv->ioaddr,2425 priv->dma_conf.dma_buf_sz,2426 chan);2427 }2428 }2429 2430 for (chan = 0; chan < tx_channels_count; chan++) {2431 qmode = priv->plat->tx_queues_cfg[chan].mode_to_use;2432 2433 stmmac_dma_tx_mode(priv, priv->ioaddr, txmode, chan,2434 txfifosz, qmode);2435 }2436}2437 2438static void stmmac_xsk_request_timestamp(void *_priv)2439{2440 struct stmmac_metadata_request *meta_req = _priv;2441 2442 stmmac_enable_tx_timestamp(meta_req->priv, meta_req->tx_desc);2443 *meta_req->set_ic = true;2444}2445 2446static u64 stmmac_xsk_fill_timestamp(void *_priv)2447{2448 struct stmmac_xsk_tx_complete *tx_compl = _priv;2449 struct stmmac_priv *priv = tx_compl->priv;2450 struct dma_desc *desc = tx_compl->desc;2451 bool found = false;2452 u64 ns = 0;2453 2454 if (!priv->hwts_tx_en)2455 return 0;2456 2457 /* check tx tstamp status */2458 if (stmmac_get_tx_timestamp_status(priv, desc)) {2459 stmmac_get_timestamp(priv, desc, priv->adv_ts, &ns);2460 found = true;2461 } else if (!stmmac_get_mac_tx_timestamp(priv, priv->hw, &ns)) {2462 found = true;2463 }2464 2465 if (found) {2466 ns -= priv->plat->cdc_error_adj;2467 return ns_to_ktime(ns);2468 }2469 2470 return 0;2471}2472 2473static const struct xsk_tx_metadata_ops stmmac_xsk_tx_metadata_ops = {2474 .tmo_request_timestamp = stmmac_xsk_request_timestamp,2475 .tmo_fill_timestamp = stmmac_xsk_fill_timestamp,2476};2477 2478static bool stmmac_xdp_xmit_zc(struct stmmac_priv *priv, u32 queue, u32 budget)2479{2480 struct netdev_queue *nq = netdev_get_tx_queue(priv->dev, queue);2481 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];2482 struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[queue];2483 struct xsk_buff_pool *pool = tx_q->xsk_pool;2484 unsigned int entry = tx_q->cur_tx;2485 struct dma_desc *tx_desc = NULL;2486 struct xdp_desc xdp_desc;2487 bool work_done = true;2488 u32 tx_set_ic_bit = 0;2489 2490 /* Avoids TX time-out as we are sharing with slow path */2491 txq_trans_cond_update(nq);2492 2493 budget = min(budget, stmmac_tx_avail(priv, queue));2494 2495 while (budget-- > 0) {2496 struct stmmac_metadata_request meta_req;2497 struct xsk_tx_metadata *meta = NULL;2498 dma_addr_t dma_addr;2499 bool set_ic;2500 2501 /* We are sharing with slow path and stop XSK TX desc submission when2502 * available TX ring is less than threshold.2503 */2504 if (unlikely(stmmac_tx_avail(priv, queue) < STMMAC_TX_XSK_AVAIL) ||2505 !netif_carrier_ok(priv->dev)) {2506 work_done = false;2507 break;2508 }2509 2510 if (!xsk_tx_peek_desc(pool, &xdp_desc))2511 break;2512 2513 if (priv->est && priv->est->enable &&2514 priv->est->max_sdu[queue] &&2515 xdp_desc.len > priv->est->max_sdu[queue]) {2516 priv->xstats.max_sdu_txq_drop[queue]++;2517 continue;2518 }2519 2520 if (likely(priv->extend_desc))2521 tx_desc = (struct dma_desc *)(tx_q->dma_etx + entry);2522 else if (tx_q->tbs & STMMAC_TBS_AVAIL)2523 tx_desc = &tx_q->dma_entx[entry].basic;2524 else2525 tx_desc = tx_q->dma_tx + entry;2526 2527 dma_addr = xsk_buff_raw_get_dma(pool, xdp_desc.addr);2528 meta = xsk_buff_get_metadata(pool, xdp_desc.addr);2529 xsk_buff_raw_dma_sync_for_device(pool, dma_addr, xdp_desc.len);2530 2531 tx_q->tx_skbuff_dma[entry].buf_type = STMMAC_TXBUF_T_XSK_TX;2532 2533 /* To return XDP buffer to XSK pool, we simple call2534 * xsk_tx_completed(), so we don't need to fill up2535 * 'buf' and 'xdpf'.2536 */2537 tx_q->tx_skbuff_dma[entry].buf = 0;2538 tx_q->xdpf[entry] = NULL;2539 2540 tx_q->tx_skbuff_dma[entry].map_as_page = false;2541 tx_q->tx_skbuff_dma[entry].len = xdp_desc.len;2542 tx_q->tx_skbuff_dma[entry].last_segment = true;2543 tx_q->tx_skbuff_dma[entry].is_jumbo = false;2544 2545 stmmac_set_desc_addr(priv, tx_desc, dma_addr);2546 2547 tx_q->tx_count_frames++;2548 2549 if (!priv->tx_coal_frames[queue])2550 set_ic = false;2551 else if (tx_q->tx_count_frames % priv->tx_coal_frames[queue] == 0)2552 set_ic = true;2553 else2554 set_ic = false;2555 2556 meta_req.priv = priv;2557 meta_req.tx_desc = tx_desc;2558 meta_req.set_ic = &set_ic;2559 xsk_tx_metadata_request(meta, &stmmac_xsk_tx_metadata_ops,2560 &meta_req);2561 if (set_ic) {2562 tx_q->tx_count_frames = 0;2563 stmmac_set_tx_ic(priv, tx_desc);2564 tx_set_ic_bit++;2565 }2566 2567 stmmac_prepare_tx_desc(priv, tx_desc, 1, xdp_desc.len,2568 true, priv->mode, true, true,2569 xdp_desc.len);2570 2571 stmmac_enable_dma_transmission(priv, priv->ioaddr, queue);2572 2573 xsk_tx_metadata_to_compl(meta,2574 &tx_q->tx_skbuff_dma[entry].xsk_meta);2575 2576 tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, priv->dma_conf.dma_tx_size);2577 entry = tx_q->cur_tx;2578 }2579 u64_stats_update_begin(&txq_stats->napi_syncp);2580 u64_stats_add(&txq_stats->napi.tx_set_ic_bit, tx_set_ic_bit);2581 u64_stats_update_end(&txq_stats->napi_syncp);2582 2583 if (tx_desc) {2584 stmmac_flush_tx_descriptors(priv, queue);2585 xsk_tx_release(pool);2586 }2587 2588 /* Return true if all of the 3 conditions are met2589 * a) TX Budget is still available2590 * b) work_done = true when XSK TX desc peek is empty (no more2591 * pending XSK TX for transmission)2592 */2593 return !!budget && work_done;2594}2595 2596static void stmmac_bump_dma_threshold(struct stmmac_priv *priv, u32 chan)2597{2598 if (unlikely(priv->xstats.threshold != SF_DMA_MODE) && tc <= 256) {2599 tc += 64;2600 2601 if (priv->plat->force_thresh_dma_mode)2602 stmmac_set_dma_operation_mode(priv, tc, tc, chan);2603 else2604 stmmac_set_dma_operation_mode(priv, tc, SF_DMA_MODE,2605 chan);2606 2607 priv->xstats.threshold = tc;2608 }2609}2610 2611/**2612 * stmmac_tx_clean - to manage the transmission completion2613 * @priv: driver private structure2614 * @budget: napi budget limiting this functions packet handling2615 * @queue: TX queue index2616 * @pending_packets: signal to arm the TX coal timer2617 * Description: it reclaims the transmit resources after transmission completes.2618 * If some packets still needs to be handled, due to TX coalesce, set2619 * pending_packets to true to make NAPI arm the TX coal timer.2620 */2621static int stmmac_tx_clean(struct stmmac_priv *priv, int budget, u32 queue,2622 bool *pending_packets)2623{2624 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];2625 struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[queue];2626 unsigned int bytes_compl = 0, pkts_compl = 0;2627 unsigned int entry, xmits = 0, count = 0;2628 u32 tx_packets = 0, tx_errors = 0;2629 2630 __netif_tx_lock_bh(netdev_get_tx_queue(priv->dev, queue));2631 2632 tx_q->xsk_frames_done = 0;2633 2634 entry = tx_q->dirty_tx;2635 2636 /* Try to clean all TX complete frame in 1 shot */2637 while ((entry != tx_q->cur_tx) && count < priv->dma_conf.dma_tx_size) {2638 struct xdp_frame *xdpf;2639 struct sk_buff *skb;2640 struct dma_desc *p;2641 int status;2642 2643 if (tx_q->tx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_XDP_TX ||2644 tx_q->tx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_XDP_NDO) {2645 xdpf = tx_q->xdpf[entry];2646 skb = NULL;2647 } else if (tx_q->tx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_SKB) {2648 xdpf = NULL;2649 skb = tx_q->tx_skbuff[entry];2650 } else {2651 xdpf = NULL;2652 skb = NULL;2653 }2654 2655 if (priv->extend_desc)2656 p = (struct dma_desc *)(tx_q->dma_etx + entry);2657 else if (tx_q->tbs & STMMAC_TBS_AVAIL)2658 p = &tx_q->dma_entx[entry].basic;2659 else2660 p = tx_q->dma_tx + entry;2661 2662 status = stmmac_tx_status(priv, &priv->xstats, p, priv->ioaddr);2663 /* Check if the descriptor is owned by the DMA */2664 if (unlikely(status & tx_dma_own))2665 break;2666 2667 count++;2668 2669 /* Make sure descriptor fields are read after reading2670 * the own bit.2671 */2672 dma_rmb();2673 2674 /* Just consider the last segment and ...*/2675 if (likely(!(status & tx_not_ls))) {2676 /* ... verify the status error condition */2677 if (unlikely(status & tx_err)) {2678 tx_errors++;2679 if (unlikely(status & tx_err_bump_tc))2680 stmmac_bump_dma_threshold(priv, queue);2681 } else {2682 tx_packets++;2683 }2684 if (skb) {2685 stmmac_get_tx_hwtstamp(priv, p, skb);2686 } else if (tx_q->xsk_pool &&2687 xp_tx_metadata_enabled(tx_q->xsk_pool)) {2688 struct stmmac_xsk_tx_complete tx_compl = {2689 .priv = priv,2690 .desc = p,2691 };2692 2693 xsk_tx_metadata_complete(&tx_q->tx_skbuff_dma[entry].xsk_meta,2694 &stmmac_xsk_tx_metadata_ops,2695 &tx_compl);2696 }2697 }2698 2699 if (likely(tx_q->tx_skbuff_dma[entry].buf &&2700 tx_q->tx_skbuff_dma[entry].buf_type != STMMAC_TXBUF_T_XDP_TX)) {2701 if (tx_q->tx_skbuff_dma[entry].map_as_page)2702 dma_unmap_page(priv->device,2703 tx_q->tx_skbuff_dma[entry].buf,2704 tx_q->tx_skbuff_dma[entry].len,2705 DMA_TO_DEVICE);2706 else2707 dma_unmap_single(priv->device,2708 tx_q->tx_skbuff_dma[entry].buf,2709 tx_q->tx_skbuff_dma[entry].len,2710 DMA_TO_DEVICE);2711 tx_q->tx_skbuff_dma[entry].buf = 0;2712 tx_q->tx_skbuff_dma[entry].len = 0;2713 tx_q->tx_skbuff_dma[entry].map_as_page = false;2714 }2715 2716 stmmac_clean_desc3(priv, tx_q, p);2717 2718 tx_q->tx_skbuff_dma[entry].last_segment = false;2719 tx_q->tx_skbuff_dma[entry].is_jumbo = false;2720 2721 if (xdpf &&2722 tx_q->tx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_XDP_TX) {2723 xdp_return_frame_rx_napi(xdpf);2724 tx_q->xdpf[entry] = NULL;2725 }2726 2727 if (xdpf &&2728 tx_q->tx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_XDP_NDO) {2729 xdp_return_frame(xdpf);2730 tx_q->xdpf[entry] = NULL;2731 }2732 2733 if (tx_q->tx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_XSK_TX)2734 tx_q->xsk_frames_done++;2735 2736 if (tx_q->tx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_SKB) {2737 if (likely(skb)) {2738 pkts_compl++;2739 bytes_compl += skb->len;2740 dev_consume_skb_any(skb);2741 tx_q->tx_skbuff[entry] = NULL;2742 }2743 }2744 2745 stmmac_release_tx_desc(priv, p, priv->mode);2746 2747 entry = STMMAC_GET_ENTRY(entry, priv->dma_conf.dma_tx_size);2748 }2749 tx_q->dirty_tx = entry;2750 2751 netdev_tx_completed_queue(netdev_get_tx_queue(priv->dev, queue),2752 pkts_compl, bytes_compl);2753 2754 if (unlikely(netif_tx_queue_stopped(netdev_get_tx_queue(priv->dev,2755 queue))) &&2756 stmmac_tx_avail(priv, queue) > STMMAC_TX_THRESH(priv)) {2757 2758 netif_dbg(priv, tx_done, priv->dev,2759 "%s: restart transmit\n", __func__);2760 netif_tx_wake_queue(netdev_get_tx_queue(priv->dev, queue));2761 }2762 2763 if (tx_q->xsk_pool) {2764 bool work_done;2765 2766 if (tx_q->xsk_frames_done)2767 xsk_tx_completed(tx_q->xsk_pool, tx_q->xsk_frames_done);2768 2769 if (xsk_uses_need_wakeup(tx_q->xsk_pool))2770 xsk_set_tx_need_wakeup(tx_q->xsk_pool);2771 2772 /* For XSK TX, we try to send as many as possible.2773 * If XSK work done (XSK TX desc empty and budget still2774 * available), return "budget - 1" to reenable TX IRQ.2775 * Else, return "budget" to make NAPI continue polling.2776 */2777 work_done = stmmac_xdp_xmit_zc(priv, queue,2778 STMMAC_XSK_TX_BUDGET_MAX);2779 if (work_done)2780 xmits = budget - 1;2781 else2782 xmits = budget;2783 }2784 2785 if (priv->eee_enabled && !priv->tx_path_in_lpi_mode &&2786 priv->eee_sw_timer_en) {2787 if (stmmac_enable_eee_mode(priv))2788 mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(priv->tx_lpi_timer));2789 }2790 2791 /* We still have pending packets, let's call for a new scheduling */2792 if (tx_q->dirty_tx != tx_q->cur_tx)2793 *pending_packets = true;2794 2795 u64_stats_update_begin(&txq_stats->napi_syncp);2796 u64_stats_add(&txq_stats->napi.tx_packets, tx_packets);2797 u64_stats_add(&txq_stats->napi.tx_pkt_n, tx_packets);2798 u64_stats_inc(&txq_stats->napi.tx_clean);2799 u64_stats_update_end(&txq_stats->napi_syncp);2800 2801 priv->xstats.tx_errors += tx_errors;2802 2803 __netif_tx_unlock_bh(netdev_get_tx_queue(priv->dev, queue));2804 2805 /* Combine decisions from TX clean and XSK TX */2806 return max(count, xmits);2807}2808 2809/**2810 * stmmac_tx_err - to manage the tx error2811 * @priv: driver private structure2812 * @chan: channel index2813 * Description: it cleans the descriptors and restarts the transmission2814 * in case of transmission errors.2815 */2816static void stmmac_tx_err(struct stmmac_priv *priv, u32 chan)2817{2818 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[chan];2819 2820 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, chan));2821 2822 stmmac_stop_tx_dma(priv, chan);2823 dma_free_tx_skbufs(priv, &priv->dma_conf, chan);2824 stmmac_clear_tx_descriptors(priv, &priv->dma_conf, chan);2825 stmmac_reset_tx_queue(priv, chan);2826 stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,2827 tx_q->dma_tx_phy, chan);2828 stmmac_start_tx_dma(priv, chan);2829 2830 priv->xstats.tx_errors++;2831 netif_tx_wake_queue(netdev_get_tx_queue(priv->dev, chan));2832}2833 2834/**2835 * stmmac_set_dma_operation_mode - Set DMA operation mode by channel2836 * @priv: driver private structure2837 * @txmode: TX operating mode2838 * @rxmode: RX operating mode2839 * @chan: channel index2840 * Description: it is used for configuring of the DMA operation mode in2841 * runtime in order to program the tx/rx DMA thresholds or Store-And-Forward2842 * mode.2843 */2844static void stmmac_set_dma_operation_mode(struct stmmac_priv *priv, u32 txmode,2845 u32 rxmode, u32 chan)2846{2847 u8 rxqmode = priv->plat->rx_queues_cfg[chan].mode_to_use;2848 u8 txqmode = priv->plat->tx_queues_cfg[chan].mode_to_use;2849 u32 rx_channels_count = priv->plat->rx_queues_to_use;2850 u32 tx_channels_count = priv->plat->tx_queues_to_use;2851 int rxfifosz = priv->plat->rx_fifo_size;2852 int txfifosz = priv->plat->tx_fifo_size;2853 2854 if (rxfifosz == 0)2855 rxfifosz = priv->dma_cap.rx_fifo_size;2856 if (txfifosz == 0)2857 txfifosz = priv->dma_cap.tx_fifo_size;2858 2859 /* Adjust for real per queue fifo size */2860 rxfifosz /= rx_channels_count;2861 txfifosz /= tx_channels_count;2862 2863 stmmac_dma_rx_mode(priv, priv->ioaddr, rxmode, chan, rxfifosz, rxqmode);2864 stmmac_dma_tx_mode(priv, priv->ioaddr, txmode, chan, txfifosz, txqmode);2865}2866 2867static bool stmmac_safety_feat_interrupt(struct stmmac_priv *priv)2868{2869 int ret;2870 2871 ret = stmmac_safety_feat_irq_status(priv, priv->dev,2872 priv->ioaddr, priv->dma_cap.asp, &priv->sstats);2873 if (ret && (ret != -EINVAL)) {2874 stmmac_global_err(priv);2875 return true;2876 }2877 2878 return false;2879}2880 2881static int stmmac_napi_check(struct stmmac_priv *priv, u32 chan, u32 dir)2882{2883 int status = stmmac_dma_interrupt_status(priv, priv->ioaddr,2884 &priv->xstats, chan, dir);2885 struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[chan];2886 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[chan];2887 struct stmmac_channel *ch = &priv->channel[chan];2888 struct napi_struct *rx_napi;2889 struct napi_struct *tx_napi;2890 unsigned long flags;2891 2892 rx_napi = rx_q->xsk_pool ? &ch->rxtx_napi : &ch->rx_napi;2893 tx_napi = tx_q->xsk_pool ? &ch->rxtx_napi : &ch->tx_napi;2894 2895 if ((status & handle_rx) && (chan < priv->plat->rx_queues_to_use)) {2896 if (napi_schedule_prep(rx_napi)) {2897 spin_lock_irqsave(&ch->lock, flags);2898 stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 1, 0);2899 spin_unlock_irqrestore(&ch->lock, flags);2900 __napi_schedule(rx_napi);2901 }2902 }2903 2904 if ((status & handle_tx) && (chan < priv->plat->tx_queues_to_use)) {2905 if (napi_schedule_prep(tx_napi)) {2906 spin_lock_irqsave(&ch->lock, flags);2907 stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 0, 1);2908 spin_unlock_irqrestore(&ch->lock, flags);2909 __napi_schedule(tx_napi);2910 }2911 }2912 2913 return status;2914}2915 2916/**2917 * stmmac_dma_interrupt - DMA ISR2918 * @priv: driver private structure2919 * Description: this is the DMA ISR. It is called by the main ISR.2920 * It calls the dwmac dma routine and schedule poll method in case of some2921 * work can be done.2922 */2923static void stmmac_dma_interrupt(struct stmmac_priv *priv)2924{2925 u32 tx_channel_count = priv->plat->tx_queues_to_use;2926 u32 rx_channel_count = priv->plat->rx_queues_to_use;2927 u32 channels_to_check = tx_channel_count > rx_channel_count ?2928 tx_channel_count : rx_channel_count;2929 u32 chan;2930 int status[MAX_T(u32, MTL_MAX_TX_QUEUES, MTL_MAX_RX_QUEUES)];2931 2932 /* Make sure we never check beyond our status buffer. */2933 if (WARN_ON_ONCE(channels_to_check > ARRAY_SIZE(status)))2934 channels_to_check = ARRAY_SIZE(status);2935 2936 for (chan = 0; chan < channels_to_check; chan++)2937 status[chan] = stmmac_napi_check(priv, chan,2938 DMA_DIR_RXTX);2939 2940 for (chan = 0; chan < tx_channel_count; chan++) {2941 if (unlikely(status[chan] & tx_hard_error_bump_tc)) {2942 /* Try to bump up the dma threshold on this failure */2943 stmmac_bump_dma_threshold(priv, chan);2944 } else if (unlikely(status[chan] == tx_hard_error)) {2945 stmmac_tx_err(priv, chan);2946 }2947 }2948}2949 2950/**2951 * stmmac_mmc_setup: setup the Mac Management Counters (MMC)2952 * @priv: driver private structure2953 * Description: this masks the MMC irq, in fact, the counters are managed in SW.2954 */2955static void stmmac_mmc_setup(struct stmmac_priv *priv)2956{2957 unsigned int mode = MMC_CNTRL_RESET_ON_READ | MMC_CNTRL_COUNTER_RESET |2958 MMC_CNTRL_PRESET | MMC_CNTRL_FULL_HALF_PRESET;2959 2960 stmmac_mmc_intr_all_mask(priv, priv->mmcaddr);2961 2962 if (priv->dma_cap.rmon) {2963 stmmac_mmc_ctrl(priv, priv->mmcaddr, mode);2964 memset(&priv->mmc, 0, sizeof(struct stmmac_counters));2965 } else2966 netdev_info(priv->dev, "No MAC Management Counters available\n");2967}2968 2969/**2970 * stmmac_get_hw_features - get MAC capabilities from the HW cap. register.2971 * @priv: driver private structure2972 * Description:2973 * new GMAC chip generations have a new register to indicate the2974 * presence of the optional feature/functions.2975 * This can be also used to override the value passed through the2976 * platform and necessary for old MAC10/100 and GMAC chips.2977 */2978static int stmmac_get_hw_features(struct stmmac_priv *priv)2979{2980 return stmmac_get_hw_feature(priv, priv->ioaddr, &priv->dma_cap) == 0;2981}2982 2983/**2984 * stmmac_check_ether_addr - check if the MAC addr is valid2985 * @priv: driver private structure2986 * Description:2987 * it is to verify if the MAC address is valid, in case of failures it2988 * generates a random MAC address2989 */2990static void stmmac_check_ether_addr(struct stmmac_priv *priv)2991{2992 u8 addr[ETH_ALEN];2993 2994 if (!is_valid_ether_addr(priv->dev->dev_addr)) {2995 stmmac_get_umac_addr(priv, priv->hw, addr, 0);2996 if (is_valid_ether_addr(addr))2997 eth_hw_addr_set(priv->dev, addr);2998 else2999 eth_hw_addr_random(priv->dev);3000 dev_info(priv->device, "device MAC address %pM\n",3001 priv->dev->dev_addr);3002 }3003}3004 3005/**3006 * stmmac_init_dma_engine - DMA init.3007 * @priv: driver private structure3008 * Description:3009 * It inits the DMA invoking the specific MAC/GMAC callback.3010 * Some DMA parameters can be passed from the platform;3011 * in case of these are not passed a default is kept for the MAC or GMAC.3012 */3013static int stmmac_init_dma_engine(struct stmmac_priv *priv)3014{3015 u32 rx_channels_count = priv->plat->rx_queues_to_use;3016 u32 tx_channels_count = priv->plat->tx_queues_to_use;3017 u32 dma_csr_ch = max(rx_channels_count, tx_channels_count);3018 struct stmmac_rx_queue *rx_q;3019 struct stmmac_tx_queue *tx_q;3020 u32 chan = 0;3021 int ret = 0;3022 3023 if (!priv->plat->dma_cfg || !priv->plat->dma_cfg->pbl) {3024 dev_err(priv->device, "Invalid DMA configuration\n");3025 return -EINVAL;3026 }3027 3028 if (priv->extend_desc && (priv->mode == STMMAC_RING_MODE))3029 priv->plat->dma_cfg->atds = 1;3030 3031 ret = stmmac_reset(priv, priv->ioaddr);3032 if (ret) {3033 dev_err(priv->device, "Failed to reset the dma\n");3034 return ret;3035 }3036 3037 /* DMA Configuration */3038 stmmac_dma_init(priv, priv->ioaddr, priv->plat->dma_cfg);3039 3040 if (priv->plat->axi)3041 stmmac_axi(priv, priv->ioaddr, priv->plat->axi);3042 3043 /* DMA CSR Channel configuration */3044 for (chan = 0; chan < dma_csr_ch; chan++) {3045 stmmac_init_chan(priv, priv->ioaddr, priv->plat->dma_cfg, chan);3046 stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 1, 1);3047 }3048 3049 /* DMA RX Channel Configuration */3050 for (chan = 0; chan < rx_channels_count; chan++) {3051 rx_q = &priv->dma_conf.rx_queue[chan];3052 3053 stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,3054 rx_q->dma_rx_phy, chan);3055 3056 rx_q->rx_tail_addr = rx_q->dma_rx_phy +3057 (rx_q->buf_alloc_num *3058 sizeof(struct dma_desc));3059 stmmac_set_rx_tail_ptr(priv, priv->ioaddr,3060 rx_q->rx_tail_addr, chan);3061 }3062 3063 /* DMA TX Channel Configuration */3064 for (chan = 0; chan < tx_channels_count; chan++) {3065 tx_q = &priv->dma_conf.tx_queue[chan];3066 3067 stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,3068 tx_q->dma_tx_phy, chan);3069 3070 tx_q->tx_tail_addr = tx_q->dma_tx_phy;3071 stmmac_set_tx_tail_ptr(priv, priv->ioaddr,3072 tx_q->tx_tail_addr, chan);3073 }3074 3075 return ret;3076}3077 3078static void stmmac_tx_timer_arm(struct stmmac_priv *priv, u32 queue)3079{3080 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];3081 u32 tx_coal_timer = priv->tx_coal_timer[queue];3082 struct stmmac_channel *ch;3083 struct napi_struct *napi;3084 3085 if (!tx_coal_timer)3086 return;3087 3088 ch = &priv->channel[tx_q->queue_index];3089 napi = tx_q->xsk_pool ? &ch->rxtx_napi : &ch->tx_napi;3090 3091 /* Arm timer only if napi is not already scheduled.3092 * Try to cancel any timer if napi is scheduled, timer will be armed3093 * again in the next scheduled napi.3094 */3095 if (unlikely(!napi_is_scheduled(napi)))3096 hrtimer_start(&tx_q->txtimer,3097 STMMAC_COAL_TIMER(tx_coal_timer),3098 HRTIMER_MODE_REL);3099 else3100 hrtimer_try_to_cancel(&tx_q->txtimer);3101}3102 3103/**3104 * stmmac_tx_timer - mitigation sw timer for tx.3105 * @t: data pointer3106 * Description:3107 * This is the timer handler to directly invoke the stmmac_tx_clean.3108 */3109static enum hrtimer_restart stmmac_tx_timer(struct hrtimer *t)3110{3111 struct stmmac_tx_queue *tx_q = container_of(t, struct stmmac_tx_queue, txtimer);3112 struct stmmac_priv *priv = tx_q->priv_data;3113 struct stmmac_channel *ch;3114 struct napi_struct *napi;3115 3116 ch = &priv->channel[tx_q->queue_index];3117 napi = tx_q->xsk_pool ? &ch->rxtx_napi : &ch->tx_napi;3118 3119 if (likely(napi_schedule_prep(napi))) {3120 unsigned long flags;3121 3122 spin_lock_irqsave(&ch->lock, flags);3123 stmmac_disable_dma_irq(priv, priv->ioaddr, ch->index, 0, 1);3124 spin_unlock_irqrestore(&ch->lock, flags);3125 __napi_schedule(napi);3126 }3127 3128 return HRTIMER_NORESTART;3129}3130 3131/**3132 * stmmac_init_coalesce - init mitigation options.3133 * @priv: driver private structure3134 * Description:3135 * This inits the coalesce parameters: i.e. timer rate,3136 * timer handler and default threshold used for enabling the3137 * interrupt on completion bit.3138 */3139static void stmmac_init_coalesce(struct stmmac_priv *priv)3140{3141 u32 tx_channel_count = priv->plat->tx_queues_to_use;3142 u32 rx_channel_count = priv->plat->rx_queues_to_use;3143 u32 chan;3144 3145 for (chan = 0; chan < tx_channel_count; chan++) {3146 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[chan];3147 3148 priv->tx_coal_frames[chan] = STMMAC_TX_FRAMES;3149 priv->tx_coal_timer[chan] = STMMAC_COAL_TX_TIMER;3150 3151 hrtimer_init(&tx_q->txtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);3152 tx_q->txtimer.function = stmmac_tx_timer;3153 }3154 3155 for (chan = 0; chan < rx_channel_count; chan++)3156 priv->rx_coal_frames[chan] = STMMAC_RX_FRAMES;3157}3158 3159static void stmmac_set_rings_length(struct stmmac_priv *priv)3160{3161 u32 rx_channels_count = priv->plat->rx_queues_to_use;3162 u32 tx_channels_count = priv->plat->tx_queues_to_use;3163 u32 chan;3164 3165 /* set TX ring length */3166 for (chan = 0; chan < tx_channels_count; chan++)3167 stmmac_set_tx_ring_len(priv, priv->ioaddr,3168 (priv->dma_conf.dma_tx_size - 1), chan);3169 3170 /* set RX ring length */3171 for (chan = 0; chan < rx_channels_count; chan++)3172 stmmac_set_rx_ring_len(priv, priv->ioaddr,3173 (priv->dma_conf.dma_rx_size - 1), chan);3174}3175 3176/**3177 * stmmac_set_tx_queue_weight - Set TX queue weight3178 * @priv: driver private structure3179 * Description: It is used for setting TX queues weight3180 */3181static void stmmac_set_tx_queue_weight(struct stmmac_priv *priv)3182{3183 u32 tx_queues_count = priv->plat->tx_queues_to_use;3184 u32 weight;3185 u32 queue;3186 3187 for (queue = 0; queue < tx_queues_count; queue++) {3188 weight = priv->plat->tx_queues_cfg[queue].weight;3189 stmmac_set_mtl_tx_queue_weight(priv, priv->hw, weight, queue);3190 }3191}3192 3193/**3194 * stmmac_configure_cbs - Configure CBS in TX queue3195 * @priv: driver private structure3196 * Description: It is used for configuring CBS in AVB TX queues3197 */3198static void stmmac_configure_cbs(struct stmmac_priv *priv)3199{3200 u32 tx_queues_count = priv->plat->tx_queues_to_use;3201 u32 mode_to_use;3202 u32 queue;3203 3204 /* queue 0 is reserved for legacy traffic */3205 for (queue = 1; queue < tx_queues_count; queue++) {3206 mode_to_use = priv->plat->tx_queues_cfg[queue].mode_to_use;3207 if (mode_to_use == MTL_QUEUE_DCB)3208 continue;3209 3210 stmmac_config_cbs(priv, priv->hw,3211 priv->plat->tx_queues_cfg[queue].send_slope,3212 priv->plat->tx_queues_cfg[queue].idle_slope,3213 priv->plat->tx_queues_cfg[queue].high_credit,3214 priv->plat->tx_queues_cfg[queue].low_credit,3215 queue);3216 }3217}3218 3219/**3220 * stmmac_rx_queue_dma_chan_map - Map RX queue to RX dma channel3221 * @priv: driver private structure3222 * Description: It is used for mapping RX queues to RX dma channels3223 */3224static void stmmac_rx_queue_dma_chan_map(struct stmmac_priv *priv)3225{3226 u32 rx_queues_count = priv->plat->rx_queues_to_use;3227 u32 queue;3228 u32 chan;3229 3230 for (queue = 0; queue < rx_queues_count; queue++) {3231 chan = priv->plat->rx_queues_cfg[queue].chan;3232 stmmac_map_mtl_to_dma(priv, priv->hw, queue, chan);3233 }3234}3235 3236/**3237 * stmmac_mac_config_rx_queues_prio - Configure RX Queue priority3238 * @priv: driver private structure3239 * Description: It is used for configuring the RX Queue Priority3240 */3241static void stmmac_mac_config_rx_queues_prio(struct stmmac_priv *priv)3242{3243 u32 rx_queues_count = priv->plat->rx_queues_to_use;3244 u32 queue;3245 u32 prio;3246 3247 for (queue = 0; queue < rx_queues_count; queue++) {3248 if (!priv->plat->rx_queues_cfg[queue].use_prio)3249 continue;3250 3251 prio = priv->plat->rx_queues_cfg[queue].prio;3252 stmmac_rx_queue_prio(priv, priv->hw, prio, queue);3253 }3254}3255 3256/**3257 * stmmac_mac_config_tx_queues_prio - Configure TX Queue priority3258 * @priv: driver private structure3259 * Description: It is used for configuring the TX Queue Priority3260 */3261static void stmmac_mac_config_tx_queues_prio(struct stmmac_priv *priv)3262{3263 u32 tx_queues_count = priv->plat->tx_queues_to_use;3264 u32 queue;3265 u32 prio;3266 3267 for (queue = 0; queue < tx_queues_count; queue++) {3268 if (!priv->plat->tx_queues_cfg[queue].use_prio)3269 continue;3270 3271 prio = priv->plat->tx_queues_cfg[queue].prio;3272 stmmac_tx_queue_prio(priv, priv->hw, prio, queue);3273 }3274}3275 3276/**3277 * stmmac_mac_config_rx_queues_routing - Configure RX Queue Routing3278 * @priv: driver private structure3279 * Description: It is used for configuring the RX queue routing3280 */3281static void stmmac_mac_config_rx_queues_routing(struct stmmac_priv *priv)3282{3283 u32 rx_queues_count = priv->plat->rx_queues_to_use;3284 u32 queue;3285 u8 packet;3286 3287 for (queue = 0; queue < rx_queues_count; queue++) {3288 /* no specific packet type routing specified for the queue */3289 if (priv->plat->rx_queues_cfg[queue].pkt_route == 0x0)3290 continue;3291 3292 packet = priv->plat->rx_queues_cfg[queue].pkt_route;3293 stmmac_rx_queue_routing(priv, priv->hw, packet, queue);3294 }3295}3296 3297static void stmmac_mac_config_rss(struct stmmac_priv *priv)3298{3299 if (!priv->dma_cap.rssen || !priv->plat->rss_en) {3300 priv->rss.enable = false;3301 return;3302 }3303 3304 if (priv->dev->features & NETIF_F_RXHASH)3305 priv->rss.enable = true;3306 else3307 priv->rss.enable = false;3308 3309 stmmac_rss_configure(priv, priv->hw, &priv->rss,3310 priv->plat->rx_queues_to_use);3311}3312 3313/**3314 * stmmac_mtl_configuration - Configure MTL3315 * @priv: driver private structure3316 * Description: It is used for configurring MTL3317 */3318static void stmmac_mtl_configuration(struct stmmac_priv *priv)3319{3320 u32 rx_queues_count = priv->plat->rx_queues_to_use;3321 u32 tx_queues_count = priv->plat->tx_queues_to_use;3322 3323 if (tx_queues_count > 1)3324 stmmac_set_tx_queue_weight(priv);3325 3326 /* Configure MTL RX algorithms */3327 if (rx_queues_count > 1)3328 stmmac_prog_mtl_rx_algorithms(priv, priv->hw,3329 priv->plat->rx_sched_algorithm);3330 3331 /* Configure MTL TX algorithms */3332 if (tx_queues_count > 1)3333 stmmac_prog_mtl_tx_algorithms(priv, priv->hw,3334 priv->plat->tx_sched_algorithm);3335 3336 /* Configure CBS in AVB TX queues */3337 if (tx_queues_count > 1)3338 stmmac_configure_cbs(priv);3339 3340 /* Map RX MTL to DMA channels */3341 stmmac_rx_queue_dma_chan_map(priv);3342 3343 /* Enable MAC RX Queues */3344 stmmac_mac_enable_rx_queues(priv);3345 3346 /* Set RX priorities */3347 if (rx_queues_count > 1)3348 stmmac_mac_config_rx_queues_prio(priv);3349 3350 /* Set TX priorities */3351 if (tx_queues_count > 1)3352 stmmac_mac_config_tx_queues_prio(priv);3353 3354 /* Set RX routing */3355 if (rx_queues_count > 1)3356 stmmac_mac_config_rx_queues_routing(priv);3357 3358 /* Receive Side Scaling */3359 if (rx_queues_count > 1)3360 stmmac_mac_config_rss(priv);3361}3362 3363static void stmmac_safety_feat_configuration(struct stmmac_priv *priv)3364{3365 if (priv->dma_cap.asp) {3366 netdev_info(priv->dev, "Enabling Safety Features\n");3367 stmmac_safety_feat_config(priv, priv->ioaddr, priv->dma_cap.asp,3368 priv->plat->safety_feat_cfg);3369 } else {3370 netdev_info(priv->dev, "No Safety Features support found\n");3371 }3372}3373 3374/**3375 * stmmac_hw_setup - setup mac in a usable state.3376 * @dev : pointer to the device structure.3377 * @ptp_register: register PTP if set3378 * Description:3379 * this is the main function to setup the HW in a usable state because the3380 * dma engine is reset, the core registers are configured (e.g. AXI,3381 * Checksum features, timers). The DMA is ready to start receiving and3382 * transmitting.3383 * Return value:3384 * 0 on success and an appropriate (-)ve integer as defined in errno.h3385 * file on failure.3386 */3387static int stmmac_hw_setup(struct net_device *dev, bool ptp_register)3388{3389 struct stmmac_priv *priv = netdev_priv(dev);3390 u32 rx_cnt = priv->plat->rx_queues_to_use;3391 u32 tx_cnt = priv->plat->tx_queues_to_use;3392 bool sph_en;3393 u32 chan;3394 int ret;3395 3396 /* Make sure RX clock is enabled */3397 if (priv->hw->phylink_pcs)3398 phylink_pcs_pre_init(priv->phylink, priv->hw->phylink_pcs);3399 3400 /* DMA initialization and SW reset */3401 ret = stmmac_init_dma_engine(priv);3402 if (ret < 0) {3403 netdev_err(priv->dev, "%s: DMA engine initialization failed\n",3404 __func__);3405 return ret;3406 }3407 3408 /* Copy the MAC addr into the HW */3409 stmmac_set_umac_addr(priv, priv->hw, dev->dev_addr, 0);3410 3411 /* PS and related bits will be programmed according to the speed */3412 if (priv->hw->pcs) {3413 int speed = priv->plat->mac_port_sel_speed;3414 3415 if ((speed == SPEED_10) || (speed == SPEED_100) ||3416 (speed == SPEED_1000)) {3417 priv->hw->ps = speed;3418 } else {3419 dev_warn(priv->device, "invalid port speed\n");3420 priv->hw->ps = 0;3421 }3422 }3423 3424 /* Initialize the MAC Core */3425 stmmac_core_init(priv, priv->hw, dev);3426 3427 /* Initialize MTL*/3428 stmmac_mtl_configuration(priv);3429 3430 /* Initialize Safety Features */3431 stmmac_safety_feat_configuration(priv);3432 3433 ret = stmmac_rx_ipc(priv, priv->hw);3434 if (!ret) {3435 netdev_warn(priv->dev, "RX IPC Checksum Offload disabled\n");3436 priv->plat->rx_coe = STMMAC_RX_COE_NONE;3437 priv->hw->rx_csum = 0;3438 }3439 3440 /* Enable the MAC Rx/Tx */3441 stmmac_mac_set(priv, priv->ioaddr, true);3442 3443 /* Set the HW DMA mode and the COE */3444 stmmac_dma_operation_mode(priv);3445 3446 stmmac_mmc_setup(priv);3447 3448 if (ptp_register) {3449 ret = clk_prepare_enable(priv->plat->clk_ptp_ref);3450 if (ret < 0)3451 netdev_warn(priv->dev,3452 "failed to enable PTP reference clock: %pe\n",3453 ERR_PTR(ret));3454 }3455 3456 ret = stmmac_init_ptp(priv);3457 if (ret == -EOPNOTSUPP)3458 netdev_info(priv->dev, "PTP not supported by HW\n");3459 else if (ret)3460 netdev_warn(priv->dev, "PTP init failed\n");3461 else if (ptp_register)3462 stmmac_ptp_register(priv);3463 3464 priv->eee_tw_timer = STMMAC_DEFAULT_TWT_LS;3465 3466 /* Convert the timer from msec to usec */3467 if (!priv->tx_lpi_timer)3468 priv->tx_lpi_timer = eee_timer * 1000;3469 3470 if (priv->use_riwt) {3471 u32 queue;3472 3473 for (queue = 0; queue < rx_cnt; queue++) {3474 if (!priv->rx_riwt[queue])3475 priv->rx_riwt[queue] = DEF_DMA_RIWT;3476 3477 stmmac_rx_watchdog(priv, priv->ioaddr,3478 priv->rx_riwt[queue], queue);3479 }3480 }3481 3482 if (priv->hw->pcs)3483 stmmac_pcs_ctrl_ane(priv, priv->ioaddr, 1, priv->hw->ps, 0);3484 3485 /* set TX and RX rings length */3486 stmmac_set_rings_length(priv);3487 3488 /* Enable TSO */3489 if (priv->tso) {3490 for (chan = 0; chan < tx_cnt; chan++) {3491 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[chan];3492 3493 /* TSO and TBS cannot co-exist */3494 if (tx_q->tbs & STMMAC_TBS_AVAIL)3495 continue;3496 3497 stmmac_enable_tso(priv, priv->ioaddr, 1, chan);3498 }3499 }3500 3501 /* Enable Split Header */3502 sph_en = (priv->hw->rx_csum > 0) && priv->sph;3503 for (chan = 0; chan < rx_cnt; chan++)3504 stmmac_enable_sph(priv, priv->ioaddr, sph_en, chan);3505 3506 3507 /* VLAN Tag Insertion */3508 if (priv->dma_cap.vlins)3509 stmmac_enable_vlan(priv, priv->hw, STMMAC_VLAN_INSERT);3510 3511 /* TBS */3512 for (chan = 0; chan < tx_cnt; chan++) {3513 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[chan];3514 int enable = tx_q->tbs & STMMAC_TBS_AVAIL;3515 3516 stmmac_enable_tbs(priv, priv->ioaddr, enable, chan);3517 }3518 3519 /* Configure real RX and TX queues */3520 netif_set_real_num_rx_queues(dev, priv->plat->rx_queues_to_use);3521 netif_set_real_num_tx_queues(dev, priv->plat->tx_queues_to_use);3522 3523 /* Start the ball rolling... */3524 stmmac_start_all_dma(priv);3525 3526 stmmac_set_hw_vlan_mode(priv, priv->hw);3527 3528 return 0;3529}3530 3531static void stmmac_hw_teardown(struct net_device *dev)3532{3533 struct stmmac_priv *priv = netdev_priv(dev);3534 3535 clk_disable_unprepare(priv->plat->clk_ptp_ref);3536}3537 3538static void stmmac_free_irq(struct net_device *dev,3539 enum request_irq_err irq_err, int irq_idx)3540{3541 struct stmmac_priv *priv = netdev_priv(dev);3542 int j;3543 3544 switch (irq_err) {3545 case REQ_IRQ_ERR_ALL:3546 irq_idx = priv->plat->tx_queues_to_use;3547 fallthrough;3548 case REQ_IRQ_ERR_TX:3549 for (j = irq_idx - 1; j >= 0; j--) {3550 if (priv->tx_irq[j] > 0) {3551 irq_set_affinity_hint(priv->tx_irq[j], NULL);3552 free_irq(priv->tx_irq[j], &priv->dma_conf.tx_queue[j]);3553 }3554 }3555 irq_idx = priv->plat->rx_queues_to_use;3556 fallthrough;3557 case REQ_IRQ_ERR_RX:3558 for (j = irq_idx - 1; j >= 0; j--) {3559 if (priv->rx_irq[j] > 0) {3560 irq_set_affinity_hint(priv->rx_irq[j], NULL);3561 free_irq(priv->rx_irq[j], &priv->dma_conf.rx_queue[j]);3562 }3563 }3564 3565 if (priv->sfty_ue_irq > 0 && priv->sfty_ue_irq != dev->irq)3566 free_irq(priv->sfty_ue_irq, dev);3567 fallthrough;3568 case REQ_IRQ_ERR_SFTY_UE:3569 if (priv->sfty_ce_irq > 0 && priv->sfty_ce_irq != dev->irq)3570 free_irq(priv->sfty_ce_irq, dev);3571 fallthrough;3572 case REQ_IRQ_ERR_SFTY_CE:3573 if (priv->lpi_irq > 0 && priv->lpi_irq != dev->irq)3574 free_irq(priv->lpi_irq, dev);3575 fallthrough;3576 case REQ_IRQ_ERR_LPI:3577 if (priv->wol_irq > 0 && priv->wol_irq != dev->irq)3578 free_irq(priv->wol_irq, dev);3579 fallthrough;3580 case REQ_IRQ_ERR_SFTY:3581 if (priv->sfty_irq > 0 && priv->sfty_irq != dev->irq)3582 free_irq(priv->sfty_irq, dev);3583 fallthrough;3584 case REQ_IRQ_ERR_WOL:3585 free_irq(dev->irq, dev);3586 fallthrough;3587 case REQ_IRQ_ERR_MAC:3588 case REQ_IRQ_ERR_NO:3589 /* If MAC IRQ request error, no more IRQ to free */3590 break;3591 }3592}3593 3594static int stmmac_request_irq_multi_msi(struct net_device *dev)3595{3596 struct stmmac_priv *priv = netdev_priv(dev);3597 enum request_irq_err irq_err;3598 cpumask_t cpu_mask;3599 int irq_idx = 0;3600 char *int_name;3601 int ret;3602 int i;3603 3604 /* For common interrupt */3605 int_name = priv->int_name_mac;3606 sprintf(int_name, "%s:%s", dev->name, "mac");3607 ret = request_irq(dev->irq, stmmac_mac_interrupt,3608 0, int_name, dev);3609 if (unlikely(ret < 0)) {3610 netdev_err(priv->dev,3611 "%s: alloc mac MSI %d (error: %d)\n",3612 __func__, dev->irq, ret);3613 irq_err = REQ_IRQ_ERR_MAC;3614 goto irq_error;3615 }3616 3617 /* Request the Wake IRQ in case of another line3618 * is used for WoL3619 */3620 priv->wol_irq_disabled = true;3621 if (priv->wol_irq > 0 && priv->wol_irq != dev->irq) {3622 int_name = priv->int_name_wol;3623 sprintf(int_name, "%s:%s", dev->name, "wol");3624 ret = request_irq(priv->wol_irq,3625 stmmac_mac_interrupt,3626 0, int_name, dev);3627 if (unlikely(ret < 0)) {3628 netdev_err(priv->dev,3629 "%s: alloc wol MSI %d (error: %d)\n",3630 __func__, priv->wol_irq, ret);3631 irq_err = REQ_IRQ_ERR_WOL;3632 goto irq_error;3633 }3634 }3635 3636 /* Request the LPI IRQ in case of another line3637 * is used for LPI3638 */3639 if (priv->lpi_irq > 0 && priv->lpi_irq != dev->irq) {3640 int_name = priv->int_name_lpi;3641 sprintf(int_name, "%s:%s", dev->name, "lpi");3642 ret = request_irq(priv->lpi_irq,3643 stmmac_mac_interrupt,3644 0, int_name, dev);3645 if (unlikely(ret < 0)) {3646 netdev_err(priv->dev,3647 "%s: alloc lpi MSI %d (error: %d)\n",3648 __func__, priv->lpi_irq, ret);3649 irq_err = REQ_IRQ_ERR_LPI;3650 goto irq_error;3651 }3652 }3653 3654 /* Request the common Safety Feature Correctible/Uncorrectible3655 * Error line in case of another line is used3656 */3657 if (priv->sfty_irq > 0 && priv->sfty_irq != dev->irq) {3658 int_name = priv->int_name_sfty;3659 sprintf(int_name, "%s:%s", dev->name, "safety");3660 ret = request_irq(priv->sfty_irq, stmmac_safety_interrupt,3661 0, int_name, dev);3662 if (unlikely(ret < 0)) {3663 netdev_err(priv->dev,3664 "%s: alloc sfty MSI %d (error: %d)\n",3665 __func__, priv->sfty_irq, ret);3666 irq_err = REQ_IRQ_ERR_SFTY;3667 goto irq_error;3668 }3669 }3670 3671 /* Request the Safety Feature Correctible Error line in3672 * case of another line is used3673 */3674 if (priv->sfty_ce_irq > 0 && priv->sfty_ce_irq != dev->irq) {3675 int_name = priv->int_name_sfty_ce;3676 sprintf(int_name, "%s:%s", dev->name, "safety-ce");3677 ret = request_irq(priv->sfty_ce_irq,3678 stmmac_safety_interrupt,3679 0, int_name, dev);3680 if (unlikely(ret < 0)) {3681 netdev_err(priv->dev,3682 "%s: alloc sfty ce MSI %d (error: %d)\n",3683 __func__, priv->sfty_ce_irq, ret);3684 irq_err = REQ_IRQ_ERR_SFTY_CE;3685 goto irq_error;3686 }3687 }3688 3689 /* Request the Safety Feature Uncorrectible Error line in3690 * case of another line is used3691 */3692 if (priv->sfty_ue_irq > 0 && priv->sfty_ue_irq != dev->irq) {3693 int_name = priv->int_name_sfty_ue;3694 sprintf(int_name, "%s:%s", dev->name, "safety-ue");3695 ret = request_irq(priv->sfty_ue_irq,3696 stmmac_safety_interrupt,3697 0, int_name, dev);3698 if (unlikely(ret < 0)) {3699 netdev_err(priv->dev,3700 "%s: alloc sfty ue MSI %d (error: %d)\n",3701 __func__, priv->sfty_ue_irq, ret);3702 irq_err = REQ_IRQ_ERR_SFTY_UE;3703 goto irq_error;3704 }3705 }3706 3707 /* Request Rx MSI irq */3708 for (i = 0; i < priv->plat->rx_queues_to_use; i++) {3709 if (i >= MTL_MAX_RX_QUEUES)3710 break;3711 if (priv->rx_irq[i] == 0)3712 continue;3713 3714 int_name = priv->int_name_rx_irq[i];3715 sprintf(int_name, "%s:%s-%d", dev->name, "rx", i);3716 ret = request_irq(priv->rx_irq[i],3717 stmmac_msi_intr_rx,3718 0, int_name, &priv->dma_conf.rx_queue[i]);3719 if (unlikely(ret < 0)) {3720 netdev_err(priv->dev,3721 "%s: alloc rx-%d MSI %d (error: %d)\n",3722 __func__, i, priv->rx_irq[i], ret);3723 irq_err = REQ_IRQ_ERR_RX;3724 irq_idx = i;3725 goto irq_error;3726 }3727 cpumask_clear(&cpu_mask);3728 cpumask_set_cpu(i % num_online_cpus(), &cpu_mask);3729 irq_set_affinity_hint(priv->rx_irq[i], &cpu_mask);3730 }3731 3732 /* Request Tx MSI irq */3733 for (i = 0; i < priv->plat->tx_queues_to_use; i++) {3734 if (i >= MTL_MAX_TX_QUEUES)3735 break;3736 if (priv->tx_irq[i] == 0)3737 continue;3738 3739 int_name = priv->int_name_tx_irq[i];3740 sprintf(int_name, "%s:%s-%d", dev->name, "tx", i);3741 ret = request_irq(priv->tx_irq[i],3742 stmmac_msi_intr_tx,3743 0, int_name, &priv->dma_conf.tx_queue[i]);3744 if (unlikely(ret < 0)) {3745 netdev_err(priv->dev,3746 "%s: alloc tx-%d MSI %d (error: %d)\n",3747 __func__, i, priv->tx_irq[i], ret);3748 irq_err = REQ_IRQ_ERR_TX;3749 irq_idx = i;3750 goto irq_error;3751 }3752 cpumask_clear(&cpu_mask);3753 cpumask_set_cpu(i % num_online_cpus(), &cpu_mask);3754 irq_set_affinity_hint(priv->tx_irq[i], &cpu_mask);3755 }3756 3757 return 0;3758 3759irq_error:3760 stmmac_free_irq(dev, irq_err, irq_idx);3761 return ret;3762}3763 3764static int stmmac_request_irq_single(struct net_device *dev)3765{3766 struct stmmac_priv *priv = netdev_priv(dev);3767 enum request_irq_err irq_err;3768 int ret;3769 3770 ret = request_irq(dev->irq, stmmac_interrupt,3771 IRQF_SHARED, dev->name, dev);3772 if (unlikely(ret < 0)) {3773 netdev_err(priv->dev,3774 "%s: ERROR: allocating the IRQ %d (error: %d)\n",3775 __func__, dev->irq, ret);3776 irq_err = REQ_IRQ_ERR_MAC;3777 goto irq_error;3778 }3779 3780 /* Request the Wake IRQ in case of another line3781 * is used for WoL3782 */3783 priv->wol_irq_disabled = true;3784 if (priv->wol_irq > 0 && priv->wol_irq != dev->irq) {3785 ret = request_irq(priv->wol_irq, stmmac_interrupt,3786 IRQF_SHARED, dev->name, dev);3787 if (unlikely(ret < 0)) {3788 netdev_err(priv->dev,3789 "%s: ERROR: allocating the WoL IRQ %d (%d)\n",3790 __func__, priv->wol_irq, ret);3791 irq_err = REQ_IRQ_ERR_WOL;3792 goto irq_error;3793 }3794 }3795 3796 /* Request the IRQ lines */3797 if (priv->lpi_irq > 0 && priv->lpi_irq != dev->irq) {3798 ret = request_irq(priv->lpi_irq, stmmac_interrupt,3799 IRQF_SHARED, dev->name, dev);3800 if (unlikely(ret < 0)) {3801 netdev_err(priv->dev,3802 "%s: ERROR: allocating the LPI IRQ %d (%d)\n",3803 __func__, priv->lpi_irq, ret);3804 irq_err = REQ_IRQ_ERR_LPI;3805 goto irq_error;3806 }3807 }3808 3809 /* Request the common Safety Feature Correctible/Uncorrectible3810 * Error line in case of another line is used3811 */3812 if (priv->sfty_irq > 0 && priv->sfty_irq != dev->irq) {3813 ret = request_irq(priv->sfty_irq, stmmac_safety_interrupt,3814 IRQF_SHARED, dev->name, dev);3815 if (unlikely(ret < 0)) {3816 netdev_err(priv->dev,3817 "%s: ERROR: allocating the sfty IRQ %d (%d)\n",3818 __func__, priv->sfty_irq, ret);3819 irq_err = REQ_IRQ_ERR_SFTY;3820 goto irq_error;3821 }3822 }3823 3824 return 0;3825 3826irq_error:3827 stmmac_free_irq(dev, irq_err, 0);3828 return ret;3829}3830 3831static int stmmac_request_irq(struct net_device *dev)3832{3833 struct stmmac_priv *priv = netdev_priv(dev);3834 int ret;3835 3836 /* Request the IRQ lines */3837 if (priv->plat->flags & STMMAC_FLAG_MULTI_MSI_EN)3838 ret = stmmac_request_irq_multi_msi(dev);3839 else3840 ret = stmmac_request_irq_single(dev);3841 3842 return ret;3843}3844 3845/**3846 * stmmac_setup_dma_desc - Generate a dma_conf and allocate DMA queue3847 * @priv: driver private structure3848 * @mtu: MTU to setup the dma queue and buf with3849 * Description: Allocate and generate a dma_conf based on the provided MTU.3850 * Allocate the Tx/Rx DMA queue and init them.3851 * Return value:3852 * the dma_conf allocated struct on success and an appropriate ERR_PTR on failure.3853 */3854static struct stmmac_dma_conf *3855stmmac_setup_dma_desc(struct stmmac_priv *priv, unsigned int mtu)3856{3857 struct stmmac_dma_conf *dma_conf;3858 int chan, bfsize, ret;3859 3860 dma_conf = kzalloc(sizeof(*dma_conf), GFP_KERNEL);3861 if (!dma_conf) {3862 netdev_err(priv->dev, "%s: DMA conf allocation failed\n",3863 __func__);3864 return ERR_PTR(-ENOMEM);3865 }3866 3867 bfsize = stmmac_set_16kib_bfsize(priv, mtu);3868 if (bfsize < 0)3869 bfsize = 0;3870 3871 if (bfsize < BUF_SIZE_16KiB)3872 bfsize = stmmac_set_bfsize(mtu, 0);3873 3874 dma_conf->dma_buf_sz = bfsize;3875 /* Chose the tx/rx size from the already defined one in the3876 * priv struct. (if defined)3877 */3878 dma_conf->dma_tx_size = priv->dma_conf.dma_tx_size;3879 dma_conf->dma_rx_size = priv->dma_conf.dma_rx_size;3880 3881 if (!dma_conf->dma_tx_size)3882 dma_conf->dma_tx_size = DMA_DEFAULT_TX_SIZE;3883 if (!dma_conf->dma_rx_size)3884 dma_conf->dma_rx_size = DMA_DEFAULT_RX_SIZE;3885 3886 /* Earlier check for TBS */3887 for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++) {3888 struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[chan];3889 int tbs_en = priv->plat->tx_queues_cfg[chan].tbs_en;3890 3891 /* Setup per-TXQ tbs flag before TX descriptor alloc */3892 tx_q->tbs |= tbs_en ? STMMAC_TBS_AVAIL : 0;3893 }3894 3895 ret = alloc_dma_desc_resources(priv, dma_conf);3896 if (ret < 0) {3897 netdev_err(priv->dev, "%s: DMA descriptors allocation failed\n",3898 __func__);3899 goto alloc_error;3900 }3901 3902 ret = init_dma_desc_rings(priv->dev, dma_conf, GFP_KERNEL);3903 if (ret < 0) {3904 netdev_err(priv->dev, "%s: DMA descriptors initialization failed\n",3905 __func__);3906 goto init_error;3907 }3908 3909 return dma_conf;3910 3911init_error:3912 free_dma_desc_resources(priv, dma_conf);3913alloc_error:3914 kfree(dma_conf);3915 return ERR_PTR(ret);3916}3917 3918/**3919 * __stmmac_open - open entry point of the driver3920 * @dev : pointer to the device structure.3921 * @dma_conf : structure to take the dma data3922 * Description:3923 * This function is the open entry point of the driver.3924 * Return value:3925 * 0 on success and an appropriate (-)ve integer as defined in errno.h3926 * file on failure.3927 */3928static int __stmmac_open(struct net_device *dev,3929 struct stmmac_dma_conf *dma_conf)3930{3931 struct stmmac_priv *priv = netdev_priv(dev);3932 int mode = priv->plat->phy_interface;3933 u32 chan;3934 int ret;3935 3936 ret = pm_runtime_resume_and_get(priv->device);3937 if (ret < 0)3938 return ret;3939 3940 if ((!priv->hw->xpcs ||3941 xpcs_get_an_mode(priv->hw->xpcs, mode) != DW_AN_C73)) {3942 ret = stmmac_init_phy(dev);3943 if (ret) {3944 netdev_err(priv->dev,3945 "%s: Cannot attach to PHY (error: %d)\n",3946 __func__, ret);3947 goto init_phy_error;3948 }3949 }3950 3951 priv->rx_copybreak = STMMAC_RX_COPYBREAK;3952 3953 buf_sz = dma_conf->dma_buf_sz;3954 for (int i = 0; i < MTL_MAX_TX_QUEUES; i++)3955 if (priv->dma_conf.tx_queue[i].tbs & STMMAC_TBS_EN)3956 dma_conf->tx_queue[i].tbs = priv->dma_conf.tx_queue[i].tbs;3957 memcpy(&priv->dma_conf, dma_conf, sizeof(*dma_conf));3958 3959 stmmac_reset_queues_param(priv);3960 3961 if (!(priv->plat->flags & STMMAC_FLAG_SERDES_UP_AFTER_PHY_LINKUP) &&3962 priv->plat->serdes_powerup) {3963 ret = priv->plat->serdes_powerup(dev, priv->plat->bsp_priv);3964 if (ret < 0) {3965 netdev_err(priv->dev, "%s: Serdes powerup failed\n",3966 __func__);3967 goto init_error;3968 }3969 }3970 3971 ret = stmmac_hw_setup(dev, true);3972 if (ret < 0) {3973 netdev_err(priv->dev, "%s: Hw setup failed\n", __func__);3974 goto init_error;3975 }3976 3977 stmmac_init_coalesce(priv);3978 3979 phylink_start(priv->phylink);3980 /* We may have called phylink_speed_down before */3981 phylink_speed_up(priv->phylink);3982 3983 ret = stmmac_request_irq(dev);3984 if (ret)3985 goto irq_error;3986 3987 stmmac_enable_all_queues(priv);3988 netif_tx_start_all_queues(priv->dev);3989 stmmac_enable_all_dma_irq(priv);3990 3991 return 0;3992 3993irq_error:3994 phylink_stop(priv->phylink);3995 3996 for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)3997 hrtimer_cancel(&priv->dma_conf.tx_queue[chan].txtimer);3998 3999 stmmac_hw_teardown(dev);4000init_error:4001 phylink_disconnect_phy(priv->phylink);4002init_phy_error:4003 pm_runtime_put(priv->device);4004 return ret;4005}4006 4007static int stmmac_open(struct net_device *dev)4008{4009 struct stmmac_priv *priv = netdev_priv(dev);4010 struct stmmac_dma_conf *dma_conf;4011 int ret;4012 4013 dma_conf = stmmac_setup_dma_desc(priv, dev->mtu);4014 if (IS_ERR(dma_conf))4015 return PTR_ERR(dma_conf);4016 4017 ret = __stmmac_open(dev, dma_conf);4018 if (ret)4019 free_dma_desc_resources(priv, dma_conf);4020 4021 kfree(dma_conf);4022 return ret;4023}4024 4025/**4026 * stmmac_release - close entry point of the driver4027 * @dev : device pointer.4028 * Description:4029 * This is the stop entry point of the driver.4030 */4031static int stmmac_release(struct net_device *dev)4032{4033 struct stmmac_priv *priv = netdev_priv(dev);4034 u32 chan;4035 4036 if (device_may_wakeup(priv->device))4037 phylink_speed_down(priv->phylink, false);4038 /* Stop and disconnect the PHY */4039 phylink_stop(priv->phylink);4040 phylink_disconnect_phy(priv->phylink);4041 4042 stmmac_disable_all_queues(priv);4043 4044 for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)4045 hrtimer_cancel(&priv->dma_conf.tx_queue[chan].txtimer);4046 4047 netif_tx_disable(dev);4048 4049 /* Free the IRQ lines */4050 stmmac_free_irq(dev, REQ_IRQ_ERR_ALL, 0);4051 4052 if (priv->eee_enabled) {4053 priv->tx_path_in_lpi_mode = false;4054 del_timer_sync(&priv->eee_ctrl_timer);4055 }4056 4057 /* Stop TX/RX DMA and clear the descriptors */4058 stmmac_stop_all_dma(priv);4059 4060 /* Release and free the Rx/Tx resources */4061 free_dma_desc_resources(priv, &priv->dma_conf);4062 4063 /* Disable the MAC Rx/Tx */4064 stmmac_mac_set(priv, priv->ioaddr, false);4065 4066 /* Powerdown Serdes if there is */4067 if (priv->plat->serdes_powerdown)4068 priv->plat->serdes_powerdown(dev, priv->plat->bsp_priv);4069 4070 stmmac_release_ptp(priv);4071 4072 if (priv->dma_cap.fpesel)4073 timer_shutdown_sync(&priv->fpe_cfg.verify_timer);4074 4075 pm_runtime_put(priv->device);4076 4077 return 0;4078}4079 4080static bool stmmac_vlan_insert(struct stmmac_priv *priv, struct sk_buff *skb,4081 struct stmmac_tx_queue *tx_q)4082{4083 u16 tag = 0x0, inner_tag = 0x0;4084 u32 inner_type = 0x0;4085 struct dma_desc *p;4086 4087 if (!priv->dma_cap.vlins)4088 return false;4089 if (!skb_vlan_tag_present(skb))4090 return false;4091 if (skb->vlan_proto == htons(ETH_P_8021AD)) {4092 inner_tag = skb_vlan_tag_get(skb);4093 inner_type = STMMAC_VLAN_INSERT;4094 }4095 4096 tag = skb_vlan_tag_get(skb);4097 4098 if (tx_q->tbs & STMMAC_TBS_AVAIL)4099 p = &tx_q->dma_entx[tx_q->cur_tx].basic;4100 else4101 p = &tx_q->dma_tx[tx_q->cur_tx];4102 4103 if (stmmac_set_desc_vlan_tag(priv, p, tag, inner_tag, inner_type))4104 return false;4105 4106 stmmac_set_tx_owner(priv, p);4107 tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, priv->dma_conf.dma_tx_size);4108 return true;4109}4110 4111/**4112 * stmmac_tso_allocator - close entry point of the driver4113 * @priv: driver private structure4114 * @des: buffer start address4115 * @total_len: total length to fill in descriptors4116 * @last_segment: condition for the last descriptor4117 * @queue: TX queue index4118 * Description:4119 * This function fills descriptor and request new descriptors according to4120 * buffer length to fill4121 */4122static void stmmac_tso_allocator(struct stmmac_priv *priv, dma_addr_t des,4123 int total_len, bool last_segment, u32 queue)4124{4125 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];4126 struct dma_desc *desc;4127 u32 buff_size;4128 int tmp_len;4129 4130 tmp_len = total_len;4131 4132 while (tmp_len > 0) {4133 dma_addr_t curr_addr;4134 4135 tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx,4136 priv->dma_conf.dma_tx_size);4137 WARN_ON(tx_q->tx_skbuff[tx_q->cur_tx]);4138 4139 if (tx_q->tbs & STMMAC_TBS_AVAIL)4140 desc = &tx_q->dma_entx[tx_q->cur_tx].basic;4141 else4142 desc = &tx_q->dma_tx[tx_q->cur_tx];4143 4144 curr_addr = des + (total_len - tmp_len);4145 if (priv->dma_cap.addr64 <= 32)4146 desc->des0 = cpu_to_le32(curr_addr);4147 else4148 stmmac_set_desc_addr(priv, desc, curr_addr);4149 4150 buff_size = tmp_len >= TSO_MAX_BUFF_SIZE ?4151 TSO_MAX_BUFF_SIZE : tmp_len;4152 4153 stmmac_prepare_tso_tx_desc(priv, desc, 0, buff_size,4154 0, 1,4155 (last_segment) && (tmp_len <= TSO_MAX_BUFF_SIZE),4156 0, 0);4157 4158 tmp_len -= TSO_MAX_BUFF_SIZE;4159 }4160}4161 4162static void stmmac_flush_tx_descriptors(struct stmmac_priv *priv, int queue)4163{4164 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];4165 int desc_size;4166 4167 if (likely(priv->extend_desc))4168 desc_size = sizeof(struct dma_extended_desc);4169 else if (tx_q->tbs & STMMAC_TBS_AVAIL)4170 desc_size = sizeof(struct dma_edesc);4171 else4172 desc_size = sizeof(struct dma_desc);4173 4174 /* The own bit must be the latest setting done when prepare the4175 * descriptor and then barrier is needed to make sure that4176 * all is coherent before granting the DMA engine.4177 */4178 wmb();4179 4180 tx_q->tx_tail_addr = tx_q->dma_tx_phy + (tx_q->cur_tx * desc_size);4181 stmmac_set_tx_tail_ptr(priv, priv->ioaddr, tx_q->tx_tail_addr, queue);4182}4183 4184/**4185 * stmmac_tso_xmit - Tx entry point of the driver for oversized frames (TSO)4186 * @skb : the socket buffer4187 * @dev : device pointer4188 * Description: this is the transmit function that is called on TSO frames4189 * (support available on GMAC4 and newer chips).4190 * Diagram below show the ring programming in case of TSO frames:4191 *4192 * First Descriptor4193 * --------4194 * | DES0 |---> buffer1 = L2/L3/L4 header4195 * | DES1 |---> TCP Payload (can continue on next descr...)4196 * | DES2 |---> buffer 1 and 2 len4197 * | DES3 |---> must set TSE, TCP hdr len-> [22:19]. TCP payload len [17:0]4198 * --------4199 * |4200 * ...4201 * |4202 * --------4203 * | DES0 | --| Split TCP Payload on Buffers 1 and 24204 * | DES1 | --|4205 * | DES2 | --> buffer 1 and 2 len4206 * | DES3 |4207 * --------4208 *4209 * mss is fixed when enable tso, so w/o programming the TDES3 ctx field.4210 */4211static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev)4212{4213 struct dma_desc *desc, *first, *mss_desc = NULL;4214 struct stmmac_priv *priv = netdev_priv(dev);4215 int tmp_pay_len = 0, first_tx, nfrags;4216 unsigned int first_entry, tx_packets;4217 struct stmmac_txq_stats *txq_stats;4218 struct stmmac_tx_queue *tx_q;4219 u32 pay_len, mss, queue;4220 u8 proto_hdr_len, hdr;4221 dma_addr_t des;4222 bool set_ic;4223 int i;4224 4225 /* Always insert VLAN tag to SKB payload for TSO frames.4226 *4227 * Never insert VLAN tag by HW, since segments splited by4228 * TSO engine will be un-tagged by mistake.4229 */4230 if (skb_vlan_tag_present(skb)) {4231 skb = __vlan_hwaccel_push_inside(skb);4232 if (unlikely(!skb)) {4233 priv->xstats.tx_dropped++;4234 return NETDEV_TX_OK;4235 }4236 }4237 4238 nfrags = skb_shinfo(skb)->nr_frags;4239 queue = skb_get_queue_mapping(skb);4240 4241 tx_q = &priv->dma_conf.tx_queue[queue];4242 txq_stats = &priv->xstats.txq_stats[queue];4243 first_tx = tx_q->cur_tx;4244 4245 /* Compute header lengths */4246 if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4) {4247 proto_hdr_len = skb_transport_offset(skb) + sizeof(struct udphdr);4248 hdr = sizeof(struct udphdr);4249 } else {4250 proto_hdr_len = skb_tcp_all_headers(skb);4251 hdr = tcp_hdrlen(skb);4252 }4253 4254 /* Desc availability based on threshold should be enough safe */4255 if (unlikely(stmmac_tx_avail(priv, queue) <4256 (((skb->len - proto_hdr_len) / TSO_MAX_BUFF_SIZE + 1)))) {4257 if (!netif_tx_queue_stopped(netdev_get_tx_queue(dev, queue))) {4258 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev,4259 queue));4260 /* This is a hard error, log it. */4261 netdev_err(priv->dev,4262 "%s: Tx Ring full when queue awake\n",4263 __func__);4264 }4265 return NETDEV_TX_BUSY;4266 }4267 4268 pay_len = skb_headlen(skb) - proto_hdr_len; /* no frags */4269 4270 mss = skb_shinfo(skb)->gso_size;4271 4272 /* set new MSS value if needed */4273 if (mss != tx_q->mss) {4274 if (tx_q->tbs & STMMAC_TBS_AVAIL)4275 mss_desc = &tx_q->dma_entx[tx_q->cur_tx].basic;4276 else4277 mss_desc = &tx_q->dma_tx[tx_q->cur_tx];4278 4279 stmmac_set_mss(priv, mss_desc, mss);4280 tx_q->mss = mss;4281 tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx,4282 priv->dma_conf.dma_tx_size);4283 WARN_ON(tx_q->tx_skbuff[tx_q->cur_tx]);4284 }4285 4286 if (netif_msg_tx_queued(priv)) {4287 pr_info("%s: hdrlen %d, hdr_len %d, pay_len %d, mss %d\n",4288 __func__, hdr, proto_hdr_len, pay_len, mss);4289 pr_info("\tskb->len %d, skb->data_len %d\n", skb->len,4290 skb->data_len);4291 }4292 4293 first_entry = tx_q->cur_tx;4294 WARN_ON(tx_q->tx_skbuff[first_entry]);4295 4296 if (tx_q->tbs & STMMAC_TBS_AVAIL)4297 desc = &tx_q->dma_entx[first_entry].basic;4298 else4299 desc = &tx_q->dma_tx[first_entry];4300 first = desc;4301 4302 /* first descriptor: fill Headers on Buf1 */4303 des = dma_map_single(priv->device, skb->data, skb_headlen(skb),4304 DMA_TO_DEVICE);4305 if (dma_mapping_error(priv->device, des))4306 goto dma_map_err;4307 4308 if (priv->dma_cap.addr64 <= 32) {4309 first->des0 = cpu_to_le32(des);4310 4311 /* Fill start of payload in buff2 of first descriptor */4312 if (pay_len)4313 first->des1 = cpu_to_le32(des + proto_hdr_len);4314 4315 /* If needed take extra descriptors to fill the remaining payload */4316 tmp_pay_len = pay_len - TSO_MAX_BUFF_SIZE;4317 } else {4318 stmmac_set_desc_addr(priv, first, des);4319 tmp_pay_len = pay_len;4320 des += proto_hdr_len;4321 pay_len = 0;4322 }4323 4324 stmmac_tso_allocator(priv, des, tmp_pay_len, (nfrags == 0), queue);4325 4326 /* In case two or more DMA transmit descriptors are allocated for this4327 * non-paged SKB data, the DMA buffer address should be saved to4328 * tx_q->tx_skbuff_dma[].buf corresponding to the last descriptor,4329 * and leave the other tx_q->tx_skbuff_dma[].buf as NULL to guarantee4330 * that stmmac_tx_clean() does not unmap the entire DMA buffer too early4331 * since the tail areas of the DMA buffer can be accessed by DMA engine4332 * sooner or later.4333 * By saving the DMA buffer address to tx_q->tx_skbuff_dma[].buf4334 * corresponding to the last descriptor, stmmac_tx_clean() will unmap4335 * this DMA buffer right after the DMA engine completely finishes the4336 * full buffer transmission.4337 */4338 tx_q->tx_skbuff_dma[tx_q->cur_tx].buf = des;4339 tx_q->tx_skbuff_dma[tx_q->cur_tx].len = skb_headlen(skb);4340 tx_q->tx_skbuff_dma[tx_q->cur_tx].map_as_page = false;4341 tx_q->tx_skbuff_dma[tx_q->cur_tx].buf_type = STMMAC_TXBUF_T_SKB;4342 4343 /* Prepare fragments */4344 for (i = 0; i < nfrags; i++) {4345 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];4346 4347 des = skb_frag_dma_map(priv->device, frag, 0,4348 skb_frag_size(frag),4349 DMA_TO_DEVICE);4350 if (dma_mapping_error(priv->device, des))4351 goto dma_map_err;4352 4353 stmmac_tso_allocator(priv, des, skb_frag_size(frag),4354 (i == nfrags - 1), queue);4355 4356 tx_q->tx_skbuff_dma[tx_q->cur_tx].buf = des;4357 tx_q->tx_skbuff_dma[tx_q->cur_tx].len = skb_frag_size(frag);4358 tx_q->tx_skbuff_dma[tx_q->cur_tx].map_as_page = true;4359 tx_q->tx_skbuff_dma[tx_q->cur_tx].buf_type = STMMAC_TXBUF_T_SKB;4360 }4361 4362 tx_q->tx_skbuff_dma[tx_q->cur_tx].last_segment = true;4363 4364 /* Only the last descriptor gets to point to the skb. */4365 tx_q->tx_skbuff[tx_q->cur_tx] = skb;4366 tx_q->tx_skbuff_dma[tx_q->cur_tx].buf_type = STMMAC_TXBUF_T_SKB;4367 4368 /* Manage tx mitigation */4369 tx_packets = (tx_q->cur_tx + 1) - first_tx;4370 tx_q->tx_count_frames += tx_packets;4371 4372 if ((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) && priv->hwts_tx_en)4373 set_ic = true;4374 else if (!priv->tx_coal_frames[queue])4375 set_ic = false;4376 else if (tx_packets > priv->tx_coal_frames[queue])4377 set_ic = true;4378 else if ((tx_q->tx_count_frames %4379 priv->tx_coal_frames[queue]) < tx_packets)4380 set_ic = true;4381 else4382 set_ic = false;4383 4384 if (set_ic) {4385 if (tx_q->tbs & STMMAC_TBS_AVAIL)4386 desc = &tx_q->dma_entx[tx_q->cur_tx].basic;4387 else4388 desc = &tx_q->dma_tx[tx_q->cur_tx];4389 4390 tx_q->tx_count_frames = 0;4391 stmmac_set_tx_ic(priv, desc);4392 }4393 4394 /* We've used all descriptors we need for this skb, however,4395 * advance cur_tx so that it references a fresh descriptor.4396 * ndo_start_xmit will fill this descriptor the next time it's4397 * called and stmmac_tx_clean may clean up to this descriptor.4398 */4399 tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, priv->dma_conf.dma_tx_size);4400 4401 if (unlikely(stmmac_tx_avail(priv, queue) <= (MAX_SKB_FRAGS + 1))) {4402 netif_dbg(priv, hw, priv->dev, "%s: stop transmitted packets\n",4403 __func__);4404 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, queue));4405 }4406 4407 u64_stats_update_begin(&txq_stats->q_syncp);4408 u64_stats_add(&txq_stats->q.tx_bytes, skb->len);4409 u64_stats_inc(&txq_stats->q.tx_tso_frames);4410 u64_stats_add(&txq_stats->q.tx_tso_nfrags, nfrags);4411 if (set_ic)4412 u64_stats_inc(&txq_stats->q.tx_set_ic_bit);4413 u64_stats_update_end(&txq_stats->q_syncp);4414 4415 if (priv->sarc_type)4416 stmmac_set_desc_sarc(priv, first, priv->sarc_type);4417 4418 skb_tx_timestamp(skb);4419 4420 if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&4421 priv->hwts_tx_en)) {4422 /* declare that device is doing timestamping */4423 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;4424 stmmac_enable_tx_timestamp(priv, first);4425 }4426 4427 /* Complete the first descriptor before granting the DMA */4428 stmmac_prepare_tso_tx_desc(priv, first, 1,4429 proto_hdr_len,4430 pay_len,4431 1, tx_q->tx_skbuff_dma[first_entry].last_segment,4432 hdr / 4, (skb->len - proto_hdr_len));4433 4434 /* If context desc is used to change MSS */4435 if (mss_desc) {4436 /* Make sure that first descriptor has been completely4437 * written, including its own bit. This is because MSS is4438 * actually before first descriptor, so we need to make4439 * sure that MSS's own bit is the last thing written.4440 */4441 dma_wmb();4442 stmmac_set_tx_owner(priv, mss_desc);4443 }4444 4445 if (netif_msg_pktdata(priv)) {4446 pr_info("%s: curr=%d dirty=%d f=%d, e=%d, f_p=%p, nfrags %d\n",4447 __func__, tx_q->cur_tx, tx_q->dirty_tx, first_entry,4448 tx_q->cur_tx, first, nfrags);4449 pr_info(">>> frame to be transmitted: ");4450 print_pkt(skb->data, skb_headlen(skb));4451 }4452 4453 netdev_tx_sent_queue(netdev_get_tx_queue(dev, queue), skb->len);4454 4455 stmmac_flush_tx_descriptors(priv, queue);4456 stmmac_tx_timer_arm(priv, queue);4457 4458 return NETDEV_TX_OK;4459 4460dma_map_err:4461 dev_err(priv->device, "Tx dma map failed\n");4462 dev_kfree_skb(skb);4463 priv->xstats.tx_dropped++;4464 return NETDEV_TX_OK;4465}4466 4467/**4468 * stmmac_has_ip_ethertype() - Check if packet has IP ethertype4469 * @skb: socket buffer to check4470 *4471 * Check if a packet has an ethertype that will trigger the IP header checks4472 * and IP/TCP checksum engine of the stmmac core.4473 *4474 * Return: true if the ethertype can trigger the checksum engine, false4475 * otherwise4476 */4477static bool stmmac_has_ip_ethertype(struct sk_buff *skb)4478{4479 int depth = 0;4480 __be16 proto;4481 4482 proto = __vlan_get_protocol(skb, eth_header_parse_protocol(skb),4483 &depth);4484 4485 return (depth <= ETH_HLEN) &&4486 (proto == htons(ETH_P_IP) || proto == htons(ETH_P_IPV6));4487}4488 4489/**4490 * stmmac_xmit - Tx entry point of the driver4491 * @skb : the socket buffer4492 * @dev : device pointer4493 * Description : this is the tx entry point of the driver.4494 * It programs the chain or the ring and supports oversized frames4495 * and SG feature.4496 */4497static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)4498{4499 unsigned int first_entry, tx_packets, enh_desc;4500 struct stmmac_priv *priv = netdev_priv(dev);4501 unsigned int nopaged_len = skb_headlen(skb);4502 int i, csum_insertion = 0, is_jumbo = 0;4503 u32 queue = skb_get_queue_mapping(skb);4504 int nfrags = skb_shinfo(skb)->nr_frags;4505 int gso = skb_shinfo(skb)->gso_type;4506 struct stmmac_txq_stats *txq_stats;4507 struct dma_edesc *tbs_desc = NULL;4508 struct dma_desc *desc, *first;4509 struct stmmac_tx_queue *tx_q;4510 bool has_vlan, set_ic;4511 int entry, first_tx;4512 dma_addr_t des;4513 4514 tx_q = &priv->dma_conf.tx_queue[queue];4515 txq_stats = &priv->xstats.txq_stats[queue];4516 first_tx = tx_q->cur_tx;4517 4518 if (priv->tx_path_in_lpi_mode && priv->eee_sw_timer_en)4519 stmmac_disable_eee_mode(priv);4520 4521 /* Manage oversized TCP frames for GMAC4 device */4522 if (skb_is_gso(skb) && priv->tso) {4523 if (gso & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))4524 return stmmac_tso_xmit(skb, dev);4525 if (priv->plat->has_gmac4 && (gso & SKB_GSO_UDP_L4))4526 return stmmac_tso_xmit(skb, dev);4527 }4528 4529 if (priv->est && priv->est->enable &&4530 priv->est->max_sdu[queue] &&4531 skb->len > priv->est->max_sdu[queue]){4532 priv->xstats.max_sdu_txq_drop[queue]++;4533 goto max_sdu_err;4534 }4535 4536 if (unlikely(stmmac_tx_avail(priv, queue) < nfrags + 1)) {4537 if (!netif_tx_queue_stopped(netdev_get_tx_queue(dev, queue))) {4538 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev,4539 queue));4540 /* This is a hard error, log it. */4541 netdev_err(priv->dev,4542 "%s: Tx Ring full when queue awake\n",4543 __func__);4544 }4545 return NETDEV_TX_BUSY;4546 }4547 4548 /* Check if VLAN can be inserted by HW */4549 has_vlan = stmmac_vlan_insert(priv, skb, tx_q);4550 4551 entry = tx_q->cur_tx;4552 first_entry = entry;4553 WARN_ON(tx_q->tx_skbuff[first_entry]);4554 4555 csum_insertion = (skb->ip_summed == CHECKSUM_PARTIAL);4556 /* DWMAC IPs can be synthesized to support tx coe only for a few tx4557 * queues. In that case, checksum offloading for those queues that don't4558 * support tx coe needs to fallback to software checksum calculation.4559 *4560 * Packets that won't trigger the COE e.g. most DSA-tagged packets will4561 * also have to be checksummed in software.4562 */4563 if (csum_insertion &&4564 (priv->plat->tx_queues_cfg[queue].coe_unsupported ||4565 !stmmac_has_ip_ethertype(skb))) {4566 if (unlikely(skb_checksum_help(skb)))4567 goto dma_map_err;4568 csum_insertion = !csum_insertion;4569 }4570 4571 if (likely(priv->extend_desc))4572 desc = (struct dma_desc *)(tx_q->dma_etx + entry);4573 else if (tx_q->tbs & STMMAC_TBS_AVAIL)4574 desc = &tx_q->dma_entx[entry].basic;4575 else4576 desc = tx_q->dma_tx + entry;4577 4578 first = desc;4579 4580 if (has_vlan)4581 stmmac_set_desc_vlan(priv, first, STMMAC_VLAN_INSERT);4582 4583 enh_desc = priv->plat->enh_desc;4584 /* To program the descriptors according to the size of the frame */4585 if (enh_desc)4586 is_jumbo = stmmac_is_jumbo_frm(priv, skb->len, enh_desc);4587 4588 if (unlikely(is_jumbo)) {4589 entry = stmmac_jumbo_frm(priv, tx_q, skb, csum_insertion);4590 if (unlikely(entry < 0) && (entry != -EINVAL))4591 goto dma_map_err;4592 }4593 4594 for (i = 0; i < nfrags; i++) {4595 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];4596 int len = skb_frag_size(frag);4597 bool last_segment = (i == (nfrags - 1));4598 4599 entry = STMMAC_GET_ENTRY(entry, priv->dma_conf.dma_tx_size);4600 WARN_ON(tx_q->tx_skbuff[entry]);4601 4602 if (likely(priv->extend_desc))4603 desc = (struct dma_desc *)(tx_q->dma_etx + entry);4604 else if (tx_q->tbs & STMMAC_TBS_AVAIL)4605 desc = &tx_q->dma_entx[entry].basic;4606 else4607 desc = tx_q->dma_tx + entry;4608 4609 des = skb_frag_dma_map(priv->device, frag, 0, len,4610 DMA_TO_DEVICE);4611 if (dma_mapping_error(priv->device, des))4612 goto dma_map_err; /* should reuse desc w/o issues */4613 4614 tx_q->tx_skbuff_dma[entry].buf = des;4615 4616 stmmac_set_desc_addr(priv, desc, des);4617 4618 tx_q->tx_skbuff_dma[entry].map_as_page = true;4619 tx_q->tx_skbuff_dma[entry].len = len;4620 tx_q->tx_skbuff_dma[entry].last_segment = last_segment;4621 tx_q->tx_skbuff_dma[entry].buf_type = STMMAC_TXBUF_T_SKB;4622 4623 /* Prepare the descriptor and set the own bit too */4624 stmmac_prepare_tx_desc(priv, desc, 0, len, csum_insertion,4625 priv->mode, 1, last_segment, skb->len);4626 }4627 4628 /* Only the last descriptor gets to point to the skb. */4629 tx_q->tx_skbuff[entry] = skb;4630 tx_q->tx_skbuff_dma[entry].buf_type = STMMAC_TXBUF_T_SKB;4631 4632 /* According to the coalesce parameter the IC bit for the latest4633 * segment is reset and the timer re-started to clean the tx status.4634 * This approach takes care about the fragments: desc is the first4635 * element in case of no SG.4636 */4637 tx_packets = (entry + 1) - first_tx;4638 tx_q->tx_count_frames += tx_packets;4639 4640 if ((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) && priv->hwts_tx_en)4641 set_ic = true;4642 else if (!priv->tx_coal_frames[queue])4643 set_ic = false;4644 else if (tx_packets > priv->tx_coal_frames[queue])4645 set_ic = true;4646 else if ((tx_q->tx_count_frames %4647 priv->tx_coal_frames[queue]) < tx_packets)4648 set_ic = true;4649 else4650 set_ic = false;4651 4652 if (set_ic) {4653 if (likely(priv->extend_desc))4654 desc = &tx_q->dma_etx[entry].basic;4655 else if (tx_q->tbs & STMMAC_TBS_AVAIL)4656 desc = &tx_q->dma_entx[entry].basic;4657 else4658 desc = &tx_q->dma_tx[entry];4659 4660 tx_q->tx_count_frames = 0;4661 stmmac_set_tx_ic(priv, desc);4662 }4663 4664 /* We've used all descriptors we need for this skb, however,4665 * advance cur_tx so that it references a fresh descriptor.4666 * ndo_start_xmit will fill this descriptor the next time it's4667 * called and stmmac_tx_clean may clean up to this descriptor.4668 */4669 entry = STMMAC_GET_ENTRY(entry, priv->dma_conf.dma_tx_size);4670 tx_q->cur_tx = entry;4671 4672 if (netif_msg_pktdata(priv)) {4673 netdev_dbg(priv->dev,4674 "%s: curr=%d dirty=%d f=%d, e=%d, first=%p, nfrags=%d",4675 __func__, tx_q->cur_tx, tx_q->dirty_tx, first_entry,4676 entry, first, nfrags);4677 4678 netdev_dbg(priv->dev, ">>> frame to be transmitted: ");4679 print_pkt(skb->data, skb->len);4680 }4681 4682 if (unlikely(stmmac_tx_avail(priv, queue) <= (MAX_SKB_FRAGS + 1))) {4683 netif_dbg(priv, hw, priv->dev, "%s: stop transmitted packets\n",4684 __func__);4685 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, queue));4686 }4687 4688 u64_stats_update_begin(&txq_stats->q_syncp);4689 u64_stats_add(&txq_stats->q.tx_bytes, skb->len);4690 if (set_ic)4691 u64_stats_inc(&txq_stats->q.tx_set_ic_bit);4692 u64_stats_update_end(&txq_stats->q_syncp);4693 4694 if (priv->sarc_type)4695 stmmac_set_desc_sarc(priv, first, priv->sarc_type);4696 4697 skb_tx_timestamp(skb);4698 4699 /* Ready to fill the first descriptor and set the OWN bit w/o any4700 * problems because all the descriptors are actually ready to be4701 * passed to the DMA engine.4702 */4703 if (likely(!is_jumbo)) {4704 bool last_segment = (nfrags == 0);4705 4706 des = dma_map_single(priv->device, skb->data,4707 nopaged_len, DMA_TO_DEVICE);4708 if (dma_mapping_error(priv->device, des))4709 goto dma_map_err;4710 4711 tx_q->tx_skbuff_dma[first_entry].buf = des;4712 tx_q->tx_skbuff_dma[first_entry].buf_type = STMMAC_TXBUF_T_SKB;4713 tx_q->tx_skbuff_dma[first_entry].map_as_page = false;4714 4715 stmmac_set_desc_addr(priv, first, des);4716 4717 tx_q->tx_skbuff_dma[first_entry].len = nopaged_len;4718 tx_q->tx_skbuff_dma[first_entry].last_segment = last_segment;4719 4720 if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&4721 priv->hwts_tx_en)) {4722 /* declare that device is doing timestamping */4723 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;4724 stmmac_enable_tx_timestamp(priv, first);4725 }4726 4727 /* Prepare the first descriptor setting the OWN bit too */4728 stmmac_prepare_tx_desc(priv, first, 1, nopaged_len,4729 csum_insertion, priv->mode, 0, last_segment,4730 skb->len);4731 }4732 4733 if (tx_q->tbs & STMMAC_TBS_EN) {4734 struct timespec64 ts = ns_to_timespec64(skb->tstamp);4735 4736 tbs_desc = &tx_q->dma_entx[first_entry];4737 stmmac_set_desc_tbs(priv, tbs_desc, ts.tv_sec, ts.tv_nsec);4738 }4739 4740 stmmac_set_tx_owner(priv, first);4741 4742 netdev_tx_sent_queue(netdev_get_tx_queue(dev, queue), skb->len);4743 4744 stmmac_enable_dma_transmission(priv, priv->ioaddr, queue);4745 4746 stmmac_flush_tx_descriptors(priv, queue);4747 stmmac_tx_timer_arm(priv, queue);4748 4749 return NETDEV_TX_OK;4750 4751dma_map_err:4752 netdev_err(priv->dev, "Tx DMA map failed\n");4753max_sdu_err:4754 dev_kfree_skb(skb);4755 priv->xstats.tx_dropped++;4756 return NETDEV_TX_OK;4757}4758 4759static void stmmac_rx_vlan(struct net_device *dev, struct sk_buff *skb)4760{4761 struct vlan_ethhdr *veth = skb_vlan_eth_hdr(skb);4762 __be16 vlan_proto = veth->h_vlan_proto;4763 u16 vlanid;4764 4765 if ((vlan_proto == htons(ETH_P_8021Q) &&4766 dev->features & NETIF_F_HW_VLAN_CTAG_RX) ||4767 (vlan_proto == htons(ETH_P_8021AD) &&4768 dev->features & NETIF_F_HW_VLAN_STAG_RX)) {4769 /* pop the vlan tag */4770 vlanid = ntohs(veth->h_vlan_TCI);4771 memmove(skb->data + VLAN_HLEN, veth, ETH_ALEN * 2);4772 skb_pull(skb, VLAN_HLEN);4773 __vlan_hwaccel_put_tag(skb, vlan_proto, vlanid);4774 }4775}4776 4777/**4778 * stmmac_rx_refill - refill used skb preallocated buffers4779 * @priv: driver private structure4780 * @queue: RX queue index4781 * Description : this is to reallocate the skb for the reception process4782 * that is based on zero-copy.4783 */4784static inline void stmmac_rx_refill(struct stmmac_priv *priv, u32 queue)4785{4786 struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];4787 int dirty = stmmac_rx_dirty(priv, queue);4788 unsigned int entry = rx_q->dirty_rx;4789 gfp_t gfp = (GFP_ATOMIC | __GFP_NOWARN);4790 4791 if (priv->dma_cap.host_dma_width <= 32)4792 gfp |= GFP_DMA32;4793 4794 while (dirty-- > 0) {4795 struct stmmac_rx_buffer *buf = &rx_q->buf_pool[entry];4796 struct dma_desc *p;4797 bool use_rx_wd;4798 4799 if (priv->extend_desc)4800 p = (struct dma_desc *)(rx_q->dma_erx + entry);4801 else4802 p = rx_q->dma_rx + entry;4803 4804 if (!buf->page) {4805 buf->page = page_pool_alloc_pages(rx_q->page_pool, gfp);4806 if (!buf->page)4807 break;4808 }4809 4810 if (priv->sph && !buf->sec_page) {4811 buf->sec_page = page_pool_alloc_pages(rx_q->page_pool, gfp);4812 if (!buf->sec_page)4813 break;4814 4815 buf->sec_addr = page_pool_get_dma_addr(buf->sec_page);4816 }4817 4818 buf->addr = page_pool_get_dma_addr(buf->page) + buf->page_offset;4819 4820 stmmac_set_desc_addr(priv, p, buf->addr);4821 if (priv->sph)4822 stmmac_set_desc_sec_addr(priv, p, buf->sec_addr, true);4823 else4824 stmmac_set_desc_sec_addr(priv, p, buf->sec_addr, false);4825 stmmac_refill_desc3(priv, rx_q, p);4826 4827 rx_q->rx_count_frames++;4828 rx_q->rx_count_frames += priv->rx_coal_frames[queue];4829 if (rx_q->rx_count_frames > priv->rx_coal_frames[queue])4830 rx_q->rx_count_frames = 0;4831 4832 use_rx_wd = !priv->rx_coal_frames[queue];4833 use_rx_wd |= rx_q->rx_count_frames > 0;4834 if (!priv->use_riwt)4835 use_rx_wd = false;4836 4837 dma_wmb();4838 stmmac_set_rx_owner(priv, p, use_rx_wd);4839 4840 entry = STMMAC_GET_ENTRY(entry, priv->dma_conf.dma_rx_size);4841 }4842 rx_q->dirty_rx = entry;4843 rx_q->rx_tail_addr = rx_q->dma_rx_phy +4844 (rx_q->dirty_rx * sizeof(struct dma_desc));4845 stmmac_set_rx_tail_ptr(priv, priv->ioaddr, rx_q->rx_tail_addr, queue);4846}4847 4848static unsigned int stmmac_rx_buf1_len(struct stmmac_priv *priv,4849 struct dma_desc *p,4850 int status, unsigned int len)4851{4852 unsigned int plen = 0, hlen = 0;4853 int coe = priv->hw->rx_csum;4854 4855 /* Not first descriptor, buffer is always zero */4856 if (priv->sph && len)4857 return 0;4858 4859 /* First descriptor, get split header length */4860 stmmac_get_rx_header_len(priv, p, &hlen);4861 if (priv->sph && hlen) {4862 priv->xstats.rx_split_hdr_pkt_n++;4863 return hlen;4864 }4865 4866 /* First descriptor, not last descriptor and not split header */4867 if (status & rx_not_ls)4868 return priv->dma_conf.dma_buf_sz;4869 4870 plen = stmmac_get_rx_frame_len(priv, p, coe);4871 4872 /* First descriptor and last descriptor and not split header */4873 return min_t(unsigned int, priv->dma_conf.dma_buf_sz, plen);4874}4875 4876static unsigned int stmmac_rx_buf2_len(struct stmmac_priv *priv,4877 struct dma_desc *p,4878 int status, unsigned int len)4879{4880 int coe = priv->hw->rx_csum;4881 unsigned int plen = 0;4882 4883 /* Not split header, buffer is not available */4884 if (!priv->sph)4885 return 0;4886 4887 /* Not last descriptor */4888 if (status & rx_not_ls)4889 return priv->dma_conf.dma_buf_sz;4890 4891 plen = stmmac_get_rx_frame_len(priv, p, coe);4892 4893 /* Last descriptor */4894 return plen - len;4895}4896 4897static int stmmac_xdp_xmit_xdpf(struct stmmac_priv *priv, int queue,4898 struct xdp_frame *xdpf, bool dma_map)4899{4900 struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[queue];4901 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];4902 unsigned int entry = tx_q->cur_tx;4903 struct dma_desc *tx_desc;4904 dma_addr_t dma_addr;4905 bool set_ic;4906 4907 if (stmmac_tx_avail(priv, queue) < STMMAC_TX_THRESH(priv))4908 return STMMAC_XDP_CONSUMED;4909 4910 if (priv->est && priv->est->enable &&4911 priv->est->max_sdu[queue] &&4912 xdpf->len > priv->est->max_sdu[queue]) {4913 priv->xstats.max_sdu_txq_drop[queue]++;4914 return STMMAC_XDP_CONSUMED;4915 }4916 4917 if (likely(priv->extend_desc))4918 tx_desc = (struct dma_desc *)(tx_q->dma_etx + entry);4919 else if (tx_q->tbs & STMMAC_TBS_AVAIL)4920 tx_desc = &tx_q->dma_entx[entry].basic;4921 else4922 tx_desc = tx_q->dma_tx + entry;4923 4924 if (dma_map) {4925 dma_addr = dma_map_single(priv->device, xdpf->data,4926 xdpf->len, DMA_TO_DEVICE);4927 if (dma_mapping_error(priv->device, dma_addr))4928 return STMMAC_XDP_CONSUMED;4929 4930 tx_q->tx_skbuff_dma[entry].buf_type = STMMAC_TXBUF_T_XDP_NDO;4931 } else {4932 struct page *page = virt_to_page(xdpf->data);4933 4934 dma_addr = page_pool_get_dma_addr(page) + sizeof(*xdpf) +4935 xdpf->headroom;4936 dma_sync_single_for_device(priv->device, dma_addr,4937 xdpf->len, DMA_BIDIRECTIONAL);4938 4939 tx_q->tx_skbuff_dma[entry].buf_type = STMMAC_TXBUF_T_XDP_TX;4940 }4941 4942 tx_q->tx_skbuff_dma[entry].buf = dma_addr;4943 tx_q->tx_skbuff_dma[entry].map_as_page = false;4944 tx_q->tx_skbuff_dma[entry].len = xdpf->len;4945 tx_q->tx_skbuff_dma[entry].last_segment = true;4946 tx_q->tx_skbuff_dma[entry].is_jumbo = false;4947 4948 tx_q->xdpf[entry] = xdpf;4949 4950 stmmac_set_desc_addr(priv, tx_desc, dma_addr);4951 4952 stmmac_prepare_tx_desc(priv, tx_desc, 1, xdpf->len,4953 true, priv->mode, true, true,4954 xdpf->len);4955 4956 tx_q->tx_count_frames++;4957 4958 if (tx_q->tx_count_frames % priv->tx_coal_frames[queue] == 0)4959 set_ic = true;4960 else4961 set_ic = false;4962 4963 if (set_ic) {4964 tx_q->tx_count_frames = 0;4965 stmmac_set_tx_ic(priv, tx_desc);4966 u64_stats_update_begin(&txq_stats->q_syncp);4967 u64_stats_inc(&txq_stats->q.tx_set_ic_bit);4968 u64_stats_update_end(&txq_stats->q_syncp);4969 }4970 4971 stmmac_enable_dma_transmission(priv, priv->ioaddr, queue);4972 4973 entry = STMMAC_GET_ENTRY(entry, priv->dma_conf.dma_tx_size);4974 tx_q->cur_tx = entry;4975 4976 return STMMAC_XDP_TX;4977}4978 4979static int stmmac_xdp_get_tx_queue(struct stmmac_priv *priv,4980 int cpu)4981{4982 int index = cpu;4983 4984 if (unlikely(index < 0))4985 index = 0;4986 4987 while (index >= priv->plat->tx_queues_to_use)4988 index -= priv->plat->tx_queues_to_use;4989 4990 return index;4991}4992 4993static int stmmac_xdp_xmit_back(struct stmmac_priv *priv,4994 struct xdp_buff *xdp)4995{4996 struct xdp_frame *xdpf = xdp_convert_buff_to_frame(xdp);4997 int cpu = smp_processor_id();4998 struct netdev_queue *nq;4999 int queue;5000 int res;5001 5002 if (unlikely(!xdpf))5003 return STMMAC_XDP_CONSUMED;5004 5005 queue = stmmac_xdp_get_tx_queue(priv, cpu);5006 nq = netdev_get_tx_queue(priv->dev, queue);5007 5008 __netif_tx_lock(nq, cpu);5009 /* Avoids TX time-out as we are sharing with slow path */5010 txq_trans_cond_update(nq);5011 5012 res = stmmac_xdp_xmit_xdpf(priv, queue, xdpf, false);5013 if (res == STMMAC_XDP_TX)5014 stmmac_flush_tx_descriptors(priv, queue);5015 5016 __netif_tx_unlock(nq);5017 5018 return res;5019}5020 5021static int __stmmac_xdp_run_prog(struct stmmac_priv *priv,5022 struct bpf_prog *prog,5023 struct xdp_buff *xdp)5024{5025 u32 act;5026 int res;5027 5028 act = bpf_prog_run_xdp(prog, xdp);5029 switch (act) {5030 case XDP_PASS:5031 res = STMMAC_XDP_PASS;5032 break;5033 case XDP_TX:5034 res = stmmac_xdp_xmit_back(priv, xdp);5035 break;5036 case XDP_REDIRECT:5037 if (xdp_do_redirect(priv->dev, xdp, prog) < 0)5038 res = STMMAC_XDP_CONSUMED;5039 else5040 res = STMMAC_XDP_REDIRECT;5041 break;5042 default:5043 bpf_warn_invalid_xdp_action(priv->dev, prog, act);5044 fallthrough;5045 case XDP_ABORTED:5046 trace_xdp_exception(priv->dev, prog, act);5047 fallthrough;5048 case XDP_DROP:5049 res = STMMAC_XDP_CONSUMED;5050 break;5051 }5052 5053 return res;5054}5055 5056static struct sk_buff *stmmac_xdp_run_prog(struct stmmac_priv *priv,5057 struct xdp_buff *xdp)5058{5059 struct bpf_prog *prog;5060 int res;5061 5062 prog = READ_ONCE(priv->xdp_prog);5063 if (!prog) {5064 res = STMMAC_XDP_PASS;5065 goto out;5066 }5067 5068 res = __stmmac_xdp_run_prog(priv, prog, xdp);5069out:5070 return ERR_PTR(-res);5071}5072 5073static void stmmac_finalize_xdp_rx(struct stmmac_priv *priv,5074 int xdp_status)5075{5076 int cpu = smp_processor_id();5077 int queue;5078 5079 queue = stmmac_xdp_get_tx_queue(priv, cpu);5080 5081 if (xdp_status & STMMAC_XDP_TX)5082 stmmac_tx_timer_arm(priv, queue);5083 5084 if (xdp_status & STMMAC_XDP_REDIRECT)5085 xdp_do_flush();5086}5087 5088static struct sk_buff *stmmac_construct_skb_zc(struct stmmac_channel *ch,5089 struct xdp_buff *xdp)5090{5091 unsigned int metasize = xdp->data - xdp->data_meta;5092 unsigned int datasize = xdp->data_end - xdp->data;5093 struct sk_buff *skb;5094 5095 skb = napi_alloc_skb(&ch->rxtx_napi,5096 xdp->data_end - xdp->data_hard_start);5097 if (unlikely(!skb))5098 return NULL;5099 5100 skb_reserve(skb, xdp->data - xdp->data_hard_start);5101 memcpy(__skb_put(skb, datasize), xdp->data, datasize);5102 if (metasize)5103 skb_metadata_set(skb, metasize);5104 5105 return skb;5106}5107 5108static void stmmac_dispatch_skb_zc(struct stmmac_priv *priv, u32 queue,5109 struct dma_desc *p, struct dma_desc *np,5110 struct xdp_buff *xdp)5111{5112 struct stmmac_rxq_stats *rxq_stats = &priv->xstats.rxq_stats[queue];5113 struct stmmac_channel *ch = &priv->channel[queue];5114 unsigned int len = xdp->data_end - xdp->data;5115 enum pkt_hash_types hash_type;5116 int coe = priv->hw->rx_csum;5117 struct sk_buff *skb;5118 u32 hash;5119 5120 skb = stmmac_construct_skb_zc(ch, xdp);5121 if (!skb) {5122 priv->xstats.rx_dropped++;5123 return;5124 }5125 5126 stmmac_get_rx_hwtstamp(priv, p, np, skb);5127 if (priv->hw->hw_vlan_en)5128 /* MAC level stripping. */5129 stmmac_rx_hw_vlan(priv, priv->hw, p, skb);5130 else5131 /* Driver level stripping. */5132 stmmac_rx_vlan(priv->dev, skb);5133 skb->protocol = eth_type_trans(skb, priv->dev);5134 5135 if (unlikely(!coe) || !stmmac_has_ip_ethertype(skb))5136 skb_checksum_none_assert(skb);5137 else5138 skb->ip_summed = CHECKSUM_UNNECESSARY;5139 5140 if (!stmmac_get_rx_hash(priv, p, &hash, &hash_type))5141 skb_set_hash(skb, hash, hash_type);5142 5143 skb_record_rx_queue(skb, queue);5144 napi_gro_receive(&ch->rxtx_napi, skb);5145 5146 u64_stats_update_begin(&rxq_stats->napi_syncp);5147 u64_stats_inc(&rxq_stats->napi.rx_pkt_n);5148 u64_stats_add(&rxq_stats->napi.rx_bytes, len);5149 u64_stats_update_end(&rxq_stats->napi_syncp);5150}5151 5152static bool stmmac_rx_refill_zc(struct stmmac_priv *priv, u32 queue, u32 budget)5153{5154 struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];5155 unsigned int entry = rx_q->dirty_rx;5156 struct dma_desc *rx_desc = NULL;5157 bool ret = true;5158 5159 budget = min(budget, stmmac_rx_dirty(priv, queue));5160 5161 while (budget-- > 0 && entry != rx_q->cur_rx) {5162 struct stmmac_rx_buffer *buf = &rx_q->buf_pool[entry];5163 dma_addr_t dma_addr;5164 bool use_rx_wd;5165 5166 if (!buf->xdp) {5167 buf->xdp = xsk_buff_alloc(rx_q->xsk_pool);5168 if (!buf->xdp) {5169 ret = false;5170 break;5171 }5172 }5173 5174 if (priv->extend_desc)5175 rx_desc = (struct dma_desc *)(rx_q->dma_erx + entry);5176 else5177 rx_desc = rx_q->dma_rx + entry;5178 5179 dma_addr = xsk_buff_xdp_get_dma(buf->xdp);5180 stmmac_set_desc_addr(priv, rx_desc, dma_addr);5181 stmmac_set_desc_sec_addr(priv, rx_desc, 0, false);5182 stmmac_refill_desc3(priv, rx_q, rx_desc);5183 5184 rx_q->rx_count_frames++;5185 rx_q->rx_count_frames += priv->rx_coal_frames[queue];5186 if (rx_q->rx_count_frames > priv->rx_coal_frames[queue])5187 rx_q->rx_count_frames = 0;5188 5189 use_rx_wd = !priv->rx_coal_frames[queue];5190 use_rx_wd |= rx_q->rx_count_frames > 0;5191 if (!priv->use_riwt)5192 use_rx_wd = false;5193 5194 dma_wmb();5195 stmmac_set_rx_owner(priv, rx_desc, use_rx_wd);5196 5197 entry = STMMAC_GET_ENTRY(entry, priv->dma_conf.dma_rx_size);5198 }5199 5200 if (rx_desc) {5201 rx_q->dirty_rx = entry;5202 rx_q->rx_tail_addr = rx_q->dma_rx_phy +5203 (rx_q->dirty_rx * sizeof(struct dma_desc));5204 stmmac_set_rx_tail_ptr(priv, priv->ioaddr, rx_q->rx_tail_addr, queue);5205 }5206 5207 return ret;5208}5209 5210static struct stmmac_xdp_buff *xsk_buff_to_stmmac_ctx(struct xdp_buff *xdp)5211{5212 /* In XDP zero copy data path, xdp field in struct xdp_buff_xsk is used5213 * to represent incoming packet, whereas cb field in the same structure5214 * is used to store driver specific info. Thus, struct stmmac_xdp_buff5215 * is laid on top of xdp and cb fields of struct xdp_buff_xsk.5216 */5217 return (struct stmmac_xdp_buff *)xdp;5218}5219 5220static int stmmac_rx_zc(struct stmmac_priv *priv, int limit, u32 queue)5221{5222 struct stmmac_rxq_stats *rxq_stats = &priv->xstats.rxq_stats[queue];5223 struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];5224 unsigned int count = 0, error = 0, len = 0;5225 int dirty = stmmac_rx_dirty(priv, queue);5226 unsigned int next_entry = rx_q->cur_rx;5227 u32 rx_errors = 0, rx_dropped = 0;5228 unsigned int desc_size;5229 struct bpf_prog *prog;5230 bool failure = false;5231 int xdp_status = 0;5232 int status = 0;5233 5234 if (netif_msg_rx_status(priv)) {5235 void *rx_head;5236 5237 netdev_dbg(priv->dev, "%s: descriptor ring:\n", __func__);5238 if (priv->extend_desc) {5239 rx_head = (void *)rx_q->dma_erx;5240 desc_size = sizeof(struct dma_extended_desc);5241 } else {5242 rx_head = (void *)rx_q->dma_rx;5243 desc_size = sizeof(struct dma_desc);5244 }5245 5246 stmmac_display_ring(priv, rx_head, priv->dma_conf.dma_rx_size, true,5247 rx_q->dma_rx_phy, desc_size);5248 }5249 while (count < limit) {5250 struct stmmac_rx_buffer *buf;5251 struct stmmac_xdp_buff *ctx;5252 unsigned int buf1_len = 0;5253 struct dma_desc *np, *p;5254 int entry;5255 int res;5256 5257 if (!count && rx_q->state_saved) {5258 error = rx_q->state.error;5259 len = rx_q->state.len;5260 } else {5261 rx_q->state_saved = false;5262 error = 0;5263 len = 0;5264 }5265 5266 if (count >= limit)5267 break;5268 5269read_again:5270 buf1_len = 0;5271 entry = next_entry;5272 buf = &rx_q->buf_pool[entry];5273 5274 if (dirty >= STMMAC_RX_FILL_BATCH) {5275 failure = failure ||5276 !stmmac_rx_refill_zc(priv, queue, dirty);5277 dirty = 0;5278 }5279 5280 if (priv->extend_desc)5281 p = (struct dma_desc *)(rx_q->dma_erx + entry);5282 else5283 p = rx_q->dma_rx + entry;5284 5285 /* read the status of the incoming frame */5286 status = stmmac_rx_status(priv, &priv->xstats, p);5287 /* check if managed by the DMA otherwise go ahead */5288 if (unlikely(status & dma_own))5289 break;5290 5291 /* Prefetch the next RX descriptor */5292 rx_q->cur_rx = STMMAC_GET_ENTRY(rx_q->cur_rx,5293 priv->dma_conf.dma_rx_size);5294 next_entry = rx_q->cur_rx;5295 5296 if (priv->extend_desc)5297 np = (struct dma_desc *)(rx_q->dma_erx + next_entry);5298 else5299 np = rx_q->dma_rx + next_entry;5300 5301 prefetch(np);5302 5303 /* Ensure a valid XSK buffer before proceed */5304 if (!buf->xdp)5305 break;5306 5307 if (priv->extend_desc)5308 stmmac_rx_extended_status(priv, &priv->xstats,5309 rx_q->dma_erx + entry);5310 if (unlikely(status == discard_frame)) {5311 xsk_buff_free(buf->xdp);5312 buf->xdp = NULL;5313 dirty++;5314 error = 1;5315 if (!priv->hwts_rx_en)5316 rx_errors++;5317 }5318 5319 if (unlikely(error && (status & rx_not_ls)))5320 goto read_again;5321 if (unlikely(error)) {5322 count++;5323 continue;5324 }5325 5326 /* XSK pool expects RX frame 1:1 mapped to XSK buffer */5327 if (likely(status & rx_not_ls)) {5328 xsk_buff_free(buf->xdp);5329 buf->xdp = NULL;5330 dirty++;5331 count++;5332 goto read_again;5333 }5334 5335 ctx = xsk_buff_to_stmmac_ctx(buf->xdp);5336 ctx->priv = priv;5337 ctx->desc = p;5338 ctx->ndesc = np;5339 5340 /* XDP ZC Frame only support primary buffers for now */5341 buf1_len = stmmac_rx_buf1_len(priv, p, status, len);5342 len += buf1_len;5343 5344 /* ACS is disabled; strip manually. */5345 if (likely(!(status & rx_not_ls))) {5346 buf1_len -= ETH_FCS_LEN;5347 len -= ETH_FCS_LEN;5348 }5349 5350 /* RX buffer is good and fit into a XSK pool buffer */5351 buf->xdp->data_end = buf->xdp->data + buf1_len;5352 xsk_buff_dma_sync_for_cpu(buf->xdp);5353 5354 prog = READ_ONCE(priv->xdp_prog);5355 res = __stmmac_xdp_run_prog(priv, prog, buf->xdp);5356 5357 switch (res) {5358 case STMMAC_XDP_PASS:5359 stmmac_dispatch_skb_zc(priv, queue, p, np, buf->xdp);5360 xsk_buff_free(buf->xdp);5361 break;5362 case STMMAC_XDP_CONSUMED:5363 xsk_buff_free(buf->xdp);5364 rx_dropped++;5365 break;5366 case STMMAC_XDP_TX:5367 case STMMAC_XDP_REDIRECT:5368 xdp_status |= res;5369 break;5370 }5371 5372 buf->xdp = NULL;5373 dirty++;5374 count++;5375 }5376 5377 if (status & rx_not_ls) {5378 rx_q->state_saved = true;5379 rx_q->state.error = error;5380 rx_q->state.len = len;5381 }5382 5383 stmmac_finalize_xdp_rx(priv, xdp_status);5384 5385 u64_stats_update_begin(&rxq_stats->napi_syncp);5386 u64_stats_add(&rxq_stats->napi.rx_pkt_n, count);5387 u64_stats_update_end(&rxq_stats->napi_syncp);5388 5389 priv->xstats.rx_dropped += rx_dropped;5390 priv->xstats.rx_errors += rx_errors;5391 5392 if (xsk_uses_need_wakeup(rx_q->xsk_pool)) {5393 if (failure || stmmac_rx_dirty(priv, queue) > 0)5394 xsk_set_rx_need_wakeup(rx_q->xsk_pool);5395 else5396 xsk_clear_rx_need_wakeup(rx_q->xsk_pool);5397 5398 return (int)count;5399 }5400 5401 return failure ? limit : (int)count;5402}5403 5404/**5405 * stmmac_rx - manage the receive process5406 * @priv: driver private structure5407 * @limit: napi bugget5408 * @queue: RX queue index.5409 * Description : this the function called by the napi poll method.5410 * It gets all the frames inside the ring.5411 */5412static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)5413{5414 u32 rx_errors = 0, rx_dropped = 0, rx_bytes = 0, rx_packets = 0;5415 struct stmmac_rxq_stats *rxq_stats = &priv->xstats.rxq_stats[queue];5416 struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];5417 struct stmmac_channel *ch = &priv->channel[queue];5418 unsigned int count = 0, error = 0, len = 0;5419 int status = 0, coe = priv->hw->rx_csum;5420 unsigned int next_entry = rx_q->cur_rx;5421 enum dma_data_direction dma_dir;5422 unsigned int desc_size;5423 struct sk_buff *skb = NULL;5424 struct stmmac_xdp_buff ctx;5425 int xdp_status = 0;5426 int buf_sz;5427 5428 dma_dir = page_pool_get_dma_dir(rx_q->page_pool);5429 buf_sz = DIV_ROUND_UP(priv->dma_conf.dma_buf_sz, PAGE_SIZE) * PAGE_SIZE;5430 limit = min(priv->dma_conf.dma_rx_size - 1, (unsigned int)limit);5431 5432 if (netif_msg_rx_status(priv)) {5433 void *rx_head;5434 5435 netdev_dbg(priv->dev, "%s: descriptor ring:\n", __func__);5436 if (priv->extend_desc) {5437 rx_head = (void *)rx_q->dma_erx;5438 desc_size = sizeof(struct dma_extended_desc);5439 } else {5440 rx_head = (void *)rx_q->dma_rx;5441 desc_size = sizeof(struct dma_desc);5442 }5443 5444 stmmac_display_ring(priv, rx_head, priv->dma_conf.dma_rx_size, true,5445 rx_q->dma_rx_phy, desc_size);5446 }5447 while (count < limit) {5448 unsigned int buf1_len = 0, buf2_len = 0;5449 enum pkt_hash_types hash_type;5450 struct stmmac_rx_buffer *buf;5451 struct dma_desc *np, *p;5452 int entry;5453 u32 hash;5454 5455 if (!count && rx_q->state_saved) {5456 skb = rx_q->state.skb;5457 error = rx_q->state.error;5458 len = rx_q->state.len;5459 } else {5460 rx_q->state_saved = false;5461 skb = NULL;5462 error = 0;5463 len = 0;5464 }5465 5466read_again:5467 if (count >= limit)5468 break;5469 5470 buf1_len = 0;5471 buf2_len = 0;5472 entry = next_entry;5473 buf = &rx_q->buf_pool[entry];5474 5475 if (priv->extend_desc)5476 p = (struct dma_desc *)(rx_q->dma_erx + entry);5477 else5478 p = rx_q->dma_rx + entry;5479 5480 /* read the status of the incoming frame */5481 status = stmmac_rx_status(priv, &priv->xstats, p);5482 /* check if managed by the DMA otherwise go ahead */5483 if (unlikely(status & dma_own))5484 break;5485 5486 rx_q->cur_rx = STMMAC_GET_ENTRY(rx_q->cur_rx,5487 priv->dma_conf.dma_rx_size);5488 next_entry = rx_q->cur_rx;5489 5490 if (priv->extend_desc)5491 np = (struct dma_desc *)(rx_q->dma_erx + next_entry);5492 else5493 np = rx_q->dma_rx + next_entry;5494 5495 prefetch(np);5496 5497 if (priv->extend_desc)5498 stmmac_rx_extended_status(priv, &priv->xstats, rx_q->dma_erx + entry);5499 if (unlikely(status == discard_frame)) {5500 page_pool_recycle_direct(rx_q->page_pool, buf->page);5501 buf->page = NULL;5502 error = 1;5503 if (!priv->hwts_rx_en)5504 rx_errors++;5505 }5506 5507 if (unlikely(error && (status & rx_not_ls)))5508 goto read_again;5509 if (unlikely(error)) {5510 dev_kfree_skb(skb);5511 skb = NULL;5512 count++;5513 continue;5514 }5515 5516 /* Buffer is good. Go on. */5517 5518 prefetch(page_address(buf->page) + buf->page_offset);5519 if (buf->sec_page)5520 prefetch(page_address(buf->sec_page));5521 5522 buf1_len = stmmac_rx_buf1_len(priv, p, status, len);5523 len += buf1_len;5524 buf2_len = stmmac_rx_buf2_len(priv, p, status, len);5525 len += buf2_len;5526 5527 /* ACS is disabled; strip manually. */5528 if (likely(!(status & rx_not_ls))) {5529 if (buf2_len) {5530 buf2_len -= ETH_FCS_LEN;5531 len -= ETH_FCS_LEN;5532 } else if (buf1_len) {5533 buf1_len -= ETH_FCS_LEN;5534 len -= ETH_FCS_LEN;5535 }5536 }5537 5538 if (!skb) {5539 unsigned int pre_len, sync_len;5540 5541 dma_sync_single_for_cpu(priv->device, buf->addr,5542 buf1_len, dma_dir);5543 5544 xdp_init_buff(&ctx.xdp, buf_sz, &rx_q->xdp_rxq);5545 xdp_prepare_buff(&ctx.xdp, page_address(buf->page),5546 buf->page_offset, buf1_len, true);5547 5548 pre_len = ctx.xdp.data_end - ctx.xdp.data_hard_start -5549 buf->page_offset;5550 5551 ctx.priv = priv;5552 ctx.desc = p;5553 ctx.ndesc = np;5554 5555 skb = stmmac_xdp_run_prog(priv, &ctx.xdp);5556 /* Due xdp_adjust_tail: DMA sync for_device5557 * cover max len CPU touch5558 */5559 sync_len = ctx.xdp.data_end - ctx.xdp.data_hard_start -5560 buf->page_offset;5561 sync_len = max(sync_len, pre_len);5562 5563 /* For Not XDP_PASS verdict */5564 if (IS_ERR(skb)) {5565 unsigned int xdp_res = -PTR_ERR(skb);5566 5567 if (xdp_res & STMMAC_XDP_CONSUMED) {5568 page_pool_put_page(rx_q->page_pool,5569 virt_to_head_page(ctx.xdp.data),5570 sync_len, true);5571 buf->page = NULL;5572 rx_dropped++;5573 5574 /* Clear skb as it was set as5575 * status by XDP program.5576 */5577 skb = NULL;5578 5579 if (unlikely((status & rx_not_ls)))5580 goto read_again;5581 5582 count++;5583 continue;5584 } else if (xdp_res & (STMMAC_XDP_TX |5585 STMMAC_XDP_REDIRECT)) {5586 xdp_status |= xdp_res;5587 buf->page = NULL;5588 skb = NULL;5589 count++;5590 continue;5591 }5592 }5593 }5594 5595 if (!skb) {5596 /* XDP program may expand or reduce tail */5597 buf1_len = ctx.xdp.data_end - ctx.xdp.data;5598 5599 skb = napi_alloc_skb(&ch->rx_napi, buf1_len);5600 if (!skb) {5601 rx_dropped++;5602 count++;5603 goto drain_data;5604 }5605 5606 /* XDP program may adjust header */5607 skb_copy_to_linear_data(skb, ctx.xdp.data, buf1_len);5608 skb_put(skb, buf1_len);5609 5610 /* Data payload copied into SKB, page ready for recycle */5611 page_pool_recycle_direct(rx_q->page_pool, buf->page);5612 buf->page = NULL;5613 } else if (buf1_len) {5614 dma_sync_single_for_cpu(priv->device, buf->addr,5615 buf1_len, dma_dir);5616 skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,5617 buf->page, buf->page_offset, buf1_len,5618 priv->dma_conf.dma_buf_sz);5619 5620 /* Data payload appended into SKB */5621 skb_mark_for_recycle(skb);5622 buf->page = NULL;5623 }5624 5625 if (buf2_len) {5626 dma_sync_single_for_cpu(priv->device, buf->sec_addr,5627 buf2_len, dma_dir);5628 skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,5629 buf->sec_page, 0, buf2_len,5630 priv->dma_conf.dma_buf_sz);5631 5632 /* Data payload appended into SKB */5633 skb_mark_for_recycle(skb);5634 buf->sec_page = NULL;5635 }5636 5637drain_data:5638 if (likely(status & rx_not_ls))5639 goto read_again;5640 if (!skb)5641 continue;5642 5643 /* Got entire packet into SKB. Finish it. */5644 5645 stmmac_get_rx_hwtstamp(priv, p, np, skb);5646 5647 if (priv->hw->hw_vlan_en)5648 /* MAC level stripping. */5649 stmmac_rx_hw_vlan(priv, priv->hw, p, skb);5650 else5651 /* Driver level stripping. */5652 stmmac_rx_vlan(priv->dev, skb);5653 5654 skb->protocol = eth_type_trans(skb, priv->dev);5655 5656 if (unlikely(!coe) || !stmmac_has_ip_ethertype(skb))5657 skb_checksum_none_assert(skb);5658 else5659 skb->ip_summed = CHECKSUM_UNNECESSARY;5660 5661 if (!stmmac_get_rx_hash(priv, p, &hash, &hash_type))5662 skb_set_hash(skb, hash, hash_type);5663 5664 skb_record_rx_queue(skb, queue);5665 napi_gro_receive(&ch->rx_napi, skb);5666 skb = NULL;5667 5668 rx_packets++;5669 rx_bytes += len;5670 count++;5671 }5672 5673 if (status & rx_not_ls || skb) {5674 rx_q->state_saved = true;5675 rx_q->state.skb = skb;5676 rx_q->state.error = error;5677 rx_q->state.len = len;5678 }5679 5680 stmmac_finalize_xdp_rx(priv, xdp_status);5681 5682 stmmac_rx_refill(priv, queue);5683 5684 u64_stats_update_begin(&rxq_stats->napi_syncp);5685 u64_stats_add(&rxq_stats->napi.rx_packets, rx_packets);5686 u64_stats_add(&rxq_stats->napi.rx_bytes, rx_bytes);5687 u64_stats_add(&rxq_stats->napi.rx_pkt_n, count);5688 u64_stats_update_end(&rxq_stats->napi_syncp);5689 5690 priv->xstats.rx_dropped += rx_dropped;5691 priv->xstats.rx_errors += rx_errors;5692 5693 return count;5694}5695 5696static int stmmac_napi_poll_rx(struct napi_struct *napi, int budget)5697{5698 struct stmmac_channel *ch =5699 container_of(napi, struct stmmac_channel, rx_napi);5700 struct stmmac_priv *priv = ch->priv_data;5701 struct stmmac_rxq_stats *rxq_stats;5702 u32 chan = ch->index;5703 int work_done;5704 5705 rxq_stats = &priv->xstats.rxq_stats[chan];5706 u64_stats_update_begin(&rxq_stats->napi_syncp);5707 u64_stats_inc(&rxq_stats->napi.poll);5708 u64_stats_update_end(&rxq_stats->napi_syncp);5709 5710 work_done = stmmac_rx(priv, budget, chan);5711 if (work_done < budget && napi_complete_done(napi, work_done)) {5712 unsigned long flags;5713 5714 spin_lock_irqsave(&ch->lock, flags);5715 stmmac_enable_dma_irq(priv, priv->ioaddr, chan, 1, 0);5716 spin_unlock_irqrestore(&ch->lock, flags);5717 }5718 5719 return work_done;5720}5721 5722static int stmmac_napi_poll_tx(struct napi_struct *napi, int budget)5723{5724 struct stmmac_channel *ch =5725 container_of(napi, struct stmmac_channel, tx_napi);5726 struct stmmac_priv *priv = ch->priv_data;5727 struct stmmac_txq_stats *txq_stats;5728 bool pending_packets = false;5729 u32 chan = ch->index;5730 int work_done;5731 5732 txq_stats = &priv->xstats.txq_stats[chan];5733 u64_stats_update_begin(&txq_stats->napi_syncp);5734 u64_stats_inc(&txq_stats->napi.poll);5735 u64_stats_update_end(&txq_stats->napi_syncp);5736 5737 work_done = stmmac_tx_clean(priv, budget, chan, &pending_packets);5738 work_done = min(work_done, budget);5739 5740 if (work_done < budget && napi_complete_done(napi, work_done)) {5741 unsigned long flags;5742 5743 spin_lock_irqsave(&ch->lock, flags);5744 stmmac_enable_dma_irq(priv, priv->ioaddr, chan, 0, 1);5745 spin_unlock_irqrestore(&ch->lock, flags);5746 }5747 5748 /* TX still have packet to handle, check if we need to arm tx timer */5749 if (pending_packets)5750 stmmac_tx_timer_arm(priv, chan);5751 5752 return work_done;5753}5754 5755static int stmmac_napi_poll_rxtx(struct napi_struct *napi, int budget)5756{5757 struct stmmac_channel *ch =5758 container_of(napi, struct stmmac_channel, rxtx_napi);5759 struct stmmac_priv *priv = ch->priv_data;5760 bool tx_pending_packets = false;5761 int rx_done, tx_done, rxtx_done;5762 struct stmmac_rxq_stats *rxq_stats;5763 struct stmmac_txq_stats *txq_stats;5764 u32 chan = ch->index;5765 5766 rxq_stats = &priv->xstats.rxq_stats[chan];5767 u64_stats_update_begin(&rxq_stats->napi_syncp);5768 u64_stats_inc(&rxq_stats->napi.poll);5769 u64_stats_update_end(&rxq_stats->napi_syncp);5770 5771 txq_stats = &priv->xstats.txq_stats[chan];5772 u64_stats_update_begin(&txq_stats->napi_syncp);5773 u64_stats_inc(&txq_stats->napi.poll);5774 u64_stats_update_end(&txq_stats->napi_syncp);5775 5776 tx_done = stmmac_tx_clean(priv, budget, chan, &tx_pending_packets);5777 tx_done = min(tx_done, budget);5778 5779 rx_done = stmmac_rx_zc(priv, budget, chan);5780 5781 rxtx_done = max(tx_done, rx_done);5782 5783 /* If either TX or RX work is not complete, return budget5784 * and keep pooling5785 */5786 if (rxtx_done >= budget)5787 return budget;5788 5789 /* all work done, exit the polling mode */5790 if (napi_complete_done(napi, rxtx_done)) {5791 unsigned long flags;5792 5793 spin_lock_irqsave(&ch->lock, flags);5794 /* Both RX and TX work done are compelte,5795 * so enable both RX & TX IRQs.5796 */5797 stmmac_enable_dma_irq(priv, priv->ioaddr, chan, 1, 1);5798 spin_unlock_irqrestore(&ch->lock, flags);5799 }5800 5801 /* TX still have packet to handle, check if we need to arm tx timer */5802 if (tx_pending_packets)5803 stmmac_tx_timer_arm(priv, chan);5804 5805 return min(rxtx_done, budget - 1);5806}5807 5808/**5809 * stmmac_tx_timeout5810 * @dev : Pointer to net device structure5811 * @txqueue: the index of the hanging transmit queue5812 * Description: this function is called when a packet transmission fails to5813 * complete within a reasonable time. The driver will mark the error in the5814 * netdev structure and arrange for the device to be reset to a sane state5815 * in order to transmit a new packet.5816 */5817static void stmmac_tx_timeout(struct net_device *dev, unsigned int txqueue)5818{5819 struct stmmac_priv *priv = netdev_priv(dev);5820 5821 stmmac_global_err(priv);5822}5823 5824/**5825 * stmmac_set_rx_mode - entry point for multicast addressing5826 * @dev : pointer to the device structure5827 * Description:5828 * This function is a driver entry point which gets called by the kernel5829 * whenever multicast addresses must be enabled/disabled.5830 * Return value:5831 * void.5832 */5833static void stmmac_set_rx_mode(struct net_device *dev)5834{5835 struct stmmac_priv *priv = netdev_priv(dev);5836 5837 stmmac_set_filter(priv, priv->hw, dev);5838}5839 5840/**5841 * stmmac_change_mtu - entry point to change MTU size for the device.5842 * @dev : device pointer.5843 * @new_mtu : the new MTU size for the device.5844 * Description: the Maximum Transfer Unit (MTU) is used by the network layer5845 * to drive packet transmission. Ethernet has an MTU of 1500 octets5846 * (ETH_DATA_LEN). This value can be changed with ifconfig.5847 * Return value:5848 * 0 on success and an appropriate (-)ve integer as defined in errno.h5849 * file on failure.5850 */5851static int stmmac_change_mtu(struct net_device *dev, int new_mtu)5852{5853 struct stmmac_priv *priv = netdev_priv(dev);5854 int txfifosz = priv->plat->tx_fifo_size;5855 struct stmmac_dma_conf *dma_conf;5856 const int mtu = new_mtu;5857 int ret;5858 5859 if (txfifosz == 0)5860 txfifosz = priv->dma_cap.tx_fifo_size;5861 5862 txfifosz /= priv->plat->tx_queues_to_use;5863 5864 if (stmmac_xdp_is_enabled(priv) && new_mtu > ETH_DATA_LEN) {5865 netdev_dbg(priv->dev, "Jumbo frames not supported for XDP\n");5866 return -EINVAL;5867 }5868 5869 new_mtu = STMMAC_ALIGN(new_mtu);5870 5871 /* If condition true, FIFO is too small or MTU too large */5872 if ((txfifosz < new_mtu) || (new_mtu > BUF_SIZE_16KiB))5873 return -EINVAL;5874 5875 if (netif_running(dev)) {5876 netdev_dbg(priv->dev, "restarting interface to change its MTU\n");5877 /* Try to allocate the new DMA conf with the new mtu */5878 dma_conf = stmmac_setup_dma_desc(priv, mtu);5879 if (IS_ERR(dma_conf)) {5880 netdev_err(priv->dev, "failed allocating new dma conf for new MTU %d\n",5881 mtu);5882 return PTR_ERR(dma_conf);5883 }5884 5885 stmmac_release(dev);5886 5887 ret = __stmmac_open(dev, dma_conf);5888 if (ret) {5889 free_dma_desc_resources(priv, dma_conf);5890 kfree(dma_conf);5891 netdev_err(priv->dev, "failed reopening the interface after MTU change\n");5892 return ret;5893 }5894 5895 kfree(dma_conf);5896 5897 stmmac_set_rx_mode(dev);5898 }5899 5900 WRITE_ONCE(dev->mtu, mtu);5901 netdev_update_features(dev);5902 5903 return 0;5904}5905 5906static netdev_features_t stmmac_fix_features(struct net_device *dev,5907 netdev_features_t features)5908{5909 struct stmmac_priv *priv = netdev_priv(dev);5910 5911 if (priv->plat->rx_coe == STMMAC_RX_COE_NONE)5912 features &= ~NETIF_F_RXCSUM;5913 5914 if (!priv->plat->tx_coe)5915 features &= ~NETIF_F_CSUM_MASK;5916 5917 /* Some GMAC devices have a bugged Jumbo frame support that5918 * needs to have the Tx COE disabled for oversized frames5919 * (due to limited buffer sizes). In this case we disable5920 * the TX csum insertion in the TDES and not use SF.5921 */5922 if (priv->plat->bugged_jumbo && (dev->mtu > ETH_DATA_LEN))5923 features &= ~NETIF_F_CSUM_MASK;5924 5925 /* Disable tso if asked by ethtool */5926 if ((priv->plat->flags & STMMAC_FLAG_TSO_EN) && (priv->dma_cap.tsoen)) {5927 if (features & NETIF_F_TSO)5928 priv->tso = true;5929 else5930 priv->tso = false;5931 }5932 5933 return features;5934}5935 5936static int stmmac_set_features(struct net_device *netdev,5937 netdev_features_t features)5938{5939 struct stmmac_priv *priv = netdev_priv(netdev);5940 5941 /* Keep the COE Type in case of csum is supporting */5942 if (features & NETIF_F_RXCSUM)5943 priv->hw->rx_csum = priv->plat->rx_coe;5944 else5945 priv->hw->rx_csum = 0;5946 /* No check needed because rx_coe has been set before and it will be5947 * fixed in case of issue.5948 */5949 stmmac_rx_ipc(priv, priv->hw);5950 5951 if (priv->sph_cap) {5952 bool sph_en = (priv->hw->rx_csum > 0) && priv->sph;5953 u32 chan;5954 5955 for (chan = 0; chan < priv->plat->rx_queues_to_use; chan++)5956 stmmac_enable_sph(priv, priv->ioaddr, sph_en, chan);5957 }5958 5959 if (features & NETIF_F_HW_VLAN_CTAG_RX)5960 priv->hw->hw_vlan_en = true;5961 else5962 priv->hw->hw_vlan_en = false;5963 5964 stmmac_set_hw_vlan_mode(priv, priv->hw);5965 5966 return 0;5967}5968 5969static void stmmac_fpe_event_status(struct stmmac_priv *priv, int status)5970{5971 struct stmmac_fpe_cfg *fpe_cfg = &priv->fpe_cfg;5972 5973 /* This is interrupt context, just spin_lock() */5974 spin_lock(&fpe_cfg->lock);5975 5976 if (!fpe_cfg->pmac_enabled || status == FPE_EVENT_UNKNOWN)5977 goto unlock_out;5978 5979 /* LP has sent verify mPacket */5980 if ((status & FPE_EVENT_RVER) == FPE_EVENT_RVER)5981 stmmac_fpe_send_mpacket(priv, priv->ioaddr, fpe_cfg,5982 MPACKET_RESPONSE);5983 5984 /* Local has sent verify mPacket */5985 if ((status & FPE_EVENT_TVER) == FPE_EVENT_TVER &&5986 fpe_cfg->status != ETHTOOL_MM_VERIFY_STATUS_SUCCEEDED)5987 fpe_cfg->status = ETHTOOL_MM_VERIFY_STATUS_VERIFYING;5988 5989 /* LP has sent response mPacket */5990 if ((status & FPE_EVENT_RRSP) == FPE_EVENT_RRSP &&5991 fpe_cfg->status == ETHTOOL_MM_VERIFY_STATUS_VERIFYING)5992 fpe_cfg->status = ETHTOOL_MM_VERIFY_STATUS_SUCCEEDED;5993 5994unlock_out:5995 spin_unlock(&fpe_cfg->lock);5996}5997 5998static void stmmac_common_interrupt(struct stmmac_priv *priv)5999{6000 u32 rx_cnt = priv->plat->rx_queues_to_use;6001 u32 tx_cnt = priv->plat->tx_queues_to_use;6002 u32 queues_count;6003 u32 queue;6004 bool xmac;6005 6006 xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac;6007 queues_count = (rx_cnt > tx_cnt) ? rx_cnt : tx_cnt;6008 6009 if (priv->irq_wake)6010 pm_wakeup_event(priv->device, 0);6011 6012 if (priv->dma_cap.estsel)6013 stmmac_est_irq_status(priv, priv, priv->dev,6014 &priv->xstats, tx_cnt);6015 6016 if (priv->dma_cap.fpesel) {6017 int status = stmmac_fpe_irq_status(priv, priv->ioaddr,6018 priv->dev);6019 6020 stmmac_fpe_event_status(priv, status);6021 }6022 6023 /* To handle GMAC own interrupts */6024 if ((priv->plat->has_gmac) || xmac) {6025 int status = stmmac_host_irq_status(priv, priv->hw, &priv->xstats);6026 6027 if (unlikely(status)) {6028 /* For LPI we need to save the tx status */6029 if (status & CORE_IRQ_TX_PATH_IN_LPI_MODE)6030 priv->tx_path_in_lpi_mode = true;6031 if (status & CORE_IRQ_TX_PATH_EXIT_LPI_MODE)6032 priv->tx_path_in_lpi_mode = false;6033 }6034 6035 for (queue = 0; queue < queues_count; queue++)6036 stmmac_host_mtl_irq_status(priv, priv->hw, queue);6037 6038 /* PCS link status */6039 if (priv->hw->pcs &&6040 !(priv->plat->flags & STMMAC_FLAG_HAS_INTEGRATED_PCS)) {6041 if (priv->xstats.pcs_link)6042 netif_carrier_on(priv->dev);6043 else6044 netif_carrier_off(priv->dev);6045 }6046 6047 stmmac_timestamp_interrupt(priv, priv);6048 }6049}6050 6051/**6052 * stmmac_interrupt - main ISR6053 * @irq: interrupt number.6054 * @dev_id: to pass the net device pointer.6055 * Description: this is the main driver interrupt service routine.6056 * It can call:6057 * o DMA service routine (to manage incoming frame reception and transmission6058 * status)6059 * o Core interrupts to manage: remote wake-up, management counter, LPI6060 * interrupts.6061 */6062static irqreturn_t stmmac_interrupt(int irq, void *dev_id)6063{6064 struct net_device *dev = (struct net_device *)dev_id;6065 struct stmmac_priv *priv = netdev_priv(dev);6066 6067 /* Check if adapter is up */6068 if (test_bit(STMMAC_DOWN, &priv->state))6069 return IRQ_HANDLED;6070 6071 /* Check ASP error if it isn't delivered via an individual IRQ */6072 if (priv->sfty_irq <= 0 && stmmac_safety_feat_interrupt(priv))6073 return IRQ_HANDLED;6074 6075 /* To handle Common interrupts */6076 stmmac_common_interrupt(priv);6077 6078 /* To handle DMA interrupts */6079 stmmac_dma_interrupt(priv);6080 6081 return IRQ_HANDLED;6082}6083 6084static irqreturn_t stmmac_mac_interrupt(int irq, void *dev_id)6085{6086 struct net_device *dev = (struct net_device *)dev_id;6087 struct stmmac_priv *priv = netdev_priv(dev);6088 6089 /* Check if adapter is up */6090 if (test_bit(STMMAC_DOWN, &priv->state))6091 return IRQ_HANDLED;6092 6093 /* To handle Common interrupts */6094 stmmac_common_interrupt(priv);6095 6096 return IRQ_HANDLED;6097}6098 6099static irqreturn_t stmmac_safety_interrupt(int irq, void *dev_id)6100{6101 struct net_device *dev = (struct net_device *)dev_id;6102 struct stmmac_priv *priv = netdev_priv(dev);6103 6104 /* Check if adapter is up */6105 if (test_bit(STMMAC_DOWN, &priv->state))6106 return IRQ_HANDLED;6107 6108 /* Check if a fatal error happened */6109 stmmac_safety_feat_interrupt(priv);6110 6111 return IRQ_HANDLED;6112}6113 6114static irqreturn_t stmmac_msi_intr_tx(int irq, void *data)6115{6116 struct stmmac_tx_queue *tx_q = (struct stmmac_tx_queue *)data;6117 struct stmmac_dma_conf *dma_conf;6118 int chan = tx_q->queue_index;6119 struct stmmac_priv *priv;6120 int status;6121 6122 dma_conf = container_of(tx_q, struct stmmac_dma_conf, tx_queue[chan]);6123 priv = container_of(dma_conf, struct stmmac_priv, dma_conf);6124 6125 /* Check if adapter is up */6126 if (test_bit(STMMAC_DOWN, &priv->state))6127 return IRQ_HANDLED;6128 6129 status = stmmac_napi_check(priv, chan, DMA_DIR_TX);6130 6131 if (unlikely(status & tx_hard_error_bump_tc)) {6132 /* Try to bump up the dma threshold on this failure */6133 stmmac_bump_dma_threshold(priv, chan);6134 } else if (unlikely(status == tx_hard_error)) {6135 stmmac_tx_err(priv, chan);6136 }6137 6138 return IRQ_HANDLED;6139}6140 6141static irqreturn_t stmmac_msi_intr_rx(int irq, void *data)6142{6143 struct stmmac_rx_queue *rx_q = (struct stmmac_rx_queue *)data;6144 struct stmmac_dma_conf *dma_conf;6145 int chan = rx_q->queue_index;6146 struct stmmac_priv *priv;6147 6148 dma_conf = container_of(rx_q, struct stmmac_dma_conf, rx_queue[chan]);6149 priv = container_of(dma_conf, struct stmmac_priv, dma_conf);6150 6151 /* Check if adapter is up */6152 if (test_bit(STMMAC_DOWN, &priv->state))6153 return IRQ_HANDLED;6154 6155 stmmac_napi_check(priv, chan, DMA_DIR_RX);6156 6157 return IRQ_HANDLED;6158}6159 6160/**6161 * stmmac_ioctl - Entry point for the Ioctl6162 * @dev: Device pointer.6163 * @rq: An IOCTL specefic structure, that can contain a pointer to6164 * a proprietary structure used to pass information to the driver.6165 * @cmd: IOCTL command6166 * Description:6167 * Currently it supports the phy_mii_ioctl(...) and HW time stamping.6168 */6169static int stmmac_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)6170{6171 struct stmmac_priv *priv = netdev_priv (dev);6172 int ret = -EOPNOTSUPP;6173 6174 if (!netif_running(dev))6175 return -EINVAL;6176 6177 switch (cmd) {6178 case SIOCGMIIPHY:6179 case SIOCGMIIREG:6180 case SIOCSMIIREG:6181 ret = phylink_mii_ioctl(priv->phylink, rq, cmd);6182 break;6183 case SIOCSHWTSTAMP:6184 ret = stmmac_hwtstamp_set(dev, rq);6185 break;6186 case SIOCGHWTSTAMP:6187 ret = stmmac_hwtstamp_get(dev, rq);6188 break;6189 default:6190 break;6191 }6192 6193 return ret;6194}6195 6196static int stmmac_setup_tc_block_cb(enum tc_setup_type type, void *type_data,6197 void *cb_priv)6198{6199 struct stmmac_priv *priv = cb_priv;6200 int ret = -EOPNOTSUPP;6201 6202 if (!tc_cls_can_offload_and_chain0(priv->dev, type_data))6203 return ret;6204 6205 __stmmac_disable_all_queues(priv);6206 6207 switch (type) {6208 case TC_SETUP_CLSU32:6209 ret = stmmac_tc_setup_cls_u32(priv, priv, type_data);6210 break;6211 case TC_SETUP_CLSFLOWER:6212 ret = stmmac_tc_setup_cls(priv, priv, type_data);6213 break;6214 default:6215 break;6216 }6217 6218 stmmac_enable_all_queues(priv);6219 return ret;6220}6221 6222static LIST_HEAD(stmmac_block_cb_list);6223 6224static int stmmac_setup_tc(struct net_device *ndev, enum tc_setup_type type,6225 void *type_data)6226{6227 struct stmmac_priv *priv = netdev_priv(ndev);6228 6229 switch (type) {6230 case TC_QUERY_CAPS:6231 return stmmac_tc_query_caps(priv, priv, type_data);6232 case TC_SETUP_QDISC_MQPRIO:6233 return stmmac_tc_setup_mqprio(priv, priv, type_data);6234 case TC_SETUP_BLOCK:6235 return flow_block_cb_setup_simple(type_data,6236 &stmmac_block_cb_list,6237 stmmac_setup_tc_block_cb,6238 priv, priv, true);6239 case TC_SETUP_QDISC_CBS:6240 return stmmac_tc_setup_cbs(priv, priv, type_data);6241 case TC_SETUP_QDISC_TAPRIO:6242 return stmmac_tc_setup_taprio(priv, priv, type_data);6243 case TC_SETUP_QDISC_ETF:6244 return stmmac_tc_setup_etf(priv, priv, type_data);6245 default:6246 return -EOPNOTSUPP;6247 }6248}6249 6250static u16 stmmac_select_queue(struct net_device *dev, struct sk_buff *skb,6251 struct net_device *sb_dev)6252{6253 int gso = skb_shinfo(skb)->gso_type;6254 6255 if (gso & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6 | SKB_GSO_UDP_L4)) {6256 /*6257 * There is no way to determine the number of TSO/USO6258 * capable Queues. Let's use always the Queue 06259 * because if TSO/USO is supported then at least this6260 * one will be capable.6261 */6262 return 0;6263 }6264 6265 return netdev_pick_tx(dev, skb, NULL) % dev->real_num_tx_queues;6266}6267 6268static int stmmac_set_mac_address(struct net_device *ndev, void *addr)6269{6270 struct stmmac_priv *priv = netdev_priv(ndev);6271 int ret = 0;6272 6273 ret = pm_runtime_resume_and_get(priv->device);6274 if (ret < 0)6275 return ret;6276 6277 ret = eth_mac_addr(ndev, addr);6278 if (ret)6279 goto set_mac_error;6280 6281 stmmac_set_umac_addr(priv, priv->hw, ndev->dev_addr, 0);6282 6283set_mac_error:6284 pm_runtime_put(priv->device);6285 6286 return ret;6287}6288 6289#ifdef CONFIG_DEBUG_FS6290static struct dentry *stmmac_fs_dir;6291 6292static void sysfs_display_ring(void *head, int size, int extend_desc,6293 struct seq_file *seq, dma_addr_t dma_phy_addr)6294{6295 struct dma_extended_desc *ep = (struct dma_extended_desc *)head;6296 struct dma_desc *p = (struct dma_desc *)head;6297 unsigned int desc_size;6298 dma_addr_t dma_addr;6299 int i;6300 6301 desc_size = extend_desc ? sizeof(*ep) : sizeof(*p);6302 for (i = 0; i < size; i++) {6303 dma_addr = dma_phy_addr + i * desc_size;6304 seq_printf(seq, "%d [%pad]: 0x%x 0x%x 0x%x 0x%x\n",6305 i, &dma_addr,6306 le32_to_cpu(p->des0), le32_to_cpu(p->des1),6307 le32_to_cpu(p->des2), le32_to_cpu(p->des3));6308 if (extend_desc)6309 p = &(++ep)->basic;6310 else6311 p++;6312 }6313}6314 6315static int stmmac_rings_status_show(struct seq_file *seq, void *v)6316{6317 struct net_device *dev = seq->private;6318 struct stmmac_priv *priv = netdev_priv(dev);6319 u32 rx_count = priv->plat->rx_queues_to_use;6320 u32 tx_count = priv->plat->tx_queues_to_use;6321 u32 queue;6322 6323 if ((dev->flags & IFF_UP) == 0)6324 return 0;6325 6326 for (queue = 0; queue < rx_count; queue++) {6327 struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];6328 6329 seq_printf(seq, "RX Queue %d:\n", queue);6330 6331 if (priv->extend_desc) {6332 seq_printf(seq, "Extended descriptor ring:\n");6333 sysfs_display_ring((void *)rx_q->dma_erx,6334 priv->dma_conf.dma_rx_size, 1, seq, rx_q->dma_rx_phy);6335 } else {6336 seq_printf(seq, "Descriptor ring:\n");6337 sysfs_display_ring((void *)rx_q->dma_rx,6338 priv->dma_conf.dma_rx_size, 0, seq, rx_q->dma_rx_phy);6339 }6340 }6341 6342 for (queue = 0; queue < tx_count; queue++) {6343 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];6344 6345 seq_printf(seq, "TX Queue %d:\n", queue);6346 6347 if (priv->extend_desc) {6348 seq_printf(seq, "Extended descriptor ring:\n");6349 sysfs_display_ring((void *)tx_q->dma_etx,6350 priv->dma_conf.dma_tx_size, 1, seq, tx_q->dma_tx_phy);6351 } else if (!(tx_q->tbs & STMMAC_TBS_AVAIL)) {6352 seq_printf(seq, "Descriptor ring:\n");6353 sysfs_display_ring((void *)tx_q->dma_tx,6354 priv->dma_conf.dma_tx_size, 0, seq, tx_q->dma_tx_phy);6355 }6356 }6357 6358 return 0;6359}6360DEFINE_SHOW_ATTRIBUTE(stmmac_rings_status);6361 6362static int stmmac_dma_cap_show(struct seq_file *seq, void *v)6363{6364 static const char * const dwxgmac_timestamp_source[] = {6365 "None",6366 "Internal",6367 "External",6368 "Both",6369 };6370 static const char * const dwxgmac_safety_feature_desc[] = {6371 "No",6372 "All Safety Features with ECC and Parity",6373 "All Safety Features without ECC or Parity",6374 "All Safety Features with Parity Only",6375 "ECC Only",6376 "UNDEFINED",6377 "UNDEFINED",6378 "UNDEFINED",6379 };6380 struct net_device *dev = seq->private;6381 struct stmmac_priv *priv = netdev_priv(dev);6382 6383 if (!priv->hw_cap_support) {6384 seq_printf(seq, "DMA HW features not supported\n");6385 return 0;6386 }6387 6388 seq_printf(seq, "==============================\n");6389 seq_printf(seq, "\tDMA HW features\n");6390 seq_printf(seq, "==============================\n");6391 6392 seq_printf(seq, "\t10/100 Mbps: %s\n",6393 (priv->dma_cap.mbps_10_100) ? "Y" : "N");6394 seq_printf(seq, "\t1000 Mbps: %s\n",6395 (priv->dma_cap.mbps_1000) ? "Y" : "N");6396 seq_printf(seq, "\tHalf duplex: %s\n",6397 (priv->dma_cap.half_duplex) ? "Y" : "N");6398 if (priv->plat->has_xgmac) {6399 seq_printf(seq,6400 "\tNumber of Additional MAC address registers: %d\n",6401 priv->dma_cap.multi_addr);6402 } else {6403 seq_printf(seq, "\tHash Filter: %s\n",6404 (priv->dma_cap.hash_filter) ? "Y" : "N");6405 seq_printf(seq, "\tMultiple MAC address registers: %s\n",6406 (priv->dma_cap.multi_addr) ? "Y" : "N");6407 }6408 seq_printf(seq, "\tPCS (TBI/SGMII/RTBI PHY interfaces): %s\n",6409 (priv->dma_cap.pcs) ? "Y" : "N");6410 seq_printf(seq, "\tSMA (MDIO) Interface: %s\n",6411 (priv->dma_cap.sma_mdio) ? "Y" : "N");6412 seq_printf(seq, "\tPMT Remote wake up: %s\n",6413 (priv->dma_cap.pmt_remote_wake_up) ? "Y" : "N");6414 seq_printf(seq, "\tPMT Magic Frame: %s\n",6415 (priv->dma_cap.pmt_magic_frame) ? "Y" : "N");6416 seq_printf(seq, "\tRMON module: %s\n",6417 (priv->dma_cap.rmon) ? "Y" : "N");6418 seq_printf(seq, "\tIEEE 1588-2002 Time Stamp: %s\n",6419 (priv->dma_cap.time_stamp) ? "Y" : "N");6420 seq_printf(seq, "\tIEEE 1588-2008 Advanced Time Stamp: %s\n",6421 (priv->dma_cap.atime_stamp) ? "Y" : "N");6422 if (priv->plat->has_xgmac)6423 seq_printf(seq, "\tTimestamp System Time Source: %s\n",6424 dwxgmac_timestamp_source[priv->dma_cap.tssrc]);6425 seq_printf(seq, "\t802.3az - Energy-Efficient Ethernet (EEE): %s\n",6426 (priv->dma_cap.eee) ? "Y" : "N");6427 seq_printf(seq, "\tAV features: %s\n", (priv->dma_cap.av) ? "Y" : "N");6428 seq_printf(seq, "\tChecksum Offload in TX: %s\n",6429 (priv->dma_cap.tx_coe) ? "Y" : "N");6430 if (priv->synopsys_id >= DWMAC_CORE_4_00 ||6431 priv->plat->has_xgmac) {6432 seq_printf(seq, "\tIP Checksum Offload in RX: %s\n",6433 (priv->dma_cap.rx_coe) ? "Y" : "N");6434 } else {6435 seq_printf(seq, "\tIP Checksum Offload (type1) in RX: %s\n",6436 (priv->dma_cap.rx_coe_type1) ? "Y" : "N");6437 seq_printf(seq, "\tIP Checksum Offload (type2) in RX: %s\n",6438 (priv->dma_cap.rx_coe_type2) ? "Y" : "N");6439 seq_printf(seq, "\tRXFIFO > 2048bytes: %s\n",6440 (priv->dma_cap.rxfifo_over_2048) ? "Y" : "N");6441 }6442 seq_printf(seq, "\tNumber of Additional RX channel: %d\n",6443 priv->dma_cap.number_rx_channel);6444 seq_printf(seq, "\tNumber of Additional TX channel: %d\n",6445 priv->dma_cap.number_tx_channel);6446 seq_printf(seq, "\tNumber of Additional RX queues: %d\n",6447 priv->dma_cap.number_rx_queues);6448 seq_printf(seq, "\tNumber of Additional TX queues: %d\n",6449 priv->dma_cap.number_tx_queues);6450 seq_printf(seq, "\tEnhanced descriptors: %s\n",6451 (priv->dma_cap.enh_desc) ? "Y" : "N");6452 seq_printf(seq, "\tTX Fifo Size: %d\n", priv->dma_cap.tx_fifo_size);6453 seq_printf(seq, "\tRX Fifo Size: %d\n", priv->dma_cap.rx_fifo_size);6454 seq_printf(seq, "\tHash Table Size: %lu\n", priv->dma_cap.hash_tb_sz ?6455 (BIT(priv->dma_cap.hash_tb_sz) << 5) : 0);6456 seq_printf(seq, "\tTSO: %s\n", priv->dma_cap.tsoen ? "Y" : "N");6457 seq_printf(seq, "\tNumber of PPS Outputs: %d\n",6458 priv->dma_cap.pps_out_num);6459 seq_printf(seq, "\tSafety Features: %s\n",6460 dwxgmac_safety_feature_desc[priv->dma_cap.asp]);6461 seq_printf(seq, "\tFlexible RX Parser: %s\n",6462 priv->dma_cap.frpsel ? "Y" : "N");6463 seq_printf(seq, "\tEnhanced Addressing: %d\n",6464 priv->dma_cap.host_dma_width);6465 seq_printf(seq, "\tReceive Side Scaling: %s\n",6466 priv->dma_cap.rssen ? "Y" : "N");6467 seq_printf(seq, "\tVLAN Hash Filtering: %s\n",6468 priv->dma_cap.vlhash ? "Y" : "N");6469 seq_printf(seq, "\tSplit Header: %s\n",6470 priv->dma_cap.sphen ? "Y" : "N");6471 seq_printf(seq, "\tVLAN TX Insertion: %s\n",6472 priv->dma_cap.vlins ? "Y" : "N");6473 seq_printf(seq, "\tDouble VLAN: %s\n",6474 priv->dma_cap.dvlan ? "Y" : "N");6475 seq_printf(seq, "\tNumber of L3/L4 Filters: %d\n",6476 priv->dma_cap.l3l4fnum);6477 seq_printf(seq, "\tARP Offloading: %s\n",6478 priv->dma_cap.arpoffsel ? "Y" : "N");6479 seq_printf(seq, "\tEnhancements to Scheduled Traffic (EST): %s\n",6480 priv->dma_cap.estsel ? "Y" : "N");6481 seq_printf(seq, "\tFrame Preemption (FPE): %s\n",6482 priv->dma_cap.fpesel ? "Y" : "N");6483 seq_printf(seq, "\tTime-Based Scheduling (TBS): %s\n",6484 priv->dma_cap.tbssel ? "Y" : "N");6485 seq_printf(seq, "\tNumber of DMA Channels Enabled for TBS: %d\n",6486 priv->dma_cap.tbs_ch_num);6487 seq_printf(seq, "\tPer-Stream Filtering: %s\n",6488 priv->dma_cap.sgfsel ? "Y" : "N");6489 seq_printf(seq, "\tTX Timestamp FIFO Depth: %lu\n",6490 BIT(priv->dma_cap.ttsfd) >> 1);6491 seq_printf(seq, "\tNumber of Traffic Classes: %d\n",6492 priv->dma_cap.numtc);6493 seq_printf(seq, "\tDCB Feature: %s\n",6494 priv->dma_cap.dcben ? "Y" : "N");6495 seq_printf(seq, "\tIEEE 1588 High Word Register: %s\n",6496 priv->dma_cap.advthword ? "Y" : "N");6497 seq_printf(seq, "\tPTP Offload: %s\n",6498 priv->dma_cap.ptoen ? "Y" : "N");6499 seq_printf(seq, "\tOne-Step Timestamping: %s\n",6500 priv->dma_cap.osten ? "Y" : "N");6501 seq_printf(seq, "\tPriority-Based Flow Control: %s\n",6502 priv->dma_cap.pfcen ? "Y" : "N");6503 seq_printf(seq, "\tNumber of Flexible RX Parser Instructions: %lu\n",6504 BIT(priv->dma_cap.frpes) << 6);6505 seq_printf(seq, "\tNumber of Flexible RX Parser Parsable Bytes: %lu\n",6506 BIT(priv->dma_cap.frpbs) << 6);6507 seq_printf(seq, "\tParallel Instruction Processor Engines: %d\n",6508 priv->dma_cap.frppipe_num);6509 seq_printf(seq, "\tNumber of Extended VLAN Tag Filters: %lu\n",6510 priv->dma_cap.nrvf_num ?6511 (BIT(priv->dma_cap.nrvf_num) << 1) : 0);6512 seq_printf(seq, "\tWidth of the Time Interval Field in GCL: %d\n",6513 priv->dma_cap.estwid ? 4 * priv->dma_cap.estwid + 12 : 0);6514 seq_printf(seq, "\tDepth of GCL: %lu\n",6515 priv->dma_cap.estdep ? (BIT(priv->dma_cap.estdep) << 5) : 0);6516 seq_printf(seq, "\tQueue/Channel-Based VLAN Tag Insertion on TX: %s\n",6517 priv->dma_cap.cbtisel ? "Y" : "N");6518 seq_printf(seq, "\tNumber of Auxiliary Snapshot Inputs: %d\n",6519 priv->dma_cap.aux_snapshot_n);6520 seq_printf(seq, "\tOne-Step Timestamping for PTP over UDP/IP: %s\n",6521 priv->dma_cap.pou_ost_en ? "Y" : "N");6522 seq_printf(seq, "\tEnhanced DMA: %s\n",6523 priv->dma_cap.edma ? "Y" : "N");6524 seq_printf(seq, "\tDifferent Descriptor Cache: %s\n",6525 priv->dma_cap.ediffc ? "Y" : "N");6526 seq_printf(seq, "\tVxLAN/NVGRE: %s\n",6527 priv->dma_cap.vxn ? "Y" : "N");6528 seq_printf(seq, "\tDebug Memory Interface: %s\n",6529 priv->dma_cap.dbgmem ? "Y" : "N");6530 seq_printf(seq, "\tNumber of Policing Counters: %lu\n",6531 priv->dma_cap.pcsel ? BIT(priv->dma_cap.pcsel + 3) : 0);6532 return 0;6533}6534DEFINE_SHOW_ATTRIBUTE(stmmac_dma_cap);6535 6536/* Use network device events to rename debugfs file entries.6537 */6538static int stmmac_device_event(struct notifier_block *unused,6539 unsigned long event, void *ptr)6540{6541 struct net_device *dev = netdev_notifier_info_to_dev(ptr);6542 struct stmmac_priv *priv = netdev_priv(dev);6543 6544 if (dev->netdev_ops != &stmmac_netdev_ops)6545 goto done;6546 6547 switch (event) {6548 case NETDEV_CHANGENAME:6549 if (priv->dbgfs_dir)6550 priv->dbgfs_dir = debugfs_rename(stmmac_fs_dir,6551 priv->dbgfs_dir,6552 stmmac_fs_dir,6553 dev->name);6554 break;6555 }6556done:6557 return NOTIFY_DONE;6558}6559 6560static struct notifier_block stmmac_notifier = {6561 .notifier_call = stmmac_device_event,6562};6563 6564static void stmmac_init_fs(struct net_device *dev)6565{6566 struct stmmac_priv *priv = netdev_priv(dev);6567 6568 rtnl_lock();6569 6570 /* Create per netdev entries */6571 priv->dbgfs_dir = debugfs_create_dir(dev->name, stmmac_fs_dir);6572 6573 /* Entry to report DMA RX/TX rings */6574 debugfs_create_file("descriptors_status", 0444, priv->dbgfs_dir, dev,6575 &stmmac_rings_status_fops);6576 6577 /* Entry to report the DMA HW features */6578 debugfs_create_file("dma_cap", 0444, priv->dbgfs_dir, dev,6579 &stmmac_dma_cap_fops);6580 6581 rtnl_unlock();6582}6583 6584static void stmmac_exit_fs(struct net_device *dev)6585{6586 struct stmmac_priv *priv = netdev_priv(dev);6587 6588 debugfs_remove_recursive(priv->dbgfs_dir);6589}6590#endif /* CONFIG_DEBUG_FS */6591 6592static u32 stmmac_vid_crc32_le(__le16 vid_le)6593{6594 unsigned char *data = (unsigned char *)&vid_le;6595 unsigned char data_byte = 0;6596 u32 crc = ~0x0;6597 u32 temp = 0;6598 int i, bits;6599 6600 bits = get_bitmask_order(VLAN_VID_MASK);6601 for (i = 0; i < bits; i++) {6602 if ((i % 8) == 0)6603 data_byte = data[i / 8];6604 6605 temp = ((crc & 1) ^ data_byte) & 1;6606 crc >>= 1;6607 data_byte >>= 1;6608 6609 if (temp)6610 crc ^= 0xedb88320;6611 }6612 6613 return crc;6614}6615 6616static int stmmac_vlan_update(struct stmmac_priv *priv, bool is_double)6617{6618 u32 crc, hash = 0;6619 u16 pmatch = 0;6620 int count = 0;6621 u16 vid = 0;6622 6623 for_each_set_bit(vid, priv->active_vlans, VLAN_N_VID) {6624 __le16 vid_le = cpu_to_le16(vid);6625 crc = bitrev32(~stmmac_vid_crc32_le(vid_le)) >> 28;6626 hash |= (1 << crc);6627 count++;6628 }6629 6630 if (!priv->dma_cap.vlhash) {6631 if (count > 2) /* VID = 0 always passes filter */6632 return -EOPNOTSUPP;6633 6634 pmatch = vid;6635 hash = 0;6636 }6637 6638 return stmmac_update_vlan_hash(priv, priv->hw, hash, pmatch, is_double);6639}6640 6641static int stmmac_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid)6642{6643 struct stmmac_priv *priv = netdev_priv(ndev);6644 bool is_double = false;6645 int ret;6646 6647 ret = pm_runtime_resume_and_get(priv->device);6648 if (ret < 0)6649 return ret;6650 6651 if (be16_to_cpu(proto) == ETH_P_8021AD)6652 is_double = true;6653 6654 set_bit(vid, priv->active_vlans);6655 ret = stmmac_vlan_update(priv, is_double);6656 if (ret) {6657 clear_bit(vid, priv->active_vlans);6658 goto err_pm_put;6659 }6660 6661 if (priv->hw->num_vlan) {6662 ret = stmmac_add_hw_vlan_rx_fltr(priv, ndev, priv->hw, proto, vid);6663 if (ret)6664 goto err_pm_put;6665 }6666err_pm_put:6667 pm_runtime_put(priv->device);6668 6669 return ret;6670}6671 6672static int stmmac_vlan_rx_kill_vid(struct net_device *ndev, __be16 proto, u16 vid)6673{6674 struct stmmac_priv *priv = netdev_priv(ndev);6675 bool is_double = false;6676 int ret;6677 6678 ret = pm_runtime_resume_and_get(priv->device);6679 if (ret < 0)6680 return ret;6681 6682 if (be16_to_cpu(proto) == ETH_P_8021AD)6683 is_double = true;6684 6685 clear_bit(vid, priv->active_vlans);6686 6687 if (priv->hw->num_vlan) {6688 ret = stmmac_del_hw_vlan_rx_fltr(priv, ndev, priv->hw, proto, vid);6689 if (ret)6690 goto del_vlan_error;6691 }6692 6693 ret = stmmac_vlan_update(priv, is_double);6694 6695del_vlan_error:6696 pm_runtime_put(priv->device);6697 6698 return ret;6699}6700 6701static int stmmac_bpf(struct net_device *dev, struct netdev_bpf *bpf)6702{6703 struct stmmac_priv *priv = netdev_priv(dev);6704 6705 switch (bpf->command) {6706 case XDP_SETUP_PROG:6707 return stmmac_xdp_set_prog(priv, bpf->prog, bpf->extack);6708 case XDP_SETUP_XSK_POOL:6709 return stmmac_xdp_setup_pool(priv, bpf->xsk.pool,6710 bpf->xsk.queue_id);6711 default:6712 return -EOPNOTSUPP;6713 }6714}6715 6716static int stmmac_xdp_xmit(struct net_device *dev, int num_frames,6717 struct xdp_frame **frames, u32 flags)6718{6719 struct stmmac_priv *priv = netdev_priv(dev);6720 int cpu = smp_processor_id();6721 struct netdev_queue *nq;6722 int i, nxmit = 0;6723 int queue;6724 6725 if (unlikely(test_bit(STMMAC_DOWN, &priv->state)))6726 return -ENETDOWN;6727 6728 if (unlikely(flags & ~XDP_XMIT_FLAGS_MASK))6729 return -EINVAL;6730 6731 queue = stmmac_xdp_get_tx_queue(priv, cpu);6732 nq = netdev_get_tx_queue(priv->dev, queue);6733 6734 __netif_tx_lock(nq, cpu);6735 /* Avoids TX time-out as we are sharing with slow path */6736 txq_trans_cond_update(nq);6737 6738 for (i = 0; i < num_frames; i++) {6739 int res;6740 6741 res = stmmac_xdp_xmit_xdpf(priv, queue, frames[i], true);6742 if (res == STMMAC_XDP_CONSUMED)6743 break;6744 6745 nxmit++;6746 }6747 6748 if (flags & XDP_XMIT_FLUSH) {6749 stmmac_flush_tx_descriptors(priv, queue);6750 stmmac_tx_timer_arm(priv, queue);6751 }6752 6753 __netif_tx_unlock(nq);6754 6755 return nxmit;6756}6757 6758void stmmac_disable_rx_queue(struct stmmac_priv *priv, u32 queue)6759{6760 struct stmmac_channel *ch = &priv->channel[queue];6761 unsigned long flags;6762 6763 spin_lock_irqsave(&ch->lock, flags);6764 stmmac_disable_dma_irq(priv, priv->ioaddr, queue, 1, 0);6765 spin_unlock_irqrestore(&ch->lock, flags);6766 6767 stmmac_stop_rx_dma(priv, queue);6768 __free_dma_rx_desc_resources(priv, &priv->dma_conf, queue);6769}6770 6771void stmmac_enable_rx_queue(struct stmmac_priv *priv, u32 queue)6772{6773 struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];6774 struct stmmac_channel *ch = &priv->channel[queue];6775 unsigned long flags;6776 u32 buf_size;6777 int ret;6778 6779 ret = __alloc_dma_rx_desc_resources(priv, &priv->dma_conf, queue);6780 if (ret) {6781 netdev_err(priv->dev, "Failed to alloc RX desc.\n");6782 return;6783 }6784 6785 ret = __init_dma_rx_desc_rings(priv, &priv->dma_conf, queue, GFP_KERNEL);6786 if (ret) {6787 __free_dma_rx_desc_resources(priv, &priv->dma_conf, queue);6788 netdev_err(priv->dev, "Failed to init RX desc.\n");6789 return;6790 }6791 6792 stmmac_reset_rx_queue(priv, queue);6793 stmmac_clear_rx_descriptors(priv, &priv->dma_conf, queue);6794 6795 stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,6796 rx_q->dma_rx_phy, rx_q->queue_index);6797 6798 rx_q->rx_tail_addr = rx_q->dma_rx_phy + (rx_q->buf_alloc_num *6799 sizeof(struct dma_desc));6800 stmmac_set_rx_tail_ptr(priv, priv->ioaddr,6801 rx_q->rx_tail_addr, rx_q->queue_index);6802 6803 if (rx_q->xsk_pool && rx_q->buf_alloc_num) {6804 buf_size = xsk_pool_get_rx_frame_size(rx_q->xsk_pool);6805 stmmac_set_dma_bfsize(priv, priv->ioaddr,6806 buf_size,6807 rx_q->queue_index);6808 } else {6809 stmmac_set_dma_bfsize(priv, priv->ioaddr,6810 priv->dma_conf.dma_buf_sz,6811 rx_q->queue_index);6812 }6813 6814 stmmac_start_rx_dma(priv, queue);6815 6816 spin_lock_irqsave(&ch->lock, flags);6817 stmmac_enable_dma_irq(priv, priv->ioaddr, queue, 1, 0);6818 spin_unlock_irqrestore(&ch->lock, flags);6819}6820 6821void stmmac_disable_tx_queue(struct stmmac_priv *priv, u32 queue)6822{6823 struct stmmac_channel *ch = &priv->channel[queue];6824 unsigned long flags;6825 6826 spin_lock_irqsave(&ch->lock, flags);6827 stmmac_disable_dma_irq(priv, priv->ioaddr, queue, 0, 1);6828 spin_unlock_irqrestore(&ch->lock, flags);6829 6830 stmmac_stop_tx_dma(priv, queue);6831 __free_dma_tx_desc_resources(priv, &priv->dma_conf, queue);6832}6833 6834void stmmac_enable_tx_queue(struct stmmac_priv *priv, u32 queue)6835{6836 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];6837 struct stmmac_channel *ch = &priv->channel[queue];6838 unsigned long flags;6839 int ret;6840 6841 ret = __alloc_dma_tx_desc_resources(priv, &priv->dma_conf, queue);6842 if (ret) {6843 netdev_err(priv->dev, "Failed to alloc TX desc.\n");6844 return;6845 }6846 6847 ret = __init_dma_tx_desc_rings(priv, &priv->dma_conf, queue);6848 if (ret) {6849 __free_dma_tx_desc_resources(priv, &priv->dma_conf, queue);6850 netdev_err(priv->dev, "Failed to init TX desc.\n");6851 return;6852 }6853 6854 stmmac_reset_tx_queue(priv, queue);6855 stmmac_clear_tx_descriptors(priv, &priv->dma_conf, queue);6856 6857 stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,6858 tx_q->dma_tx_phy, tx_q->queue_index);6859 6860 if (tx_q->tbs & STMMAC_TBS_AVAIL)6861 stmmac_enable_tbs(priv, priv->ioaddr, 1, tx_q->queue_index);6862 6863 tx_q->tx_tail_addr = tx_q->dma_tx_phy;6864 stmmac_set_tx_tail_ptr(priv, priv->ioaddr,6865 tx_q->tx_tail_addr, tx_q->queue_index);6866 6867 stmmac_start_tx_dma(priv, queue);6868 6869 spin_lock_irqsave(&ch->lock, flags);6870 stmmac_enable_dma_irq(priv, priv->ioaddr, queue, 0, 1);6871 spin_unlock_irqrestore(&ch->lock, flags);6872}6873 6874void stmmac_xdp_release(struct net_device *dev)6875{6876 struct stmmac_priv *priv = netdev_priv(dev);6877 u32 chan;6878 6879 /* Ensure tx function is not running */6880 netif_tx_disable(dev);6881 6882 /* Disable NAPI process */6883 stmmac_disable_all_queues(priv);6884 6885 for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)6886 hrtimer_cancel(&priv->dma_conf.tx_queue[chan].txtimer);6887 6888 /* Free the IRQ lines */6889 stmmac_free_irq(dev, REQ_IRQ_ERR_ALL, 0);6890 6891 /* Stop TX/RX DMA channels */6892 stmmac_stop_all_dma(priv);6893 6894 /* Release and free the Rx/Tx resources */6895 free_dma_desc_resources(priv, &priv->dma_conf);6896 6897 /* Disable the MAC Rx/Tx */6898 stmmac_mac_set(priv, priv->ioaddr, false);6899 6900 /* set trans_start so we don't get spurious6901 * watchdogs during reset6902 */6903 netif_trans_update(dev);6904 netif_carrier_off(dev);6905}6906 6907int stmmac_xdp_open(struct net_device *dev)6908{6909 struct stmmac_priv *priv = netdev_priv(dev);6910 u32 rx_cnt = priv->plat->rx_queues_to_use;6911 u32 tx_cnt = priv->plat->tx_queues_to_use;6912 u32 dma_csr_ch = max(rx_cnt, tx_cnt);6913 struct stmmac_rx_queue *rx_q;6914 struct stmmac_tx_queue *tx_q;6915 u32 buf_size;6916 bool sph_en;6917 u32 chan;6918 int ret;6919 6920 ret = alloc_dma_desc_resources(priv, &priv->dma_conf);6921 if (ret < 0) {6922 netdev_err(dev, "%s: DMA descriptors allocation failed\n",6923 __func__);6924 goto dma_desc_error;6925 }6926 6927 ret = init_dma_desc_rings(dev, &priv->dma_conf, GFP_KERNEL);6928 if (ret < 0) {6929 netdev_err(dev, "%s: DMA descriptors initialization failed\n",6930 __func__);6931 goto init_error;6932 }6933 6934 stmmac_reset_queues_param(priv);6935 6936 /* DMA CSR Channel configuration */6937 for (chan = 0; chan < dma_csr_ch; chan++) {6938 stmmac_init_chan(priv, priv->ioaddr, priv->plat->dma_cfg, chan);6939 stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 1, 1);6940 }6941 6942 /* Adjust Split header */6943 sph_en = (priv->hw->rx_csum > 0) && priv->sph;6944 6945 /* DMA RX Channel Configuration */6946 for (chan = 0; chan < rx_cnt; chan++) {6947 rx_q = &priv->dma_conf.rx_queue[chan];6948 6949 stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,6950 rx_q->dma_rx_phy, chan);6951 6952 rx_q->rx_tail_addr = rx_q->dma_rx_phy +6953 (rx_q->buf_alloc_num *6954 sizeof(struct dma_desc));6955 stmmac_set_rx_tail_ptr(priv, priv->ioaddr,6956 rx_q->rx_tail_addr, chan);6957 6958 if (rx_q->xsk_pool && rx_q->buf_alloc_num) {6959 buf_size = xsk_pool_get_rx_frame_size(rx_q->xsk_pool);6960 stmmac_set_dma_bfsize(priv, priv->ioaddr,6961 buf_size,6962 rx_q->queue_index);6963 } else {6964 stmmac_set_dma_bfsize(priv, priv->ioaddr,6965 priv->dma_conf.dma_buf_sz,6966 rx_q->queue_index);6967 }6968 6969 stmmac_enable_sph(priv, priv->ioaddr, sph_en, chan);6970 }6971 6972 /* DMA TX Channel Configuration */6973 for (chan = 0; chan < tx_cnt; chan++) {6974 tx_q = &priv->dma_conf.tx_queue[chan];6975 6976 stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,6977 tx_q->dma_tx_phy, chan);6978 6979 tx_q->tx_tail_addr = tx_q->dma_tx_phy;6980 stmmac_set_tx_tail_ptr(priv, priv->ioaddr,6981 tx_q->tx_tail_addr, chan);6982 6983 hrtimer_init(&tx_q->txtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);6984 tx_q->txtimer.function = stmmac_tx_timer;6985 }6986 6987 /* Enable the MAC Rx/Tx */6988 stmmac_mac_set(priv, priv->ioaddr, true);6989 6990 /* Start Rx & Tx DMA Channels */6991 stmmac_start_all_dma(priv);6992 6993 ret = stmmac_request_irq(dev);6994 if (ret)6995 goto irq_error;6996 6997 /* Enable NAPI process*/6998 stmmac_enable_all_queues(priv);6999 netif_carrier_on(dev);7000 netif_tx_start_all_queues(dev);7001 stmmac_enable_all_dma_irq(priv);7002 7003 return 0;7004 7005irq_error:7006 for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)7007 hrtimer_cancel(&priv->dma_conf.tx_queue[chan].txtimer);7008 7009 stmmac_hw_teardown(dev);7010init_error:7011 free_dma_desc_resources(priv, &priv->dma_conf);7012dma_desc_error:7013 return ret;7014}7015 7016int stmmac_xsk_wakeup(struct net_device *dev, u32 queue, u32 flags)7017{7018 struct stmmac_priv *priv = netdev_priv(dev);7019 struct stmmac_rx_queue *rx_q;7020 struct stmmac_tx_queue *tx_q;7021 struct stmmac_channel *ch;7022 7023 if (test_bit(STMMAC_DOWN, &priv->state) ||7024 !netif_carrier_ok(priv->dev))7025 return -ENETDOWN;7026 7027 if (!stmmac_xdp_is_enabled(priv))7028 return -EINVAL;7029 7030 if (queue >= priv->plat->rx_queues_to_use ||7031 queue >= priv->plat->tx_queues_to_use)7032 return -EINVAL;7033 7034 rx_q = &priv->dma_conf.rx_queue[queue];7035 tx_q = &priv->dma_conf.tx_queue[queue];7036 ch = &priv->channel[queue];7037 7038 if (!rx_q->xsk_pool && !tx_q->xsk_pool)7039 return -EINVAL;7040 7041 if (!napi_if_scheduled_mark_missed(&ch->rxtx_napi)) {7042 /* EQoS does not have per-DMA channel SW interrupt,7043 * so we schedule RX Napi straight-away.7044 */7045 if (likely(napi_schedule_prep(&ch->rxtx_napi)))7046 __napi_schedule(&ch->rxtx_napi);7047 }7048 7049 return 0;7050}7051 7052static void stmmac_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)7053{7054 struct stmmac_priv *priv = netdev_priv(dev);7055 u32 tx_cnt = priv->plat->tx_queues_to_use;7056 u32 rx_cnt = priv->plat->rx_queues_to_use;7057 unsigned int start;7058 int q;7059 7060 for (q = 0; q < tx_cnt; q++) {7061 struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[q];7062 u64 tx_packets;7063 u64 tx_bytes;7064 7065 do {7066 start = u64_stats_fetch_begin(&txq_stats->q_syncp);7067 tx_bytes = u64_stats_read(&txq_stats->q.tx_bytes);7068 } while (u64_stats_fetch_retry(&txq_stats->q_syncp, start));7069 do {7070 start = u64_stats_fetch_begin(&txq_stats->napi_syncp);7071 tx_packets = u64_stats_read(&txq_stats->napi.tx_packets);7072 } while (u64_stats_fetch_retry(&txq_stats->napi_syncp, start));7073 7074 stats->tx_packets += tx_packets;7075 stats->tx_bytes += tx_bytes;7076 }7077 7078 for (q = 0; q < rx_cnt; q++) {7079 struct stmmac_rxq_stats *rxq_stats = &priv->xstats.rxq_stats[q];7080 u64 rx_packets;7081 u64 rx_bytes;7082 7083 do {7084 start = u64_stats_fetch_begin(&rxq_stats->napi_syncp);7085 rx_packets = u64_stats_read(&rxq_stats->napi.rx_packets);7086 rx_bytes = u64_stats_read(&rxq_stats->napi.rx_bytes);7087 } while (u64_stats_fetch_retry(&rxq_stats->napi_syncp, start));7088 7089 stats->rx_packets += rx_packets;7090 stats->rx_bytes += rx_bytes;7091 }7092 7093 stats->rx_dropped = priv->xstats.rx_dropped;7094 stats->rx_errors = priv->xstats.rx_errors;7095 stats->tx_dropped = priv->xstats.tx_dropped;7096 stats->tx_errors = priv->xstats.tx_errors;7097 stats->tx_carrier_errors = priv->xstats.tx_losscarrier + priv->xstats.tx_carrier;7098 stats->collisions = priv->xstats.tx_collision + priv->xstats.rx_collision;7099 stats->rx_length_errors = priv->xstats.rx_length;7100 stats->rx_crc_errors = priv->xstats.rx_crc_errors;7101 stats->rx_over_errors = priv->xstats.rx_overflow_cntr;7102 stats->rx_missed_errors = priv->xstats.rx_missed_cntr;7103}7104 7105static const struct net_device_ops stmmac_netdev_ops = {7106 .ndo_open = stmmac_open,7107 .ndo_start_xmit = stmmac_xmit,7108 .ndo_stop = stmmac_release,7109 .ndo_change_mtu = stmmac_change_mtu,7110 .ndo_fix_features = stmmac_fix_features,7111 .ndo_set_features = stmmac_set_features,7112 .ndo_set_rx_mode = stmmac_set_rx_mode,7113 .ndo_tx_timeout = stmmac_tx_timeout,7114 .ndo_eth_ioctl = stmmac_ioctl,7115 .ndo_get_stats64 = stmmac_get_stats64,7116 .ndo_setup_tc = stmmac_setup_tc,7117 .ndo_select_queue = stmmac_select_queue,7118 .ndo_set_mac_address = stmmac_set_mac_address,7119 .ndo_vlan_rx_add_vid = stmmac_vlan_rx_add_vid,7120 .ndo_vlan_rx_kill_vid = stmmac_vlan_rx_kill_vid,7121 .ndo_bpf = stmmac_bpf,7122 .ndo_xdp_xmit = stmmac_xdp_xmit,7123 .ndo_xsk_wakeup = stmmac_xsk_wakeup,7124};7125 7126static void stmmac_reset_subtask(struct stmmac_priv *priv)7127{7128 if (!test_and_clear_bit(STMMAC_RESET_REQUESTED, &priv->state))7129 return;7130 if (test_bit(STMMAC_DOWN, &priv->state))7131 return;7132 7133 netdev_err(priv->dev, "Reset adapter.\n");7134 7135 rtnl_lock();7136 netif_trans_update(priv->dev);7137 while (test_and_set_bit(STMMAC_RESETING, &priv->state))7138 usleep_range(1000, 2000);7139 7140 set_bit(STMMAC_DOWN, &priv->state);7141 dev_close(priv->dev);7142 dev_open(priv->dev, NULL);7143 clear_bit(STMMAC_DOWN, &priv->state);7144 clear_bit(STMMAC_RESETING, &priv->state);7145 rtnl_unlock();7146}7147 7148static void stmmac_service_task(struct work_struct *work)7149{7150 struct stmmac_priv *priv = container_of(work, struct stmmac_priv,7151 service_task);7152 7153 stmmac_reset_subtask(priv);7154 clear_bit(STMMAC_SERVICE_SCHED, &priv->state);7155}7156 7157/**7158 * stmmac_hw_init - Init the MAC device7159 * @priv: driver private structure7160 * Description: this function is to configure the MAC device according to7161 * some platform parameters or the HW capability register. It prepares the7162 * driver to use either ring or chain modes and to setup either enhanced or7163 * normal descriptors.7164 */7165static int stmmac_hw_init(struct stmmac_priv *priv)7166{7167 int ret;7168 7169 /* dwmac-sun8i only work in chain mode */7170 if (priv->plat->flags & STMMAC_FLAG_HAS_SUN8I)7171 chain_mode = 1;7172 priv->chain_mode = chain_mode;7173 7174 /* Initialize HW Interface */7175 ret = stmmac_hwif_init(priv);7176 if (ret)7177 return ret;7178 7179 /* Get the HW capability (new GMAC newer than 3.50a) */7180 priv->hw_cap_support = stmmac_get_hw_features(priv);7181 if (priv->hw_cap_support) {7182 dev_info(priv->device, "DMA HW capability register supported\n");7183 7184 /* We can override some gmac/dma configuration fields: e.g.7185 * enh_desc, tx_coe (e.g. that are passed through the7186 * platform) with the values from the HW capability7187 * register (if supported).7188 */7189 priv->plat->enh_desc = priv->dma_cap.enh_desc;7190 priv->plat->pmt = priv->dma_cap.pmt_remote_wake_up &&7191 !(priv->plat->flags & STMMAC_FLAG_USE_PHY_WOL);7192 priv->hw->pmt = priv->plat->pmt;7193 if (priv->dma_cap.hash_tb_sz) {7194 priv->hw->multicast_filter_bins =7195 (BIT(priv->dma_cap.hash_tb_sz) << 5);7196 priv->hw->mcast_bits_log2 =7197 ilog2(priv->hw->multicast_filter_bins);7198 }7199 7200 /* TXCOE doesn't work in thresh DMA mode */7201 if (priv->plat->force_thresh_dma_mode)7202 priv->plat->tx_coe = 0;7203 else7204 priv->plat->tx_coe = priv->dma_cap.tx_coe;7205 7206 /* In case of GMAC4 rx_coe is from HW cap register. */7207 priv->plat->rx_coe = priv->dma_cap.rx_coe;7208 7209 if (priv->dma_cap.rx_coe_type2)7210 priv->plat->rx_coe = STMMAC_RX_COE_TYPE2;7211 else if (priv->dma_cap.rx_coe_type1)7212 priv->plat->rx_coe = STMMAC_RX_COE_TYPE1;7213 7214 } else {7215 dev_info(priv->device, "No HW DMA feature register supported\n");7216 }7217 7218 if (priv->plat->rx_coe) {7219 priv->hw->rx_csum = priv->plat->rx_coe;7220 dev_info(priv->device, "RX Checksum Offload Engine supported\n");7221 if (priv->synopsys_id < DWMAC_CORE_4_00)7222 dev_info(priv->device, "COE Type %d\n", priv->hw->rx_csum);7223 }7224 if (priv->plat->tx_coe)7225 dev_info(priv->device, "TX Checksum insertion supported\n");7226 7227 if (priv->plat->pmt) {7228 dev_info(priv->device, "Wake-Up On Lan supported\n");7229 device_set_wakeup_capable(priv->device, 1);7230 }7231 7232 if (priv->dma_cap.tsoen)7233 dev_info(priv->device, "TSO supported\n");7234 7235 priv->hw->vlan_fail_q_en =7236 (priv->plat->flags & STMMAC_FLAG_VLAN_FAIL_Q_EN);7237 priv->hw->vlan_fail_q = priv->plat->vlan_fail_q;7238 7239 /* Run HW quirks, if any */7240 if (priv->hwif_quirks) {7241 ret = priv->hwif_quirks(priv);7242 if (ret)7243 return ret;7244 }7245 7246 /* Rx Watchdog is available in the COREs newer than the 3.40.7247 * In some case, for example on bugged HW this feature7248 * has to be disable and this can be done by passing the7249 * riwt_off field from the platform.7250 */7251 if (((priv->synopsys_id >= DWMAC_CORE_3_50) ||7252 (priv->plat->has_xgmac)) && (!priv->plat->riwt_off)) {7253 priv->use_riwt = 1;7254 dev_info(priv->device,7255 "Enable RX Mitigation via HW Watchdog Timer\n");7256 }7257 7258 return 0;7259}7260 7261static void stmmac_napi_add(struct net_device *dev)7262{7263 struct stmmac_priv *priv = netdev_priv(dev);7264 u32 queue, maxq;7265 7266 maxq = max(priv->plat->rx_queues_to_use, priv->plat->tx_queues_to_use);7267 7268 for (queue = 0; queue < maxq; queue++) {7269 struct stmmac_channel *ch = &priv->channel[queue];7270 7271 ch->priv_data = priv;7272 ch->index = queue;7273 spin_lock_init(&ch->lock);7274 7275 if (queue < priv->plat->rx_queues_to_use) {7276 netif_napi_add(dev, &ch->rx_napi, stmmac_napi_poll_rx);7277 }7278 if (queue < priv->plat->tx_queues_to_use) {7279 netif_napi_add_tx(dev, &ch->tx_napi,7280 stmmac_napi_poll_tx);7281 }7282 if (queue < priv->plat->rx_queues_to_use &&7283 queue < priv->plat->tx_queues_to_use) {7284 netif_napi_add(dev, &ch->rxtx_napi,7285 stmmac_napi_poll_rxtx);7286 }7287 }7288}7289 7290static void stmmac_napi_del(struct net_device *dev)7291{7292 struct stmmac_priv *priv = netdev_priv(dev);7293 u32 queue, maxq;7294 7295 maxq = max(priv->plat->rx_queues_to_use, priv->plat->tx_queues_to_use);7296 7297 for (queue = 0; queue < maxq; queue++) {7298 struct stmmac_channel *ch = &priv->channel[queue];7299 7300 if (queue < priv->plat->rx_queues_to_use)7301 netif_napi_del(&ch->rx_napi);7302 if (queue < priv->plat->tx_queues_to_use)7303 netif_napi_del(&ch->tx_napi);7304 if (queue < priv->plat->rx_queues_to_use &&7305 queue < priv->plat->tx_queues_to_use) {7306 netif_napi_del(&ch->rxtx_napi);7307 }7308 }7309}7310 7311int stmmac_reinit_queues(struct net_device *dev, u32 rx_cnt, u32 tx_cnt)7312{7313 struct stmmac_priv *priv = netdev_priv(dev);7314 int ret = 0, i;7315 7316 if (netif_running(dev))7317 stmmac_release(dev);7318 7319 stmmac_napi_del(dev);7320 7321 priv->plat->rx_queues_to_use = rx_cnt;7322 priv->plat->tx_queues_to_use = tx_cnt;7323 if (!netif_is_rxfh_configured(dev))7324 for (i = 0; i < ARRAY_SIZE(priv->rss.table); i++)7325 priv->rss.table[i] = ethtool_rxfh_indir_default(i,7326 rx_cnt);7327 7328 stmmac_napi_add(dev);7329 7330 if (netif_running(dev))7331 ret = stmmac_open(dev);7332 7333 return ret;7334}7335 7336int stmmac_reinit_ringparam(struct net_device *dev, u32 rx_size, u32 tx_size)7337{7338 struct stmmac_priv *priv = netdev_priv(dev);7339 int ret = 0;7340 7341 if (netif_running(dev))7342 stmmac_release(dev);7343 7344 priv->dma_conf.dma_rx_size = rx_size;7345 priv->dma_conf.dma_tx_size = tx_size;7346 7347 if (netif_running(dev))7348 ret = stmmac_open(dev);7349 7350 return ret;7351}7352 7353/**7354 * stmmac_fpe_verify_timer - Timer for MAC Merge verification7355 * @t: timer_list struct containing private info7356 *7357 * Verify the MAC Merge capability in the local TX direction, by7358 * transmitting Verify mPackets up to 3 times. Wait until link7359 * partner responds with a Response mPacket, otherwise fail.7360 */7361static void stmmac_fpe_verify_timer(struct timer_list *t)7362{7363 struct stmmac_fpe_cfg *fpe_cfg = from_timer(fpe_cfg, t, verify_timer);7364 struct stmmac_priv *priv = container_of(fpe_cfg, struct stmmac_priv,7365 fpe_cfg);7366 unsigned long flags;7367 bool rearm = false;7368 7369 spin_lock_irqsave(&fpe_cfg->lock, flags);7370 7371 switch (fpe_cfg->status) {7372 case ETHTOOL_MM_VERIFY_STATUS_INITIAL:7373 case ETHTOOL_MM_VERIFY_STATUS_VERIFYING:7374 if (fpe_cfg->verify_retries != 0) {7375 stmmac_fpe_send_mpacket(priv, priv->ioaddr,7376 fpe_cfg, MPACKET_VERIFY);7377 rearm = true;7378 } else {7379 fpe_cfg->status = ETHTOOL_MM_VERIFY_STATUS_FAILED;7380 }7381 7382 fpe_cfg->verify_retries--;7383 break;7384 7385 case ETHTOOL_MM_VERIFY_STATUS_SUCCEEDED:7386 stmmac_fpe_configure(priv, priv->ioaddr, fpe_cfg,7387 priv->plat->tx_queues_to_use,7388 priv->plat->rx_queues_to_use,7389 true, true);7390 break;7391 7392 default:7393 break;7394 }7395 7396 if (rearm) {7397 mod_timer(&fpe_cfg->verify_timer,7398 jiffies + msecs_to_jiffies(fpe_cfg->verify_time));7399 }7400 7401 spin_unlock_irqrestore(&fpe_cfg->lock, flags);7402}7403 7404static void stmmac_fpe_verify_timer_arm(struct stmmac_fpe_cfg *fpe_cfg)7405{7406 if (fpe_cfg->pmac_enabled && fpe_cfg->tx_enabled &&7407 fpe_cfg->verify_enabled &&7408 fpe_cfg->status != ETHTOOL_MM_VERIFY_STATUS_FAILED &&7409 fpe_cfg->status != ETHTOOL_MM_VERIFY_STATUS_SUCCEEDED) {7410 timer_setup(&fpe_cfg->verify_timer, stmmac_fpe_verify_timer, 0);7411 mod_timer(&fpe_cfg->verify_timer, jiffies);7412 }7413}7414 7415void stmmac_fpe_apply(struct stmmac_priv *priv)7416{7417 struct stmmac_fpe_cfg *fpe_cfg = &priv->fpe_cfg;7418 7419 /* If verification is disabled, configure FPE right away.7420 * Otherwise let the timer code do it.7421 */7422 if (!fpe_cfg->verify_enabled) {7423 stmmac_fpe_configure(priv, priv->ioaddr, fpe_cfg,7424 priv->plat->tx_queues_to_use,7425 priv->plat->rx_queues_to_use,7426 fpe_cfg->tx_enabled,7427 fpe_cfg->pmac_enabled);7428 } else {7429 fpe_cfg->status = ETHTOOL_MM_VERIFY_STATUS_INITIAL;7430 fpe_cfg->verify_retries = STMMAC_FPE_MM_MAX_VERIFY_RETRIES;7431 7432 if (netif_running(priv->dev))7433 stmmac_fpe_verify_timer_arm(fpe_cfg);7434 }7435}7436 7437static int stmmac_xdp_rx_timestamp(const struct xdp_md *_ctx, u64 *timestamp)7438{7439 const struct stmmac_xdp_buff *ctx = (void *)_ctx;7440 struct dma_desc *desc_contains_ts = ctx->desc;7441 struct stmmac_priv *priv = ctx->priv;7442 struct dma_desc *ndesc = ctx->ndesc;7443 struct dma_desc *desc = ctx->desc;7444 u64 ns = 0;7445 7446 if (!priv->hwts_rx_en)7447 return -ENODATA;7448 7449 /* For GMAC4, the valid timestamp is from CTX next desc. */7450 if (priv->plat->has_gmac4 || priv->plat->has_xgmac)7451 desc_contains_ts = ndesc;7452 7453 /* Check if timestamp is available */7454 if (stmmac_get_rx_timestamp_status(priv, desc, ndesc, priv->adv_ts)) {7455 stmmac_get_timestamp(priv, desc_contains_ts, priv->adv_ts, &ns);7456 ns -= priv->plat->cdc_error_adj;7457 *timestamp = ns_to_ktime(ns);7458 return 0;7459 }7460 7461 return -ENODATA;7462}7463 7464static const struct xdp_metadata_ops stmmac_xdp_metadata_ops = {7465 .xmo_rx_timestamp = stmmac_xdp_rx_timestamp,7466};7467 7468/**7469 * stmmac_dvr_probe7470 * @device: device pointer7471 * @plat_dat: platform data pointer7472 * @res: stmmac resource pointer7473 * Description: this is the main probe function used to7474 * call the alloc_etherdev, allocate the priv structure.7475 * Return:7476 * returns 0 on success, otherwise errno.7477 */7478int stmmac_dvr_probe(struct device *device,7479 struct plat_stmmacenet_data *plat_dat,7480 struct stmmac_resources *res)7481{7482 struct net_device *ndev = NULL;7483 struct stmmac_priv *priv;7484 u32 rxq;7485 int i, ret = 0;7486 7487 ndev = devm_alloc_etherdev_mqs(device, sizeof(struct stmmac_priv),7488 MTL_MAX_TX_QUEUES, MTL_MAX_RX_QUEUES);7489 if (!ndev)7490 return -ENOMEM;7491 7492 SET_NETDEV_DEV(ndev, device);7493 7494 priv = netdev_priv(ndev);7495 priv->device = device;7496 priv->dev = ndev;7497 7498 for (i = 0; i < MTL_MAX_RX_QUEUES; i++)7499 u64_stats_init(&priv->xstats.rxq_stats[i].napi_syncp);7500 for (i = 0; i < MTL_MAX_TX_QUEUES; i++) {7501 u64_stats_init(&priv->xstats.txq_stats[i].q_syncp);7502 u64_stats_init(&priv->xstats.txq_stats[i].napi_syncp);7503 }7504 7505 priv->xstats.pcpu_stats =7506 devm_netdev_alloc_pcpu_stats(device, struct stmmac_pcpu_stats);7507 if (!priv->xstats.pcpu_stats)7508 return -ENOMEM;7509 7510 stmmac_set_ethtool_ops(ndev);7511 priv->pause = pause;7512 priv->plat = plat_dat;7513 priv->ioaddr = res->addr;7514 priv->dev->base_addr = (unsigned long)res->addr;7515 priv->plat->dma_cfg->multi_msi_en =7516 (priv->plat->flags & STMMAC_FLAG_MULTI_MSI_EN);7517 7518 priv->dev->irq = res->irq;7519 priv->wol_irq = res->wol_irq;7520 priv->lpi_irq = res->lpi_irq;7521 priv->sfty_irq = res->sfty_irq;7522 priv->sfty_ce_irq = res->sfty_ce_irq;7523 priv->sfty_ue_irq = res->sfty_ue_irq;7524 for (i = 0; i < MTL_MAX_RX_QUEUES; i++)7525 priv->rx_irq[i] = res->rx_irq[i];7526 for (i = 0; i < MTL_MAX_TX_QUEUES; i++)7527 priv->tx_irq[i] = res->tx_irq[i];7528 7529 if (!is_zero_ether_addr(res->mac))7530 eth_hw_addr_set(priv->dev, res->mac);7531 7532 dev_set_drvdata(device, priv->dev);7533 7534 /* Verify driver arguments */7535 stmmac_verify_args();7536 7537 priv->af_xdp_zc_qps = bitmap_zalloc(MTL_MAX_TX_QUEUES, GFP_KERNEL);7538 if (!priv->af_xdp_zc_qps)7539 return -ENOMEM;7540 7541 /* Allocate workqueue */7542 priv->wq = create_singlethread_workqueue("stmmac_wq");7543 if (!priv->wq) {7544 dev_err(priv->device, "failed to create workqueue\n");7545 ret = -ENOMEM;7546 goto error_wq_init;7547 }7548 7549 INIT_WORK(&priv->service_task, stmmac_service_task);7550 7551 /* Override with kernel parameters if supplied XXX CRS XXX7552 * this needs to have multiple instances7553 */7554 if ((phyaddr >= 0) && (phyaddr <= 31))7555 priv->plat->phy_addr = phyaddr;7556 7557 if (priv->plat->stmmac_rst) {7558 ret = reset_control_assert(priv->plat->stmmac_rst);7559 reset_control_deassert(priv->plat->stmmac_rst);7560 /* Some reset controllers have only reset callback instead of7561 * assert + deassert callbacks pair.7562 */7563 if (ret == -ENOTSUPP)7564 reset_control_reset(priv->plat->stmmac_rst);7565 }7566 7567 ret = reset_control_deassert(priv->plat->stmmac_ahb_rst);7568 if (ret == -ENOTSUPP)7569 dev_err(priv->device, "unable to bring out of ahb reset: %pe\n",7570 ERR_PTR(ret));7571 7572 /* Wait a bit for the reset to take effect */7573 udelay(10);7574 7575 /* Init MAC and get the capabilities */7576 ret = stmmac_hw_init(priv);7577 if (ret)7578 goto error_hw_init;7579 7580 /* Only DWMAC core version 5.20 onwards supports HW descriptor prefetch.7581 */7582 if (priv->synopsys_id < DWMAC_CORE_5_20)7583 priv->plat->dma_cfg->dche = false;7584 7585 stmmac_check_ether_addr(priv);7586 7587 ndev->netdev_ops = &stmmac_netdev_ops;7588 7589 ndev->xdp_metadata_ops = &stmmac_xdp_metadata_ops;7590 ndev->xsk_tx_metadata_ops = &stmmac_xsk_tx_metadata_ops;7591 7592 ndev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |7593 NETIF_F_RXCSUM;7594 ndev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |7595 NETDEV_XDP_ACT_XSK_ZEROCOPY;7596 7597 ret = stmmac_tc_init(priv, priv);7598 if (!ret) {7599 ndev->hw_features |= NETIF_F_HW_TC;7600 }7601 7602 if ((priv->plat->flags & STMMAC_FLAG_TSO_EN) && (priv->dma_cap.tsoen)) {7603 ndev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6;7604 if (priv->plat->has_gmac4)7605 ndev->hw_features |= NETIF_F_GSO_UDP_L4;7606 priv->tso = true;7607 dev_info(priv->device, "TSO feature enabled\n");7608 }7609 7610 if (priv->dma_cap.sphen &&7611 !(priv->plat->flags & STMMAC_FLAG_SPH_DISABLE)) {7612 ndev->hw_features |= NETIF_F_GRO;7613 priv->sph_cap = true;7614 priv->sph = priv->sph_cap;7615 dev_info(priv->device, "SPH feature enabled\n");7616 }7617 7618 /* Ideally our host DMA address width is the same as for the7619 * device. However, it may differ and then we have to use our7620 * host DMA width for allocation and the device DMA width for7621 * register handling.7622 */7623 if (priv->plat->host_dma_width)7624 priv->dma_cap.host_dma_width = priv->plat->host_dma_width;7625 else7626 priv->dma_cap.host_dma_width = priv->dma_cap.addr64;7627 7628 if (priv->dma_cap.host_dma_width) {7629 ret = dma_set_mask_and_coherent(device,7630 DMA_BIT_MASK(priv->dma_cap.host_dma_width));7631 if (!ret) {7632 dev_info(priv->device, "Using %d/%d bits DMA host/device width\n",7633 priv->dma_cap.host_dma_width, priv->dma_cap.addr64);7634 7635 /*7636 * If more than 32 bits can be addressed, make sure to7637 * enable enhanced addressing mode.7638 */7639 if (IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT))7640 priv->plat->dma_cfg->eame = true;7641 } else {7642 ret = dma_set_mask_and_coherent(device, DMA_BIT_MASK(32));7643 if (ret) {7644 dev_err(priv->device, "Failed to set DMA Mask\n");7645 goto error_hw_init;7646 }7647 7648 priv->dma_cap.host_dma_width = 32;7649 }7650 }7651 7652 ndev->features |= ndev->hw_features | NETIF_F_HIGHDMA;7653 ndev->watchdog_timeo = msecs_to_jiffies(watchdog);7654#ifdef STMMAC_VLAN_TAG_USED7655 /* Both mac100 and gmac support receive VLAN tag detection */7656 ndev->features |= NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_STAG_RX;7657 if (priv->plat->has_gmac4) {7658 ndev->hw_features |= NETIF_F_HW_VLAN_CTAG_RX;7659 priv->hw->hw_vlan_en = true;7660 }7661 if (priv->dma_cap.vlhash) {7662 ndev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;7663 ndev->features |= NETIF_F_HW_VLAN_STAG_FILTER;7664 }7665 if (priv->dma_cap.vlins) {7666 ndev->features |= NETIF_F_HW_VLAN_CTAG_TX;7667 if (priv->dma_cap.dvlan)7668 ndev->features |= NETIF_F_HW_VLAN_STAG_TX;7669 }7670#endif7671 priv->msg_enable = netif_msg_init(debug, default_msg_level);7672 7673 priv->xstats.threshold = tc;7674 7675 /* Initialize RSS */7676 rxq = priv->plat->rx_queues_to_use;7677 netdev_rss_key_fill(priv->rss.key, sizeof(priv->rss.key));7678 for (i = 0; i < ARRAY_SIZE(priv->rss.table); i++)7679 priv->rss.table[i] = ethtool_rxfh_indir_default(i, rxq);7680 7681 if (priv->dma_cap.rssen && priv->plat->rss_en)7682 ndev->features |= NETIF_F_RXHASH;7683 7684 ndev->vlan_features |= ndev->features;7685 7686 /* MTU range: 46 - hw-specific max */7687 ndev->min_mtu = ETH_ZLEN - ETH_HLEN;7688 if (priv->plat->has_xgmac)7689 ndev->max_mtu = XGMAC_JUMBO_LEN;7690 else if ((priv->plat->enh_desc) || (priv->synopsys_id >= DWMAC_CORE_4_00))7691 ndev->max_mtu = JUMBO_LEN;7692 else7693 ndev->max_mtu = SKB_MAX_HEAD(NET_SKB_PAD + NET_IP_ALIGN);7694 /* Will not overwrite ndev->max_mtu if plat->maxmtu > ndev->max_mtu7695 * as well as plat->maxmtu < ndev->min_mtu which is a invalid range.7696 */7697 if ((priv->plat->maxmtu < ndev->max_mtu) &&7698 (priv->plat->maxmtu >= ndev->min_mtu))7699 ndev->max_mtu = priv->plat->maxmtu;7700 else if (priv->plat->maxmtu < ndev->min_mtu)7701 dev_warn(priv->device,7702 "%s: warning: maxmtu having invalid value (%d)\n",7703 __func__, priv->plat->maxmtu);7704 7705 if (flow_ctrl)7706 priv->flow_ctrl = FLOW_AUTO; /* RX/TX pause on */7707 7708 ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE;7709 7710 /* Setup channels NAPI */7711 stmmac_napi_add(ndev);7712 7713 mutex_init(&priv->lock);7714 7715 priv->fpe_cfg.verify_retries = STMMAC_FPE_MM_MAX_VERIFY_RETRIES;7716 priv->fpe_cfg.verify_time = STMMAC_FPE_MM_MAX_VERIFY_TIME_MS;7717 priv->fpe_cfg.status = ETHTOOL_MM_VERIFY_STATUS_DISABLED;7718 timer_setup(&priv->fpe_cfg.verify_timer, stmmac_fpe_verify_timer, 0);7719 spin_lock_init(&priv->fpe_cfg.lock);7720 7721 /* If a specific clk_csr value is passed from the platform7722 * this means that the CSR Clock Range selection cannot be7723 * changed at run-time and it is fixed. Viceversa the driver'll try to7724 * set the MDC clock dynamically according to the csr actual7725 * clock input.7726 */7727 if (priv->plat->clk_csr >= 0)7728 priv->clk_csr = priv->plat->clk_csr;7729 else7730 stmmac_clk_csr_set(priv);7731 7732 stmmac_check_pcs_mode(priv);7733 7734 pm_runtime_get_noresume(device);7735 pm_runtime_set_active(device);7736 if (!pm_runtime_enabled(device))7737 pm_runtime_enable(device);7738 7739 ret = stmmac_mdio_register(ndev);7740 if (ret < 0) {7741 dev_err_probe(priv->device, ret,7742 "MDIO bus (id: %d) registration failed\n",7743 priv->plat->bus_id);7744 goto error_mdio_register;7745 }7746 7747 if (priv->plat->speed_mode_2500)7748 priv->plat->speed_mode_2500(ndev, priv->plat->bsp_priv);7749 7750 ret = stmmac_pcs_setup(ndev);7751 if (ret)7752 goto error_pcs_setup;7753 7754 ret = stmmac_phy_setup(priv);7755 if (ret) {7756 netdev_err(ndev, "failed to setup phy (%d)\n", ret);7757 goto error_phy_setup;7758 }7759 7760 ret = register_netdev(ndev);7761 if (ret) {7762 dev_err(priv->device, "%s: ERROR %i registering the device\n",7763 __func__, ret);7764 goto error_netdev_register;7765 }7766 7767#ifdef CONFIG_DEBUG_FS7768 stmmac_init_fs(ndev);7769#endif7770 7771 if (priv->plat->dump_debug_regs)7772 priv->plat->dump_debug_regs(priv->plat->bsp_priv);7773 7774 /* Let pm_runtime_put() disable the clocks.7775 * If CONFIG_PM is not enabled, the clocks will stay powered.7776 */7777 pm_runtime_put(device);7778 7779 return ret;7780 7781error_netdev_register:7782 phylink_destroy(priv->phylink);7783error_phy_setup:7784 stmmac_pcs_clean(ndev);7785error_pcs_setup:7786 stmmac_mdio_unregister(ndev);7787error_mdio_register:7788 stmmac_napi_del(ndev);7789error_hw_init:7790 destroy_workqueue(priv->wq);7791error_wq_init:7792 bitmap_free(priv->af_xdp_zc_qps);7793 7794 return ret;7795}7796EXPORT_SYMBOL_GPL(stmmac_dvr_probe);7797 7798/**7799 * stmmac_dvr_remove7800 * @dev: device pointer7801 * Description: this function resets the TX/RX processes, disables the MAC RX/TX7802 * changes the link status, releases the DMA descriptor rings.7803 */7804void stmmac_dvr_remove(struct device *dev)7805{7806 struct net_device *ndev = dev_get_drvdata(dev);7807 struct stmmac_priv *priv = netdev_priv(ndev);7808 7809 netdev_info(priv->dev, "%s: removing driver", __func__);7810 7811 pm_runtime_get_sync(dev);7812 7813 stmmac_stop_all_dma(priv);7814 stmmac_mac_set(priv, priv->ioaddr, false);7815 unregister_netdev(ndev);7816 7817#ifdef CONFIG_DEBUG_FS7818 stmmac_exit_fs(ndev);7819#endif7820 phylink_destroy(priv->phylink);7821 if (priv->plat->stmmac_rst)7822 reset_control_assert(priv->plat->stmmac_rst);7823 reset_control_assert(priv->plat->stmmac_ahb_rst);7824 7825 stmmac_pcs_clean(ndev);7826 stmmac_mdio_unregister(ndev);7827 7828 destroy_workqueue(priv->wq);7829 mutex_destroy(&priv->lock);7830 bitmap_free(priv->af_xdp_zc_qps);7831 7832 pm_runtime_disable(dev);7833 pm_runtime_put_noidle(dev);7834}7835EXPORT_SYMBOL_GPL(stmmac_dvr_remove);7836 7837/**7838 * stmmac_suspend - suspend callback7839 * @dev: device pointer7840 * Description: this is the function to suspend the device and it is called7841 * by the platform driver to stop the network queue, release the resources,7842 * program the PMT register (for WoL), clean and release driver resources.7843 */7844int stmmac_suspend(struct device *dev)7845{7846 struct net_device *ndev = dev_get_drvdata(dev);7847 struct stmmac_priv *priv = netdev_priv(ndev);7848 u32 chan;7849 7850 if (!ndev || !netif_running(ndev))7851 return 0;7852 7853 mutex_lock(&priv->lock);7854 7855 netif_device_detach(ndev);7856 7857 stmmac_disable_all_queues(priv);7858 7859 for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)7860 hrtimer_cancel(&priv->dma_conf.tx_queue[chan].txtimer);7861 7862 if (priv->eee_enabled) {7863 priv->tx_path_in_lpi_mode = false;7864 del_timer_sync(&priv->eee_ctrl_timer);7865 }7866 7867 /* Stop TX/RX DMA */7868 stmmac_stop_all_dma(priv);7869 7870 if (priv->plat->serdes_powerdown)7871 priv->plat->serdes_powerdown(ndev, priv->plat->bsp_priv);7872 7873 /* Enable Power down mode by programming the PMT regs */7874 if (device_may_wakeup(priv->device) && priv->plat->pmt) {7875 stmmac_pmt(priv, priv->hw, priv->wolopts);7876 priv->irq_wake = 1;7877 } else {7878 stmmac_mac_set(priv, priv->ioaddr, false);7879 pinctrl_pm_select_sleep_state(priv->device);7880 }7881 7882 mutex_unlock(&priv->lock);7883 7884 rtnl_lock();7885 if (device_may_wakeup(priv->device) && priv->plat->pmt) {7886 phylink_suspend(priv->phylink, true);7887 } else {7888 if (device_may_wakeup(priv->device))7889 phylink_speed_down(priv->phylink, false);7890 phylink_suspend(priv->phylink, false);7891 }7892 rtnl_unlock();7893 7894 if (priv->dma_cap.fpesel)7895 timer_shutdown_sync(&priv->fpe_cfg.verify_timer);7896 7897 priv->speed = SPEED_UNKNOWN;7898 return 0;7899}7900EXPORT_SYMBOL_GPL(stmmac_suspend);7901 7902static void stmmac_reset_rx_queue(struct stmmac_priv *priv, u32 queue)7903{7904 struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];7905 7906 rx_q->cur_rx = 0;7907 rx_q->dirty_rx = 0;7908}7909 7910static void stmmac_reset_tx_queue(struct stmmac_priv *priv, u32 queue)7911{7912 struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];7913 7914 tx_q->cur_tx = 0;7915 tx_q->dirty_tx = 0;7916 tx_q->mss = 0;7917 7918 netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, queue));7919}7920 7921/**7922 * stmmac_reset_queues_param - reset queue parameters7923 * @priv: device pointer7924 */7925static void stmmac_reset_queues_param(struct stmmac_priv *priv)7926{7927 u32 rx_cnt = priv->plat->rx_queues_to_use;7928 u32 tx_cnt = priv->plat->tx_queues_to_use;7929 u32 queue;7930 7931 for (queue = 0; queue < rx_cnt; queue++)7932 stmmac_reset_rx_queue(priv, queue);7933 7934 for (queue = 0; queue < tx_cnt; queue++)7935 stmmac_reset_tx_queue(priv, queue);7936}7937 7938/**7939 * stmmac_resume - resume callback7940 * @dev: device pointer7941 * Description: when resume this function is invoked to setup the DMA and CORE7942 * in a usable state.7943 */7944int stmmac_resume(struct device *dev)7945{7946 struct net_device *ndev = dev_get_drvdata(dev);7947 struct stmmac_priv *priv = netdev_priv(ndev);7948 int ret;7949 7950 if (!netif_running(ndev))7951 return 0;7952 7953 /* Power Down bit, into the PM register, is cleared7954 * automatically as soon as a magic packet or a Wake-up frame7955 * is received. Anyway, it's better to manually clear7956 * this bit because it can generate problems while resuming7957 * from another devices (e.g. serial console).7958 */7959 if (device_may_wakeup(priv->device) && priv->plat->pmt) {7960 mutex_lock(&priv->lock);7961 stmmac_pmt(priv, priv->hw, 0);7962 mutex_unlock(&priv->lock);7963 priv->irq_wake = 0;7964 } else {7965 pinctrl_pm_select_default_state(priv->device);7966 /* reset the phy so that it's ready */7967 if (priv->mii)7968 stmmac_mdio_reset(priv->mii);7969 }7970 7971 if (!(priv->plat->flags & STMMAC_FLAG_SERDES_UP_AFTER_PHY_LINKUP) &&7972 priv->plat->serdes_powerup) {7973 ret = priv->plat->serdes_powerup(ndev,7974 priv->plat->bsp_priv);7975 7976 if (ret < 0)7977 return ret;7978 }7979 7980 rtnl_lock();7981 if (device_may_wakeup(priv->device) && priv->plat->pmt) {7982 phylink_resume(priv->phylink);7983 } else {7984 phylink_resume(priv->phylink);7985 if (device_may_wakeup(priv->device))7986 phylink_speed_up(priv->phylink);7987 }7988 rtnl_unlock();7989 7990 rtnl_lock();7991 mutex_lock(&priv->lock);7992 7993 stmmac_reset_queues_param(priv);7994 7995 stmmac_free_tx_skbufs(priv);7996 stmmac_clear_descriptors(priv, &priv->dma_conf);7997 7998 stmmac_hw_setup(ndev, false);7999 stmmac_init_coalesce(priv);8000 stmmac_set_rx_mode(ndev);8001 8002 stmmac_restore_hw_vlan_rx_fltr(priv, ndev, priv->hw);8003 8004 stmmac_enable_all_queues(priv);8005 stmmac_enable_all_dma_irq(priv);8006 8007 mutex_unlock(&priv->lock);8008 rtnl_unlock();8009 8010 netif_device_attach(ndev);8011 8012 return 0;8013}8014EXPORT_SYMBOL_GPL(stmmac_resume);8015 8016#ifndef MODULE8017static int __init stmmac_cmdline_opt(char *str)8018{8019 char *opt;8020 8021 if (!str || !*str)8022 return 1;8023 while ((opt = strsep(&str, ",")) != NULL) {8024 if (!strncmp(opt, "debug:", 6)) {8025 if (kstrtoint(opt + 6, 0, &debug))8026 goto err;8027 } else if (!strncmp(opt, "phyaddr:", 8)) {8028 if (kstrtoint(opt + 8, 0, &phyaddr))8029 goto err;8030 } else if (!strncmp(opt, "buf_sz:", 7)) {8031 if (kstrtoint(opt + 7, 0, &buf_sz))8032 goto err;8033 } else if (!strncmp(opt, "tc:", 3)) {8034 if (kstrtoint(opt + 3, 0, &tc))8035 goto err;8036 } else if (!strncmp(opt, "watchdog:", 9)) {8037 if (kstrtoint(opt + 9, 0, &watchdog))8038 goto err;8039 } else if (!strncmp(opt, "flow_ctrl:", 10)) {8040 if (kstrtoint(opt + 10, 0, &flow_ctrl))8041 goto err;8042 } else if (!strncmp(opt, "pause:", 6)) {8043 if (kstrtoint(opt + 6, 0, &pause))8044 goto err;8045 } else if (!strncmp(opt, "eee_timer:", 10)) {8046 if (kstrtoint(opt + 10, 0, &eee_timer))8047 goto err;8048 } else if (!strncmp(opt, "chain_mode:", 11)) {8049 if (kstrtoint(opt + 11, 0, &chain_mode))8050 goto err;8051 }8052 }8053 return 1;8054 8055err:8056 pr_err("%s: ERROR broken module parameter conversion", __func__);8057 return 1;8058}8059 8060__setup("stmmaceth=", stmmac_cmdline_opt);8061#endif /* MODULE */8062 8063static int __init stmmac_init(void)8064{8065#ifdef CONFIG_DEBUG_FS8066 /* Create debugfs main directory if it doesn't exist yet */8067 if (!stmmac_fs_dir)8068 stmmac_fs_dir = debugfs_create_dir(STMMAC_RESOURCE_NAME, NULL);8069 register_netdevice_notifier(&stmmac_notifier);8070#endif8071 8072 return 0;8073}8074 8075static void __exit stmmac_exit(void)8076{8077#ifdef CONFIG_DEBUG_FS8078 unregister_netdevice_notifier(&stmmac_notifier);8079 debugfs_remove_recursive(stmmac_fs_dir);8080#endif8081}8082 8083module_init(stmmac_init)8084module_exit(stmmac_exit)8085 8086MODULE_DESCRIPTION("STMMAC 10/100/1000 Ethernet device driver");8087MODULE_AUTHOR("Giuseppe Cavallaro <peppe.cavallaro@st.com>");8088MODULE_LICENSE("GPL");8089