Lines Matching +full:0 +full:xf0020000
85 static const u16 fec_enet_vlan_pri_to_queue[8] = {0, 0, 1, 1, 1, 2, 2, 2};
87 #define FEC_ENET_RSEM_V 0x84
89 #define FEC_ENET_RAEM_V 0x8
90 #define FEC_ENET_RAFL_V 0x8
91 #define FEC_ENET_OPD_V 0xFFF0
94 #define FEC_ENET_XDP_PASS 0
95 #define FEC_ENET_XDP_CONSUMED BIT(0)
186 .driver_data = 0,
209 module_param_array(macaddr, byte, NULL, 0);
218 #define FEC_FLASHMAC 0xf0006006
220 #define FEC_FLASHMAC 0xf0006000
222 #define FEC_FLASHMAC 0xf0020000
224 #define FEC_FLASHMAC (0xffe04000 + 4)
226 #define FEC_FLASHMAC 0xffc0406b
228 #define FEC_FLASHMAC 0
260 #define OPT_ARCH_HAS_MAX_FL 0
265 #define FEC_MMFR_ST_C45 (0)
269 #define FEC_MMFR_OP_ADDR_WRITE (0)
270 #define FEC_MMFR_PA(v) ((v & 0x1f) << 23)
271 #define FEC_MMFR_RA(v) ((v & 0x1f) << 18)
273 #define FEC_MMFR_DATA(v) (v & 0xffff)
275 #define FEC_ECR_RESET BIT(0)
283 #define FEC_RCR_LOOP BIT(0)
301 #define FEC_PAUSE_FLAG_AUTONEG 0x1
302 #define FEC_PAUSE_FLAG_ENABLE 0x2
303 #define FEC_WOL_HAS_MAGIC_PACKET (0x1 << 0)
304 #define FEC_WOL_FLAG_ENABLE (0x1 << 1)
305 #define FEC_WOL_FLAG_SLEEP_ON (0x1 << 2)
344 return entries >= 0 ? entries : entries + txq->bd.ring_size; in fec_enet_get_free_txdesc_num()
352 for (i = 0; i < len; i += 4, buf++) in swap_buffer()
361 int index = 0; in fec_dump()
366 txq = fep->tx_queue[0]; in fec_dump()
370 pr_info("%3u %c%c 0x%04x 0x%08x %4u %p\n", in fec_dump()
457 return 0; in fec_enet_clear_csum()
459 if (unlikely(skb_cow_head(skb, 0))) in fec_enet_clear_csum()
463 ip_hdr(skb)->check = 0; in fec_enet_clear_csum()
464 *(__sum16 *)(skb->head + skb->csum_start + skb->csum_offset) = 0; in fec_enet_clear_csum()
466 return 0; in fec_enet_clear_csum()
493 err = xdp_rxq_info_reg(&rxq->xdp_rxq, fep->netdev, rxq->id, 0); in fec_enet_create_page_pool()
494 if (err < 0) in fec_enet_create_page_pool()
502 return 0; in fec_enet_create_page_pool()
523 unsigned int estatus = 0; in fec_enet_txq_submit_frag_skb()
530 for (frag = 0; frag < nr_frags; frag++) { in fec_enet_txq_submit_frag_skb()
557 ebdp->cbd_bdu = 0; in fec_enet_txq_submit_frag_skb()
593 for (i = 0; i < frag; i++) { in fec_enet_txq_submit_frag_skb()
611 unsigned int estatus = 0; in fec_enet_txq_submit_skb()
692 ebdp->cbd_bdu = 0; in fec_enet_txq_submit_skb()
726 writel(0, txq->bd.reg_desc_active); in fec_enet_txq_submit_skb()
728 return 0; in fec_enet_txq_submit_skb()
740 unsigned int estatus = 0; in fec_enet_txq_put_data_tso()
773 ebdp->cbd_bdu = 0; in fec_enet_txq_put_data_tso()
788 return 0; in fec_enet_txq_put_data_tso()
802 unsigned int estatus = 0; in fec_enet_txq_put_hdr_tso()
836 ebdp->cbd_bdu = 0; in fec_enet_txq_put_hdr_tso()
842 return 0; in fec_enet_txq_put_hdr_tso()
855 unsigned int index = 0; in fec_enet_txq_submit_tso()
875 while (total_len > 0) { in fec_enet_txq_submit_tso()
884 tso_build_hdr(skb, hdr, &tso, data_left, total_len == 0); in fec_enet_txq_submit_tso()
889 while (data_left > 0) { in fec_enet_txq_submit_tso()
899 total_len == 0); in fec_enet_txq_submit_tso()
922 writel(0, txq->bd.reg_desc_active); in fec_enet_txq_submit_tso()
924 return 0; in fec_enet_txq_submit_tso()
940 tmp_bdp->cbd_sc = 0; in fec_enet_txq_submit_tso()
941 tmp_bdp->cbd_datlen = 0; in fec_enet_txq_submit_tso()
942 tmp_bdp->cbd_bufaddr = 0; in fec_enet_txq_submit_tso()
947 ebdp->cbd_esc = 0; in fec_enet_txq_submit_tso()
997 for (q = 0; q < fep->num_rx_queues; q++) { in fec_enet_bd_init()
1002 for (i = 0; i < rxq->bd.ring_size; i++) { in fec_enet_bd_init()
1008 bdp->cbd_sc = cpu_to_fec16(0); in fec_enet_bd_init()
1019 for (q = 0; q < fep->num_tx_queues; q++) { in fec_enet_bd_init()
1025 for (i = 0; i < txq->bd.ring_size; i++) { in fec_enet_bd_init()
1027 bdp->cbd_sc = cpu_to_fec16(0); in fec_enet_bd_init()
1051 page, 0, in fec_enet_bd_init()
1058 bdp->cbd_bufaddr = cpu_to_fec32(0); in fec_enet_bd_init()
1074 for (i = 0; i < fep->num_rx_queues; i++) in fec_enet_active_rxring()
1075 writel(0, fep->rx_queue[i]->bd.reg_desc_active); in fec_enet_active_rxring()
1085 for (i = 0; i < fep->num_rx_queues; i++) { in fec_enet_enable_ring()
1096 for (i = 0; i < fep->num_tx_queues; i++) { in fec_enet_enable_ring()
1118 writel(0, fep->hwp + FEC_ECNTRL); in fec_ctrl_reset()
1135 (ndev->dev_addr[1] << 16) | (ndev->dev_addr[0] << 24), in fec_set_hw_mac_addr()
1168 writel((0xffffffff & ~FEC_ENET_MII), fep->hwp + FEC_IEVENT); in fec_restart()
1177 writel(0x04, fep->hwp + FEC_X_CNTRL); in fec_restart()
1181 writel(0x0, fep->hwp + FEC_X_CNTRL); in fec_restart()
1233 writel(0, fep->hwp + FEC_MIIGSK_ENR); in fec_restart()
1279 writel(0, fep->hwp + FEC_HASH_TABLE_HIGH); in fec_restart()
1280 writel(0, fep->hwp + FEC_HASH_TABLE_LOW); in fec_restart()
1295 writel(0xF, fep->hwp + FEC_X_WMRK); in fec_restart()
1312 writel(0 << 31, fep->hwp + FEC_MIB_CTRLSTAT); in fec_restart()
1328 writel(0, fep->hwp + FEC_IMASK); in fec_restart()
1340 return 0; in fec_enet_ipc_handle_init()
1355 if (idx < 0) in fec_enet_ipg_stop_set()
1356 idx = 0; in fec_enet_ipg_stop_set()
1359 val = enabled ? 1 : 0; in fec_enet_ipg_stop_set()
1375 BIT(stop_gpr->bit), 0); in fec_enet_stop_mode()
1387 writel(0, fep->hwp + FEC_IMASK); in fec_irqs_disable()
1394 writel(0, fep->hwp + FEC_IMASK); in fec_irqs_disable_except_wakeup()
1478 memset(hwtstamps, 0, sizeof(*hwtstamps)); in fec_enet_hwtstamp()
1492 int index = 0; in fec_enet_tx_queue()
1524 bdp->cbd_bufaddr = cpu_to_fec32(0); in fec_enet_tx_queue()
1529 * the "budget" is 0. Because NAPI is called with budget of in fec_enet_tx_queue()
1530 * 0 (such as netpoll) indicates we may be in an IRQ context, in fec_enet_tx_queue()
1547 bdp->cbd_bufaddr = cpu_to_fec32(0); in fec_enet_tx_queue()
1605 /* The dma_sync_size = 0 as XDP_TX has already synced DMA for_device */ in fec_enet_tx_queue()
1607 0, true); in fec_enet_tx_queue()
1635 readl(txq->bd.reg_desc_active) == 0) in fec_enet_tx_queue()
1636 writel(0, txq->bd.reg_desc_active); in fec_enet_tx_queue()
1645 for (i = fep->num_tx_queues - 1; i >= 0; i--) in fec_enet_tx()
1664 return 0; in fec_enet_update_cbd()
1762 int pkt_received = 0; in fec_enet_rx_queue()
1764 int index = 0; in fec_enet_rx_queue()
1930 ebdp->cbd_prot = 0; in fec_enet_rx_queue()
1931 ebdp->cbd_bdu = 0; in fec_enet_rx_queue()
1946 writel(0, rxq->bd.reg_desc_active); in fec_enet_rx_queue()
1959 int i, done = 0; in fec_enet_rx()
1962 for (i = fep->num_rx_queues - 1; i >= 0; i--) in fec_enet_rx()
1979 return int_events != 0; in fec_enet_collect_events()
1994 writel(0, fep->hwp + FEC_IMASK); in fec_enet_interrupt()
2006 int done = 0; in fec_enet_rx_napi()
2032 * fec.macaddr=0x00,0x04,0x9f,0x01,0x30,0xe0 in fec_get_mac()
2069 *((__be32 *) &tmpaddr[0]) = in fec_get_mac()
2073 iap = &tmpaddr[0]; in fec_get_mac()
2085 return 0; in fec_get_mac()
2089 eth_hw_addr_gen(ndev, iap, iap == macaddr ? fep->dev_id : 0); in fec_get_mac()
2091 return 0; in fec_get_mac()
2120 sleep_cycle = 0; in fec_enet_eee_mode_set()
2121 wake_cycle = 0; in fec_enet_eee_mode_set()
2127 return 0; in fec_enet_eee_mode_set()
2134 int status_change = 0; in fec_enet_adjust_link()
2142 fep->link = 0; in fec_enet_adjust_link()
2208 int ret = 0, frame_start, frame_addr, frame_op; in fec_enet_mdio_read_c22()
2211 if (ret < 0) in fec_enet_mdio_read_c22()
2245 int ret = 0, frame_start, frame_op; in fec_enet_mdio_read_c45()
2248 if (ret < 0) in fec_enet_mdio_read_c45()
2256 FEC_MMFR_TA | (regnum & 0xFFFF), in fec_enet_mdio_read_c45()
2297 if (ret < 0) in fec_enet_mdio_write_c22()
2329 if (ret < 0) in fec_enet_mdio_write_c45()
2337 FEC_MMFR_TA | (regnum & 0xFFFF), in fec_enet_mdio_write_c45()
2430 return 0; in fec_enet_clk_enable()
2453 /* For rgmii tx internal delay, valid values are 0ps and 2000ps */ in fec_enet_parse_rgmii_delay()
2455 if (rgmii_tx_delay != 0 && rgmii_tx_delay != 2000) { in fec_enet_parse_rgmii_delay()
2456 dev_err(&fep->pdev->dev, "The only allowed RGMII TX delay values are: 0ps, 2000ps"); in fec_enet_parse_rgmii_delay()
2463 /* For rgmii rx internal delay, valid values are 0ps and 2000ps */ in fec_enet_parse_rgmii_delay()
2465 if (rgmii_rx_delay != 0 && rgmii_rx_delay != 2000) { in fec_enet_parse_rgmii_delay()
2466 dev_err(&fep->pdev->dev, "The only allowed RGMII RX delay values are: 0ps, 2000ps"); in fec_enet_parse_rgmii_delay()
2473 return 0; in fec_enet_parse_rgmii_delay()
2487 &fec_enet_adjust_link, 0, in fec_enet_mii_probe()
2495 for (phy_id = 0; (phy_id < PHY_MAX_ADDR); phy_id++) { in fec_enet_mii_probe()
2506 strscpy(mdio_bus_id, "fixed-0", MII_BUS_ID_SIZE); in fec_enet_mii_probe()
2507 phy_id = 0; in fec_enet_mii_probe()
2536 fep->link = 0; in fec_enet_mii_probe()
2537 fep->full_duplex = 0; in fec_enet_mii_probe()
2541 return 0; in fec_enet_mii_probe()
2573 if ((fep->quirks & FEC_QUIRK_SINGLE_MDIO) && fep->dev_id > 0) { in fec_enet_mii_init()
2578 return 0; in fec_enet_mii_init()
2618 * The HOLDTIME bitfield takes values between 0 and 7 (inclusive). in fec_enet_mii_init()
2633 * - mmfr[31:0]_not_zero & mscr[7:0]_is_zero & in fec_enet_mii_init()
2634 * mscr_reg_data_in[7:0] != 0 in fec_enet_mii_init()
2636 * - mscr[7:0]_not_zero in fec_enet_mii_init()
2638 writel(0, fep->hwp + FEC_MII_DATA); in fec_enet_mii_init()
2670 for (addr = 0; addr < PHY_MAX_ADDR; addr++) { in fec_enet_mii_init()
2682 return 0; in fec_enet_mii_init()
2693 if (--mii_cnt == 0) { in fec_enet_mii_remove()
2713 int s = 0; in fec_enet_get_regs_len()
2715 r = platform_get_resource(fep->pdev, IORESOURCE_MEM, 0); in fec_enet_get_regs_len()
2824 if (ret < 0) in fec_enet_get_regs()
2829 memset(buf, 0, regs->len); in fec_enet_get_regs()
2831 for (i = 0; i < reg_cnt; i++) { in fec_enet_get_regs()
2865 return 0; in fec_enet_get_ts_info()
2878 pause->autoneg = (fep->pause_flag & FEC_PAUSE_FLAG_AUTONEG) != 0; in fec_enet_get_pauseparam()
2879 pause->tx_pause = (fep->pause_flag & FEC_PAUSE_FLAG_ENABLE) != 0; in fec_enet_get_pauseparam()
2897 fep->pause_flag = 0; in fec_enet_set_pauseparam()
2900 fep->pause_flag |= pause->rx_pause ? FEC_PAUSE_FLAG_ENABLE : 0; in fec_enet_set_pauseparam()
2901 fep->pause_flag |= pause->autoneg ? FEC_PAUSE_FLAG_AUTONEG : 0; in fec_enet_set_pauseparam()
2920 return 0; in fec_enet_set_pauseparam()
2992 "rx_xdp_redirect", /* RX_XDP_REDIRECT = 0, */
3006 for (i = 0; i < ARRAY_SIZE(fec_stats); i++) in fec_enet_update_ethtool_stats()
3012 u64 xdp_stats[XDP_STATS_TOTAL] = { 0 }; in fec_enet_get_xdp_stats()
3016 for (i = fep->num_rx_queues - 1; i >= 0; i--) { in fec_enet_get_xdp_stats()
3019 for (j = 0; j < XDP_STATS_TOTAL; j++) in fec_enet_get_xdp_stats()
3033 for (i = fep->num_rx_queues - 1; i >= 0; i--) { in fec_enet_page_pool_stats()
3069 for (i = 0; i < ARRAY_SIZE(fec_stats); i++) { in fec_enet_get_strings()
3072 for (i = 0; i < ARRAY_SIZE(fec_xdp_stat_strs); i++) { in fec_enet_get_strings()
3110 for (i = 0; i < ARRAY_SIZE(fec_stats); i++) in fec_enet_clear_ethtool_stats()
3111 writel(0, fep->hwp + fec_stats[i].offset); in fec_enet_clear_ethtool_stats()
3113 for (i = fep->num_rx_queues - 1; i >= 0; i--) { in fec_enet_clear_ethtool_stats()
3115 for (j = 0; j < XDP_STATS_TOTAL; j++) in fec_enet_clear_ethtool_stats()
3116 rxq->stats[j] = 0; in fec_enet_clear_ethtool_stats()
3120 writel(0, fep->hwp + FEC_MIB_CTRLSTAT); in fec_enet_clear_ethtool_stats()
3124 #define FEC_STATS_SIZE 0
3149 u32 rx_itr = 0, tx_itr = 0; in fec_enet_itr_coal_set()
3155 if (rx_ictt > 0 && fep->rx_pkts_itr > 1) { in fec_enet_itr_coal_set()
3162 if (tx_ictt > 0 && fep->tx_pkts_itr > 1) { in fec_enet_itr_coal_set()
3195 return 0; in fec_enet_get_coalesce()
3221 if (cycle > 0xFFFF) { in fec_enet_set_coalesce()
3227 if (cycle > 0xFFFF) { in fec_enet_set_coalesce()
3240 return 0; in fec_enet_set_coalesce()
3278 wol->wolopts = fep->wol_flag & FEC_WOL_FLAG_ENABLE ? WAKE_MAGIC : 0; in fec_enet_get_wol()
3280 wol->supported = wol->wolopts = 0; in fec_enet_get_wol()
3301 return 0; in fec_enet_set_wol()
3339 for (q = 0; q < fep->num_rx_queues; q++) { in fec_enet_free_buffers()
3341 for (i = 0; i < rxq->bd.ring_size; i++) in fec_enet_free_buffers()
3344 for (i = 0; i < XDP_STATS_TOTAL; i++) in fec_enet_free_buffers()
3345 rxq->stats[i] = 0; in fec_enet_free_buffers()
3353 for (q = 0; q < fep->num_tx_queues; q++) { in fec_enet_free_buffers()
3355 for (i = 0; i < txq->bd.ring_size; i++) { in fec_enet_free_buffers()
3372 page, 0, false); in fec_enet_free_buffers()
3387 for (i = 0; i < fep->num_tx_queues; i++) in fec_enet_free_queue()
3395 for (i = 0; i < fep->num_rx_queues; i++) in fec_enet_free_queue()
3397 for (i = 0; i < fep->num_tx_queues; i++) in fec_enet_free_queue()
3405 int ret = 0; in fec_enet_alloc_queue()
3408 for (i = 0; i < fep->num_tx_queues; i++) { in fec_enet_alloc_queue()
3431 for (i = 0; i < fep->num_rx_queues; i++) { in fec_enet_alloc_queue()
3463 if (err < 0) { in fec_enet_alloc_rxq_buffers()
3468 for (i = 0; i < rxq->bd.ring_size; i++) { in fec_enet_alloc_rxq_buffers()
3491 return 0; in fec_enet_alloc_rxq_buffers()
3508 for (i = 0; i < txq->bd.ring_size; i++) { in fec_enet_alloc_txq_buffers()
3513 bdp->cbd_sc = cpu_to_fec16(0); in fec_enet_alloc_txq_buffers()
3514 bdp->cbd_bufaddr = cpu_to_fec32(0); in fec_enet_alloc_txq_buffers()
3528 return 0; in fec_enet_alloc_txq_buffers()
3540 for (i = 0; i < fep->num_rx_queues; i++) in fec_enet_alloc_buffers()
3544 for (i = 0; i < fep->num_tx_queues; i++) in fec_enet_alloc_buffers()
3547 return 0; in fec_enet_alloc_buffers()
3558 if (ret < 0) in fec_enet_open()
3603 cpu_latency_qos_add_request(&fep->pm_qos_req, 0); in fec_enet_open()
3612 return 0; in fec_enet_open()
3655 return 0; in fec_enet_close()
3676 unsigned int hash_high = 0, hash_low = 0; in set_multicast_list()
3680 tmp |= 0x8; in set_multicast_list()
3686 tmp &= ~0x8; in set_multicast_list()
3693 writel(0xffffffff, fep->hwp + FEC_GRP_HASH_TABLE_HIGH); in set_multicast_list()
3694 writel(0xffffffff, fep->hwp + FEC_GRP_HASH_TABLE_LOW); in set_multicast_list()
3707 hash = (crc >> (32 - FEC_HASH_BITS)) & 0x3f; in set_multicast_list()
3737 return 0; in fec_set_mac_address()
3741 return 0; in fec_set_mac_address()
3780 return 0; in fec_set_features()
3787 u16 vlan_tag = 0; in fec_enet_select_queue()
3844 return 0; in fec_enet_bpf()
3857 if (unlikely(index < 0)) in fec_enet_xdp_get_tx_queue()
3858 return 0; in fec_enet_xdp_get_tx_queue()
3925 ebdp->cbd_bdu = 0; in fec_enet_txq_xmit_frame()
3949 writel(0, txq->bd.reg_desc_active); in fec_enet_txq_xmit_frame()
3951 return 0; in fec_enet_txq_xmit_frame()
3985 unsigned int sent_frames = 0; in fec_enet_xdp_xmit()
3998 for (i = 0; i < num_frames; i++) { in fec_enet_xdp_xmit()
3999 if (fec_enet_txq_xmit_frame(fep, txq, frames[i], 0, true) < 0) in fec_enet_xdp_xmit()
4022 return 0; in fec_hwtstamp_get()
4054 return 0; in fec_change_mtu()
4101 fep->rx_align = 0xf; in fec_enet_init()
4102 fep->tx_align = 0xf; in fec_enet_init()
4104 fep->rx_align = 0x3; in fec_enet_init()
4105 fep->tx_align = 0x3; in fec_enet_init()
4114 if (ret < 0) { in fec_enet_init()
4139 for (i = 0; i < fep->num_rx_queues; i++) { in fec_enet_init()
4155 for (i = 0; i < fep->num_tx_queues; i++) { in fec_enet_init()
4194 fep->tx_align = 0; in fec_enet_init()
4195 fep->rx_align = 0x3f; in fec_enet_init()
4211 return 0; in fec_enet_init()
4230 int msec = 1, phy_post_delay = 0; in fec_reset_phy()
4235 return 0; in fec_reset_phy()
4254 return 0; in fec_reset_phy()
4261 gpiod_set_value_cansleep(phy_reset, 0); in fec_reset_phy()
4264 return 0; in fec_reset_phy()
4272 return 0; in fec_reset_phy()
4281 return 0; in fec_reset_phy()
4324 else if (irq_cnt <= 0) in fec_enet_get_irq_cnt()
4337 fep->wake_irq = fep->irq[0]; in fec_enet_get_wakeup_irq()
4345 int ret = 0; in fec_enet_init_stop_mode()
4347 gpr_np = of_parse_phandle(np, "fsl,stop-mode", 0); in fec_enet_init_stop_mode()
4349 return 0; in fec_enet_init_stop_mode()
4382 int i, irq, ret = 0; in fec_probe()
4423 fep->hwp = devm_platform_ioremap_resource(pdev, 0); in fec_probe()
4450 phy_node = of_parse_phandle(np, "phy-handle", 0); in fec_probe()
4453 if (ret < 0) { in fec_probe()
4568 for (i = 0; i < irq_cnt; i++) { in fec_probe()
4571 if (irq < 0) in fec_probe()
4573 if (irq < 0) { in fec_probe()
4578 0, pdev->name, ndev); in fec_probe()
4597 fep->pagepool_order = 0; in fec_probe()
4622 return 0; in fec_probe()
4666 if (ret < 0) in fec_drv_remove()
4685 if (ret >= 0) { in fec_drv_remove()
4717 if (fep->wake_irq > 0) { in fec_suspend()
4729 if (ret < 0) { in fec_suspend()
4744 fep->link = 0; in fec_suspend()
4746 return 0; in fec_suspend()
4796 return 0; in fec_resume()
4812 return 0; in fec_runtime_suspend()
4828 return 0; in fec_runtime_resume()