Lines Matching refs:slave
689 struct gbe_slave *slave; member
1482 #define for_each_sec_slave(slave, priv) \ argument
1483 list_for_each_entry((slave), &(priv)->secondary_slaves, slave_list)
1661 if (!gbe_intf->slave) in keystone_get_settings()
1666 cmd->port = gbe_intf->slave->phy_port_t; in keystone_get_settings()
1686 if (!gbe_intf->slave) in keystone_set_settings()
1689 if (cmd->port != gbe_intf->slave->phy_port_t) { in keystone_set_settings()
1706 gbe_intf->slave->phy_port_t = cmd->port; in keystone_set_settings()
1726 static void gbe_set_slave_mac(struct gbe_slave *slave, in gbe_set_slave_mac() argument
1731 writel(mac_hi(ndev->dev_addr), GBE_REG_ADDR(slave, port_regs, sa_hi)); in gbe_set_slave_mac()
1732 writel(mac_lo(ndev->dev_addr), GBE_REG_ADDR(slave, port_regs, sa_lo)); in gbe_set_slave_mac()
1745 struct gbe_slave *slave, in netcp_ethss_link_state_action() argument
1748 struct phy_device *phy = slave->phy; in netcp_ethss_link_state_action()
1752 mac_control = slave->mac_control; in netcp_ethss_link_state_action()
1761 writel(mac_control, GBE_REG_ADDR(slave, emac_regs, in netcp_ethss_link_state_action()
1764 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in netcp_ethss_link_state_action()
1768 if (ndev && slave->open && in netcp_ethss_link_state_action()
1769 slave->link_interface != SGMII_LINK_MAC_PHY && in netcp_ethss_link_state_action()
1770 slave->link_interface != XGMII_LINK_MAC_PHY) in netcp_ethss_link_state_action()
1773 writel(mac_control, GBE_REG_ADDR(slave, emac_regs, in netcp_ethss_link_state_action()
1775 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in netcp_ethss_link_state_action()
1779 slave->link_interface != SGMII_LINK_MAC_PHY && in netcp_ethss_link_state_action()
1780 slave->link_interface != XGMII_LINK_MAC_PHY) in netcp_ethss_link_state_action()
1788 static bool gbe_phy_link_status(struct gbe_slave *slave) in gbe_phy_link_status() argument
1790 return !slave->phy || slave->phy->link; in gbe_phy_link_status()
1794 struct gbe_slave *slave, in netcp_ethss_update_link_state() argument
1797 int sp = slave->slave_num; in netcp_ethss_update_link_state()
1800 if (!slave->open) in netcp_ethss_update_link_state()
1803 if (!SLAVE_LINK_IS_XGMII(slave)) { in netcp_ethss_update_link_state()
1813 phy_link_state = gbe_phy_link_status(slave); in netcp_ethss_update_link_state()
1816 if (atomic_xchg(&slave->link_state, link_state) != link_state) in netcp_ethss_update_link_state()
1817 netcp_ethss_link_state_action(gbe_dev, ndev, slave, in netcp_ethss_update_link_state()
1830 netcp_ethss_update_link_state(gbe_intf->gbe_dev, gbe_intf->slave, in xgbe_adjust_link()
1843 netcp_ethss_update_link_state(gbe_intf->gbe_dev, gbe_intf->slave, in gbe_adjust_link()
1850 struct gbe_slave *slave; in gbe_adjust_link_sec_slaves() local
1852 for_each_sec_slave(slave, gbe_dev) in gbe_adjust_link_sec_slaves()
1853 netcp_ethss_update_link_state(gbe_dev, slave, NULL); in gbe_adjust_link_sec_slaves()
1859 static int gbe_port_reset(struct gbe_slave *slave) in gbe_port_reset() argument
1864 writel(SOFT_RESET, GBE_REG_ADDR(slave, emac_regs, soft_reset)); in gbe_port_reset()
1868 v = readl(GBE_REG_ADDR(slave, emac_regs, soft_reset)); in gbe_port_reset()
1878 static void gbe_port_config(struct gbe_priv *gbe_dev, struct gbe_slave *slave, in gbe_port_config() argument
1889 (slave->link_interface >= XGMII_LINK_MAC_PHY)) { in gbe_port_config()
1891 xgmii_mode |= (1 << slave->slave_num); in gbe_port_config()
1896 rx_maxlen_reg = GBE_REG_ADDR(slave, port_regs, rx_maxlen); in gbe_port_config()
1898 rx_maxlen_reg = GBE_REG_ADDR(slave, emac_regs, rx_maxlen); in gbe_port_config()
1901 writel(slave->mac_control, GBE_REG_ADDR(slave, emac_regs, mac_control)); in gbe_port_config()
1907 struct gbe_slave *slave = intf->slave; in gbe_slave_stop() local
1909 gbe_port_reset(slave); in gbe_slave_stop()
1911 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in gbe_slave_stop()
1914 1 << slave->port_num, 0, 0); in gbe_slave_stop()
1916 if (!slave->phy) in gbe_slave_stop()
1919 phy_stop(slave->phy); in gbe_slave_stop()
1920 phy_disconnect(slave->phy); in gbe_slave_stop()
1921 slave->phy = NULL; in gbe_slave_stop()
1924 static void gbe_sgmii_config(struct gbe_priv *priv, struct gbe_slave *slave) in gbe_sgmii_config() argument
1929 if ((priv->ss_version == GBE_SS_VERSION_14) && (slave->slave_num >= 2)) in gbe_sgmii_config()
1932 if (!SLAVE_LINK_IS_XGMII(slave)) { in gbe_sgmii_config()
1933 netcp_sgmii_reset(sgmii_port_regs, slave->slave_num); in gbe_sgmii_config()
1934 netcp_sgmii_config(sgmii_port_regs, slave->slave_num, in gbe_sgmii_config()
1935 slave->link_interface); in gbe_sgmii_config()
1942 struct gbe_slave *slave = gbe_intf->slave; in gbe_slave_open() local
1948 gbe_sgmii_config(priv, slave); in gbe_slave_open()
1949 gbe_port_reset(slave); in gbe_slave_open()
1950 gbe_port_config(priv, slave, priv->rx_packet_max); in gbe_slave_open()
1951 gbe_set_slave_mac(slave, gbe_intf); in gbe_slave_open()
1953 cpsw_ale_control_set(priv->ale, slave->port_num, in gbe_slave_open()
1956 1 << slave->port_num, 0, 0, ALE_MCAST_FWD_2); in gbe_slave_open()
1958 if (slave->link_interface == SGMII_LINK_MAC_PHY) { in gbe_slave_open()
1961 slave->phy_port_t = PORT_MII; in gbe_slave_open()
1962 } else if (slave->link_interface == XGMII_LINK_MAC_PHY) { in gbe_slave_open()
1965 slave->phy_port_t = PORT_FIBRE; in gbe_slave_open()
1972 slave->phy = of_phy_connect(gbe_intf->ndev, in gbe_slave_open()
1973 slave->phy_node, in gbe_slave_open()
1976 if (!slave->phy) { in gbe_slave_open()
1978 slave->slave_num); in gbe_slave_open()
1982 dev_name(&slave->phy->dev)); in gbe_slave_open()
1983 phy_start(slave->phy); in gbe_slave_open()
1984 phy_read_status(slave->phy); in gbe_slave_open()
2164 struct phy_device *phy = gbe_intf->slave->phy; in gbe_ioctl()
2177 struct gbe_slave *slave; in netcp_ethss_timer() local
2181 if (!gbe_intf->slave->open) in netcp_ethss_timer()
2183 netcp_ethss_update_link_state(gbe_dev, gbe_intf->slave, in netcp_ethss_timer()
2188 for_each_sec_slave(slave, gbe_dev) { in netcp_ethss_timer()
2189 netcp_ethss_update_link_state(gbe_dev, slave, NULL); in netcp_ethss_timer()
2218 struct gbe_slave *slave = gbe_intf->slave; in gbe_open() local
2219 int port_num = slave->port_num; in gbe_open()
2263 slave->open = true; in gbe_open()
2264 netcp_ethss_update_link_state(gbe_dev, slave, ndev); in gbe_open()
2281 gbe_intf->slave->open = false; in gbe_close()
2282 atomic_set(&gbe_intf->slave->link_state, NETCP_LINK_STATE_INVALID); in gbe_close()
2286 static int init_slave(struct gbe_priv *gbe_dev, struct gbe_slave *slave, in init_slave() argument
2293 if (of_property_read_u32(node, "slave-port", &slave->slave_num)) { in init_slave()
2299 &slave->link_interface)) { in init_slave()
2302 slave->link_interface = SGMII_LINK_MAC_PHY; in init_slave()
2305 slave->open = false; in init_slave()
2306 slave->phy_node = of_parse_phandle(node, "phy-handle", 0); in init_slave()
2307 slave->port_num = gbe_get_slave_port(gbe_dev, slave->slave_num); in init_slave()
2309 if (slave->link_interface >= XGMII_LINK_MAC_PHY) in init_slave()
2310 slave->mac_control = GBE_DEF_10G_MAC_CONTROL; in init_slave()
2312 slave->mac_control = GBE_DEF_1G_MAC_CONTROL; in init_slave()
2315 port_reg_num = slave->slave_num; in init_slave()
2317 if (slave->slave_num > 1) { in init_slave()
2342 slave->port_regs = gbe_dev->switch_regs + port_reg_ofs + in init_slave()
2344 slave->emac_regs = gbe_dev->switch_regs + emac_reg_ofs + in init_slave()
2345 (emac_reg_blk_sz * slave->slave_num); in init_slave()
2349 GBE_SET_REG_OFS(slave, port_regs, port_vlan); in init_slave()
2350 GBE_SET_REG_OFS(slave, port_regs, tx_pri_map); in init_slave()
2351 GBE_SET_REG_OFS(slave, port_regs, sa_lo); in init_slave()
2352 GBE_SET_REG_OFS(slave, port_regs, sa_hi); in init_slave()
2353 GBE_SET_REG_OFS(slave, port_regs, ts_ctl); in init_slave()
2354 GBE_SET_REG_OFS(slave, port_regs, ts_seq_ltype); in init_slave()
2355 GBE_SET_REG_OFS(slave, port_regs, ts_vlan); in init_slave()
2356 GBE_SET_REG_OFS(slave, port_regs, ts_ctl_ltype2); in init_slave()
2357 GBE_SET_REG_OFS(slave, port_regs, ts_ctl2); in init_slave()
2360 GBE_SET_REG_OFS(slave, emac_regs, mac_control); in init_slave()
2361 GBE_SET_REG_OFS(slave, emac_regs, soft_reset); in init_slave()
2362 GBE_SET_REG_OFS(slave, emac_regs, rx_maxlen); in init_slave()
2366 GBENU_SET_REG_OFS(slave, port_regs, port_vlan); in init_slave()
2367 GBENU_SET_REG_OFS(slave, port_regs, tx_pri_map); in init_slave()
2368 GBENU_SET_REG_OFS(slave, port_regs, sa_lo); in init_slave()
2369 GBENU_SET_REG_OFS(slave, port_regs, sa_hi); in init_slave()
2370 GBENU_SET_REG_OFS(slave, port_regs, ts_ctl); in init_slave()
2371 GBENU_SET_REG_OFS(slave, port_regs, ts_seq_ltype); in init_slave()
2372 GBENU_SET_REG_OFS(slave, port_regs, ts_vlan); in init_slave()
2373 GBENU_SET_REG_OFS(slave, port_regs, ts_ctl_ltype2); in init_slave()
2374 GBENU_SET_REG_OFS(slave, port_regs, ts_ctl2); in init_slave()
2375 GBENU_SET_REG_OFS(slave, port_regs, rx_maxlen); in init_slave()
2378 GBENU_SET_REG_OFS(slave, emac_regs, mac_control); in init_slave()
2379 GBENU_SET_REG_OFS(slave, emac_regs, soft_reset); in init_slave()
2383 XGBE_SET_REG_OFS(slave, port_regs, port_vlan); in init_slave()
2384 XGBE_SET_REG_OFS(slave, port_regs, tx_pri_map); in init_slave()
2385 XGBE_SET_REG_OFS(slave, port_regs, sa_lo); in init_slave()
2386 XGBE_SET_REG_OFS(slave, port_regs, sa_hi); in init_slave()
2387 XGBE_SET_REG_OFS(slave, port_regs, ts_ctl); in init_slave()
2388 XGBE_SET_REG_OFS(slave, port_regs, ts_seq_ltype); in init_slave()
2389 XGBE_SET_REG_OFS(slave, port_regs, ts_vlan); in init_slave()
2390 XGBE_SET_REG_OFS(slave, port_regs, ts_ctl_ltype2); in init_slave()
2391 XGBE_SET_REG_OFS(slave, port_regs, ts_ctl2); in init_slave()
2394 XGBE_SET_REG_OFS(slave, emac_regs, mac_control); in init_slave()
2395 XGBE_SET_REG_OFS(slave, emac_regs, soft_reset); in init_slave()
2396 XGBE_SET_REG_OFS(slave, emac_regs, rx_maxlen); in init_slave()
2399 atomic_set(&slave->link_state, NETCP_LINK_STATE_INVALID); in init_slave()
2410 struct gbe_slave *slave; in init_secondary_ports() local
2414 slave = devm_kzalloc(dev, sizeof(*slave), GFP_KERNEL); in init_secondary_ports()
2415 if (!slave) { in init_secondary_ports()
2422 if (init_slave(gbe_dev, slave, port)) { in init_secondary_ports()
2426 devm_kfree(dev, slave); in init_secondary_ports()
2430 gbe_sgmii_config(gbe_dev, slave); in init_secondary_ports()
2431 gbe_port_reset(slave); in init_secondary_ports()
2432 gbe_port_config(gbe_dev, slave, gbe_dev->rx_packet_max); in init_secondary_ports()
2433 list_add_tail(&slave->slave_list, &gbe_dev->secondary_slaves); in init_secondary_ports()
2435 if ((slave->link_interface == SGMII_LINK_MAC_PHY) || in init_secondary_ports()
2436 (slave->link_interface == XGMII_LINK_MAC_PHY)) in init_secondary_ports()
2439 slave->open = true; in init_secondary_ports()
2459 if (slave->link_interface == SGMII_LINK_MAC_PHY) { in init_secondary_ports()
2461 slave->phy_port_t = PORT_MII; in init_secondary_ports()
2464 slave->phy_port_t = PORT_FIBRE; in init_secondary_ports()
2467 for_each_sec_slave(slave, gbe_dev) { in init_secondary_ports()
2468 if ((slave->link_interface != SGMII_LINK_MAC_PHY) && in init_secondary_ports()
2469 (slave->link_interface != XGMII_LINK_MAC_PHY)) in init_secondary_ports()
2471 slave->phy = in init_secondary_ports()
2473 slave->phy_node, in init_secondary_ports()
2476 if (!slave->phy) { in init_secondary_ports()
2478 slave->slave_num); in init_secondary_ports()
2479 slave->phy = NULL; in init_secondary_ports()
2482 dev_name(&slave->phy->dev)); in init_secondary_ports()
2483 phy_start(slave->phy); in init_secondary_ports()
2484 phy_read_status(slave->phy); in init_secondary_ports()
2491 struct gbe_slave *slave; in free_secondary_ports() local
2494 slave = first_sec_slave(gbe_dev); in free_secondary_ports()
2495 if (!slave) in free_secondary_ports()
2497 if (slave->phy) in free_secondary_ports()
2498 phy_disconnect(slave->phy); in free_secondary_ports()
2499 list_del(&slave->slave_list); in free_secondary_ports()
2977 gbe_intf->slave = devm_kzalloc(gbe_dev->dev, in gbe_attach()
2978 sizeof(*gbe_intf->slave), in gbe_attach()
2980 if (!gbe_intf->slave) { in gbe_attach()
2985 if (init_slave(gbe_dev, gbe_intf->slave, node)) { in gbe_attach()
2997 if (gbe_intf->slave) in gbe_attach()
2998 devm_kfree(gbe_dev->dev, gbe_intf->slave); in gbe_attach()
3010 devm_kfree(gbe_intf->dev, gbe_intf->slave); in gbe_release()