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()
83 static void enetc_clear_mac_ht_flt(struct enetc_si *si, int si_idx, int type) in enetc_clear_mac_ht_flt() argument
85 bool err = si->errata & ENETC_ERR_UCMCSWP; in enetc_clear_mac_ht_flt()
88 enetc_port_wr(&si->hw, ENETC_PSIUMHFR0(si_idx, err), 0); in enetc_clear_mac_ht_flt()
89 enetc_port_wr(&si->hw, ENETC_PSIUMHFR1(si_idx), 0); in enetc_clear_mac_ht_flt()
91 enetc_port_wr(&si->hw, ENETC_PSIMMHFR0(si_idx, err), 0); in enetc_clear_mac_ht_flt()
92 enetc_port_wr(&si->hw, ENETC_PSIMMHFR1(si_idx), 0); in enetc_clear_mac_ht_flt()
96 static void enetc_set_mac_ht_flt(struct enetc_si *si, int si_idx, int type, in enetc_set_mac_ht_flt() argument
99 bool err = si->errata & ENETC_ERR_UCMCSWP; in enetc_set_mac_ht_flt()
102 enetc_port_wr(&si->hw, ENETC_PSIUMHFR0(si_idx, err), in enetc_set_mac_ht_flt()
104 enetc_port_wr(&si->hw, ENETC_PSIUMHFR1(si_idx), in enetc_set_mac_ht_flt()
107 enetc_port_wr(&si->hw, ENETC_PSIMMHFR0(si_idx, err), in enetc_set_mac_ht_flt()
109 enetc_port_wr(&si->hw, ENETC_PSIMMHFR1(si_idx), in enetc_set_mac_ht_flt()
117 struct enetc_si *si = pf->si; in enetc_sync_mac_filters() local
128 enetc_clear_mac_flt_entry(si, pos); in enetc_sync_mac_filters()
130 enetc_clear_mac_ht_flt(si, 0, i); in enetc_sync_mac_filters()
138 enetc_clear_mac_ht_flt(si, 0, UC); in enetc_sync_mac_filters()
140 err = enetc_set_mac_flt_entry(si, pos, f->mac_addr, in enetc_sync_mac_filters()
146 dev_warn(&si->pdev->dev, "fallback to HT filt (%d)\n", in enetc_sync_mac_filters()
152 enetc_clear_mac_flt_entry(si, pos); in enetc_sync_mac_filters()
154 enetc_set_mac_ht_flt(si, 0, i, *f->mac_hash_table); in enetc_sync_mac_filters()
161 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_rx_mode()
162 struct enetc_hw *hw = &priv->si->hw; in enetc_pf_set_rx_mode()
222 struct enetc_si *si = priv->si; in enetc_set_loopback() local
225 reg = enetc_port_mac_rd(si, ENETC_PM0_IF_MODE); in enetc_set_loopback()
230 enetc_port_mac_wr(si, ENETC_PM0_IF_MODE, reg); in enetc_set_loopback()
233 reg = enetc_port_mac_rd(si, ENETC_PM0_CMD_CFG); in enetc_set_loopback()
238 enetc_port_mac_wr(si, ENETC_PM0_CMD_CFG, reg); in enetc_set_loopback()
245 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_vf_mac()
256 enetc_pf_set_primary_mac_addr(&priv->si->hw, vf + 1, mac); in enetc_pf_set_vf_mac()
264 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_vf_vlan()
266 if (priv->si->errata & ENETC_ERR_VLAN_ISOL) in enetc_pf_set_vf_vlan()
276 enetc_set_isol_vlan(&priv->si->hw, vf + 1, vlan, qos); in enetc_pf_set_vf_vlan()
283 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_vf_spoofchk()
289 cfgr = enetc_port_rd(&priv->si->hw, ENETC_PSICFGR0(vf + 1)); in enetc_pf_set_vf_spoofchk()
291 enetc_port_wr(&priv->si->hw, ENETC_PSICFGR0(vf + 1), cfgr); in enetc_pf_set_vf_spoofchk()
296 static void enetc_port_assign_rfs_entries(struct enetc_si *si) in enetc_port_assign_rfs_entries() argument
298 struct enetc_pf *pf = enetc_si_priv(si); in enetc_port_assign_rfs_entries()
299 struct enetc_hw *hw = &si->hw; in enetc_port_assign_rfs_entries()
317 static void enetc_port_get_caps(struct enetc_si *si) in enetc_port_get_caps() argument
319 struct enetc_hw *hw = &si->hw; in enetc_port_get_caps()
325 si->hw_features |= ENETC_SI_F_QBV; in enetc_port_get_caps()
328 si->hw_features |= ENETC_SI_F_QBU; in enetc_port_get_caps()
331 si->hw_features |= ENETC_SI_F_PSFP; in enetc_port_get_caps()
334 static void enetc_port_si_configure(struct enetc_si *si) in enetc_port_si_configure() argument
336 struct enetc_pf *pf = enetc_si_priv(si); in enetc_port_si_configure()
337 struct enetc_hw *hw = &si->hw; in enetc_port_si_configure()
341 enetc_port_get_caps(si); in enetc_port_si_configure()
353 dev_warn(&si->pdev->dev, "Found %d rings, expected %d!\n", in enetc_port_si_configure()
409 static void enetc_configure_port_mac(struct enetc_si *si) in enetc_configure_port_mac() argument
411 struct enetc_hw *hw = &si->hw; in enetc_configure_port_mac()
413 enetc_port_mac_wr(si, ENETC_PM0_MAXFRM, in enetc_configure_port_mac()
418 enetc_port_mac_wr(si, ENETC_PM0_CMD_CFG, ENETC_PM0_CMD_PHY_TX_EN | in enetc_configure_port_mac()
425 enetc_port_mac_wr(si, ENETC_PM0_RX_FIFO, ENETC_PM0_RX_FIFO_VAL); in enetc_configure_port_mac()
428 static void enetc_mac_config(struct enetc_si *si, phy_interface_t phy_mode) in enetc_mac_config() argument
433 val = enetc_port_mac_rd(si, ENETC_PM0_IF_MODE); in enetc_mac_config()
436 enetc_port_mac_wr(si, ENETC_PM0_IF_MODE, val); in enetc_mac_config()
441 enetc_port_mac_wr(si, ENETC_PM0_IF_MODE, val); in enetc_mac_config()
445 static void enetc_mac_enable(struct enetc_si *si, bool en) in enetc_mac_enable() argument
447 u32 val = enetc_port_mac_rd(si, ENETC_PM0_CMD_CFG); in enetc_mac_enable()
452 enetc_port_mac_wr(si, ENETC_PM0_CMD_CFG, val); in enetc_mac_enable()
457 struct enetc_hw *hw = &pf->si->hw; in enetc_configure_port()
459 enetc_configure_port_mac(pf->si); in enetc_configure_port()
461 enetc_port_si_configure(pf->si); in enetc_configure_port()
467 enetc_port_assign_rfs_entries(pf->si); in enetc_configure_port()
486 struct device *dev = &pf->si->pdev->dev; in enetc_msg_pf_set_vf_primary_mac_addr()
500 enetc_pf_set_primary_mac_addr(&pf->si->hw, vf_id + 1, addr); in enetc_msg_pf_set_vf_primary_mac_addr()
508 struct device *dev = &pf->si->pdev->dev; in enetc_msg_handle_rxmsg()
529 struct enetc_si *si = pci_get_drvdata(pdev); in enetc_sriov_configure() local
530 struct enetc_pf *pf = enetc_si_priv(si); in enetc_sriov_configure()
580 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_features()
652 enetc_mac_config(pf->si, state->interface); in enetc_pl_mac_config()
655 static void enetc_force_rgmii_mac(struct enetc_si *si, int speed, int duplex) in enetc_force_rgmii_mac() argument
659 old_val = val = enetc_port_mac_rd(si, ENETC_PM0_IF_MODE); in enetc_force_rgmii_mac()
680 enetc_port_mac_wr(si, ENETC_PM0_IF_MODE, val); in enetc_force_rgmii_mac()
691 struct enetc_hw *hw = &pf->si->hw; in enetc_pl_mac_link_up()
692 struct enetc_si *si = pf->si; in enetc_pl_mac_link_up() local
697 priv = netdev_priv(pf->si->ndev); in enetc_pl_mac_link_up()
699 if (pf->si->hw_features & ENETC_SI_F_QBV) in enetc_pl_mac_link_up()
704 enetc_force_rgmii_mac(si, speed, duplex); in enetc_pl_mac_link_up()
740 enetc_port_mac_wr(si, ENETC_PM0_PAUSE_QUANTA, init_quanta); in enetc_pl_mac_link_up()
741 enetc_port_mac_wr(si, ENETC_PM0_PAUSE_THRESH, refresh_quanta); in enetc_pl_mac_link_up()
745 cmd_cfg = enetc_port_mac_rd(si, ENETC_PM0_CMD_CFG); in enetc_pl_mac_link_up()
752 enetc_port_mac_wr(si, ENETC_PM0_CMD_CFG, cmd_cfg); in enetc_pl_mac_link_up()
754 enetc_mac_enable(si, true); in enetc_pl_mac_link_up()
756 if (si->hw_features & ENETC_SI_F_QBU) in enetc_pl_mac_link_up()
765 struct enetc_si *si = pf->si; in enetc_pl_mac_link_down() local
768 priv = netdev_priv(si->ndev); in enetc_pl_mac_link_down()
770 if (si->hw_features & ENETC_SI_F_QBU) in enetc_pl_mac_link_down()
773 enetc_mac_enable(si, false); in enetc_pl_mac_link_down()
786 static int enetc_init_port_rfs_memory(struct enetc_si *si) in enetc_init_port_rfs_memory() argument
789 struct enetc_hw *hw = &si->hw; in enetc_init_port_rfs_memory()
797 err = enetc_set_fs_entry(si, &rfse, i); in enetc_init_port_rfs_memory()
805 static int enetc_init_port_rss_memory(struct enetc_si *si) in enetc_init_port_rss_memory() argument
807 struct enetc_hw *hw = &si->hw; in enetc_init_port_rss_memory()
821 err = enetc_set_rss_table(si, rss_table, num_rss); in enetc_init_port_rss_memory()
864 struct enetc_si *si; in enetc_psi_create() local
873 si = pci_get_drvdata(pdev); in enetc_psi_create()
874 if (!si->hw.port || !si->hw.global) { in enetc_psi_create()
880 si->revision = enetc_get_ip_revision(&si->hw); in enetc_psi_create()
881 si->ops = &enetc_psi_ops; in enetc_psi_create()
882 err = enetc_get_driver_data(si); in enetc_psi_create()
888 err = enetc_setup_cbdr(&pdev->dev, &si->hw, ENETC_CBDR_DEFAULT_SIZE, in enetc_psi_create()
889 &si->cbd_ring); in enetc_psi_create()
893 err = enetc_init_port_rfs_memory(si); in enetc_psi_create()
899 err = enetc_init_port_rss_memory(si); in enetc_psi_create()
905 return si; in enetc_psi_create()
908 enetc_teardown_cbdr(&si->cbd_ring); in enetc_psi_create()
917 struct enetc_si *si = pci_get_drvdata(pdev); in enetc_psi_destroy() local
919 enetc_teardown_cbdr(&si->cbd_ring); in enetc_psi_destroy()
937 struct enetc_si *si; in enetc_pf_probe() local
949 si = enetc_psi_create(pdev); in enetc_pf_probe()
950 if (IS_ERR(si)) { in enetc_pf_probe()
951 err = PTR_ERR(si); in enetc_pf_probe()
955 pf = enetc_si_priv(si); in enetc_pf_probe()
956 pf->si = si; in enetc_pf_probe()
973 enetc_get_si_caps(si); in enetc_pf_probe()
982 enetc_pf_netdev_setup(si, ndev, &enetc_ndev_ops); in enetc_pf_probe()
992 dev_err(&pdev->dev, "SI resource alloc failed\n"); in enetc_pf_probe()
998 dev_err(&pdev->dev, "Failed to configure SI\n"); in enetc_pf_probe()
1039 si->ndev = NULL; in enetc_pf_probe()
1052 struct enetc_si *si = pci_get_drvdata(pdev); in enetc_pf_remove() local
1053 struct enetc_pf *pf = enetc_si_priv(si); in enetc_pf_remove()
1056 priv = netdev_priv(si->ndev); in enetc_pf_remove()
1061 unregister_netdev(si->ndev); in enetc_pf_remove()
1070 free_netdev(si->ndev); in enetc_pf_remove()
1079 struct enetc_si *si; in enetc_fixup_clear_rss_rfs() local
1087 si = enetc_psi_create(pdev); in enetc_fixup_clear_rss_rfs()
1088 if (!IS_ERR(si)) in enetc_fixup_clear_rss_rfs()