Lines Matching full:slave
453 /* Some hw stat regs are applicable to slave port only.
461 u32 rx_pause_frames; /* slave */
463 u32 rx_align_code_errors; /* slave */
465 u32 rx_jabber_frames; /* slave */
467 u32 rx_fragments; /* slave */
474 u32 tx_pause_frames; /* slave */
475 u32 tx_deferred_frames; /* slave */
476 u32 tx_collision_frames; /* slave */
477 u32 tx_single_coll_frames; /* slave */
478 u32 tx_mult_coll_frames; /* slave */
479 u32 tx_excessive_collisions; /* slave */
480 u32 tx_late_collisions; /* slave */
481 u32 rx_ipg_error; /* slave 10G only */
482 u32 tx_carrier_sense_errors; /* slave */
767 struct gbe_slave *slave; member
1731 #define for_each_sec_slave(slave, priv) \ argument
1732 list_for_each_entry((slave), &(priv)->secondary_slaves, slave_list)
1947 if (!gbe_intf->slave) in keystone_get_link_ksettings()
1951 cmd->base.port = gbe_intf->slave->phy_port_t; in keystone_get_link_ksettings()
1979 if (!gbe_intf->slave) in keystone_set_link_ksettings()
1982 if (port != gbe_intf->slave->phy_port_t) { in keystone_set_link_ksettings()
1999 gbe_intf->slave->phy_port_t = port; in keystone_set_link_ksettings()
2059 static void gbe_set_slave_mac(struct gbe_slave *slave, in gbe_set_slave_mac() argument
2064 writel(mac_hi(ndev->dev_addr), GBE_REG_ADDR(slave, port_regs, sa_hi)); in gbe_set_slave_mac()
2065 writel(mac_lo(ndev->dev_addr), GBE_REG_ADDR(slave, port_regs, sa_lo)); in gbe_set_slave_mac()
2078 struct gbe_slave *slave, in netcp_ethss_link_state_action() argument
2081 struct phy_device *phy = slave->phy; in netcp_ethss_link_state_action()
2085 mac_control = slave->mac_control; in netcp_ethss_link_state_action()
2094 writel(mac_control, GBE_REG_ADDR(slave, emac_regs, in netcp_ethss_link_state_action()
2097 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in netcp_ethss_link_state_action()
2101 if (ndev && slave->open && in netcp_ethss_link_state_action()
2102 ((slave->link_interface != SGMII_LINK_MAC_PHY) && in netcp_ethss_link_state_action()
2103 (slave->link_interface != RGMII_LINK_MAC_PHY) && in netcp_ethss_link_state_action()
2104 (slave->link_interface != XGMII_LINK_MAC_PHY))) in netcp_ethss_link_state_action()
2107 writel(mac_control, GBE_REG_ADDR(slave, emac_regs, in netcp_ethss_link_state_action()
2109 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in netcp_ethss_link_state_action()
2113 ((slave->link_interface != SGMII_LINK_MAC_PHY) && in netcp_ethss_link_state_action()
2114 (slave->link_interface != RGMII_LINK_MAC_PHY) && in netcp_ethss_link_state_action()
2115 (slave->link_interface != XGMII_LINK_MAC_PHY))) in netcp_ethss_link_state_action()
2123 static bool gbe_phy_link_status(struct gbe_slave *slave) in gbe_phy_link_status() argument
2125 return !slave->phy || slave->phy->link; in gbe_phy_link_status()
2139 struct gbe_slave *slave, in netcp_ethss_update_link_state() argument
2143 int sp = slave->slave_num, link_state; in netcp_ethss_update_link_state()
2145 if (!slave->open) in netcp_ethss_update_link_state()
2148 if (SLAVE_LINK_IS_RGMII(slave)) in netcp_ethss_update_link_state()
2151 if (SLAVE_LINK_IS_SGMII(slave)) in netcp_ethss_update_link_state()
2155 phy_link_state = gbe_phy_link_status(slave); in netcp_ethss_update_link_state()
2158 if (atomic_xchg(&slave->link_state, link_state) != link_state) in netcp_ethss_update_link_state()
2159 netcp_ethss_link_state_action(gbe_dev, ndev, slave, in netcp_ethss_update_link_state()
2172 netcp_ethss_update_link_state(gbe_intf->gbe_dev, gbe_intf->slave, in xgbe_adjust_link()
2185 netcp_ethss_update_link_state(gbe_intf->gbe_dev, gbe_intf->slave, in gbe_adjust_link()
2192 struct gbe_slave *slave; in gbe_adjust_link_sec_slaves() local
2194 for_each_sec_slave(slave, gbe_dev) in gbe_adjust_link_sec_slaves()
2195 netcp_ethss_update_link_state(gbe_dev, slave, NULL); in gbe_adjust_link_sec_slaves()
2201 static int gbe_port_reset(struct gbe_slave *slave) in gbe_port_reset() argument
2206 writel(SOFT_RESET, GBE_REG_ADDR(slave, emac_regs, soft_reset)); in gbe_port_reset()
2210 v = readl(GBE_REG_ADDR(slave, emac_regs, soft_reset)); in gbe_port_reset()
2220 static void gbe_port_config(struct gbe_priv *gbe_dev, struct gbe_slave *slave, in gbe_port_config() argument
2231 (slave->link_interface >= XGMII_LINK_MAC_PHY)) { in gbe_port_config()
2233 xgmii_mode |= (1 << slave->slave_num); in gbe_port_config()
2238 rx_maxlen_reg = GBE_REG_ADDR(slave, port_regs, rx_maxlen); in gbe_port_config()
2240 rx_maxlen_reg = GBE_REG_ADDR(slave, emac_regs, rx_maxlen); in gbe_port_config()
2243 writel(slave->mac_control, GBE_REG_ADDR(slave, emac_regs, mac_control)); in gbe_port_config()
2247 struct gbe_slave *slave, bool set) in gbe_sgmii_rtreset() argument
2249 if (SLAVE_LINK_IS_XGMII(slave)) in gbe_sgmii_rtreset()
2252 netcp_sgmii_rtreset(SGMII_BASE(priv, slave->slave_num), in gbe_sgmii_rtreset()
2253 slave->slave_num, set); in gbe_sgmii_rtreset()
2259 struct gbe_slave *slave = intf->slave; in gbe_slave_stop() local
2262 gbe_sgmii_rtreset(gbe_dev, slave, true); in gbe_slave_stop()
2263 gbe_port_reset(slave); in gbe_slave_stop()
2265 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in gbe_slave_stop()
2268 1 << slave->port_num, 0, 0); in gbe_slave_stop()
2270 if (!slave->phy) in gbe_slave_stop()
2273 phy_stop(slave->phy); in gbe_slave_stop()
2274 phy_disconnect(slave->phy); in gbe_slave_stop()
2275 slave->phy = NULL; in gbe_slave_stop()
2278 static void gbe_sgmii_config(struct gbe_priv *priv, struct gbe_slave *slave) in gbe_sgmii_config() argument
2280 if (SLAVE_LINK_IS_XGMII(slave)) in gbe_sgmii_config()
2283 netcp_sgmii_reset(SGMII_BASE(priv, slave->slave_num), slave->slave_num); in gbe_sgmii_config()
2284 netcp_sgmii_config(SGMII_BASE(priv, slave->slave_num), slave->slave_num, in gbe_sgmii_config()
2285 slave->link_interface); in gbe_sgmii_config()
2291 struct gbe_slave *slave = gbe_intf->slave; in gbe_slave_open() local
2298 gbe_sgmii_config(priv, slave); in gbe_slave_open()
2299 gbe_port_reset(slave); in gbe_slave_open()
2301 gbe_sgmii_rtreset(priv, slave, false); in gbe_slave_open()
2302 gbe_port_config(priv, slave, priv->rx_packet_max); in gbe_slave_open()
2303 gbe_set_slave_mac(slave, gbe_intf); in gbe_slave_open()
2309 GBE_REG_ADDR(slave, port_regs, rx_pri_map)); in gbe_slave_open()
2312 cpsw_ale_control_set(priv->ale, slave->port_num, in gbe_slave_open()
2315 1 << slave->port_num, 0, 0, ALE_MCAST_FWD_2); in gbe_slave_open()
2317 if (slave->link_interface == SGMII_LINK_MAC_PHY) { in gbe_slave_open()
2320 slave->phy_port_t = PORT_MII; in gbe_slave_open()
2321 } else if (slave->link_interface == RGMII_LINK_MAC_PHY) { in gbe_slave_open()
2323 phy_mode = of_get_phy_mode(slave->node); in gbe_slave_open()
2335 slave->phy_port_t = PORT_MII; in gbe_slave_open()
2336 } else if (slave->link_interface == XGMII_LINK_MAC_PHY) { in gbe_slave_open()
2339 slave->phy_port_t = PORT_FIBRE; in gbe_slave_open()
2346 slave->phy = of_phy_connect(gbe_intf->ndev, in gbe_slave_open()
2347 slave->phy_node, in gbe_slave_open()
2350 if (!slave->phy) { in gbe_slave_open()
2351 dev_err(priv->dev, "phy not found on slave %d\n", in gbe_slave_open()
2352 slave->slave_num); in gbe_slave_open()
2356 phydev_name(slave->phy)); in gbe_slave_open()
2357 phy_start(slave->phy); in gbe_slave_open()
2622 struct gbe_slave *slave = gbe_intf->slave; in gbe_hwtstamp() local
2627 writel(0, GBE_REG_ADDR(slave, port_regs, ts_ctl)); in gbe_hwtstamp()
2634 (slave->ts_ctl.dst_port_map << TS_CTL_DST_PORT_SHIFT) | in gbe_hwtstamp()
2635 (slave->ts_ctl.uni ? TS_UNI_EN : in gbe_hwtstamp()
2636 slave->ts_ctl.maddr_map << TS_CTL_MADDR_SHIFT); in gbe_hwtstamp()
2644 writel(ts_en, GBE_REG_ADDR(slave, port_regs, ts_ctl)); in gbe_hwtstamp()
2645 writel(seq_id, GBE_REG_ADDR(slave, port_regs, ts_seq_ltype)); in gbe_hwtstamp()
2646 writel(ctl, GBE_REG_ADDR(slave, port_regs, ts_ctl_ltype2)); in gbe_hwtstamp()
2830 struct phy_device *phy = gbe_intf->slave->phy; in gbe_ioctl()
2851 struct gbe_slave *slave; in netcp_ethss_timer() local
2855 if (!gbe_intf->slave->open) in netcp_ethss_timer()
2857 netcp_ethss_update_link_state(gbe_dev, gbe_intf->slave, in netcp_ethss_timer()
2862 for_each_sec_slave(slave, gbe_dev) { in netcp_ethss_timer()
2863 netcp_ethss_update_link_state(gbe_dev, slave, NULL); in netcp_ethss_timer()
2901 struct gbe_slave *slave = gbe_intf->slave; in gbe_open() local
2902 int port_num = slave->port_num; in gbe_open()
2951 slave->open = true; in gbe_open()
2952 netcp_ethss_update_link_state(gbe_dev, slave, ndev); in gbe_open()
2976 gbe_intf->slave->open = false; in gbe_close()
2977 atomic_set(&gbe_intf->slave->link_state, NETCP_LINK_STATE_INVALID); in gbe_close()
2982 static void init_slave_ts_ctl(struct gbe_slave *slave) in init_slave_ts_ctl() argument
2984 slave->ts_ctl.uni = 1; in init_slave_ts_ctl()
2985 slave->ts_ctl.dst_port_map = in init_slave_ts_ctl()
2987 slave->ts_ctl.maddr_map = in init_slave_ts_ctl()
2992 static void init_slave_ts_ctl(struct gbe_slave *slave) in init_slave_ts_ctl() argument
2997 static int init_slave(struct gbe_priv *gbe_dev, struct gbe_slave *slave, in init_slave() argument
3004 if (of_property_read_u32(node, "slave-port", &slave->slave_num)) { in init_slave()
3005 dev_err(gbe_dev->dev, "missing slave-port parameter\n"); in init_slave()
3010 &slave->link_interface)) { in init_slave()
3013 slave->link_interface = SGMII_LINK_MAC_PHY; in init_slave()
3016 slave->node = node; in init_slave()
3017 slave->open = false; in init_slave()
3018 if ((slave->link_interface == SGMII_LINK_MAC_PHY) || in init_slave()
3019 (slave->link_interface == RGMII_LINK_MAC_PHY) || in init_slave()
3020 (slave->link_interface == XGMII_LINK_MAC_PHY)) in init_slave()
3021 slave->phy_node = of_parse_phandle(node, "phy-handle", 0); in init_slave()
3022 slave->port_num = gbe_get_slave_port(gbe_dev, slave->slave_num); in init_slave()
3024 if (slave->link_interface >= XGMII_LINK_MAC_PHY) in init_slave()
3025 slave->mac_control = GBE_DEF_10G_MAC_CONTROL; in init_slave()
3027 slave->mac_control = GBE_DEF_1G_MAC_CONTROL; in init_slave()
3030 port_reg_num = slave->slave_num; in init_slave()
3032 if (slave->slave_num > 1) { in init_slave()
3057 slave->port_regs = gbe_dev->switch_regs + port_reg_ofs + in init_slave()
3059 slave->emac_regs = gbe_dev->switch_regs + emac_reg_ofs + in init_slave()
3060 (emac_reg_blk_sz * slave->slave_num); in init_slave()
3063 /* Initialize slave port register offsets */ in init_slave()
3064 GBE_SET_REG_OFS(slave, port_regs, port_vlan); in init_slave()
3065 GBE_SET_REG_OFS(slave, port_regs, tx_pri_map); in init_slave()
3066 GBE_SET_REG_OFS(slave, port_regs, sa_lo); in init_slave()
3067 GBE_SET_REG_OFS(slave, port_regs, sa_hi); in init_slave()
3068 GBE_SET_REG_OFS(slave, port_regs, ts_ctl); in init_slave()
3069 GBE_SET_REG_OFS(slave, port_regs, ts_seq_ltype); in init_slave()
3070 GBE_SET_REG_OFS(slave, port_regs, ts_vlan); in init_slave()
3071 GBE_SET_REG_OFS(slave, port_regs, ts_ctl_ltype2); in init_slave()
3072 GBE_SET_REG_OFS(slave, port_regs, ts_ctl2); in init_slave()
3075 GBE_SET_REG_OFS(slave, emac_regs, mac_control); in init_slave()
3076 GBE_SET_REG_OFS(slave, emac_regs, soft_reset); in init_slave()
3077 GBE_SET_REG_OFS(slave, emac_regs, rx_maxlen); in init_slave()
3080 /* Initialize slave port register offsets */ in init_slave()
3081 GBENU_SET_REG_OFS(slave, port_regs, port_vlan); in init_slave()
3082 GBENU_SET_REG_OFS(slave, port_regs, tx_pri_map); in init_slave()
3083 GBENU_SET_REG_OFS(slave, port_regs, rx_pri_map); in init_slave()
3084 GBENU_SET_REG_OFS(slave, port_regs, sa_lo); in init_slave()
3085 GBENU_SET_REG_OFS(slave, port_regs, sa_hi); in init_slave()
3086 GBENU_SET_REG_OFS(slave, port_regs, ts_ctl); in init_slave()
3087 GBENU_SET_REG_OFS(slave, port_regs, ts_seq_ltype); in init_slave()
3088 GBENU_SET_REG_OFS(slave, port_regs, ts_vlan); in init_slave()
3089 GBENU_SET_REG_OFS(slave, port_regs, ts_ctl_ltype2); in init_slave()
3090 GBENU_SET_REG_OFS(slave, port_regs, ts_ctl2); in init_slave()
3091 GBENU_SET_REG_OFS(slave, port_regs, rx_maxlen); in init_slave()
3094 GBENU_SET_REG_OFS(slave, emac_regs, mac_control); in init_slave()
3095 GBENU_SET_REG_OFS(slave, emac_regs, soft_reset); in init_slave()
3098 /* Initialize slave port register offsets */ in init_slave()
3099 XGBE_SET_REG_OFS(slave, port_regs, port_vlan); in init_slave()
3100 XGBE_SET_REG_OFS(slave, port_regs, tx_pri_map); in init_slave()
3101 XGBE_SET_REG_OFS(slave, port_regs, sa_lo); in init_slave()
3102 XGBE_SET_REG_OFS(slave, port_regs, sa_hi); in init_slave()
3103 XGBE_SET_REG_OFS(slave, port_regs, ts_ctl); in init_slave()
3104 XGBE_SET_REG_OFS(slave, port_regs, ts_seq_ltype); in init_slave()
3105 XGBE_SET_REG_OFS(slave, port_regs, ts_vlan); in init_slave()
3106 XGBE_SET_REG_OFS(slave, port_regs, ts_ctl_ltype2); in init_slave()
3107 XGBE_SET_REG_OFS(slave, port_regs, ts_ctl2); in init_slave()
3110 XGBE_SET_REG_OFS(slave, emac_regs, mac_control); in init_slave()
3111 XGBE_SET_REG_OFS(slave, emac_regs, soft_reset); in init_slave()
3112 XGBE_SET_REG_OFS(slave, emac_regs, rx_maxlen); in init_slave()
3115 atomic_set(&slave->link_state, NETCP_LINK_STATE_INVALID); in init_slave()
3117 init_slave_ts_ctl(slave); in init_slave()
3128 struct gbe_slave *slave; in init_secondary_ports() local
3132 slave = devm_kzalloc(dev, sizeof(*slave), GFP_KERNEL); in init_secondary_ports()
3133 if (!slave) { in init_secondary_ports()
3139 if (init_slave(gbe_dev, slave, port)) { in init_secondary_ports()
3143 devm_kfree(dev, slave); in init_secondary_ports()
3148 gbe_sgmii_config(gbe_dev, slave); in init_secondary_ports()
3149 gbe_port_reset(slave); in init_secondary_ports()
3150 gbe_port_config(gbe_dev, slave, gbe_dev->rx_packet_max); in init_secondary_ports()
3151 list_add_tail(&slave->slave_list, &gbe_dev->secondary_slaves); in init_secondary_ports()
3153 if ((slave->link_interface == SGMII_LINK_MAC_PHY) || in init_secondary_ports()
3154 (slave->link_interface == XGMII_LINK_MAC_PHY)) in init_secondary_ports()
3157 slave->open = true; in init_secondary_ports()
3179 if (slave->link_interface == SGMII_LINK_MAC_PHY) { in init_secondary_ports()
3181 slave->phy_port_t = PORT_MII; in init_secondary_ports()
3182 } else if (slave->link_interface == RGMII_LINK_MAC_PHY) { in init_secondary_ports()
3184 slave->phy_port_t = PORT_MII; in init_secondary_ports()
3187 slave->phy_port_t = PORT_FIBRE; in init_secondary_ports()
3190 for_each_sec_slave(slave, gbe_dev) { in init_secondary_ports()
3191 if ((slave->link_interface != SGMII_LINK_MAC_PHY) && in init_secondary_ports()
3192 (slave->link_interface != RGMII_LINK_MAC_PHY) && in init_secondary_ports()
3193 (slave->link_interface != XGMII_LINK_MAC_PHY)) in init_secondary_ports()
3195 slave->phy = in init_secondary_ports()
3197 slave->phy_node, in init_secondary_ports()
3200 if (!slave->phy) { in init_secondary_ports()
3201 dev_err(dev, "phy not found for slave %d\n", in init_secondary_ports()
3202 slave->slave_num); in init_secondary_ports()
3205 phydev_name(slave->phy)); in init_secondary_ports()
3206 phy_start(slave->phy); in init_secondary_ports()
3213 struct gbe_slave *slave; in free_secondary_ports() local
3216 slave = first_sec_slave(gbe_dev); in free_secondary_ports()
3218 if (slave->phy) in free_secondary_ports()
3219 phy_disconnect(slave->phy); in free_secondary_ports()
3220 list_del(&slave->slave_list); in free_secondary_ports()
3666 ret = of_property_read_u32(interface, "slave-port", &slave_num); in gbe_probe()
3668 dev_err(dev, "missing slave-port parameter, skipping interface configuration for %pOFn\n", in gbe_probe()
3683 /* Initialize Secondary slave ports */ in gbe_probe()
3684 secondary_ports = of_get_child_by_name(node, "secondary-slave-ports"); in gbe_probe()
3770 gbe_intf->slave = devm_kzalloc(gbe_dev->dev, in gbe_attach()
3771 sizeof(*gbe_intf->slave), in gbe_attach()
3773 if (!gbe_intf->slave) { in gbe_attach()
3778 if (init_slave(gbe_dev, gbe_intf->slave, node)) { in gbe_attach()
3790 if (gbe_intf->slave) in gbe_attach()
3791 devm_kfree(gbe_dev->dev, gbe_intf->slave); in gbe_attach()
3803 devm_kfree(gbe_intf->dev, gbe_intf->slave); in gbe_release()