Lines Matching refs:gbe_dev

153 	(((s) < 2) ? gbe_dev->sgmii_port_regs : gbe_dev->sgmii_port34_regs)
687 struct gbe_priv *gbe_dev; member
1515 struct gbe_priv *gbe_dev; in keystone_get_stat_strings() local
1521 gbe_dev = gbe_intf->gbe_dev; in keystone_get_stat_strings()
1525 for (i = 0; i < gbe_dev->num_et_stats; i++) { in keystone_get_stat_strings()
1526 memcpy(data, gbe_dev->et_stats[i].desc, in keystone_get_stat_strings()
1540 struct gbe_priv *gbe_dev; in keystone_get_sset_count() local
1545 gbe_dev = gbe_intf->gbe_dev; in keystone_get_sset_count()
1551 return gbe_dev->num_et_stats; in keystone_get_sset_count()
1557 static void gbe_update_stats(struct gbe_priv *gbe_dev, uint64_t *data) in gbe_update_stats() argument
1564 for (i = 0; i < gbe_dev->num_et_stats; i++) { in gbe_update_stats()
1565 base = gbe_dev->hw_stats_regs[gbe_dev->et_stats[i].type]; in gbe_update_stats()
1566 p = base + gbe_dev->et_stats[i].offset; in gbe_update_stats()
1568 gbe_dev->hw_stats[i] = gbe_dev->hw_stats[i] + tmp; in gbe_update_stats()
1570 data[i] = gbe_dev->hw_stats[i]; in gbe_update_stats()
1578 static void gbe_update_stats_ver14(struct gbe_priv *gbe_dev, uint64_t *data) in gbe_update_stats_ver14() argument
1580 void __iomem *gbe_statsa = gbe_dev->hw_stats_regs[0]; in gbe_update_stats_ver14()
1581 void __iomem *gbe_statsb = gbe_dev->hw_stats_regs[1]; in gbe_update_stats_ver14()
1582 u64 *hw_stats = &gbe_dev->hw_stats[0]; in gbe_update_stats_ver14()
1585 u32 tmp = 0, val, pair_size = (gbe_dev->num_et_stats / 2); in gbe_update_stats_ver14()
1589 val = readl(GBE_REG_ADDR(gbe_dev, switch_regs, stat_port_en)); in gbe_update_stats_ver14()
1597 writel(val, GBE_REG_ADDR(gbe_dev, switch_regs, stat_port_en)); in gbe_update_stats_ver14()
1601 switch (gbe_dev->et_stats[j].type) { in gbe_update_stats_ver14()
1612 p = base + gbe_dev->et_stats[j].offset; in gbe_update_stats_ver14()
1631 struct gbe_priv *gbe_dev; in keystone_get_ethtool_stats() local
1637 gbe_dev = gbe_intf->gbe_dev; in keystone_get_ethtool_stats()
1638 spin_lock_bh(&gbe_dev->hw_stats_lock); in keystone_get_ethtool_stats()
1639 if (gbe_dev->ss_version == GBE_SS_VERSION_14) in keystone_get_ethtool_stats()
1640 gbe_update_stats_ver14(gbe_dev, data); in keystone_get_ethtool_stats()
1642 gbe_update_stats(gbe_dev, data); in keystone_get_ethtool_stats()
1643 spin_unlock_bh(&gbe_dev->hw_stats_lock); in keystone_get_ethtool_stats()
1743 static void netcp_ethss_link_state_action(struct gbe_priv *gbe_dev, in netcp_ethss_link_state_action() argument
1764 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in netcp_ethss_link_state_action()
1775 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in netcp_ethss_link_state_action()
1793 static void netcp_ethss_update_link_state(struct gbe_priv *gbe_dev, in netcp_ethss_update_link_state() argument
1804 if (gbe_dev->ss_version == GBE_SS_VERSION_14) in netcp_ethss_update_link_state()
1810 gbe_dev->sgmii_port_regs, sp); 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()
1849 struct gbe_priv *gbe_dev = netdev_priv(ndev); 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()
1878 static void gbe_port_config(struct gbe_priv *gbe_dev, struct gbe_slave *slave, in gbe_port_config() argument
1888 if ((gbe_dev->ss_version == XGBE_SS_VERSION_10) && in gbe_port_config()
1890 xgmii_mode = readl(GBE_REG_ADDR(gbe_dev, ss_regs, control)); in gbe_port_config()
1892 writel(xgmii_mode, GBE_REG_ADDR(gbe_dev, ss_regs, control)); in gbe_port_config()
1895 if (IS_SS_ID_MU(gbe_dev)) in gbe_port_config()
1906 struct gbe_priv *gbe_dev = intf->gbe_dev; in gbe_slave_stop() local
1911 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in gbe_slave_stop()
1913 cpsw_ale_del_mcast(gbe_dev->ale, intf->ndev->broadcast, in gbe_slave_stop()
1941 struct gbe_priv *priv = gbe_intf->gbe_dev; in gbe_slave_open()
2033 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_add_mcast_addr() local
2036 cpsw_ale_add_mcast(gbe_dev->ale, addr, in gbe_add_mcast_addr()
2037 GBE_PORT_MASK(gbe_dev->ale_ports), 0, 0, in gbe_add_mcast_addr()
2040 cpsw_ale_add_mcast(gbe_dev->ale, addr, in gbe_add_mcast_addr()
2041 GBE_PORT_MASK(gbe_dev->ale_ports), in gbe_add_mcast_addr()
2048 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_add_ucast_addr() local
2051 cpsw_ale_add_ucast(gbe_dev->ale, addr, gbe_dev->host_port, 0, 0); in gbe_add_ucast_addr()
2054 cpsw_ale_add_ucast(gbe_dev->ale, addr, gbe_dev->host_port, in gbe_add_ucast_addr()
2060 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_del_mcast_addr() local
2063 cpsw_ale_del_mcast(gbe_dev->ale, addr, 0, 0, 0); in gbe_del_mcast_addr()
2066 cpsw_ale_del_mcast(gbe_dev->ale, addr, 0, ALE_VLAN, vlan_id); in gbe_del_mcast_addr()
2072 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_del_ucast_addr() local
2075 cpsw_ale_del_ucast(gbe_dev->ale, addr, gbe_dev->host_port, 0, 0); in gbe_del_ucast_addr()
2078 cpsw_ale_del_ucast(gbe_dev->ale, addr, gbe_dev->host_port, in gbe_del_ucast_addr()
2086 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_add_addr() local
2088 dev_dbg(gbe_dev->dev, "ethss adding address %pM, type %d\n", in gbe_add_addr()
2112 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_del_addr() local
2114 dev_dbg(gbe_dev->dev, "ethss deleting address %pM, type %d\n", in gbe_del_addr()
2138 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_add_vid() local
2142 cpsw_ale_add_vlan(gbe_dev->ale, vid, in gbe_add_vid()
2143 GBE_PORT_MASK(gbe_dev->ale_ports), in gbe_add_vid()
2145 GBE_PORT_MASK(gbe_dev->ale_ports), in gbe_add_vid()
2146 GBE_PORT_MASK(gbe_dev->ale_ports - 1)); in gbe_add_vid()
2154 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_del_vid() local
2156 cpsw_ale_del_vlan(gbe_dev->ale, vid, 0); in gbe_del_vid()
2175 struct gbe_priv *gbe_dev = (struct gbe_priv *)arg; in netcp_ethss_timer() local
2180 for_each_intf(gbe_intf, gbe_dev) { 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()
2192 spin_lock_bh(&gbe_dev->hw_stats_lock); in netcp_ethss_timer()
2194 if (gbe_dev->ss_version == GBE_SS_VERSION_14) in netcp_ethss_timer()
2195 gbe_update_stats_ver14(gbe_dev, NULL); in netcp_ethss_timer()
2197 gbe_update_stats(gbe_dev, NULL); in netcp_ethss_timer()
2199 spin_unlock_bh(&gbe_dev->hw_stats_lock); in netcp_ethss_timer()
2201 gbe_dev->timer.expires = jiffies + GBE_TIMER_INTERVAL; in netcp_ethss_timer()
2202 add_timer(&gbe_dev->timer); in netcp_ethss_timer()
2216 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_open() local
2223 reg = readl(GBE_REG_ADDR(gbe_dev, switch_regs, id_ver)); in gbe_open()
2224 dev_dbg(gbe_dev->dev, "initializing gbe version %d.%d (%d) GBE identification value 0x%x\n", in gbe_open()
2229 if ((gbe_dev->ss_version == XGBE_SS_VERSION_10) || IS_SS_ID_MU(gbe_dev)) in gbe_open()
2232 if (gbe_dev->enable_ale) in gbe_open()
2237 dev_dbg(gbe_dev->dev, in gbe_open()
2247 writel(0, GBE_REG_ADDR(gbe_dev, switch_regs, ptype)); in gbe_open()
2250 writel(GBE_CTL_P0_ENABLE, GBE_REG_ADDR(gbe_dev, switch_regs, control)); in gbe_open()
2253 writel(gbe_dev->stats_en_mask, GBE_REG_ADDR(gbe_dev, switch_regs, in gbe_open()
2264 netcp_ethss_update_link_state(gbe_dev, slave, ndev); in gbe_open()
2286 static int init_slave(struct gbe_priv *gbe_dev, struct gbe_slave *slave, in init_slave() argument
2294 dev_err(gbe_dev->dev, "missing slave-port parameter\n"); in init_slave()
2300 dev_warn(gbe_dev->dev, in init_slave()
2307 slave->port_num = gbe_get_slave_port(gbe_dev, slave->slave_num); in init_slave()
2316 if (gbe_dev->ss_version == GBE_SS_VERSION_14) { in init_slave()
2326 } else if (IS_SS_ID_MU(gbe_dev)) { in init_slave()
2331 } else if (gbe_dev->ss_version == XGBE_SS_VERSION_10) { in init_slave()
2337 dev_err(gbe_dev->dev, "unknown ethss(0x%x)\n", in init_slave()
2338 gbe_dev->ss_version); 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()
2347 if (gbe_dev->ss_version == GBE_SS_VERSION_14) { in init_slave()
2364 } else if (IS_SS_ID_MU(gbe_dev)) { in init_slave()
2381 } else if (gbe_dev->ss_version == XGBE_SS_VERSION_10) { in init_slave()
2403 static void init_secondary_ports(struct gbe_priv *gbe_dev, in init_secondary_ports() argument
2406 struct device *dev = gbe_dev->dev; in init_secondary_ports()
2422 if (init_slave(gbe_dev, slave, port)) { in init_secondary_ports()
2430 gbe_sgmii_config(gbe_dev, 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()
2434 gbe_dev->num_slaves++; in init_secondary_ports()
2440 if (gbe_dev->num_slaves >= gbe_dev->max_num_slaves) in init_secondary_ports()
2449 gbe_dev->dummy_ndev = alloc_netdev(sizeof(gbe_dev), "dummy", in init_secondary_ports()
2451 if (!gbe_dev->dummy_ndev) { in init_secondary_ports()
2456 priv = netdev_priv(gbe_dev->dummy_ndev); in init_secondary_ports()
2457 *priv = gbe_dev; in init_secondary_ports()
2467 for_each_sec_slave(slave, gbe_dev) { in init_secondary_ports()
2472 of_phy_connect(gbe_dev->dummy_ndev, in init_secondary_ports()
2489 static void free_secondary_ports(struct gbe_priv *gbe_dev) in free_secondary_ports() argument
2494 slave = first_sec_slave(gbe_dev); in free_secondary_ports()
2501 if (gbe_dev->dummy_ndev) in free_secondary_ports()
2502 free_netdev(gbe_dev->dummy_ndev); in free_secondary_ports()
2505 static int set_xgbe_ethss10_priv(struct gbe_priv *gbe_dev, in set_xgbe_ethss10_priv() argument
2514 dev_err(gbe_dev->dev, in set_xgbe_ethss10_priv()
2520 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_xgbe_ethss10_priv()
2522 dev_err(gbe_dev->dev, "Failed to map xgbe ss register base\n"); in set_xgbe_ethss10_priv()
2525 gbe_dev->ss_regs = regs; in set_xgbe_ethss10_priv()
2529 dev_err(gbe_dev->dev, in set_xgbe_ethss10_priv()
2535 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_xgbe_ethss10_priv()
2537 dev_err(gbe_dev->dev, "Failed to map xgbe sm register base\n"); in set_xgbe_ethss10_priv()
2540 gbe_dev->switch_regs = regs; in set_xgbe_ethss10_priv()
2544 dev_err(gbe_dev->dev, in set_xgbe_ethss10_priv()
2550 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_xgbe_ethss10_priv()
2552 dev_err(gbe_dev->dev, "Failed to map xgbe serdes register base\n"); in set_xgbe_ethss10_priv()
2555 gbe_dev->xgbe_serdes_regs = regs; in set_xgbe_ethss10_priv()
2557 gbe_dev->hw_stats = devm_kzalloc(gbe_dev->dev, in set_xgbe_ethss10_priv()
2559 (gbe_dev->max_num_ports) * sizeof(u64), in set_xgbe_ethss10_priv()
2561 if (!gbe_dev->hw_stats) { in set_xgbe_ethss10_priv()
2562 dev_err(gbe_dev->dev, "hw_stats memory allocation failed\n"); in set_xgbe_ethss10_priv()
2566 gbe_dev->ss_version = XGBE_SS_VERSION_10; in set_xgbe_ethss10_priv()
2567 gbe_dev->sgmii_port_regs = gbe_dev->ss_regs + in set_xgbe_ethss10_priv()
2569 gbe_dev->host_port_regs = gbe_dev->ss_regs + XGBE10_HOST_PORT_OFFSET; in set_xgbe_ethss10_priv()
2571 for (i = 0; i < gbe_dev->max_num_ports; i++) in set_xgbe_ethss10_priv()
2572 gbe_dev->hw_stats_regs[i] = gbe_dev->switch_regs + in set_xgbe_ethss10_priv()
2575 gbe_dev->ale_reg = gbe_dev->switch_regs + XGBE10_ALE_OFFSET; in set_xgbe_ethss10_priv()
2576 gbe_dev->ale_ports = gbe_dev->max_num_ports; in set_xgbe_ethss10_priv()
2577 gbe_dev->host_port = XGBE10_HOST_PORT_NUM; in set_xgbe_ethss10_priv()
2578 gbe_dev->ale_entries = XGBE10_NUM_ALE_ENTRIES; in set_xgbe_ethss10_priv()
2579 gbe_dev->et_stats = xgbe10_et_stats; in set_xgbe_ethss10_priv()
2580 gbe_dev->num_et_stats = ARRAY_SIZE(xgbe10_et_stats); in set_xgbe_ethss10_priv()
2581 gbe_dev->stats_en_mask = (1 << (gbe_dev->max_num_ports)) - 1; in set_xgbe_ethss10_priv()
2584 XGBE_SET_REG_OFS(gbe_dev, ss_regs, id_ver); in set_xgbe_ethss10_priv()
2585 XGBE_SET_REG_OFS(gbe_dev, ss_regs, control); in set_xgbe_ethss10_priv()
2588 XGBE_SET_REG_OFS(gbe_dev, switch_regs, id_ver); in set_xgbe_ethss10_priv()
2589 XGBE_SET_REG_OFS(gbe_dev, switch_regs, control); in set_xgbe_ethss10_priv()
2590 XGBE_SET_REG_OFS(gbe_dev, switch_regs, ptype); in set_xgbe_ethss10_priv()
2591 XGBE_SET_REG_OFS(gbe_dev, switch_regs, stat_port_en); in set_xgbe_ethss10_priv()
2592 XGBE_SET_REG_OFS(gbe_dev, switch_regs, flow_control); in set_xgbe_ethss10_priv()
2595 XGBE_SET_REG_OFS(gbe_dev, host_port_regs, port_vlan); in set_xgbe_ethss10_priv()
2596 XGBE_SET_REG_OFS(gbe_dev, host_port_regs, tx_pri_map); in set_xgbe_ethss10_priv()
2597 XGBE_SET_REG_OFS(gbe_dev, host_port_regs, rx_maxlen); in set_xgbe_ethss10_priv()
2601 static int get_gbe_resource_version(struct gbe_priv *gbe_dev, in get_gbe_resource_version() argument
2610 dev_err(gbe_dev->dev, in get_gbe_resource_version()
2616 regs = devm_ioremap_resource(gbe_dev->dev, &res); in get_gbe_resource_version()
2618 dev_err(gbe_dev->dev, "Failed to map gbe register base\n"); in get_gbe_resource_version()
2621 gbe_dev->ss_regs = regs; in get_gbe_resource_version()
2622 gbe_dev->ss_version = readl(gbe_dev->ss_regs); in get_gbe_resource_version()
2626 static int set_gbe_ethss14_priv(struct gbe_priv *gbe_dev, in set_gbe_ethss14_priv() argument
2635 dev_err(gbe_dev->dev, in set_gbe_ethss14_priv()
2641 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_gbe_ethss14_priv()
2643 dev_err(gbe_dev->dev, in set_gbe_ethss14_priv()
2647 gbe_dev->sgmii_port34_regs = regs; in set_gbe_ethss14_priv()
2651 dev_err(gbe_dev->dev, in set_gbe_ethss14_priv()
2657 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_gbe_ethss14_priv()
2659 dev_err(gbe_dev->dev, in set_gbe_ethss14_priv()
2663 gbe_dev->switch_regs = regs; in set_gbe_ethss14_priv()
2665 gbe_dev->hw_stats = devm_kzalloc(gbe_dev->dev, in set_gbe_ethss14_priv()
2667 gbe_dev->max_num_slaves * sizeof(u64), in set_gbe_ethss14_priv()
2669 if (!gbe_dev->hw_stats) { in set_gbe_ethss14_priv()
2670 dev_err(gbe_dev->dev, "hw_stats memory allocation failed\n"); in set_gbe_ethss14_priv()
2674 gbe_dev->sgmii_port_regs = gbe_dev->ss_regs + GBE13_SGMII_MODULE_OFFSET; in set_gbe_ethss14_priv()
2675 gbe_dev->host_port_regs = gbe_dev->switch_regs + GBE13_HOST_PORT_OFFSET; in set_gbe_ethss14_priv()
2677 for (i = 0; i < gbe_dev->max_num_slaves; i++) { in set_gbe_ethss14_priv()
2678 gbe_dev->hw_stats_regs[i] = in set_gbe_ethss14_priv()
2679 gbe_dev->switch_regs + GBE13_HW_STATS_OFFSET + in set_gbe_ethss14_priv()
2683 gbe_dev->ale_reg = gbe_dev->switch_regs + GBE13_ALE_OFFSET; in set_gbe_ethss14_priv()
2684 gbe_dev->ale_ports = gbe_dev->max_num_ports; in set_gbe_ethss14_priv()
2685 gbe_dev->host_port = GBE13_HOST_PORT_NUM; in set_gbe_ethss14_priv()
2686 gbe_dev->ale_entries = GBE13_NUM_ALE_ENTRIES; in set_gbe_ethss14_priv()
2687 gbe_dev->et_stats = gbe13_et_stats; in set_gbe_ethss14_priv()
2688 gbe_dev->num_et_stats = ARRAY_SIZE(gbe13_et_stats); in set_gbe_ethss14_priv()
2689 gbe_dev->stats_en_mask = GBE13_REG_VAL_STAT_ENABLE_ALL; in set_gbe_ethss14_priv()
2692 GBE_SET_REG_OFS(gbe_dev, ss_regs, id_ver); in set_gbe_ethss14_priv()
2695 GBE_SET_REG_OFS(gbe_dev, switch_regs, id_ver); in set_gbe_ethss14_priv()
2696 GBE_SET_REG_OFS(gbe_dev, switch_regs, control); in set_gbe_ethss14_priv()
2697 GBE_SET_REG_OFS(gbe_dev, switch_regs, soft_reset); in set_gbe_ethss14_priv()
2698 GBE_SET_REG_OFS(gbe_dev, switch_regs, stat_port_en); in set_gbe_ethss14_priv()
2699 GBE_SET_REG_OFS(gbe_dev, switch_regs, ptype); in set_gbe_ethss14_priv()
2700 GBE_SET_REG_OFS(gbe_dev, switch_regs, flow_control); in set_gbe_ethss14_priv()
2703 GBE_SET_REG_OFS(gbe_dev, host_port_regs, port_vlan); in set_gbe_ethss14_priv()
2704 GBE_SET_REG_OFS(gbe_dev, host_port_regs, rx_maxlen); in set_gbe_ethss14_priv()
2708 static int set_gbenu_ethss_priv(struct gbe_priv *gbe_dev, in set_gbenu_ethss_priv() argument
2715 gbe_dev->hw_stats = devm_kzalloc(gbe_dev->dev, in set_gbenu_ethss_priv()
2717 (gbe_dev->max_num_ports) * sizeof(u64), in set_gbenu_ethss_priv()
2719 if (!gbe_dev->hw_stats) { in set_gbenu_ethss_priv()
2720 dev_err(gbe_dev->dev, "hw_stats memory allocation failed\n"); in set_gbenu_ethss_priv()
2726 dev_err(gbe_dev->dev, in set_gbenu_ethss_priv()
2732 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_gbenu_ethss_priv()
2734 dev_err(gbe_dev->dev, in set_gbenu_ethss_priv()
2738 gbe_dev->switch_regs = regs; in set_gbenu_ethss_priv()
2740 gbe_dev->sgmii_port_regs = gbe_dev->ss_regs + GBENU_SGMII_MODULE_OFFSET; in set_gbenu_ethss_priv()
2741 gbe_dev->host_port_regs = gbe_dev->switch_regs + GBENU_HOST_PORT_OFFSET; in set_gbenu_ethss_priv()
2743 for (i = 0; i < (gbe_dev->max_num_ports); i++) in set_gbenu_ethss_priv()
2744 gbe_dev->hw_stats_regs[i] = gbe_dev->switch_regs + in set_gbenu_ethss_priv()
2747 gbe_dev->ale_reg = gbe_dev->switch_regs + GBENU_ALE_OFFSET; in set_gbenu_ethss_priv()
2748 gbe_dev->ale_ports = gbe_dev->max_num_ports; in set_gbenu_ethss_priv()
2749 gbe_dev->host_port = GBENU_HOST_PORT_NUM; in set_gbenu_ethss_priv()
2750 gbe_dev->ale_entries = GBE13_NUM_ALE_ENTRIES; in set_gbenu_ethss_priv()
2751 gbe_dev->et_stats = gbenu_et_stats; in set_gbenu_ethss_priv()
2752 gbe_dev->stats_en_mask = (1 << (gbe_dev->max_num_ports)) - 1; in set_gbenu_ethss_priv()
2754 if (IS_SS_ID_NU(gbe_dev)) in set_gbenu_ethss_priv()
2755 gbe_dev->num_et_stats = GBENU_ET_STATS_HOST_SIZE + in set_gbenu_ethss_priv()
2756 (gbe_dev->max_num_slaves * GBENU_ET_STATS_PORT_SIZE); in set_gbenu_ethss_priv()
2758 gbe_dev->num_et_stats = GBENU_ET_STATS_HOST_SIZE + in set_gbenu_ethss_priv()
2762 GBENU_SET_REG_OFS(gbe_dev, ss_regs, id_ver); in set_gbenu_ethss_priv()
2765 GBENU_SET_REG_OFS(gbe_dev, switch_regs, id_ver); in set_gbenu_ethss_priv()
2766 GBENU_SET_REG_OFS(gbe_dev, switch_regs, control); in set_gbenu_ethss_priv()
2767 GBENU_SET_REG_OFS(gbe_dev, switch_regs, stat_port_en); in set_gbenu_ethss_priv()
2768 GBENU_SET_REG_OFS(gbe_dev, switch_regs, ptype); in set_gbenu_ethss_priv()
2771 GBENU_SET_REG_OFS(gbe_dev, host_port_regs, port_vlan); in set_gbenu_ethss_priv()
2772 GBENU_SET_REG_OFS(gbe_dev, host_port_regs, rx_maxlen); in set_gbenu_ethss_priv()
2778 GBENU_SET_REG_OFS(gbe_dev, host_port_regs, tx_pri_map); in set_gbenu_ethss_priv()
2788 struct gbe_priv *gbe_dev; in gbe_probe() local
2797 gbe_dev = devm_kzalloc(dev, sizeof(struct gbe_priv), GFP_KERNEL); in gbe_probe()
2798 if (!gbe_dev) in gbe_probe()
2803 gbe_dev->max_num_slaves = 4; in gbe_probe()
2805 gbe_dev->max_num_slaves = 8; in gbe_probe()
2807 gbe_dev->max_num_slaves = 1; in gbe_probe()
2809 gbe_dev->max_num_slaves = 2; in gbe_probe()
2814 gbe_dev->max_num_ports = gbe_dev->max_num_slaves + 1; in gbe_probe()
2816 gbe_dev->dev = dev; in gbe_probe()
2817 gbe_dev->netcp_device = netcp_device; in gbe_probe()
2818 gbe_dev->rx_packet_max = NETCP_MAX_FRAME_SIZE; in gbe_probe()
2821 spin_lock_init(&gbe_dev->hw_stats_lock); in gbe_probe()
2824 gbe_dev->enable_ale = true; in gbe_probe()
2827 gbe_dev->enable_ale = false; in gbe_probe()
2832 &gbe_dev->tx_queue_id); in gbe_probe()
2835 gbe_dev->tx_queue_id = GBE_TX_QUEUE; in gbe_probe()
2839 &gbe_dev->dma_chan_name); in gbe_probe()
2847 ret = get_gbe_resource_version(gbe_dev, node); in gbe_probe()
2851 dev_dbg(dev, "ss_version: 0x%08x\n", gbe_dev->ss_version); in gbe_probe()
2853 if (gbe_dev->ss_version == GBE_SS_VERSION_14) in gbe_probe()
2854 ret = set_gbe_ethss14_priv(gbe_dev, node); in gbe_probe()
2855 else if (IS_SS_ID_MU(gbe_dev)) in gbe_probe()
2856 ret = set_gbenu_ethss_priv(gbe_dev, node); in gbe_probe()
2863 ret = set_xgbe_ethss10_priv(gbe_dev, node); in gbe_probe()
2866 ret = netcp_xgbe_serdes_init(gbe_dev->xgbe_serdes_regs, in gbe_probe()
2867 gbe_dev->ss_regs); in gbe_probe()
2880 ret = netcp_txpipe_init(&gbe_dev->tx_pipe, netcp_device, in gbe_probe()
2881 gbe_dev->dma_chan_name, gbe_dev->tx_queue_id); in gbe_probe()
2885 ret = netcp_txpipe_open(&gbe_dev->tx_pipe); in gbe_probe()
2890 INIT_LIST_HEAD(&gbe_dev->gbe_intf_head); in gbe_probe()
2898 gbe_dev->num_slaves++; in gbe_probe()
2899 if (gbe_dev->num_slaves >= gbe_dev->max_num_slaves) in gbe_probe()
2903 if (!gbe_dev->num_slaves) in gbe_probe()
2908 INIT_LIST_HEAD(&gbe_dev->secondary_slaves); in gbe_probe()
2909 if (secondary_ports && (gbe_dev->num_slaves < gbe_dev->max_num_slaves)) in gbe_probe()
2910 init_secondary_ports(gbe_dev, secondary_ports); in gbe_probe()
2913 if (!gbe_dev->num_slaves) { in gbe_probe()
2920 ale_params.dev = gbe_dev->dev; in gbe_probe()
2921 ale_params.ale_regs = gbe_dev->ale_reg; in gbe_probe()
2923 ale_params.ale_entries = gbe_dev->ale_entries; in gbe_probe()
2924 ale_params.ale_ports = gbe_dev->ale_ports; in gbe_probe()
2926 gbe_dev->ale = cpsw_ale_create(&ale_params); in gbe_probe()
2927 if (!gbe_dev->ale) { in gbe_probe()
2928 dev_err(gbe_dev->dev, "error initializing ale engine\n"); in gbe_probe()
2932 dev_dbg(gbe_dev->dev, "Created a gbe ale engine\n"); in gbe_probe()
2936 gbe_init_host_port(gbe_dev); in gbe_probe()
2938 init_timer(&gbe_dev->timer); in gbe_probe()
2939 gbe_dev->timer.data = (unsigned long)gbe_dev; in gbe_probe()
2940 gbe_dev->timer.function = netcp_ethss_timer; in gbe_probe()
2941 gbe_dev->timer.expires = jiffies + GBE_TIMER_INTERVAL; in gbe_probe()
2942 add_timer(&gbe_dev->timer); in gbe_probe()
2943 *inst_priv = gbe_dev; in gbe_probe()
2947 if (gbe_dev->hw_stats) in gbe_probe()
2948 devm_kfree(dev, gbe_dev->hw_stats); in gbe_probe()
2949 cpsw_ale_destroy(gbe_dev->ale); in gbe_probe()
2950 if (gbe_dev->ss_regs) in gbe_probe()
2951 devm_iounmap(dev, gbe_dev->ss_regs); in gbe_probe()
2953 devm_kfree(dev, gbe_dev); in gbe_probe()
2960 struct gbe_priv *gbe_dev = inst_priv; in gbe_attach() local
2965 dev_err(gbe_dev->dev, "interface node not available\n"); in gbe_attach()
2969 gbe_intf = devm_kzalloc(gbe_dev->dev, sizeof(*gbe_intf), GFP_KERNEL); in gbe_attach()
2974 gbe_intf->dev = gbe_dev->dev; in gbe_attach()
2975 gbe_intf->gbe_dev = gbe_dev; in gbe_attach()
2977 gbe_intf->slave = devm_kzalloc(gbe_dev->dev, in gbe_attach()
2985 if (init_slave(gbe_dev, gbe_intf->slave, node)) { in gbe_attach()
2990 gbe_intf->tx_pipe = gbe_dev->tx_pipe; in gbe_attach()
2992 list_add_tail(&gbe_intf->gbe_intf_list, &gbe_dev->gbe_intf_head); in gbe_attach()
2998 devm_kfree(gbe_dev->dev, gbe_intf->slave); in gbe_attach()
3000 devm_kfree(gbe_dev->dev, gbe_intf); in gbe_attach()
3017 struct gbe_priv *gbe_dev = inst_priv; in gbe_remove() local
3019 del_timer_sync(&gbe_dev->timer); in gbe_remove()
3020 cpsw_ale_stop(gbe_dev->ale); in gbe_remove()
3021 cpsw_ale_destroy(gbe_dev->ale); in gbe_remove()
3022 netcp_txpipe_close(&gbe_dev->tx_pipe); in gbe_remove()
3023 free_secondary_ports(gbe_dev); in gbe_remove()
3025 if (!list_empty(&gbe_dev->gbe_intf_head)) in gbe_remove()
3026 dev_alert(gbe_dev->dev, "unreleased ethss interfaces present\n"); in gbe_remove()
3028 devm_kfree(gbe_dev->dev, gbe_dev->hw_stats); in gbe_remove()
3029 devm_iounmap(gbe_dev->dev, gbe_dev->ss_regs); in gbe_remove()
3030 memset(gbe_dev, 0x00, sizeof(*gbe_dev)); in gbe_remove()
3031 devm_kfree(gbe_dev->dev, gbe_dev); in gbe_remove()