Lines Matching refs:pdata

126 static unsigned int xgbe_usec_to_riwt(struct xgbe_prv_data *pdata,  in xgbe_usec_to_riwt()  argument
134 rate = pdata->sysclk_rate; in xgbe_usec_to_riwt()
149 static unsigned int xgbe_riwt_to_usec(struct xgbe_prv_data *pdata, in xgbe_riwt_to_usec() argument
157 rate = pdata->sysclk_rate; in xgbe_riwt_to_usec()
172 static int xgbe_config_pblx8(struct xgbe_prv_data *pdata) in xgbe_config_pblx8() argument
177 channel = pdata->channel; in xgbe_config_pblx8()
178 for (i = 0; i < pdata->channel_count; i++, channel++) in xgbe_config_pblx8()
180 pdata->pblx8); in xgbe_config_pblx8()
185 static int xgbe_get_tx_pbl_val(struct xgbe_prv_data *pdata) in xgbe_get_tx_pbl_val() argument
187 return XGMAC_DMA_IOREAD_BITS(pdata->channel, DMA_CH_TCR, PBL); in xgbe_get_tx_pbl_val()
190 static int xgbe_config_tx_pbl_val(struct xgbe_prv_data *pdata) in xgbe_config_tx_pbl_val() argument
195 channel = pdata->channel; in xgbe_config_tx_pbl_val()
196 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_config_tx_pbl_val()
201 pdata->tx_pbl); in xgbe_config_tx_pbl_val()
207 static int xgbe_get_rx_pbl_val(struct xgbe_prv_data *pdata) in xgbe_get_rx_pbl_val() argument
209 return XGMAC_DMA_IOREAD_BITS(pdata->channel, DMA_CH_RCR, PBL); in xgbe_get_rx_pbl_val()
212 static int xgbe_config_rx_pbl_val(struct xgbe_prv_data *pdata) in xgbe_config_rx_pbl_val() argument
217 channel = pdata->channel; in xgbe_config_rx_pbl_val()
218 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_config_rx_pbl_val()
223 pdata->rx_pbl); in xgbe_config_rx_pbl_val()
229 static int xgbe_config_osp_mode(struct xgbe_prv_data *pdata) in xgbe_config_osp_mode() argument
234 channel = pdata->channel; in xgbe_config_osp_mode()
235 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_config_osp_mode()
240 pdata->tx_osp_mode); in xgbe_config_osp_mode()
246 static int xgbe_config_rsf_mode(struct xgbe_prv_data *pdata, unsigned int val) in xgbe_config_rsf_mode() argument
250 for (i = 0; i < pdata->rx_q_count; i++) in xgbe_config_rsf_mode()
251 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQOMR, RSF, val); in xgbe_config_rsf_mode()
256 static int xgbe_config_tsf_mode(struct xgbe_prv_data *pdata, unsigned int val) in xgbe_config_tsf_mode() argument
260 for (i = 0; i < pdata->tx_q_count; i++) in xgbe_config_tsf_mode()
261 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, TSF, val); in xgbe_config_tsf_mode()
266 static int xgbe_config_rx_threshold(struct xgbe_prv_data *pdata, in xgbe_config_rx_threshold() argument
271 for (i = 0; i < pdata->rx_q_count; i++) in xgbe_config_rx_threshold()
272 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQOMR, RTC, val); in xgbe_config_rx_threshold()
277 static int xgbe_config_tx_threshold(struct xgbe_prv_data *pdata, in xgbe_config_tx_threshold() argument
282 for (i = 0; i < pdata->tx_q_count; i++) in xgbe_config_tx_threshold()
283 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, TTC, val); in xgbe_config_tx_threshold()
288 static int xgbe_config_rx_coalesce(struct xgbe_prv_data *pdata) in xgbe_config_rx_coalesce() argument
293 channel = pdata->channel; in xgbe_config_rx_coalesce()
294 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_config_rx_coalesce()
299 pdata->rx_riwt); in xgbe_config_rx_coalesce()
305 static int xgbe_config_tx_coalesce(struct xgbe_prv_data *pdata) in xgbe_config_tx_coalesce() argument
310 static void xgbe_config_rx_buffer_size(struct xgbe_prv_data *pdata) in xgbe_config_rx_buffer_size() argument
315 channel = pdata->channel; in xgbe_config_rx_buffer_size()
316 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_config_rx_buffer_size()
321 pdata->rx_buf_size); in xgbe_config_rx_buffer_size()
325 static void xgbe_config_tso_mode(struct xgbe_prv_data *pdata) in xgbe_config_tso_mode() argument
330 channel = pdata->channel; in xgbe_config_tso_mode()
331 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_config_tso_mode()
339 static void xgbe_config_sph_mode(struct xgbe_prv_data *pdata) in xgbe_config_sph_mode() argument
344 channel = pdata->channel; in xgbe_config_sph_mode()
345 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_config_sph_mode()
352 XGMAC_IOWRITE_BITS(pdata, MAC_RCR, HDSMS, XGBE_SPH_HDSMS_SIZE); in xgbe_config_sph_mode()
355 static int xgbe_write_rss_reg(struct xgbe_prv_data *pdata, unsigned int type, in xgbe_write_rss_reg() argument
361 mutex_lock(&pdata->rss_mutex); in xgbe_write_rss_reg()
363 if (XGMAC_IOREAD_BITS(pdata, MAC_RSSAR, OB)) { in xgbe_write_rss_reg()
368 XGMAC_IOWRITE(pdata, MAC_RSSDR, val); in xgbe_write_rss_reg()
370 XGMAC_IOWRITE_BITS(pdata, MAC_RSSAR, RSSIA, index); in xgbe_write_rss_reg()
371 XGMAC_IOWRITE_BITS(pdata, MAC_RSSAR, ADDRT, type); in xgbe_write_rss_reg()
372 XGMAC_IOWRITE_BITS(pdata, MAC_RSSAR, CT, 0); in xgbe_write_rss_reg()
373 XGMAC_IOWRITE_BITS(pdata, MAC_RSSAR, OB, 1); in xgbe_write_rss_reg()
377 if (!XGMAC_IOREAD_BITS(pdata, MAC_RSSAR, OB)) in xgbe_write_rss_reg()
386 mutex_unlock(&pdata->rss_mutex); in xgbe_write_rss_reg()
391 static int xgbe_write_rss_hash_key(struct xgbe_prv_data *pdata) in xgbe_write_rss_hash_key() argument
393 unsigned int key_regs = sizeof(pdata->rss_key) / sizeof(u32); in xgbe_write_rss_hash_key()
394 unsigned int *key = (unsigned int *)&pdata->rss_key; in xgbe_write_rss_hash_key()
398 ret = xgbe_write_rss_reg(pdata, XGBE_RSS_HASH_KEY_TYPE, in xgbe_write_rss_hash_key()
407 static int xgbe_write_rss_lookup_table(struct xgbe_prv_data *pdata) in xgbe_write_rss_lookup_table() argument
412 for (i = 0; i < ARRAY_SIZE(pdata->rss_table); i++) { in xgbe_write_rss_lookup_table()
413 ret = xgbe_write_rss_reg(pdata, in xgbe_write_rss_lookup_table()
415 pdata->rss_table[i]); in xgbe_write_rss_lookup_table()
423 static int xgbe_set_rss_hash_key(struct xgbe_prv_data *pdata, const u8 *key) in xgbe_set_rss_hash_key() argument
425 memcpy(pdata->rss_key, key, sizeof(pdata->rss_key)); in xgbe_set_rss_hash_key()
427 return xgbe_write_rss_hash_key(pdata); in xgbe_set_rss_hash_key()
430 static int xgbe_set_rss_lookup_table(struct xgbe_prv_data *pdata, in xgbe_set_rss_lookup_table() argument
435 for (i = 0; i < ARRAY_SIZE(pdata->rss_table); i++) in xgbe_set_rss_lookup_table()
436 XGMAC_SET_BITS(pdata->rss_table[i], MAC_RSSDR, DMCH, table[i]); in xgbe_set_rss_lookup_table()
438 return xgbe_write_rss_lookup_table(pdata); in xgbe_set_rss_lookup_table()
441 static int xgbe_enable_rss(struct xgbe_prv_data *pdata) in xgbe_enable_rss() argument
445 if (!pdata->hw_feat.rss) in xgbe_enable_rss()
449 ret = xgbe_write_rss_hash_key(pdata); in xgbe_enable_rss()
454 ret = xgbe_write_rss_lookup_table(pdata); in xgbe_enable_rss()
459 XGMAC_IOWRITE(pdata, MAC_RSSCR, pdata->rss_options); in xgbe_enable_rss()
462 XGMAC_IOWRITE_BITS(pdata, MAC_RSSCR, RSSE, 1); in xgbe_enable_rss()
467 static int xgbe_disable_rss(struct xgbe_prv_data *pdata) in xgbe_disable_rss() argument
469 if (!pdata->hw_feat.rss) in xgbe_disable_rss()
472 XGMAC_IOWRITE_BITS(pdata, MAC_RSSCR, RSSE, 0); in xgbe_disable_rss()
477 static void xgbe_config_rss(struct xgbe_prv_data *pdata) in xgbe_config_rss() argument
481 if (!pdata->hw_feat.rss) in xgbe_config_rss()
484 if (pdata->netdev->features & NETIF_F_RXHASH) in xgbe_config_rss()
485 ret = xgbe_enable_rss(pdata); in xgbe_config_rss()
487 ret = xgbe_disable_rss(pdata); in xgbe_config_rss()
490 netdev_err(pdata->netdev, in xgbe_config_rss()
494 static int xgbe_disable_tx_flow_control(struct xgbe_prv_data *pdata) in xgbe_disable_tx_flow_control() argument
501 for (i = 0; i < pdata->rx_q_count; i++) in xgbe_disable_tx_flow_control()
502 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQOMR, EHFC, 0); in xgbe_disable_tx_flow_control()
506 q_count = min_t(unsigned int, pdata->tx_q_count, max_q_count); in xgbe_disable_tx_flow_control()
509 reg_val = XGMAC_IOREAD(pdata, reg); in xgbe_disable_tx_flow_control()
511 XGMAC_IOWRITE(pdata, reg, reg_val); in xgbe_disable_tx_flow_control()
519 static int xgbe_enable_tx_flow_control(struct xgbe_prv_data *pdata) in xgbe_enable_tx_flow_control() argument
526 for (i = 0; i < pdata->rx_q_count; i++) in xgbe_enable_tx_flow_control()
527 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQOMR, EHFC, 1); in xgbe_enable_tx_flow_control()
531 q_count = min_t(unsigned int, pdata->tx_q_count, max_q_count); in xgbe_enable_tx_flow_control()
534 reg_val = XGMAC_IOREAD(pdata, reg); in xgbe_enable_tx_flow_control()
541 XGMAC_IOWRITE(pdata, reg, reg_val); in xgbe_enable_tx_flow_control()
549 static int xgbe_disable_rx_flow_control(struct xgbe_prv_data *pdata) in xgbe_disable_rx_flow_control() argument
551 XGMAC_IOWRITE_BITS(pdata, MAC_RFCR, RFE, 0); in xgbe_disable_rx_flow_control()
556 static int xgbe_enable_rx_flow_control(struct xgbe_prv_data *pdata) in xgbe_enable_rx_flow_control() argument
558 XGMAC_IOWRITE_BITS(pdata, MAC_RFCR, RFE, 1); in xgbe_enable_rx_flow_control()
563 static int xgbe_config_tx_flow_control(struct xgbe_prv_data *pdata) in xgbe_config_tx_flow_control() argument
565 struct ieee_pfc *pfc = pdata->pfc; in xgbe_config_tx_flow_control()
567 if (pdata->tx_pause || (pfc && pfc->pfc_en)) in xgbe_config_tx_flow_control()
568 xgbe_enable_tx_flow_control(pdata); in xgbe_config_tx_flow_control()
570 xgbe_disable_tx_flow_control(pdata); in xgbe_config_tx_flow_control()
575 static int xgbe_config_rx_flow_control(struct xgbe_prv_data *pdata) in xgbe_config_rx_flow_control() argument
577 struct ieee_pfc *pfc = pdata->pfc; in xgbe_config_rx_flow_control()
579 if (pdata->rx_pause || (pfc && pfc->pfc_en)) in xgbe_config_rx_flow_control()
580 xgbe_enable_rx_flow_control(pdata); in xgbe_config_rx_flow_control()
582 xgbe_disable_rx_flow_control(pdata); in xgbe_config_rx_flow_control()
587 static void xgbe_config_flow_control(struct xgbe_prv_data *pdata) in xgbe_config_flow_control() argument
589 struct ieee_pfc *pfc = pdata->pfc; in xgbe_config_flow_control()
591 xgbe_config_tx_flow_control(pdata); in xgbe_config_flow_control()
592 xgbe_config_rx_flow_control(pdata); in xgbe_config_flow_control()
594 XGMAC_IOWRITE_BITS(pdata, MAC_RFCR, PFCE, in xgbe_config_flow_control()
598 static void xgbe_enable_dma_interrupts(struct xgbe_prv_data *pdata) in xgbe_enable_dma_interrupts() argument
604 channel = pdata->channel; in xgbe_enable_dma_interrupts()
605 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_enable_dma_interrupts()
627 if (!pdata->per_channel_irq) in xgbe_enable_dma_interrupts()
637 if (!pdata->per_channel_irq) in xgbe_enable_dma_interrupts()
645 static void xgbe_enable_mtl_interrupts(struct xgbe_prv_data *pdata) in xgbe_enable_mtl_interrupts() argument
650 q_count = max(pdata->hw_feat.tx_q_cnt, pdata->hw_feat.rx_q_cnt); in xgbe_enable_mtl_interrupts()
653 mtl_q_isr = XGMAC_MTL_IOREAD(pdata, i, MTL_Q_ISR); in xgbe_enable_mtl_interrupts()
654 XGMAC_MTL_IOWRITE(pdata, i, MTL_Q_ISR, mtl_q_isr); in xgbe_enable_mtl_interrupts()
657 XGMAC_MTL_IOWRITE(pdata, i, MTL_Q_IER, 0); in xgbe_enable_mtl_interrupts()
661 static void xgbe_enable_mac_interrupts(struct xgbe_prv_data *pdata) in xgbe_enable_mac_interrupts() argument
668 XGMAC_IOWRITE(pdata, MAC_IER, mac_ier); in xgbe_enable_mac_interrupts()
671 XGMAC_IOWRITE_BITS(pdata, MMC_RIER, ALL_INTERRUPTS, 0xffffffff); in xgbe_enable_mac_interrupts()
672 XGMAC_IOWRITE_BITS(pdata, MMC_TIER, ALL_INTERRUPTS, 0xffffffff); in xgbe_enable_mac_interrupts()
675 static int xgbe_set_gmii_speed(struct xgbe_prv_data *pdata) in xgbe_set_gmii_speed() argument
677 if (XGMAC_IOREAD_BITS(pdata, MAC_TCR, SS) == 0x3) in xgbe_set_gmii_speed()
680 XGMAC_IOWRITE_BITS(pdata, MAC_TCR, SS, 0x3); in xgbe_set_gmii_speed()
685 static int xgbe_set_gmii_2500_speed(struct xgbe_prv_data *pdata) in xgbe_set_gmii_2500_speed() argument
687 if (XGMAC_IOREAD_BITS(pdata, MAC_TCR, SS) == 0x2) in xgbe_set_gmii_2500_speed()
690 XGMAC_IOWRITE_BITS(pdata, MAC_TCR, SS, 0x2); in xgbe_set_gmii_2500_speed()
695 static int xgbe_set_xgmii_speed(struct xgbe_prv_data *pdata) in xgbe_set_xgmii_speed() argument
697 if (XGMAC_IOREAD_BITS(pdata, MAC_TCR, SS) == 0) in xgbe_set_xgmii_speed()
700 XGMAC_IOWRITE_BITS(pdata, MAC_TCR, SS, 0); in xgbe_set_xgmii_speed()
705 static int xgbe_set_promiscuous_mode(struct xgbe_prv_data *pdata, in xgbe_set_promiscuous_mode() argument
710 if (XGMAC_IOREAD_BITS(pdata, MAC_PFR, PR) == val) in xgbe_set_promiscuous_mode()
713 netif_dbg(pdata, drv, pdata->netdev, "%s promiscuous mode\n", in xgbe_set_promiscuous_mode()
715 XGMAC_IOWRITE_BITS(pdata, MAC_PFR, PR, val); in xgbe_set_promiscuous_mode()
720 static int xgbe_set_all_multicast_mode(struct xgbe_prv_data *pdata, in xgbe_set_all_multicast_mode() argument
725 if (XGMAC_IOREAD_BITS(pdata, MAC_PFR, PM) == val) in xgbe_set_all_multicast_mode()
728 netif_dbg(pdata, drv, pdata->netdev, "%s allmulti mode\n", in xgbe_set_all_multicast_mode()
730 XGMAC_IOWRITE_BITS(pdata, MAC_PFR, PM, val); in xgbe_set_all_multicast_mode()
735 static void xgbe_set_mac_reg(struct xgbe_prv_data *pdata, in xgbe_set_mac_reg() argument
754 netif_dbg(pdata, drv, pdata->netdev, in xgbe_set_mac_reg()
761 XGMAC_IOWRITE(pdata, *mac_reg, mac_addr_hi); in xgbe_set_mac_reg()
763 XGMAC_IOWRITE(pdata, *mac_reg, mac_addr_lo); in xgbe_set_mac_reg()
767 static void xgbe_set_mac_addn_addrs(struct xgbe_prv_data *pdata) in xgbe_set_mac_addn_addrs() argument
769 struct net_device *netdev = pdata->netdev; in xgbe_set_mac_addn_addrs()
775 addn_macs = pdata->hw_feat.addn_mac; in xgbe_set_mac_addn_addrs()
778 xgbe_set_promiscuous_mode(pdata, 1); in xgbe_set_mac_addn_addrs()
781 xgbe_set_mac_reg(pdata, ha, &mac_reg); in xgbe_set_mac_addn_addrs()
786 xgbe_set_all_multicast_mode(pdata, 1); in xgbe_set_mac_addn_addrs()
789 xgbe_set_mac_reg(pdata, ha, &mac_reg); in xgbe_set_mac_addn_addrs()
797 xgbe_set_mac_reg(pdata, NULL, &mac_reg); in xgbe_set_mac_addn_addrs()
800 static void xgbe_set_mac_hash_table(struct xgbe_prv_data *pdata) in xgbe_set_mac_hash_table() argument
802 struct net_device *netdev = pdata->netdev; in xgbe_set_mac_hash_table()
810 hash_table_shift = 26 - (pdata->hw_feat.hash_table_size >> 7); in xgbe_set_mac_hash_table()
811 hash_table_count = pdata->hw_feat.hash_table_size / 32; in xgbe_set_mac_hash_table()
830 XGMAC_IOWRITE(pdata, hash_reg, hash_table[i]); in xgbe_set_mac_hash_table()
835 static int xgbe_add_mac_addresses(struct xgbe_prv_data *pdata) in xgbe_add_mac_addresses() argument
837 if (pdata->hw_feat.hash_table_size) in xgbe_add_mac_addresses()
838 xgbe_set_mac_hash_table(pdata); in xgbe_add_mac_addresses()
840 xgbe_set_mac_addn_addrs(pdata); in xgbe_add_mac_addresses()
845 static int xgbe_set_mac_address(struct xgbe_prv_data *pdata, u8 *addr) in xgbe_set_mac_address() argument
853 XGMAC_IOWRITE(pdata, MAC_MACA0HR, mac_addr_hi); in xgbe_set_mac_address()
854 XGMAC_IOWRITE(pdata, MAC_MACA0LR, mac_addr_lo); in xgbe_set_mac_address()
859 static int xgbe_config_rx_mode(struct xgbe_prv_data *pdata) in xgbe_config_rx_mode() argument
861 struct net_device *netdev = pdata->netdev; in xgbe_config_rx_mode()
867 xgbe_set_promiscuous_mode(pdata, pr_mode); in xgbe_config_rx_mode()
868 xgbe_set_all_multicast_mode(pdata, am_mode); in xgbe_config_rx_mode()
870 xgbe_add_mac_addresses(pdata); in xgbe_config_rx_mode()
875 static int xgbe_read_mmd_regs(struct xgbe_prv_data *pdata, int prtad, in xgbe_read_mmd_regs() argument
884 mmd_address = (pdata->mdio_mmd << 16) | (mmd_reg & 0xffff); in xgbe_read_mmd_regs()
895 mutex_lock(&pdata->xpcs_mutex); in xgbe_read_mmd_regs()
896 XPCS_IOWRITE(pdata, PCS_MMD_SELECT << 2, mmd_address >> 8); in xgbe_read_mmd_regs()
897 mmd_data = XPCS_IOREAD(pdata, (mmd_address & 0xff) << 2); in xgbe_read_mmd_regs()
898 mutex_unlock(&pdata->xpcs_mutex); in xgbe_read_mmd_regs()
903 static void xgbe_write_mmd_regs(struct xgbe_prv_data *pdata, int prtad, in xgbe_write_mmd_regs() argument
911 mmd_address = (pdata->mdio_mmd << 16) | (mmd_reg & 0xffff); in xgbe_write_mmd_regs()
922 mutex_lock(&pdata->xpcs_mutex); in xgbe_write_mmd_regs()
923 XPCS_IOWRITE(pdata, PCS_MMD_SELECT << 2, mmd_address >> 8); in xgbe_write_mmd_regs()
924 XPCS_IOWRITE(pdata, (mmd_address & 0xff) << 2, mmd_data); in xgbe_write_mmd_regs()
925 mutex_unlock(&pdata->xpcs_mutex); in xgbe_write_mmd_regs()
933 static int xgbe_disable_rx_csum(struct xgbe_prv_data *pdata) in xgbe_disable_rx_csum() argument
935 XGMAC_IOWRITE_BITS(pdata, MAC_RCR, IPC, 0); in xgbe_disable_rx_csum()
940 static int xgbe_enable_rx_csum(struct xgbe_prv_data *pdata) in xgbe_enable_rx_csum() argument
942 XGMAC_IOWRITE_BITS(pdata, MAC_RCR, IPC, 1); in xgbe_enable_rx_csum()
947 static int xgbe_enable_rx_vlan_stripping(struct xgbe_prv_data *pdata) in xgbe_enable_rx_vlan_stripping() argument
950 XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, EVLRXS, 1); in xgbe_enable_rx_vlan_stripping()
953 XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, DOVLTC, 1); in xgbe_enable_rx_vlan_stripping()
956 XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, ERSVLM, 0); in xgbe_enable_rx_vlan_stripping()
959 XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, ESVL, 0); in xgbe_enable_rx_vlan_stripping()
962 XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, EVLS, 0x3); in xgbe_enable_rx_vlan_stripping()
967 static int xgbe_disable_rx_vlan_stripping(struct xgbe_prv_data *pdata) in xgbe_disable_rx_vlan_stripping() argument
969 XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, EVLS, 0); in xgbe_disable_rx_vlan_stripping()
974 static int xgbe_enable_rx_vlan_filtering(struct xgbe_prv_data *pdata) in xgbe_enable_rx_vlan_filtering() argument
977 XGMAC_IOWRITE_BITS(pdata, MAC_PFR, VTFE, 1); in xgbe_enable_rx_vlan_filtering()
980 XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, VTHM, 1); in xgbe_enable_rx_vlan_filtering()
983 XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, VTIM, 0); in xgbe_enable_rx_vlan_filtering()
986 XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, ETV, 1); in xgbe_enable_rx_vlan_filtering()
994 XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, VL, 1); in xgbe_enable_rx_vlan_filtering()
999 static int xgbe_disable_rx_vlan_filtering(struct xgbe_prv_data *pdata) in xgbe_disable_rx_vlan_filtering() argument
1002 XGMAC_IOWRITE_BITS(pdata, MAC_PFR, VTFE, 0); in xgbe_disable_rx_vlan_filtering()
1035 static int xgbe_update_vlan_hash_table(struct xgbe_prv_data *pdata) in xgbe_update_vlan_hash_table() argument
1043 for_each_set_bit(vid, pdata->active_vlans, VLAN_N_VID) { in xgbe_update_vlan_hash_table()
1052 XGMAC_IOWRITE_BITS(pdata, MAC_VLANHTR, VLHT, vlan_hash_table); in xgbe_update_vlan_hash_table()
1106 static void xgbe_rx_desc_reset(struct xgbe_prv_data *pdata, in xgbe_rx_desc_reset() argument
1110 unsigned int rx_usecs = pdata->rx_usecs; in xgbe_rx_desc_reset()
1111 unsigned int rx_frames = pdata->rx_frames; in xgbe_rx_desc_reset()
1156 struct xgbe_prv_data *pdata = channel->pdata; in xgbe_rx_desc_init() local
1169 xgbe_rx_desc_reset(pdata, rdata, i); in xgbe_rx_desc_init()
1190 static void xgbe_update_tstamp_addend(struct xgbe_prv_data *pdata, in xgbe_update_tstamp_addend() argument
1194 XGMAC_IOWRITE(pdata, MAC_TSAR, addend); in xgbe_update_tstamp_addend()
1195 XGMAC_IOWRITE_BITS(pdata, MAC_TSCR, TSADDREG, 1); in xgbe_update_tstamp_addend()
1198 while (XGMAC_IOREAD_BITS(pdata, MAC_TSCR, TSADDREG)) in xgbe_update_tstamp_addend()
1202 static void xgbe_set_tstamp_time(struct xgbe_prv_data *pdata, unsigned int sec, in xgbe_set_tstamp_time() argument
1206 XGMAC_IOWRITE(pdata, MAC_STSUR, sec); in xgbe_set_tstamp_time()
1207 XGMAC_IOWRITE(pdata, MAC_STNUR, nsec); in xgbe_set_tstamp_time()
1208 XGMAC_IOWRITE_BITS(pdata, MAC_TSCR, TSINIT, 1); in xgbe_set_tstamp_time()
1211 while (XGMAC_IOREAD_BITS(pdata, MAC_TSCR, TSINIT)) in xgbe_set_tstamp_time()
1215 static u64 xgbe_get_tstamp_time(struct xgbe_prv_data *pdata) in xgbe_get_tstamp_time() argument
1219 nsec = XGMAC_IOREAD(pdata, MAC_STSR); in xgbe_get_tstamp_time()
1221 nsec += XGMAC_IOREAD(pdata, MAC_STNR); in xgbe_get_tstamp_time()
1226 static u64 xgbe_get_tx_tstamp(struct xgbe_prv_data *pdata) in xgbe_get_tx_tstamp() argument
1231 tx_snr = XGMAC_IOREAD(pdata, MAC_TXSNR); in xgbe_get_tx_tstamp()
1235 nsec = XGMAC_IOREAD(pdata, MAC_TXSSR); in xgbe_get_tx_tstamp()
1260 static int xgbe_config_tstamp(struct xgbe_prv_data *pdata, in xgbe_config_tstamp() argument
1272 XGMAC_IOWRITE(pdata, MAC_TSCR, mac_tscr); in xgbe_config_tstamp()
1279 XGMAC_IOWRITE_BITS(pdata, MAC_SSIR, SSINC, XGBE_TSTAMP_SSINC); in xgbe_config_tstamp()
1280 XGMAC_IOWRITE_BITS(pdata, MAC_SSIR, SNSINC, XGBE_TSTAMP_SNSINC); in xgbe_config_tstamp()
1281 xgbe_update_tstamp_addend(pdata, pdata->tstamp_addend); in xgbe_config_tstamp()
1282 xgbe_set_tstamp_time(pdata, 0, 0); in xgbe_config_tstamp()
1285 timecounter_init(&pdata->tstamp_tc, &pdata->tstamp_cc, in xgbe_config_tstamp()
1291 static void xgbe_config_dcb_tc(struct xgbe_prv_data *pdata) in xgbe_config_dcb_tc() argument
1293 struct ieee_ets *ets = pdata->ets; in xgbe_config_dcb_tc()
1303 XGMAC_IOWRITE_BITS(pdata, MTL_OMR, ETSALG, MTL_ETSALG_DWRR); in xgbe_config_dcb_tc()
1306 total_weight = pdata->netdev->mtu * pdata->hw_feat.tc_cnt; in xgbe_config_dcb_tc()
1311 for (i = 0; i < pdata->hw_feat.tc_cnt; i++) { in xgbe_config_dcb_tc()
1314 netif_dbg(pdata, drv, pdata->netdev, in xgbe_config_dcb_tc()
1316 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_TC_ETSCR, TSA, in xgbe_config_dcb_tc()
1323 netif_dbg(pdata, drv, pdata->netdev, in xgbe_config_dcb_tc()
1325 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_TC_ETSCR, TSA, in xgbe_config_dcb_tc()
1327 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_TC_QWR, QW, in xgbe_config_dcb_tc()
1334 static void xgbe_config_dcb_pfc(struct xgbe_prv_data *pdata) in xgbe_config_dcb_pfc() argument
1336 struct ieee_pfc *pfc = pdata->pfc; in xgbe_config_dcb_pfc()
1337 struct ieee_ets *ets = pdata->ets; in xgbe_config_dcb_pfc()
1344 for (tc = 0; tc < pdata->hw_feat.tc_cnt; tc++) { in xgbe_config_dcb_pfc()
1353 netif_dbg(pdata, drv, pdata->netdev, "TC%u PFC mask=%#x\n", in xgbe_config_dcb_pfc()
1356 reg_val = XGMAC_IOREAD(pdata, reg); in xgbe_config_dcb_pfc()
1361 XGMAC_IOWRITE(pdata, reg, reg_val); in xgbe_config_dcb_pfc()
1364 xgbe_config_flow_control(pdata); in xgbe_config_dcb_pfc()
1370 struct xgbe_prv_data *pdata = channel->pdata; in xgbe_tx_start_xmit() local
1383 if (pdata->tx_usecs && !channel->tx_timer_active) { in xgbe_tx_start_xmit()
1386 jiffies + usecs_to_jiffies(pdata->tx_usecs)); in xgbe_tx_start_xmit()
1394 struct xgbe_prv_data *pdata = channel->pdata; in xgbe_dev_xmit() local
1436 if (!pdata->tx_frames) in xgbe_dev_xmit()
1438 else if (packet->tx_packets > pdata->tx_frames) in xgbe_dev_xmit()
1440 else if ((ring->coalesce_count % pdata->tx_frames) < in xgbe_dev_xmit()
1452 netif_dbg(pdata, tx_queued, pdata->netdev, in xgbe_dev_xmit()
1472 netif_dbg(pdata, tx_queued, pdata->netdev, in xgbe_dev_xmit()
1531 pdata->ext_stats.tx_tso_packets++; in xgbe_dev_xmit()
1593 if (netif_msg_tx_queued(pdata)) in xgbe_dev_xmit()
1594 xgbe_dump_tx_desc(pdata, ring, start_index, in xgbe_dev_xmit()
1602 netif_xmit_stopped(netdev_get_tx_queue(pdata->netdev, in xgbe_dev_xmit()
1617 struct xgbe_prv_data *pdata = channel->pdata; in xgbe_dev_read() local
1622 struct net_device *netdev = pdata->netdev; in xgbe_dev_read()
1637 if (netif_msg_rx_status(pdata)) in xgbe_dev_read()
1638 xgbe_dump_rx_desc(pdata, ring, ring->cur); in xgbe_dev_read()
1664 pdata->ext_stats.rx_split_header_packets++; in xgbe_dev_read()
1709 netif_dbg(pdata, rx_status, netdev, "err=%u, etlt=%#x\n", err, etlt); in xgbe_dev_read()
1720 netif_dbg(pdata, rx_status, netdev, "vlan-ctag=%#06x\n", in xgbe_dev_read()
1841 static int xgbe_exit(struct xgbe_prv_data *pdata) in xgbe_exit() argument
1848 XGMAC_IOWRITE_BITS(pdata, DMA_MR, SWR, 1); in xgbe_exit()
1852 while (--count && XGMAC_IOREAD_BITS(pdata, DMA_MR, SWR)) in xgbe_exit()
1863 static int xgbe_flush_tx_queues(struct xgbe_prv_data *pdata) in xgbe_flush_tx_queues() argument
1867 if (XGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER) < 0x21) in xgbe_flush_tx_queues()
1870 for (i = 0; i < pdata->tx_q_count; i++) in xgbe_flush_tx_queues()
1871 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, FTQ, 1); in xgbe_flush_tx_queues()
1874 for (i = 0; i < pdata->tx_q_count; i++) { in xgbe_flush_tx_queues()
1876 while (--count && XGMAC_MTL_IOREAD_BITS(pdata, i, in xgbe_flush_tx_queues()
1887 static void xgbe_config_dma_bus(struct xgbe_prv_data *pdata) in xgbe_config_dma_bus() argument
1890 XGMAC_IOWRITE_BITS(pdata, DMA_SBMR, EAME, 1); in xgbe_config_dma_bus()
1893 XGMAC_IOWRITE_BITS(pdata, DMA_SBMR, UNDEF, 1); in xgbe_config_dma_bus()
1894 XGMAC_IOWRITE_BITS(pdata, DMA_SBMR, BLEN_256, 1); in xgbe_config_dma_bus()
1897 static void xgbe_config_dma_cache(struct xgbe_prv_data *pdata) in xgbe_config_dma_cache() argument
1902 XGMAC_SET_BITS(arcache, DMA_AXIARCR, DRC, pdata->arcache); in xgbe_config_dma_cache()
1903 XGMAC_SET_BITS(arcache, DMA_AXIARCR, DRD, pdata->axdomain); in xgbe_config_dma_cache()
1904 XGMAC_SET_BITS(arcache, DMA_AXIARCR, TEC, pdata->arcache); in xgbe_config_dma_cache()
1905 XGMAC_SET_BITS(arcache, DMA_AXIARCR, TED, pdata->axdomain); in xgbe_config_dma_cache()
1906 XGMAC_SET_BITS(arcache, DMA_AXIARCR, THC, pdata->arcache); in xgbe_config_dma_cache()
1907 XGMAC_SET_BITS(arcache, DMA_AXIARCR, THD, pdata->axdomain); in xgbe_config_dma_cache()
1908 XGMAC_IOWRITE(pdata, DMA_AXIARCR, arcache); in xgbe_config_dma_cache()
1911 XGMAC_SET_BITS(awcache, DMA_AXIAWCR, DWC, pdata->awcache); in xgbe_config_dma_cache()
1912 XGMAC_SET_BITS(awcache, DMA_AXIAWCR, DWD, pdata->axdomain); in xgbe_config_dma_cache()
1913 XGMAC_SET_BITS(awcache, DMA_AXIAWCR, RPC, pdata->awcache); in xgbe_config_dma_cache()
1914 XGMAC_SET_BITS(awcache, DMA_AXIAWCR, RPD, pdata->axdomain); in xgbe_config_dma_cache()
1915 XGMAC_SET_BITS(awcache, DMA_AXIAWCR, RHC, pdata->awcache); in xgbe_config_dma_cache()
1916 XGMAC_SET_BITS(awcache, DMA_AXIAWCR, RHD, pdata->axdomain); in xgbe_config_dma_cache()
1917 XGMAC_SET_BITS(awcache, DMA_AXIAWCR, TDC, pdata->awcache); in xgbe_config_dma_cache()
1918 XGMAC_SET_BITS(awcache, DMA_AXIAWCR, TDD, pdata->axdomain); in xgbe_config_dma_cache()
1919 XGMAC_IOWRITE(pdata, DMA_AXIAWCR, awcache); in xgbe_config_dma_cache()
1922 static void xgbe_config_mtl_mode(struct xgbe_prv_data *pdata) in xgbe_config_mtl_mode() argument
1927 XGMAC_IOWRITE_BITS(pdata, MTL_OMR, ETSALG, MTL_ETSALG_WRR); in xgbe_config_mtl_mode()
1930 for (i = 0; i < pdata->hw_feat.tc_cnt; i++) { in xgbe_config_mtl_mode()
1931 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_TC_ETSCR, TSA, in xgbe_config_mtl_mode()
1933 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_TC_QWR, QW, 1); in xgbe_config_mtl_mode()
1937 XGMAC_IOWRITE_BITS(pdata, MTL_OMR, RAA, MTL_RAA_SP); in xgbe_config_mtl_mode()
1965 static void xgbe_config_tx_fifo_size(struct xgbe_prv_data *pdata) in xgbe_config_tx_fifo_size() argument
1970 fifo_size = xgbe_calculate_per_queue_fifo(pdata->hw_feat.tx_fifo_size, in xgbe_config_tx_fifo_size()
1971 pdata->tx_q_count); in xgbe_config_tx_fifo_size()
1973 for (i = 0; i < pdata->tx_q_count; i++) in xgbe_config_tx_fifo_size()
1974 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, TQS, fifo_size); in xgbe_config_tx_fifo_size()
1976 netif_info(pdata, drv, pdata->netdev, in xgbe_config_tx_fifo_size()
1978 pdata->tx_q_count, ((fifo_size + 1) * 256)); in xgbe_config_tx_fifo_size()
1981 static void xgbe_config_rx_fifo_size(struct xgbe_prv_data *pdata) in xgbe_config_rx_fifo_size() argument
1986 fifo_size = xgbe_calculate_per_queue_fifo(pdata->hw_feat.rx_fifo_size, in xgbe_config_rx_fifo_size()
1987 pdata->rx_q_count); in xgbe_config_rx_fifo_size()
1989 for (i = 0; i < pdata->rx_q_count; i++) in xgbe_config_rx_fifo_size()
1990 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQOMR, RQS, fifo_size); in xgbe_config_rx_fifo_size()
1992 netif_info(pdata, drv, pdata->netdev, in xgbe_config_rx_fifo_size()
1994 pdata->rx_q_count, ((fifo_size + 1) * 256)); in xgbe_config_rx_fifo_size()
1997 static void xgbe_config_queue_mapping(struct xgbe_prv_data *pdata) in xgbe_config_queue_mapping() argument
2008 qptc = pdata->tx_q_count / pdata->hw_feat.tc_cnt; in xgbe_config_queue_mapping()
2009 qptc_extra = pdata->tx_q_count % pdata->hw_feat.tc_cnt; in xgbe_config_queue_mapping()
2011 for (i = 0, queue = 0; i < pdata->hw_feat.tc_cnt; i++) { in xgbe_config_queue_mapping()
2013 netif_dbg(pdata, drv, pdata->netdev, in xgbe_config_queue_mapping()
2015 XGMAC_MTL_IOWRITE_BITS(pdata, queue, MTL_Q_TQOMR, in xgbe_config_queue_mapping()
2017 pdata->q2tc_map[queue++] = i; in xgbe_config_queue_mapping()
2021 netif_dbg(pdata, drv, pdata->netdev, in xgbe_config_queue_mapping()
2023 XGMAC_MTL_IOWRITE_BITS(pdata, queue, MTL_Q_TQOMR, in xgbe_config_queue_mapping()
2025 pdata->q2tc_map[queue++] = i; in xgbe_config_queue_mapping()
2031 pdata->rx_q_count); in xgbe_config_queue_mapping()
2040 netif_dbg(pdata, drv, pdata->netdev, in xgbe_config_queue_mapping()
2043 pdata->prio2q_map[prio++] = i; in xgbe_config_queue_mapping()
2047 netif_dbg(pdata, drv, pdata->netdev, in xgbe_config_queue_mapping()
2050 pdata->prio2q_map[prio++] = i; in xgbe_config_queue_mapping()
2058 XGMAC_IOWRITE(pdata, reg, reg_val); in xgbe_config_queue_mapping()
2066 for (i = 0; i < pdata->rx_q_count;) { in xgbe_config_queue_mapping()
2069 if ((i % MTL_RQDCM_Q_PER_REG) && (i != pdata->rx_q_count)) in xgbe_config_queue_mapping()
2072 XGMAC_IOWRITE(pdata, reg, reg_val); in xgbe_config_queue_mapping()
2079 static void xgbe_config_flow_control_threshold(struct xgbe_prv_data *pdata) in xgbe_config_flow_control_threshold() argument
2083 for (i = 0; i < pdata->rx_q_count; i++) { in xgbe_config_flow_control_threshold()
2085 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQFCR, RFA, 2); in xgbe_config_flow_control_threshold()
2088 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQFCR, RFD, 4); in xgbe_config_flow_control_threshold()
2092 static void xgbe_config_mac_address(struct xgbe_prv_data *pdata) in xgbe_config_mac_address() argument
2094 xgbe_set_mac_address(pdata, pdata->netdev->dev_addr); in xgbe_config_mac_address()
2097 if (pdata->hw_feat.hash_table_size) { in xgbe_config_mac_address()
2098 XGMAC_IOWRITE_BITS(pdata, MAC_PFR, HPF, 1); in xgbe_config_mac_address()
2099 XGMAC_IOWRITE_BITS(pdata, MAC_PFR, HUC, 1); in xgbe_config_mac_address()
2100 XGMAC_IOWRITE_BITS(pdata, MAC_PFR, HMC, 1); in xgbe_config_mac_address()
2104 static void xgbe_config_jumbo_enable(struct xgbe_prv_data *pdata) in xgbe_config_jumbo_enable() argument
2108 val = (pdata->netdev->mtu > XGMAC_STD_PACKET_MTU) ? 1 : 0; in xgbe_config_jumbo_enable()
2110 XGMAC_IOWRITE_BITS(pdata, MAC_RCR, JE, val); in xgbe_config_jumbo_enable()
2113 static void xgbe_config_mac_speed(struct xgbe_prv_data *pdata) in xgbe_config_mac_speed() argument
2115 switch (pdata->phy_speed) { in xgbe_config_mac_speed()
2117 xgbe_set_xgmii_speed(pdata); in xgbe_config_mac_speed()
2121 xgbe_set_gmii_2500_speed(pdata); in xgbe_config_mac_speed()
2125 xgbe_set_gmii_speed(pdata); in xgbe_config_mac_speed()
2130 static void xgbe_config_checksum_offload(struct xgbe_prv_data *pdata) in xgbe_config_checksum_offload() argument
2132 if (pdata->netdev->features & NETIF_F_RXCSUM) in xgbe_config_checksum_offload()
2133 xgbe_enable_rx_csum(pdata); in xgbe_config_checksum_offload()
2135 xgbe_disable_rx_csum(pdata); in xgbe_config_checksum_offload()
2138 static void xgbe_config_vlan_support(struct xgbe_prv_data *pdata) in xgbe_config_vlan_support() argument
2141 XGMAC_IOWRITE_BITS(pdata, MAC_VLANIR, CSVL, 0); in xgbe_config_vlan_support()
2142 XGMAC_IOWRITE_BITS(pdata, MAC_VLANIR, VLTI, 1); in xgbe_config_vlan_support()
2145 xgbe_update_vlan_hash_table(pdata); in xgbe_config_vlan_support()
2147 if (pdata->netdev->features & NETIF_F_HW_VLAN_CTAG_FILTER) in xgbe_config_vlan_support()
2148 xgbe_enable_rx_vlan_filtering(pdata); in xgbe_config_vlan_support()
2150 xgbe_disable_rx_vlan_filtering(pdata); in xgbe_config_vlan_support()
2152 if (pdata->netdev->features & NETIF_F_HW_VLAN_CTAG_RX) in xgbe_config_vlan_support()
2153 xgbe_enable_rx_vlan_stripping(pdata); in xgbe_config_vlan_support()
2155 xgbe_disable_rx_vlan_stripping(pdata); in xgbe_config_vlan_support()
2158 static u64 xgbe_mmc_read(struct xgbe_prv_data *pdata, unsigned int reg_lo) in xgbe_mmc_read() argument
2176 val = XGMAC_IOREAD(pdata, reg_lo); in xgbe_mmc_read()
2179 val |= ((u64)XGMAC_IOREAD(pdata, reg_lo + 4) << 32); in xgbe_mmc_read()
2184 static void xgbe_tx_mmc_int(struct xgbe_prv_data *pdata) in xgbe_tx_mmc_int() argument
2186 struct xgbe_mmc_stats *stats = &pdata->mmc_stats; in xgbe_tx_mmc_int()
2187 unsigned int mmc_isr = XGMAC_IOREAD(pdata, MMC_TISR); in xgbe_tx_mmc_int()
2191 xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_GB_LO); in xgbe_tx_mmc_int()
2195 xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_GB_LO); in xgbe_tx_mmc_int()
2199 xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_G_LO); in xgbe_tx_mmc_int()
2203 xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_G_LO); in xgbe_tx_mmc_int()
2207 xgbe_mmc_read(pdata, MMC_TX64OCTETS_GB_LO); in xgbe_tx_mmc_int()
2211 xgbe_mmc_read(pdata, MMC_TX65TO127OCTETS_GB_LO); in xgbe_tx_mmc_int()
2215 xgbe_mmc_read(pdata, MMC_TX128TO255OCTETS_GB_LO); in xgbe_tx_mmc_int()
2219 xgbe_mmc_read(pdata, MMC_TX256TO511OCTETS_GB_LO); in xgbe_tx_mmc_int()
2223 xgbe_mmc_read(pdata, MMC_TX512TO1023OCTETS_GB_LO); in xgbe_tx_mmc_int()
2227 xgbe_mmc_read(pdata, MMC_TX1024TOMAXOCTETS_GB_LO); in xgbe_tx_mmc_int()
2231 xgbe_mmc_read(pdata, MMC_TXUNICASTFRAMES_GB_LO); in xgbe_tx_mmc_int()
2235 xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_GB_LO); in xgbe_tx_mmc_int()
2239 xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_GB_LO); in xgbe_tx_mmc_int()
2243 xgbe_mmc_read(pdata, MMC_TXUNDERFLOWERROR_LO); in xgbe_tx_mmc_int()
2247 xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_G_LO); in xgbe_tx_mmc_int()
2251 xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_G_LO); in xgbe_tx_mmc_int()
2255 xgbe_mmc_read(pdata, MMC_TXPAUSEFRAMES_LO); in xgbe_tx_mmc_int()
2259 xgbe_mmc_read(pdata, MMC_TXVLANFRAMES_G_LO); in xgbe_tx_mmc_int()
2262 static void xgbe_rx_mmc_int(struct xgbe_prv_data *pdata) in xgbe_rx_mmc_int() argument
2264 struct xgbe_mmc_stats *stats = &pdata->mmc_stats; in xgbe_rx_mmc_int()
2265 unsigned int mmc_isr = XGMAC_IOREAD(pdata, MMC_RISR); in xgbe_rx_mmc_int()
2269 xgbe_mmc_read(pdata, MMC_RXFRAMECOUNT_GB_LO); in xgbe_rx_mmc_int()
2273 xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_GB_LO); in xgbe_rx_mmc_int()
2277 xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_G_LO); in xgbe_rx_mmc_int()
2281 xgbe_mmc_read(pdata, MMC_RXBROADCASTFRAMES_G_LO); in xgbe_rx_mmc_int()
2285 xgbe_mmc_read(pdata, MMC_RXMULTICASTFRAMES_G_LO); in xgbe_rx_mmc_int()
2289 xgbe_mmc_read(pdata, MMC_RXCRCERROR_LO); in xgbe_rx_mmc_int()
2293 xgbe_mmc_read(pdata, MMC_RXRUNTERROR); in xgbe_rx_mmc_int()
2297 xgbe_mmc_read(pdata, MMC_RXJABBERERROR); in xgbe_rx_mmc_int()
2301 xgbe_mmc_read(pdata, MMC_RXUNDERSIZE_G); in xgbe_rx_mmc_int()
2305 xgbe_mmc_read(pdata, MMC_RXOVERSIZE_G); in xgbe_rx_mmc_int()
2309 xgbe_mmc_read(pdata, MMC_RX64OCTETS_GB_LO); in xgbe_rx_mmc_int()
2313 xgbe_mmc_read(pdata, MMC_RX65TO127OCTETS_GB_LO); in xgbe_rx_mmc_int()
2317 xgbe_mmc_read(pdata, MMC_RX128TO255OCTETS_GB_LO); in xgbe_rx_mmc_int()
2321 xgbe_mmc_read(pdata, MMC_RX256TO511OCTETS_GB_LO); in xgbe_rx_mmc_int()
2325 xgbe_mmc_read(pdata, MMC_RX512TO1023OCTETS_GB_LO); in xgbe_rx_mmc_int()
2329 xgbe_mmc_read(pdata, MMC_RX1024TOMAXOCTETS_GB_LO); in xgbe_rx_mmc_int()
2333 xgbe_mmc_read(pdata, MMC_RXUNICASTFRAMES_G_LO); in xgbe_rx_mmc_int()
2337 xgbe_mmc_read(pdata, MMC_RXLENGTHERROR_LO); in xgbe_rx_mmc_int()
2341 xgbe_mmc_read(pdata, MMC_RXOUTOFRANGETYPE_LO); in xgbe_rx_mmc_int()
2345 xgbe_mmc_read(pdata, MMC_RXPAUSEFRAMES_LO); in xgbe_rx_mmc_int()
2349 xgbe_mmc_read(pdata, MMC_RXFIFOOVERFLOW_LO); in xgbe_rx_mmc_int()
2353 xgbe_mmc_read(pdata, MMC_RXVLANFRAMES_GB_LO); in xgbe_rx_mmc_int()
2357 xgbe_mmc_read(pdata, MMC_RXWATCHDOGERROR); in xgbe_rx_mmc_int()
2360 static void xgbe_read_mmc_stats(struct xgbe_prv_data *pdata) in xgbe_read_mmc_stats() argument
2362 struct xgbe_mmc_stats *stats = &pdata->mmc_stats; in xgbe_read_mmc_stats()
2365 XGMAC_IOWRITE_BITS(pdata, MMC_CR, MCF, 1); in xgbe_read_mmc_stats()
2368 xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_GB_LO); in xgbe_read_mmc_stats()
2371 xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_GB_LO); in xgbe_read_mmc_stats()
2374 xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_G_LO); in xgbe_read_mmc_stats()
2377 xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_G_LO); in xgbe_read_mmc_stats()
2380 xgbe_mmc_read(pdata, MMC_TX64OCTETS_GB_LO); in xgbe_read_mmc_stats()
2383 xgbe_mmc_read(pdata, MMC_TX65TO127OCTETS_GB_LO); in xgbe_read_mmc_stats()
2386 xgbe_mmc_read(pdata, MMC_TX128TO255OCTETS_GB_LO); in xgbe_read_mmc_stats()
2389 xgbe_mmc_read(pdata, MMC_TX256TO511OCTETS_GB_LO); in xgbe_read_mmc_stats()
2392 xgbe_mmc_read(pdata, MMC_TX512TO1023OCTETS_GB_LO); in xgbe_read_mmc_stats()
2395 xgbe_mmc_read(pdata, MMC_TX1024TOMAXOCTETS_GB_LO); in xgbe_read_mmc_stats()
2398 xgbe_mmc_read(pdata, MMC_TXUNICASTFRAMES_GB_LO); in xgbe_read_mmc_stats()
2401 xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_GB_LO); in xgbe_read_mmc_stats()
2404 xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_GB_LO); in xgbe_read_mmc_stats()
2407 xgbe_mmc_read(pdata, MMC_TXUNDERFLOWERROR_LO); in xgbe_read_mmc_stats()
2410 xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_G_LO); in xgbe_read_mmc_stats()
2413 xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_G_LO); in xgbe_read_mmc_stats()
2416 xgbe_mmc_read(pdata, MMC_TXPAUSEFRAMES_LO); in xgbe_read_mmc_stats()
2419 xgbe_mmc_read(pdata, MMC_TXVLANFRAMES_G_LO); in xgbe_read_mmc_stats()
2422 xgbe_mmc_read(pdata, MMC_RXFRAMECOUNT_GB_LO); in xgbe_read_mmc_stats()
2425 xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_GB_LO); in xgbe_read_mmc_stats()
2428 xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_G_LO); in xgbe_read_mmc_stats()
2431 xgbe_mmc_read(pdata, MMC_RXBROADCASTFRAMES_G_LO); in xgbe_read_mmc_stats()
2434 xgbe_mmc_read(pdata, MMC_RXMULTICASTFRAMES_G_LO); in xgbe_read_mmc_stats()
2437 xgbe_mmc_read(pdata, MMC_RXCRCERROR_LO); in xgbe_read_mmc_stats()
2440 xgbe_mmc_read(pdata, MMC_RXRUNTERROR); in xgbe_read_mmc_stats()
2443 xgbe_mmc_read(pdata, MMC_RXJABBERERROR); in xgbe_read_mmc_stats()
2446 xgbe_mmc_read(pdata, MMC_RXUNDERSIZE_G); in xgbe_read_mmc_stats()
2449 xgbe_mmc_read(pdata, MMC_RXOVERSIZE_G); in xgbe_read_mmc_stats()
2452 xgbe_mmc_read(pdata, MMC_RX64OCTETS_GB_LO); in xgbe_read_mmc_stats()
2455 xgbe_mmc_read(pdata, MMC_RX65TO127OCTETS_GB_LO); in xgbe_read_mmc_stats()
2458 xgbe_mmc_read(pdata, MMC_RX128TO255OCTETS_GB_LO); in xgbe_read_mmc_stats()
2461 xgbe_mmc_read(pdata, MMC_RX256TO511OCTETS_GB_LO); in xgbe_read_mmc_stats()
2464 xgbe_mmc_read(pdata, MMC_RX512TO1023OCTETS_GB_LO); in xgbe_read_mmc_stats()
2467 xgbe_mmc_read(pdata, MMC_RX1024TOMAXOCTETS_GB_LO); in xgbe_read_mmc_stats()
2470 xgbe_mmc_read(pdata, MMC_RXUNICASTFRAMES_G_LO); in xgbe_read_mmc_stats()
2473 xgbe_mmc_read(pdata, MMC_RXLENGTHERROR_LO); in xgbe_read_mmc_stats()
2476 xgbe_mmc_read(pdata, MMC_RXOUTOFRANGETYPE_LO); in xgbe_read_mmc_stats()
2479 xgbe_mmc_read(pdata, MMC_RXPAUSEFRAMES_LO); in xgbe_read_mmc_stats()
2482 xgbe_mmc_read(pdata, MMC_RXFIFOOVERFLOW_LO); in xgbe_read_mmc_stats()
2485 xgbe_mmc_read(pdata, MMC_RXVLANFRAMES_GB_LO); in xgbe_read_mmc_stats()
2488 xgbe_mmc_read(pdata, MMC_RXWATCHDOGERROR); in xgbe_read_mmc_stats()
2491 XGMAC_IOWRITE_BITS(pdata, MMC_CR, MCF, 0); in xgbe_read_mmc_stats()
2494 static void xgbe_config_mmc(struct xgbe_prv_data *pdata) in xgbe_config_mmc() argument
2497 XGMAC_IOWRITE_BITS(pdata, MMC_CR, ROR, 1); in xgbe_config_mmc()
2500 XGMAC_IOWRITE_BITS(pdata, MMC_CR, CR, 1); in xgbe_config_mmc()
2503 static void xgbe_prepare_tx_stop(struct xgbe_prv_data *pdata, in xgbe_prepare_tx_stop() argument
2529 tx_status = XGMAC_IOREAD(pdata, tx_dsr); in xgbe_prepare_tx_stop()
2539 netdev_info(pdata->netdev, in xgbe_prepare_tx_stop()
2544 static void xgbe_enable_tx(struct xgbe_prv_data *pdata) in xgbe_enable_tx() argument
2550 channel = pdata->channel; in xgbe_enable_tx()
2551 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_enable_tx()
2559 for (i = 0; i < pdata->tx_q_count; i++) in xgbe_enable_tx()
2560 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, TXQEN, in xgbe_enable_tx()
2564 XGMAC_IOWRITE_BITS(pdata, MAC_TCR, TE, 1); in xgbe_enable_tx()
2567 static void xgbe_disable_tx(struct xgbe_prv_data *pdata) in xgbe_disable_tx() argument
2573 channel = pdata->channel; in xgbe_disable_tx()
2574 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_disable_tx()
2578 xgbe_prepare_tx_stop(pdata, channel); in xgbe_disable_tx()
2582 XGMAC_IOWRITE_BITS(pdata, MAC_TCR, TE, 0); in xgbe_disable_tx()
2585 for (i = 0; i < pdata->tx_q_count; i++) in xgbe_disable_tx()
2586 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, TXQEN, 0); in xgbe_disable_tx()
2589 channel = pdata->channel; in xgbe_disable_tx()
2590 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_disable_tx()
2598 static void xgbe_enable_rx(struct xgbe_prv_data *pdata) in xgbe_enable_rx() argument
2604 channel = pdata->channel; in xgbe_enable_rx()
2605 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_enable_rx()
2614 for (i = 0; i < pdata->rx_q_count; i++) in xgbe_enable_rx()
2616 XGMAC_IOWRITE(pdata, MAC_RQC0R, reg_val); in xgbe_enable_rx()
2619 XGMAC_IOWRITE_BITS(pdata, MAC_RCR, DCRCC, 1); in xgbe_enable_rx()
2620 XGMAC_IOWRITE_BITS(pdata, MAC_RCR, CST, 1); in xgbe_enable_rx()
2621 XGMAC_IOWRITE_BITS(pdata, MAC_RCR, ACS, 1); in xgbe_enable_rx()
2622 XGMAC_IOWRITE_BITS(pdata, MAC_RCR, RE, 1); in xgbe_enable_rx()
2625 static void xgbe_disable_rx(struct xgbe_prv_data *pdata) in xgbe_disable_rx() argument
2631 XGMAC_IOWRITE_BITS(pdata, MAC_RCR, DCRCC, 0); in xgbe_disable_rx()
2632 XGMAC_IOWRITE_BITS(pdata, MAC_RCR, CST, 0); in xgbe_disable_rx()
2633 XGMAC_IOWRITE_BITS(pdata, MAC_RCR, ACS, 0); in xgbe_disable_rx()
2634 XGMAC_IOWRITE_BITS(pdata, MAC_RCR, RE, 0); in xgbe_disable_rx()
2637 XGMAC_IOWRITE(pdata, MAC_RQC0R, 0); in xgbe_disable_rx()
2640 channel = pdata->channel; in xgbe_disable_rx()
2641 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_disable_rx()
2649 static void xgbe_powerup_tx(struct xgbe_prv_data *pdata) in xgbe_powerup_tx() argument
2655 channel = pdata->channel; in xgbe_powerup_tx()
2656 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_powerup_tx()
2664 XGMAC_IOWRITE_BITS(pdata, MAC_TCR, TE, 1); in xgbe_powerup_tx()
2667 static void xgbe_powerdown_tx(struct xgbe_prv_data *pdata) in xgbe_powerdown_tx() argument
2673 channel = pdata->channel; in xgbe_powerdown_tx()
2674 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_powerdown_tx()
2678 xgbe_prepare_tx_stop(pdata, channel); in xgbe_powerdown_tx()
2682 XGMAC_IOWRITE_BITS(pdata, MAC_TCR, TE, 0); in xgbe_powerdown_tx()
2685 channel = pdata->channel; in xgbe_powerdown_tx()
2686 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_powerdown_tx()
2694 static void xgbe_powerup_rx(struct xgbe_prv_data *pdata) in xgbe_powerup_rx() argument
2700 channel = pdata->channel; in xgbe_powerup_rx()
2701 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_powerup_rx()
2709 static void xgbe_powerdown_rx(struct xgbe_prv_data *pdata) in xgbe_powerdown_rx() argument
2715 channel = pdata->channel; in xgbe_powerdown_rx()
2716 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_powerdown_rx()
2724 static int xgbe_init(struct xgbe_prv_data *pdata) in xgbe_init() argument
2726 struct xgbe_desc_if *desc_if = &pdata->desc_if; in xgbe_init()
2732 ret = xgbe_flush_tx_queues(pdata); in xgbe_init()
2739 xgbe_config_dma_bus(pdata); in xgbe_init()
2740 xgbe_config_dma_cache(pdata); in xgbe_init()
2741 xgbe_config_osp_mode(pdata); in xgbe_init()
2742 xgbe_config_pblx8(pdata); in xgbe_init()
2743 xgbe_config_tx_pbl_val(pdata); in xgbe_init()
2744 xgbe_config_rx_pbl_val(pdata); in xgbe_init()
2745 xgbe_config_rx_coalesce(pdata); in xgbe_init()
2746 xgbe_config_tx_coalesce(pdata); in xgbe_init()
2747 xgbe_config_rx_buffer_size(pdata); in xgbe_init()
2748 xgbe_config_tso_mode(pdata); in xgbe_init()
2749 xgbe_config_sph_mode(pdata); in xgbe_init()
2750 xgbe_config_rss(pdata); in xgbe_init()
2751 desc_if->wrapper_tx_desc_init(pdata); in xgbe_init()
2752 desc_if->wrapper_rx_desc_init(pdata); in xgbe_init()
2753 xgbe_enable_dma_interrupts(pdata); in xgbe_init()
2758 xgbe_config_mtl_mode(pdata); in xgbe_init()
2759 xgbe_config_queue_mapping(pdata); in xgbe_init()
2760 xgbe_config_tsf_mode(pdata, pdata->tx_sf_mode); in xgbe_init()
2761 xgbe_config_rsf_mode(pdata, pdata->rx_sf_mode); in xgbe_init()
2762 xgbe_config_tx_threshold(pdata, pdata->tx_threshold); in xgbe_init()
2763 xgbe_config_rx_threshold(pdata, pdata->rx_threshold); in xgbe_init()
2764 xgbe_config_tx_fifo_size(pdata); in xgbe_init()
2765 xgbe_config_rx_fifo_size(pdata); in xgbe_init()
2766 xgbe_config_flow_control_threshold(pdata); in xgbe_init()
2770 xgbe_config_dcb_tc(pdata); in xgbe_init()
2771 xgbe_config_dcb_pfc(pdata); in xgbe_init()
2772 xgbe_enable_mtl_interrupts(pdata); in xgbe_init()
2777 xgbe_config_mac_address(pdata); in xgbe_init()
2778 xgbe_config_rx_mode(pdata); in xgbe_init()
2779 xgbe_config_jumbo_enable(pdata); in xgbe_init()
2780 xgbe_config_flow_control(pdata); in xgbe_init()
2781 xgbe_config_mac_speed(pdata); in xgbe_init()
2782 xgbe_config_checksum_offload(pdata); in xgbe_init()
2783 xgbe_config_vlan_support(pdata); in xgbe_init()
2784 xgbe_config_mmc(pdata); in xgbe_init()
2785 xgbe_enable_mac_interrupts(pdata); in xgbe_init()