Lines Matching defs:slave
451 /* Some hw stat regs are applicable to slave port only.
459 u32 rx_pause_frames; /* slave */
461 u32 rx_align_code_errors; /* slave */
463 u32 rx_jabber_frames; /* slave */
465 u32 rx_fragments; /* slave */
472 u32 tx_pause_frames; /* slave */
473 u32 tx_deferred_frames; /* slave */
474 u32 tx_collision_frames; /* slave */
475 u32 tx_single_coll_frames; /* slave */
476 u32 tx_mult_coll_frames; /* slave */
477 u32 tx_excessive_collisions; /* slave */
478 u32 tx_late_collisions; /* slave */
479 u32 rx_ipg_error; /* slave 10G only */
480 u32 tx_carrier_sense_errors; /* slave */
764 struct gbe_slave *slave;
1728 #define for_each_sec_slave(slave, priv) \
1729 list_for_each_entry((slave), &(priv)->secondary_slaves, slave_list)
1944 if (!gbe_intf->slave)
1948 cmd->base.port = gbe_intf->slave->phy_port_t;
1976 if (!gbe_intf->slave)
1979 if (port != gbe_intf->slave->phy_port_t) {
1996 gbe_intf->slave->phy_port_t = port;
2056 static void gbe_set_slave_mac(struct gbe_slave *slave,
2061 writel(mac_hi(ndev->dev_addr), GBE_REG_ADDR(slave, port_regs, sa_hi));
2062 writel(mac_lo(ndev->dev_addr), GBE_REG_ADDR(slave, port_regs, sa_lo));
2075 struct gbe_slave *slave,
2078 struct phy_device *phy = slave->phy;
2082 mac_control = slave->mac_control;
2091 writel(mac_control, GBE_REG_ADDR(slave, emac_regs,
2094 cpsw_ale_control_set(gbe_dev->ale, slave->port_num,
2098 if (ndev && slave->open &&
2099 ((slave->link_interface != SGMII_LINK_MAC_PHY) &&
2100 (slave->link_interface != RGMII_LINK_MAC_PHY) &&
2101 (slave->link_interface != XGMII_LINK_MAC_PHY)))
2104 writel(mac_control, GBE_REG_ADDR(slave, emac_regs,
2106 cpsw_ale_control_set(gbe_dev->ale, slave->port_num,
2110 ((slave->link_interface != SGMII_LINK_MAC_PHY) &&
2111 (slave->link_interface != RGMII_LINK_MAC_PHY) &&
2112 (slave->link_interface != XGMII_LINK_MAC_PHY)))
2120 static bool gbe_phy_link_status(struct gbe_slave *slave)
2122 return !slave->phy || slave->phy->link;
2136 struct gbe_slave *slave,
2140 int sp = slave->slave_num, link_state;
2142 if (!slave->open)
2145 if (SLAVE_LINK_IS_RGMII(slave))
2148 if (SLAVE_LINK_IS_SGMII(slave))
2152 phy_link_state = gbe_phy_link_status(slave);
2155 if (atomic_xchg(&slave->link_state, link_state) != link_state)
2156 netcp_ethss_link_state_action(gbe_dev, ndev, slave,
2169 netcp_ethss_update_link_state(gbe_intf->gbe_dev, gbe_intf->slave,
2182 netcp_ethss_update_link_state(gbe_intf->gbe_dev, gbe_intf->slave,
2189 struct gbe_slave *slave;
2191 for_each_sec_slave(slave, gbe_dev)
2192 netcp_ethss_update_link_state(gbe_dev, slave, NULL);
2198 static int gbe_port_reset(struct gbe_slave *slave)
2203 writel(SOFT_RESET, GBE_REG_ADDR(slave, emac_regs, soft_reset));
2207 v = readl(GBE_REG_ADDR(slave, emac_regs, soft_reset));
2217 static void gbe_port_config(struct gbe_priv *gbe_dev, struct gbe_slave *slave,
2228 (slave->link_interface >= XGMII_LINK_MAC_PHY)) {
2230 xgmii_mode |= (1 << slave->slave_num);
2235 rx_maxlen_reg = GBE_REG_ADDR(slave, port_regs, rx_maxlen);
2237 rx_maxlen_reg = GBE_REG_ADDR(slave, emac_regs, rx_maxlen);
2240 writel(slave->mac_control, GBE_REG_ADDR(slave, emac_regs, mac_control));
2244 struct gbe_slave *slave, bool set)
2246 if (SLAVE_LINK_IS_XGMII(slave))
2249 netcp_sgmii_rtreset(SGMII_BASE(priv, slave->slave_num),
2250 slave->slave_num, set);
2256 struct gbe_slave *slave = intf->slave;
2259 gbe_sgmii_rtreset(gbe_dev, slave, true);
2260 gbe_port_reset(slave);
2262 cpsw_ale_control_set(gbe_dev->ale, slave->port_num,
2265 1 << slave->port_num, 0, 0);
2267 if (!slave->phy)
2270 phy_stop(slave->phy);
2271 phy_disconnect(slave->phy);
2272 slave->phy = NULL;
2275 static void gbe_sgmii_config(struct gbe_priv *priv, struct gbe_slave *slave)
2277 if (SLAVE_LINK_IS_XGMII(slave))
2280 netcp_sgmii_reset(SGMII_BASE(priv, slave->slave_num), slave->slave_num);
2281 netcp_sgmii_config(SGMII_BASE(priv, slave->slave_num), slave->slave_num,
2282 slave->link_interface);
2288 struct gbe_slave *slave = gbe_intf->slave;
2296 gbe_sgmii_config(priv, slave);
2297 gbe_port_reset(slave);
2299 gbe_sgmii_rtreset(priv, slave, false);
2300 gbe_port_config(priv, slave, priv->rx_packet_max);
2301 gbe_set_slave_mac(slave, gbe_intf);
2307 GBE_REG_ADDR(slave, port_regs, rx_pri_map));
2310 cpsw_ale_control_set(priv->ale, slave->port_num,
2313 1 << slave->port_num, 0, 0, ALE_MCAST_FWD_2);
2315 if (slave->link_interface == SGMII_LINK_MAC_PHY) {
2318 slave->phy_port_t = PORT_MII;
2319 } else if (slave->link_interface == RGMII_LINK_MAC_PHY) {
2321 err = of_get_phy_mode(slave->node, &phy_mode);
2333 slave->phy_port_t = PORT_MII;
2334 } else if (slave->link_interface == XGMII_LINK_MAC_PHY) {
2337 slave->phy_port_t = PORT_FIBRE;
2344 slave->phy = of_phy_connect(gbe_intf->ndev,
2345 slave->phy_node,
2348 if (!slave->phy) {
2349 dev_err(priv->dev, "phy not found on slave %d\n",
2350 slave->slave_num);
2354 phydev_name(slave->phy));
2355 phy_start(slave->phy);
2618 struct gbe_slave *slave = gbe_intf->slave;
2623 writel(0, GBE_REG_ADDR(slave, port_regs, ts_ctl));
2630 (slave->ts_ctl.dst_port_map << TS_CTL_DST_PORT_SHIFT) |
2631 (slave->ts_ctl.uni ? TS_UNI_EN :
2632 slave->ts_ctl.maddr_map << TS_CTL_MADDR_SHIFT);
2640 writel(ts_en, GBE_REG_ADDR(slave, port_regs, ts_ctl));
2641 writel(seq_id, GBE_REG_ADDR(slave, port_regs, ts_seq_ltype));
2642 writel(ctl, GBE_REG_ADDR(slave, port_regs, ts_ctl_ltype2));
2822 struct phy_device *phy = gbe_intf->slave->phy;
2843 struct gbe_slave *slave;
2847 if (!gbe_intf->slave->open)
2849 netcp_ethss_update_link_state(gbe_dev, gbe_intf->slave,
2854 for_each_sec_slave(slave, gbe_dev) {
2855 netcp_ethss_update_link_state(gbe_dev, slave, NULL);
2893 struct gbe_slave *slave = gbe_intf->slave;
2894 int port_num = slave->port_num;
2943 slave->open = true;
2944 netcp_ethss_update_link_state(gbe_dev, slave, ndev);
2968 gbe_intf->slave->open = false;
2969 atomic_set(&gbe_intf->slave->link_state, NETCP_LINK_STATE_INVALID);
2974 static void init_slave_ts_ctl(struct gbe_slave *slave)
2976 slave->ts_ctl.uni = 1;
2977 slave->ts_ctl.dst_port_map =
2979 slave->ts_ctl.maddr_map =
2984 static void init_slave_ts_ctl(struct gbe_slave *slave)
2989 static int init_slave(struct gbe_priv *gbe_dev, struct gbe_slave *slave,
2996 if (of_property_read_u32(node, "slave-port", &slave->slave_num)) {
2997 dev_err(gbe_dev->dev, "missing slave-port parameter\n");
3002 &slave->link_interface)) {
3005 slave->link_interface = SGMII_LINK_MAC_PHY;
3008 slave->node = node;
3009 slave->open = false;
3010 if ((slave->link_interface == SGMII_LINK_MAC_PHY) ||
3011 (slave->link_interface == RGMII_LINK_MAC_PHY) ||
3012 (slave->link_interface == XGMII_LINK_MAC_PHY))
3013 slave->phy_node = of_parse_phandle(node, "phy-handle", 0);
3014 slave->port_num = gbe_get_slave_port(gbe_dev, slave->slave_num);
3016 if (slave->link_interface >= XGMII_LINK_MAC_PHY)
3017 slave->mac_control = GBE_DEF_10G_MAC_CONTROL;
3019 slave->mac_control = GBE_DEF_1G_MAC_CONTROL;
3022 port_reg_num = slave->slave_num;
3024 if (slave->slave_num > 1) {
3049 slave->port_regs = gbe_dev->switch_regs + port_reg_ofs +
3051 slave->emac_regs = gbe_dev->switch_regs + emac_reg_ofs +
3052 (emac_reg_blk_sz * slave->slave_num);
3055 /* Initialize slave port register offsets */
3056 GBE_SET_REG_OFS(slave, port_regs, port_vlan);
3057 GBE_SET_REG_OFS(slave, port_regs, tx_pri_map);
3058 GBE_SET_REG_OFS(slave, port_regs, sa_lo);
3059 GBE_SET_REG_OFS(slave, port_regs, sa_hi);
3060 GBE_SET_REG_OFS(slave, port_regs, ts_ctl);
3061 GBE_SET_REG_OFS(slave, port_regs, ts_seq_ltype);
3062 GBE_SET_REG_OFS(slave, port_regs, ts_vlan);
3063 GBE_SET_REG_OFS(slave, port_regs, ts_ctl_ltype2);
3064 GBE_SET_REG_OFS(slave, port_regs, ts_ctl2);
3067 GBE_SET_REG_OFS(slave, emac_regs, mac_control);
3068 GBE_SET_REG_OFS(slave, emac_regs, soft_reset);
3069 GBE_SET_REG_OFS(slave, emac_regs, rx_maxlen);
3072 /* Initialize slave port register offsets */
3073 GBENU_SET_REG_OFS(slave, port_regs, port_vlan);
3074 GBENU_SET_REG_OFS(slave, port_regs, tx_pri_map);
3075 GBENU_SET_REG_OFS(slave, port_regs, rx_pri_map);
3076 GBENU_SET_REG_OFS(slave, port_regs, sa_lo);
3077 GBENU_SET_REG_OFS(slave, port_regs, sa_hi);
3078 GBENU_SET_REG_OFS(slave, port_regs, ts_ctl);
3079 GBENU_SET_REG_OFS(slave, port_regs, ts_seq_ltype);
3080 GBENU_SET_REG_OFS(slave, port_regs, ts_vlan);
3081 GBENU_SET_REG_OFS(slave, port_regs, ts_ctl_ltype2);
3082 GBENU_SET_REG_OFS(slave, port_regs, ts_ctl2);
3083 GBENU_SET_REG_OFS(slave, port_regs, rx_maxlen);
3086 GBENU_SET_REG_OFS(slave, emac_regs, mac_control);
3087 GBENU_SET_REG_OFS(slave, emac_regs, soft_reset);
3090 /* Initialize slave port register offsets */
3091 XGBE_SET_REG_OFS(slave, port_regs, port_vlan);
3092 XGBE_SET_REG_OFS(slave, port_regs, tx_pri_map);
3093 XGBE_SET_REG_OFS(slave, port_regs, sa_lo);
3094 XGBE_SET_REG_OFS(slave, port_regs, sa_hi);
3095 XGBE_SET_REG_OFS(slave, port_regs, ts_ctl);
3096 XGBE_SET_REG_OFS(slave, port_regs, ts_seq_ltype);
3097 XGBE_SET_REG_OFS(slave, port_regs, ts_vlan);
3098 XGBE_SET_REG_OFS(slave, port_regs, ts_ctl_ltype2);
3099 XGBE_SET_REG_OFS(slave, port_regs, ts_ctl2);
3102 XGBE_SET_REG_OFS(slave, emac_regs, mac_control);
3103 XGBE_SET_REG_OFS(slave, emac_regs, soft_reset);
3104 XGBE_SET_REG_OFS(slave, emac_regs, rx_maxlen);
3107 atomic_set(&slave->link_state, NETCP_LINK_STATE_INVALID);
3109 init_slave_ts_ctl(slave);
3120 struct gbe_slave *slave;
3124 slave = devm_kzalloc(dev, sizeof(*slave), GFP_KERNEL);
3125 if (!slave) {
3131 if (init_slave(gbe_dev, slave, port)) {
3135 devm_kfree(dev, slave);
3140 gbe_sgmii_config(gbe_dev, slave);
3141 gbe_port_reset(slave);
3142 gbe_port_config(gbe_dev, slave, gbe_dev->rx_packet_max);
3143 list_add_tail(&slave->slave_list, &gbe_dev->secondary_slaves);
3145 if ((slave->link_interface == SGMII_LINK_MAC_PHY) ||
3146 (slave->link_interface == XGMII_LINK_MAC_PHY))
3149 slave->open = true;
3171 if (slave->link_interface == SGMII_LINK_MAC_PHY) {
3173 slave->phy_port_t = PORT_MII;
3174 } else if (slave->link_interface == RGMII_LINK_MAC_PHY) {
3176 slave->phy_port_t = PORT_MII;
3179 slave->phy_port_t = PORT_FIBRE;
3182 for_each_sec_slave(slave, gbe_dev) {
3183 if ((slave->link_interface != SGMII_LINK_MAC_PHY) &&
3184 (slave->link_interface != RGMII_LINK_MAC_PHY) &&
3185 (slave->link_interface != XGMII_LINK_MAC_PHY))
3187 slave->phy =
3189 slave->phy_node,
3192 if (!slave->phy) {
3193 dev_err(dev, "phy not found for slave %d\n",
3194 slave->slave_num);
3197 phydev_name(slave->phy));
3198 phy_start(slave->phy);
3205 struct gbe_slave *slave;
3208 slave = first_sec_slave(gbe_dev);
3210 if (slave->phy)
3211 phy_disconnect(slave->phy);
3212 list_del(&slave->slave_list);
3654 ret = of_property_read_u32(interface, "slave-port", &slave_num);
3656 dev_err(dev, "missing slave-port parameter, skipping interface configuration for %pOFn\n",
3671 /* Initialize Secondary slave ports */
3672 secondary_ports = of_get_child_by_name(node, "secondary-slave-ports");
3762 gbe_intf->slave = devm_kzalloc(gbe_dev->dev,
3763 sizeof(*gbe_intf->slave),
3765 if (!gbe_intf->slave) {
3770 if (init_slave(gbe_dev, gbe_intf->slave, node)) {
3782 if (gbe_intf->slave)
3783 devm_kfree(gbe_dev->dev, gbe_intf->slave);
3795 devm_kfree(gbe_intf->dev, gbe_intf->slave);