Lines Matching refs:slave

688 	struct gbe_slave	*slave;  member
1652 #define for_each_sec_slave(slave, priv) \ argument
1653 list_for_each_entry((slave), &(priv)->secondary_slaves, slave_list)
1858 if (!gbe_intf->slave) in keystone_get_settings()
1863 cmd->port = gbe_intf->slave->phy_port_t; in keystone_get_settings()
1883 if (!gbe_intf->slave) in keystone_set_settings()
1886 if (cmd->port != gbe_intf->slave->phy_port_t) { in keystone_set_settings()
1903 gbe_intf->slave->phy_port_t = cmd->port; in keystone_set_settings()
1923 static void gbe_set_slave_mac(struct gbe_slave *slave, in gbe_set_slave_mac() argument
1928 writel(mac_hi(ndev->dev_addr), GBE_REG_ADDR(slave, port_regs, sa_hi)); in gbe_set_slave_mac()
1929 writel(mac_lo(ndev->dev_addr), GBE_REG_ADDR(slave, port_regs, sa_lo)); in gbe_set_slave_mac()
1942 struct gbe_slave *slave, in netcp_ethss_link_state_action() argument
1945 struct phy_device *phy = slave->phy; in netcp_ethss_link_state_action()
1949 mac_control = slave->mac_control; in netcp_ethss_link_state_action()
1958 writel(mac_control, GBE_REG_ADDR(slave, emac_regs, in netcp_ethss_link_state_action()
1961 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in netcp_ethss_link_state_action()
1965 if (ndev && slave->open && in netcp_ethss_link_state_action()
1966 slave->link_interface != SGMII_LINK_MAC_PHY && in netcp_ethss_link_state_action()
1967 slave->link_interface != XGMII_LINK_MAC_PHY) in netcp_ethss_link_state_action()
1970 writel(mac_control, GBE_REG_ADDR(slave, emac_regs, in netcp_ethss_link_state_action()
1972 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in netcp_ethss_link_state_action()
1976 slave->link_interface != SGMII_LINK_MAC_PHY && in netcp_ethss_link_state_action()
1977 slave->link_interface != XGMII_LINK_MAC_PHY) in netcp_ethss_link_state_action()
1985 static bool gbe_phy_link_status(struct gbe_slave *slave) in gbe_phy_link_status() argument
1987 return !slave->phy || slave->phy->link; in gbe_phy_link_status()
1991 struct gbe_slave *slave, in netcp_ethss_update_link_state() argument
1994 int sp = slave->slave_num; in netcp_ethss_update_link_state()
1997 if (!slave->open) in netcp_ethss_update_link_state()
2000 if (!SLAVE_LINK_IS_XGMII(slave)) { in netcp_ethss_update_link_state()
2005 phy_link_state = gbe_phy_link_status(slave); in netcp_ethss_update_link_state()
2008 if (atomic_xchg(&slave->link_state, link_state) != link_state) in netcp_ethss_update_link_state()
2009 netcp_ethss_link_state_action(gbe_dev, ndev, slave, in netcp_ethss_update_link_state()
2022 netcp_ethss_update_link_state(gbe_intf->gbe_dev, gbe_intf->slave, in xgbe_adjust_link()
2035 netcp_ethss_update_link_state(gbe_intf->gbe_dev, gbe_intf->slave, in gbe_adjust_link()
2042 struct gbe_slave *slave; in gbe_adjust_link_sec_slaves() local
2044 for_each_sec_slave(slave, gbe_dev) in gbe_adjust_link_sec_slaves()
2045 netcp_ethss_update_link_state(gbe_dev, slave, NULL); in gbe_adjust_link_sec_slaves()
2051 static int gbe_port_reset(struct gbe_slave *slave) in gbe_port_reset() argument
2056 writel(SOFT_RESET, GBE_REG_ADDR(slave, emac_regs, soft_reset)); in gbe_port_reset()
2060 v = readl(GBE_REG_ADDR(slave, emac_regs, soft_reset)); in gbe_port_reset()
2070 static void gbe_port_config(struct gbe_priv *gbe_dev, struct gbe_slave *slave, in gbe_port_config() argument
2081 (slave->link_interface >= XGMII_LINK_MAC_PHY)) { in gbe_port_config()
2083 xgmii_mode |= (1 << slave->slave_num); in gbe_port_config()
2088 rx_maxlen_reg = GBE_REG_ADDR(slave, port_regs, rx_maxlen); in gbe_port_config()
2090 rx_maxlen_reg = GBE_REG_ADDR(slave, emac_regs, rx_maxlen); in gbe_port_config()
2093 writel(slave->mac_control, GBE_REG_ADDR(slave, emac_regs, mac_control)); in gbe_port_config()
2097 struct gbe_slave *slave, bool set) in gbe_sgmii_rtreset() argument
2099 if (SLAVE_LINK_IS_XGMII(slave)) in gbe_sgmii_rtreset()
2102 netcp_sgmii_rtreset(SGMII_BASE(priv, slave->slave_num), in gbe_sgmii_rtreset()
2103 slave->slave_num, set); in gbe_sgmii_rtreset()
2109 struct gbe_slave *slave = intf->slave; in gbe_slave_stop() local
2111 gbe_sgmii_rtreset(gbe_dev, slave, true); in gbe_slave_stop()
2112 gbe_port_reset(slave); in gbe_slave_stop()
2114 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in gbe_slave_stop()
2117 1 << slave->port_num, 0, 0); in gbe_slave_stop()
2119 if (!slave->phy) in gbe_slave_stop()
2122 phy_stop(slave->phy); in gbe_slave_stop()
2123 phy_disconnect(slave->phy); in gbe_slave_stop()
2124 slave->phy = NULL; in gbe_slave_stop()
2127 static void gbe_sgmii_config(struct gbe_priv *priv, struct gbe_slave *slave) in gbe_sgmii_config() argument
2129 if (SLAVE_LINK_IS_XGMII(slave)) in gbe_sgmii_config()
2132 netcp_sgmii_reset(SGMII_BASE(priv, slave->slave_num), slave->slave_num); in gbe_sgmii_config()
2133 netcp_sgmii_config(SGMII_BASE(priv, slave->slave_num), slave->slave_num, in gbe_sgmii_config()
2134 slave->link_interface); in gbe_sgmii_config()
2140 struct gbe_slave *slave = gbe_intf->slave; in gbe_slave_open() local
2146 gbe_sgmii_config(priv, slave); in gbe_slave_open()
2147 gbe_port_reset(slave); in gbe_slave_open()
2148 gbe_sgmii_rtreset(priv, slave, false); in gbe_slave_open()
2149 gbe_port_config(priv, slave, priv->rx_packet_max); in gbe_slave_open()
2150 gbe_set_slave_mac(slave, gbe_intf); in gbe_slave_open()
2152 cpsw_ale_control_set(priv->ale, slave->port_num, in gbe_slave_open()
2155 1 << slave->port_num, 0, 0, ALE_MCAST_FWD_2); in gbe_slave_open()
2157 if (slave->link_interface == SGMII_LINK_MAC_PHY) { in gbe_slave_open()
2160 slave->phy_port_t = PORT_MII; in gbe_slave_open()
2161 } else if (slave->link_interface == XGMII_LINK_MAC_PHY) { in gbe_slave_open()
2164 slave->phy_port_t = PORT_FIBRE; in gbe_slave_open()
2171 slave->phy = of_phy_connect(gbe_intf->ndev, in gbe_slave_open()
2172 slave->phy_node, in gbe_slave_open()
2175 if (!slave->phy) { in gbe_slave_open()
2177 slave->slave_num); in gbe_slave_open()
2181 dev_name(&slave->phy->dev)); in gbe_slave_open()
2182 phy_start(slave->phy); in gbe_slave_open()
2183 phy_read_status(slave->phy); in gbe_slave_open()
2363 struct phy_device *phy = gbe_intf->slave->phy; in gbe_ioctl()
2376 struct gbe_slave *slave; in netcp_ethss_timer() local
2380 if (!gbe_intf->slave->open) in netcp_ethss_timer()
2382 netcp_ethss_update_link_state(gbe_dev, gbe_intf->slave, in netcp_ethss_timer()
2387 for_each_sec_slave(slave, gbe_dev) { in netcp_ethss_timer()
2388 netcp_ethss_update_link_state(gbe_dev, slave, NULL); in netcp_ethss_timer()
2418 struct gbe_slave *slave = gbe_intf->slave; in gbe_open() local
2419 int port_num = slave->port_num; in gbe_open()
2463 slave->open = true; in gbe_open()
2464 netcp_ethss_update_link_state(gbe_dev, slave, ndev); in gbe_open()
2481 gbe_intf->slave->open = false; in gbe_close()
2482 atomic_set(&gbe_intf->slave->link_state, NETCP_LINK_STATE_INVALID); in gbe_close()
2486 static int init_slave(struct gbe_priv *gbe_dev, struct gbe_slave *slave, in init_slave() argument
2493 if (of_property_read_u32(node, "slave-port", &slave->slave_num)) { in init_slave()
2499 &slave->link_interface)) { in init_slave()
2502 slave->link_interface = SGMII_LINK_MAC_PHY; in init_slave()
2505 slave->open = false; in init_slave()
2506 slave->phy_node = of_parse_phandle(node, "phy-handle", 0); in init_slave()
2507 slave->port_num = gbe_get_slave_port(gbe_dev, slave->slave_num); in init_slave()
2509 if (slave->link_interface >= XGMII_LINK_MAC_PHY) in init_slave()
2510 slave->mac_control = GBE_DEF_10G_MAC_CONTROL; in init_slave()
2512 slave->mac_control = GBE_DEF_1G_MAC_CONTROL; in init_slave()
2515 port_reg_num = slave->slave_num; in init_slave()
2517 if (slave->slave_num > 1) { in init_slave()
2542 slave->port_regs = gbe_dev->switch_regs + port_reg_ofs + in init_slave()
2544 slave->emac_regs = gbe_dev->switch_regs + emac_reg_ofs + in init_slave()
2545 (emac_reg_blk_sz * slave->slave_num); in init_slave()
2549 GBE_SET_REG_OFS(slave, port_regs, port_vlan); in init_slave()
2550 GBE_SET_REG_OFS(slave, port_regs, tx_pri_map); in init_slave()
2551 GBE_SET_REG_OFS(slave, port_regs, sa_lo); in init_slave()
2552 GBE_SET_REG_OFS(slave, port_regs, sa_hi); in init_slave()
2553 GBE_SET_REG_OFS(slave, port_regs, ts_ctl); in init_slave()
2554 GBE_SET_REG_OFS(slave, port_regs, ts_seq_ltype); in init_slave()
2555 GBE_SET_REG_OFS(slave, port_regs, ts_vlan); in init_slave()
2556 GBE_SET_REG_OFS(slave, port_regs, ts_ctl_ltype2); in init_slave()
2557 GBE_SET_REG_OFS(slave, port_regs, ts_ctl2); in init_slave()
2560 GBE_SET_REG_OFS(slave, emac_regs, mac_control); in init_slave()
2561 GBE_SET_REG_OFS(slave, emac_regs, soft_reset); in init_slave()
2562 GBE_SET_REG_OFS(slave, emac_regs, rx_maxlen); in init_slave()
2566 GBENU_SET_REG_OFS(slave, port_regs, port_vlan); in init_slave()
2567 GBENU_SET_REG_OFS(slave, port_regs, tx_pri_map); in init_slave()
2568 GBENU_SET_REG_OFS(slave, port_regs, sa_lo); in init_slave()
2569 GBENU_SET_REG_OFS(slave, port_regs, sa_hi); in init_slave()
2570 GBENU_SET_REG_OFS(slave, port_regs, ts_ctl); in init_slave()
2571 GBENU_SET_REG_OFS(slave, port_regs, ts_seq_ltype); in init_slave()
2572 GBENU_SET_REG_OFS(slave, port_regs, ts_vlan); in init_slave()
2573 GBENU_SET_REG_OFS(slave, port_regs, ts_ctl_ltype2); in init_slave()
2574 GBENU_SET_REG_OFS(slave, port_regs, ts_ctl2); in init_slave()
2575 GBENU_SET_REG_OFS(slave, port_regs, rx_maxlen); in init_slave()
2578 GBENU_SET_REG_OFS(slave, emac_regs, mac_control); in init_slave()
2579 GBENU_SET_REG_OFS(slave, emac_regs, soft_reset); in init_slave()
2583 XGBE_SET_REG_OFS(slave, port_regs, port_vlan); in init_slave()
2584 XGBE_SET_REG_OFS(slave, port_regs, tx_pri_map); in init_slave()
2585 XGBE_SET_REG_OFS(slave, port_regs, sa_lo); in init_slave()
2586 XGBE_SET_REG_OFS(slave, port_regs, sa_hi); in init_slave()
2587 XGBE_SET_REG_OFS(slave, port_regs, ts_ctl); in init_slave()
2588 XGBE_SET_REG_OFS(slave, port_regs, ts_seq_ltype); in init_slave()
2589 XGBE_SET_REG_OFS(slave, port_regs, ts_vlan); in init_slave()
2590 XGBE_SET_REG_OFS(slave, port_regs, ts_ctl_ltype2); in init_slave()
2591 XGBE_SET_REG_OFS(slave, port_regs, ts_ctl2); in init_slave()
2594 XGBE_SET_REG_OFS(slave, emac_regs, mac_control); in init_slave()
2595 XGBE_SET_REG_OFS(slave, emac_regs, soft_reset); in init_slave()
2596 XGBE_SET_REG_OFS(slave, emac_regs, rx_maxlen); in init_slave()
2599 atomic_set(&slave->link_state, NETCP_LINK_STATE_INVALID); in init_slave()
2610 struct gbe_slave *slave; in init_secondary_ports() local
2614 slave = devm_kzalloc(dev, sizeof(*slave), GFP_KERNEL); in init_secondary_ports()
2615 if (!slave) { in init_secondary_ports()
2622 if (init_slave(gbe_dev, slave, port)) { in init_secondary_ports()
2626 devm_kfree(dev, slave); in init_secondary_ports()
2630 gbe_sgmii_config(gbe_dev, slave); in init_secondary_ports()
2631 gbe_port_reset(slave); in init_secondary_ports()
2632 gbe_port_config(gbe_dev, slave, gbe_dev->rx_packet_max); in init_secondary_ports()
2633 list_add_tail(&slave->slave_list, &gbe_dev->secondary_slaves); in init_secondary_ports()
2635 if ((slave->link_interface == SGMII_LINK_MAC_PHY) || in init_secondary_ports()
2636 (slave->link_interface == XGMII_LINK_MAC_PHY)) in init_secondary_ports()
2639 slave->open = true; in init_secondary_ports()
2661 if (slave->link_interface == SGMII_LINK_MAC_PHY) { in init_secondary_ports()
2663 slave->phy_port_t = PORT_MII; in init_secondary_ports()
2666 slave->phy_port_t = PORT_FIBRE; in init_secondary_ports()
2669 for_each_sec_slave(slave, gbe_dev) { in init_secondary_ports()
2670 if ((slave->link_interface != SGMII_LINK_MAC_PHY) && in init_secondary_ports()
2671 (slave->link_interface != XGMII_LINK_MAC_PHY)) in init_secondary_ports()
2673 slave->phy = in init_secondary_ports()
2675 slave->phy_node, in init_secondary_ports()
2678 if (!slave->phy) { in init_secondary_ports()
2680 slave->slave_num); in init_secondary_ports()
2681 slave->phy = NULL; in init_secondary_ports()
2684 dev_name(&slave->phy->dev)); in init_secondary_ports()
2685 phy_start(slave->phy); in init_secondary_ports()
2686 phy_read_status(slave->phy); in init_secondary_ports()
2693 struct gbe_slave *slave; in free_secondary_ports() local
2696 slave = first_sec_slave(gbe_dev); in free_secondary_ports()
2698 if (slave->phy) in free_secondary_ports()
2699 phy_disconnect(slave->phy); in free_secondary_ports()
2700 list_del(&slave->slave_list); in free_secondary_ports()
3227 gbe_intf->slave = devm_kzalloc(gbe_dev->dev, in gbe_attach()
3228 sizeof(*gbe_intf->slave), in gbe_attach()
3230 if (!gbe_intf->slave) { in gbe_attach()
3235 if (init_slave(gbe_dev, gbe_intf->slave, node)) { in gbe_attach()
3247 if (gbe_intf->slave) in gbe_attach()
3248 devm_kfree(gbe_dev->dev, gbe_intf->slave); in gbe_attach()
3260 devm_kfree(gbe_intf->dev, gbe_intf->slave); in gbe_release()