Lines Matching full:pf
14 static void enetc4_get_port_caps(struct enetc_pf *pf) in enetc4_get_port_caps() argument
16 struct enetc_hw *hw = &pf->si->hw; in enetc4_get_port_caps()
20 pf->caps.num_vsi = (val & ECAPR1_NUM_VSI) >> 24; in enetc4_get_port_caps()
21 pf->caps.num_msix = ((val & ECAPR1_NUM_MSIX) >> 12) + 1; in enetc4_get_port_caps()
24 pf->caps.num_rx_bdr = (val & ECAPR2_NUM_RX_BDR) >> 16; in enetc4_get_port_caps()
25 pf->caps.num_tx_bdr = val & ECAPR2_NUM_TX_BDR; in enetc4_get_port_caps()
28 pf->caps.half_duplex = (val & PMCAPR_HD) ? 1 : 0; in enetc4_get_port_caps()
66 struct enetc_pf *pf = enetc_si_priv(si); in enetc4_pf_struct_init() local
68 pf->si = si; in enetc4_pf_struct_init()
69 pf->total_vfs = pci_sriov_get_totalvfs(si->pdev); in enetc4_pf_struct_init()
70 pf->ops = &enetc4_pf_ops; in enetc4_pf_struct_init()
72 enetc4_get_port_caps(pf); in enetc4_pf_struct_init()
91 static void enetc4_default_rings_allocation(struct enetc_pf *pf) in enetc4_default_rings_allocation() argument
93 struct enetc_hw *hw = &pf->si->hw; in enetc4_default_rings_allocation()
98 if (pf->caps.num_rx_bdr < ENETC_SI_MAX_RING_NUM + pf->caps.num_vsi) in enetc4_default_rings_allocation()
99 num_rx_bdr = pf->caps.num_rx_bdr - pf->caps.num_vsi; in enetc4_default_rings_allocation()
103 if (pf->caps.num_tx_bdr < ENETC_SI_MAX_RING_NUM + pf->caps.num_vsi) in enetc4_default_rings_allocation()
104 num_tx_bdr = pf->caps.num_tx_bdr - pf->caps.num_vsi; in enetc4_default_rings_allocation()
111 num_rx_bdr = pf->caps.num_rx_bdr - num_rx_bdr; in enetc4_default_rings_allocation()
112 rx_rem = num_rx_bdr % pf->caps.num_vsi; in enetc4_default_rings_allocation()
113 num_rx_bdr = num_rx_bdr / pf->caps.num_vsi; in enetc4_default_rings_allocation()
115 num_tx_bdr = pf->caps.num_tx_bdr - num_tx_bdr; in enetc4_default_rings_allocation()
116 tx_rem = num_tx_bdr % pf->caps.num_vsi; in enetc4_default_rings_allocation()
117 num_tx_bdr = num_tx_bdr / pf->caps.num_vsi; in enetc4_default_rings_allocation()
119 for (i = 0; i < pf->caps.num_vsi; i++) { in enetc4_default_rings_allocation()
127 static void enetc4_allocate_si_rings(struct enetc_pf *pf) in enetc4_allocate_si_rings() argument
129 enetc4_default_rings_allocation(pf); in enetc4_allocate_si_rings()
144 static void enetc4_set_default_si_vlan_promisc(struct enetc_pf *pf) in enetc4_set_default_si_vlan_promisc() argument
146 struct enetc_hw *hw = &pf->si->hw; in enetc4_set_default_si_vlan_promisc()
147 int num_si = pf->caps.num_vsi + 1; in enetc4_set_default_si_vlan_promisc()
156 static void enetc4_set_si_msix_num(struct enetc_pf *pf) in enetc4_set_si_msix_num() argument
158 struct enetc_hw *hw = &pf->si->hw; in enetc4_set_si_msix_num()
162 total_si = pf->caps.num_vsi + 1; in enetc4_set_si_msix_num()
164 num_msix = pf->caps.num_msix / total_si + in enetc4_set_si_msix_num()
165 pf->caps.num_msix % total_si - 1; in enetc4_set_si_msix_num()
169 num_msix = pf->caps.num_msix / total_si - 1; in enetc4_set_si_msix_num()
171 for (i = 0; i < pf->caps.num_vsi; i++) in enetc4_set_si_msix_num()
175 static void enetc4_enable_all_si(struct enetc_pf *pf) in enetc4_enable_all_si() argument
177 struct enetc_hw *hw = &pf->si->hw; in enetc4_enable_all_si()
178 int num_si = pf->caps.num_vsi + 1; in enetc4_enable_all_si()
189 static void enetc4_configure_port_si(struct enetc_pf *pf) in enetc4_configure_port_si() argument
191 struct enetc_hw *hw = &pf->si->hw; in enetc4_configure_port_si()
193 enetc4_allocate_si_rings(pf); in enetc4_configure_port_si()
198 enetc4_set_default_si_vlan_promisc(pf); in enetc4_configure_port_si()
203 enetc4_set_si_msix_num(pf); in enetc4_configure_port_si()
205 enetc4_enable_all_si(pf); in enetc4_configure_port_si()
219 static void enetc4_set_trx_frame_size(struct enetc_pf *pf) in enetc4_set_trx_frame_size() argument
221 struct enetc_si *si = pf->si; in enetc4_set_trx_frame_size()
237 static void enetc4_set_default_rss_key(struct enetc_pf *pf) in enetc4_set_default_rss_key() argument
240 struct enetc_hw *hw = &pf->si->hw; in enetc4_set_default_rss_key()
247 static void enetc4_enable_trx(struct enetc_pf *pf) in enetc4_enable_trx() argument
249 struct enetc_hw *hw = &pf->si->hw; in enetc4_enable_trx()
255 static void enetc4_configure_port(struct enetc_pf *pf) in enetc4_configure_port() argument
257 enetc4_configure_port_si(pf); in enetc4_configure_port()
258 enetc4_set_trx_frame_size(pf); in enetc4_configure_port()
259 enetc4_set_default_rss_key(pf); in enetc4_configure_port()
260 enetc4_enable_trx(pf); in enetc4_configure_port()
263 static int enetc4_pf_init(struct enetc_pf *pf) in enetc4_pf_init() argument
265 struct device *dev = &pf->si->pdev->dev; in enetc4_pf_init()
268 /* Initialize the MAC address for PF and VFs */ in enetc4_pf_init()
269 err = enetc_setup_mac_addresses(dev->of_node, pf); in enetc4_pf_init()
275 enetc4_configure_port(pf); in enetc4_pf_init()
291 struct enetc_pf *pf = phylink_to_enetc_pf(config); in enetc4_pl_mac_select_pcs() local
293 return pf->pcs; in enetc4_pl_mac_select_pcs()
296 static void enetc4_mac_config(struct enetc_pf *pf, unsigned int mode, in enetc4_mac_config() argument
299 struct enetc_ndev_priv *priv = netdev_priv(pf->si->ndev); in enetc4_mac_config()
300 struct enetc_si *si = pf->si; in enetc4_mac_config()
342 struct enetc_pf *pf = phylink_to_enetc_pf(config); in enetc4_pl_mac_config() local
344 enetc4_mac_config(pf, mode, state->interface); in enetc4_pl_mac_config()
374 static void enetc4_set_rgmii_mac(struct enetc_pf *pf, int speed, int duplex) in enetc4_set_rgmii_mac() argument
376 struct enetc_si *si = pf->si; in enetc4_set_rgmii_mac()
402 static void enetc4_set_rmii_mac(struct enetc_pf *pf, int speed, int duplex) in enetc4_set_rmii_mac() argument
404 struct enetc_si *si = pf->si; in enetc4_set_rmii_mac()
427 static void enetc4_set_hd_flow_control(struct enetc_pf *pf, bool enable) in enetc4_set_hd_flow_control() argument
429 struct enetc_si *si = pf->si; in enetc4_set_hd_flow_control()
432 if (!pf->caps.half_duplex) in enetc4_set_hd_flow_control()
443 static void enetc4_set_rx_pause(struct enetc_pf *pf, bool rx_pause) in enetc4_set_rx_pause() argument
445 struct enetc_si *si = pf->si; in enetc4_set_rx_pause()
456 static void enetc4_set_tx_pause(struct enetc_pf *pf, int num_rxbdr, bool tx_pause) in enetc4_set_tx_pause() argument
460 struct enetc_hw *hw = &pf->si->hw; in enetc4_set_tx_pause()
495 enetc_port_mac_wr(pf->si, ENETC4_PM_PAUSE_QUANTA(0), init_quanta); in enetc4_set_tx_pause()
496 enetc_port_mac_wr(pf->si, ENETC4_PM_PAUSE_THRESH(0), refresh_quanta); in enetc4_set_tx_pause()
501 static void enetc4_enable_mac(struct enetc_pf *pf, bool en) in enetc4_enable_mac() argument
503 struct enetc_si *si = pf->si; in enetc4_enable_mac()
518 struct enetc_pf *pf = phylink_to_enetc_pf(config); in enetc4_pl_mac_link_up() local
519 struct enetc_si *si = pf->si; in enetc4_pl_mac_link_up()
528 enetc4_set_rgmii_mac(pf, speed, duplex); in enetc4_pl_mac_link_up()
531 enetc4_set_rmii_mac(pf, speed, duplex); in enetc4_pl_mac_link_up()
550 enetc4_set_hd_flow_control(pf, hd_fc); in enetc4_pl_mac_link_up()
551 enetc4_set_tx_pause(pf, priv->num_rx_rings, tx_pause); in enetc4_pl_mac_link_up()
552 enetc4_set_rx_pause(pf, rx_pause); in enetc4_pl_mac_link_up()
553 enetc4_enable_mac(pf, true); in enetc4_pl_mac_link_up()
560 struct enetc_pf *pf = phylink_to_enetc_pf(config); in enetc4_pl_mac_link_down() local
562 enetc4_enable_mac(pf, false); in enetc4_pl_mac_link_down()
582 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc4_link_init() local
586 err = of_get_phy_mode(node, &pf->if_mode); in enetc4_link_init()
592 err = enetc_mdiobus_create(pf, node); in enetc4_link_init()
607 enetc_mdiobus_destroy(pf); in enetc4_link_init()
614 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc4_link_deinit() local
617 enetc_mdiobus_destroy(pf); in enetc4_link_deinit()
696 struct enetc_pf *pf; in enetc4_pf_probe() local
699 err = enetc_pci_probe(pdev, KBUILD_MODNAME, sizeof(*pf)); in enetc4_pf_probe()
712 "Couldn't map PF only space\n"); in enetc4_pf_probe()
724 pf = enetc_si_priv(si); in enetc4_pf_probe()
725 err = enetc4_pf_init(pf); in enetc4_pf_probe()
755 MODULE_DESCRIPTION("ENETC4 PF Driver");