Lines Matching full:si
15 static void enetc_pf_get_primary_mac_addr(struct enetc_hw *hw, int si, u8 *addr) in enetc_pf_get_primary_mac_addr() argument
17 u32 upper = __raw_readl(hw->port + ENETC_PSIPMAR0(si)); in enetc_pf_get_primary_mac_addr()
18 u16 lower = __raw_readw(hw->port + ENETC_PSIPMAR1(si)); in enetc_pf_get_primary_mac_addr()
24 static void enetc_pf_set_primary_mac_addr(struct enetc_hw *hw, int si, in enetc_pf_set_primary_mac_addr() argument
30 __raw_writel(upper, hw->port + ENETC_PSIPMAR0(si)); in enetc_pf_set_primary_mac_addr()
31 __raw_writew(lower, hw->port + ENETC_PSIPMAR1(si)); in enetc_pf_set_primary_mac_addr()
56 enetc_set_vlan_promisc(&pf->si->hw, pf->vlan_promisc_simap); in enetc_enable_si_vlan_promisc()
62 enetc_set_vlan_promisc(&pf->si->hw, pf->vlan_promisc_simap); in enetc_disable_si_vlan_promisc()
65 static void enetc_set_isol_vlan(struct enetc_hw *hw, int si, u16 vlan, u8 qos) in enetc_set_isol_vlan() argument
72 enetc_port_wr(hw, ENETC_PSIVLANR(si), val); in enetc_set_isol_vlan()
117 static void enetc_clear_mac_ht_flt(struct enetc_si *si, int si_idx, int type) in enetc_clear_mac_ht_flt() argument
119 bool err = si->errata & ENETC_ERR_UCMCSWP; in enetc_clear_mac_ht_flt()
122 enetc_port_wr(&si->hw, ENETC_PSIUMHFR0(si_idx, err), 0); in enetc_clear_mac_ht_flt()
123 enetc_port_wr(&si->hw, ENETC_PSIUMHFR1(si_idx), 0); in enetc_clear_mac_ht_flt()
125 enetc_port_wr(&si->hw, ENETC_PSIMMHFR0(si_idx, err), 0); in enetc_clear_mac_ht_flt()
126 enetc_port_wr(&si->hw, ENETC_PSIMMHFR1(si_idx), 0); in enetc_clear_mac_ht_flt()
130 static void enetc_set_mac_ht_flt(struct enetc_si *si, int si_idx, int type, in enetc_set_mac_ht_flt() argument
133 bool err = si->errata & ENETC_ERR_UCMCSWP; in enetc_set_mac_ht_flt()
136 enetc_port_wr(&si->hw, ENETC_PSIUMHFR0(si_idx, err), in enetc_set_mac_ht_flt()
138 enetc_port_wr(&si->hw, ENETC_PSIUMHFR1(si_idx), in enetc_set_mac_ht_flt()
141 enetc_port_wr(&si->hw, ENETC_PSIMMHFR0(si_idx, err), in enetc_set_mac_ht_flt()
143 enetc_port_wr(&si->hw, ENETC_PSIMMHFR1(si_idx), in enetc_set_mac_ht_flt()
151 struct enetc_si *si = pf->si; in enetc_sync_mac_filters() local
162 enetc_clear_mac_flt_entry(si, pos); in enetc_sync_mac_filters()
164 enetc_clear_mac_ht_flt(si, 0, i); in enetc_sync_mac_filters()
172 enetc_clear_mac_ht_flt(si, 0, UC); in enetc_sync_mac_filters()
174 err = enetc_set_mac_flt_entry(si, pos, f->mac_addr, in enetc_sync_mac_filters()
180 dev_warn(&si->pdev->dev, "fallback to HT filt (%d)\n", in enetc_sync_mac_filters()
186 enetc_clear_mac_flt_entry(si, pos); in enetc_sync_mac_filters()
188 enetc_set_mac_ht_flt(si, 0, i, *f->mac_hash_table); in enetc_sync_mac_filters()
195 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_rx_mode()
196 struct enetc_hw *hw = &priv->si->hw; in enetc_pf_set_rx_mode()
285 enetc_set_vlan_ht_filter(&pf->si->hw, 0, *pf->vlan_ht_filter); in enetc_sync_vlan_ht_filter()
291 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_vlan_rx_add_vid()
306 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_vlan_rx_del_vid()
317 struct enetc_si *si = priv->si; in enetc_set_loopback() local
320 reg = enetc_port_mac_rd(si, ENETC_PM0_IF_MODE); in enetc_set_loopback()
325 enetc_port_mac_wr(si, ENETC_PM0_IF_MODE, reg); in enetc_set_loopback()
328 reg = enetc_port_mac_rd(si, ENETC_PM0_CMD_CFG); in enetc_set_loopback()
333 enetc_port_mac_wr(si, ENETC_PM0_CMD_CFG, reg); in enetc_set_loopback()
340 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_vf_mac()
351 enetc_pf_set_primary_mac_addr(&priv->si->hw, vf + 1, mac); in enetc_pf_set_vf_mac()
359 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_vf_vlan()
361 if (priv->si->errata & ENETC_ERR_VLAN_ISOL) in enetc_pf_set_vf_vlan()
371 enetc_set_isol_vlan(&priv->si->hw, vf + 1, vlan, qos); in enetc_pf_set_vf_vlan()
378 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_vf_spoofchk()
384 cfgr = enetc_port_rd(&priv->si->hw, ENETC_PSICFGR0(vf + 1)); in enetc_pf_set_vf_spoofchk()
386 enetc_port_wr(&priv->si->hw, ENETC_PSICFGR0(vf + 1), cfgr); in enetc_pf_set_vf_spoofchk()
391 static void enetc_port_assign_rfs_entries(struct enetc_si *si) in enetc_port_assign_rfs_entries() argument
393 struct enetc_pf *pf = enetc_si_priv(si); in enetc_port_assign_rfs_entries()
394 struct enetc_hw *hw = &si->hw; in enetc_port_assign_rfs_entries()
412 static void enetc_port_get_caps(struct enetc_si *si) in enetc_port_get_caps() argument
414 struct enetc_hw *hw = &si->hw; in enetc_port_get_caps()
420 si->hw_features |= ENETC_SI_F_QBV; in enetc_port_get_caps()
423 si->hw_features |= ENETC_SI_F_QBU; in enetc_port_get_caps()
426 si->hw_features |= ENETC_SI_F_PSFP; in enetc_port_get_caps()
429 static void enetc_port_si_configure(struct enetc_si *si) in enetc_port_si_configure() argument
431 struct enetc_pf *pf = enetc_si_priv(si); in enetc_port_si_configure()
432 struct enetc_hw *hw = &si->hw; in enetc_port_si_configure()
436 enetc_port_get_caps(si); in enetc_port_si_configure()
448 dev_warn(&si->pdev->dev, "Found %d rings, expected %d!\n", in enetc_port_si_configure()
504 static void enetc_configure_port_mac(struct enetc_si *si) in enetc_configure_port_mac() argument
506 struct enetc_hw *hw = &si->hw; in enetc_configure_port_mac()
508 enetc_port_mac_wr(si, ENETC_PM0_MAXFRM, in enetc_configure_port_mac()
513 enetc_port_mac_wr(si, ENETC_PM0_CMD_CFG, ENETC_PM0_CMD_PHY_TX_EN | in enetc_configure_port_mac()
520 enetc_port_mac_wr(si, ENETC_PM0_RX_FIFO, ENETC_PM0_RX_FIFO_VAL); in enetc_configure_port_mac()
523 static void enetc_mac_config(struct enetc_si *si, phy_interface_t phy_mode) in enetc_mac_config() argument
528 val = enetc_port_mac_rd(si, ENETC_PM0_IF_MODE); in enetc_mac_config()
531 enetc_port_mac_wr(si, ENETC_PM0_IF_MODE, val); in enetc_mac_config()
536 enetc_port_mac_wr(si, ENETC_PM0_IF_MODE, val); in enetc_mac_config()
540 static void enetc_mac_enable(struct enetc_si *si, bool en) in enetc_mac_enable() argument
542 u32 val = enetc_port_mac_rd(si, ENETC_PM0_CMD_CFG); in enetc_mac_enable()
547 enetc_port_mac_wr(si, ENETC_PM0_CMD_CFG, val); in enetc_mac_enable()
553 struct enetc_hw *hw = &pf->si->hw; in enetc_configure_port()
555 enetc_configure_port_mac(pf->si); in enetc_configure_port()
557 enetc_port_si_configure(pf->si); in enetc_configure_port()
564 enetc_port_assign_rfs_entries(pf->si); in enetc_configure_port()
583 struct device *dev = &pf->si->pdev->dev; in enetc_msg_pf_set_vf_primary_mac_addr()
597 enetc_pf_set_primary_mac_addr(&pf->si->hw, vf_id + 1, addr); in enetc_msg_pf_set_vf_primary_mac_addr()
605 struct device *dev = &pf->si->pdev->dev; in enetc_msg_handle_rxmsg()
626 struct enetc_si *si = pci_get_drvdata(pdev); in enetc_sriov_configure() local
627 struct enetc_pf *pf = enetc_si_priv(si); in enetc_sriov_configure()
677 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_features()
747 enetc_mac_config(pf->si, state->interface); in enetc_pl_mac_config()
750 static void enetc_force_rgmii_mac(struct enetc_si *si, int speed, int duplex) in enetc_force_rgmii_mac() argument
754 old_val = val = enetc_port_mac_rd(si, ENETC_PM0_IF_MODE); in enetc_force_rgmii_mac()
775 enetc_port_mac_wr(si, ENETC_PM0_IF_MODE, val); in enetc_force_rgmii_mac()
786 struct enetc_hw *hw = &pf->si->hw; in enetc_pl_mac_link_up()
787 struct enetc_si *si = pf->si; in enetc_pl_mac_link_up() local
792 priv = netdev_priv(pf->si->ndev); in enetc_pl_mac_link_up()
794 if (pf->si->hw_features & ENETC_SI_F_QBV) in enetc_pl_mac_link_up()
799 enetc_force_rgmii_mac(si, speed, duplex); in enetc_pl_mac_link_up()
835 enetc_port_mac_wr(si, ENETC_PM0_PAUSE_QUANTA, init_quanta); in enetc_pl_mac_link_up()
836 enetc_port_mac_wr(si, ENETC_PM0_PAUSE_THRESH, refresh_quanta); in enetc_pl_mac_link_up()
840 cmd_cfg = enetc_port_mac_rd(si, ENETC_PM0_CMD_CFG); in enetc_pl_mac_link_up()
847 enetc_port_mac_wr(si, ENETC_PM0_CMD_CFG, cmd_cfg); in enetc_pl_mac_link_up()
849 enetc_mac_enable(si, true); in enetc_pl_mac_link_up()
851 if (si->hw_features & ENETC_SI_F_QBU) in enetc_pl_mac_link_up()
860 struct enetc_si *si = pf->si; in enetc_pl_mac_link_down() local
863 priv = netdev_priv(si->ndev); in enetc_pl_mac_link_down()
865 if (si->hw_features & ENETC_SI_F_QBU) in enetc_pl_mac_link_down()
868 enetc_mac_enable(si, false); in enetc_pl_mac_link_down()
881 static int enetc_init_port_rfs_memory(struct enetc_si *si) in enetc_init_port_rfs_memory() argument
884 struct enetc_hw *hw = &si->hw; in enetc_init_port_rfs_memory()
892 err = enetc_set_fs_entry(si, &rfse, i); in enetc_init_port_rfs_memory()
900 static int enetc_init_port_rss_memory(struct enetc_si *si) in enetc_init_port_rss_memory() argument
902 struct enetc_hw *hw = &si->hw; in enetc_init_port_rss_memory()
916 err = enetc_set_rss_table(si, rss_table, num_rss); in enetc_init_port_rss_memory()
944 struct enetc_si *si; in enetc_psi_create() local
953 si = pci_get_drvdata(pdev); in enetc_psi_create()
954 if (!si->hw.port || !si->hw.global) { in enetc_psi_create()
960 si->revision = enetc_get_ip_revision(&si->hw); in enetc_psi_create()
961 err = enetc_get_driver_data(si); in enetc_psi_create()
967 err = enetc_setup_cbdr(&pdev->dev, &si->hw, ENETC_CBDR_DEFAULT_SIZE, in enetc_psi_create()
968 &si->cbd_ring); in enetc_psi_create()
972 err = enetc_init_port_rfs_memory(si); in enetc_psi_create()
978 err = enetc_init_port_rss_memory(si); in enetc_psi_create()
984 return si; in enetc_psi_create()
987 enetc_teardown_cbdr(&si->cbd_ring); in enetc_psi_create()
996 struct enetc_si *si = pci_get_drvdata(pdev); in enetc_psi_destroy() local
998 enetc_teardown_cbdr(&si->cbd_ring); in enetc_psi_destroy()
1016 struct enetc_si *si; in enetc_pf_probe() local
1028 si = enetc_psi_create(pdev); in enetc_pf_probe()
1029 if (IS_ERR(si)) { in enetc_pf_probe()
1030 err = PTR_ERR(si); in enetc_pf_probe()
1034 pf = enetc_si_priv(si); in enetc_pf_probe()
1035 pf->si = si; in enetc_pf_probe()
1052 enetc_get_si_caps(si); in enetc_pf_probe()
1061 enetc_pf_netdev_setup(si, ndev, &enetc_ndev_ops); in enetc_pf_probe()
1071 dev_err(&pdev->dev, "SI resource alloc failed\n"); in enetc_pf_probe()
1077 dev_err(&pdev->dev, "Failed to configure SI\n"); in enetc_pf_probe()
1118 si->ndev = NULL; in enetc_pf_probe()
1131 struct enetc_si *si = pci_get_drvdata(pdev); in enetc_pf_remove() local
1132 struct enetc_pf *pf = enetc_si_priv(si); in enetc_pf_remove()
1135 priv = netdev_priv(si->ndev); in enetc_pf_remove()
1140 unregister_netdev(si->ndev); in enetc_pf_remove()
1149 free_netdev(si->ndev); in enetc_pf_remove()
1158 struct enetc_si *si; in enetc_fixup_clear_rss_rfs() local
1166 si = enetc_psi_create(pdev); in enetc_fixup_clear_rss_rfs()
1167 if (!IS_ERR(si)) in enetc_fixup_clear_rss_rfs()