Lines Matching refs:gbe_dev
686 struct gbe_priv *gbe_dev; member
1685 struct gbe_priv *gbe_dev; in keystone_get_stat_strings() local
1691 gbe_dev = gbe_intf->gbe_dev; in keystone_get_stat_strings()
1695 for (i = 0; i < gbe_dev->num_et_stats; i++) { in keystone_get_stat_strings()
1696 memcpy(data, gbe_dev->et_stats[i].desc, in keystone_get_stat_strings()
1710 struct gbe_priv *gbe_dev; in keystone_get_sset_count() local
1715 gbe_dev = gbe_intf->gbe_dev; in keystone_get_sset_count()
1721 return gbe_dev->num_et_stats; in keystone_get_sset_count()
1727 static void gbe_reset_mod_stats(struct gbe_priv *gbe_dev, int stats_mod) in gbe_reset_mod_stats() argument
1729 void __iomem *base = gbe_dev->hw_stats_regs[stats_mod]; in gbe_reset_mod_stats()
1733 for (i = 0; i < gbe_dev->num_et_stats; i++) { in gbe_reset_mod_stats()
1734 if (gbe_dev->et_stats[i].type == stats_mod) { in gbe_reset_mod_stats()
1735 p_stats_entry = base + gbe_dev->et_stats[i].offset; in gbe_reset_mod_stats()
1736 gbe_dev->hw_stats[i] = 0; in gbe_reset_mod_stats()
1737 gbe_dev->hw_stats_prev[i] = readl(p_stats_entry); in gbe_reset_mod_stats()
1742 static inline void gbe_update_hw_stats_entry(struct gbe_priv *gbe_dev, in gbe_update_hw_stats_entry() argument
1752 base = gbe_dev->hw_stats_regs[gbe_dev->et_stats[et_stats_entry].type]; in gbe_update_hw_stats_entry()
1753 p_stats_entry = base + gbe_dev->et_stats[et_stats_entry].offset; in gbe_update_hw_stats_entry()
1755 delta = curr - gbe_dev->hw_stats_prev[et_stats_entry]; in gbe_update_hw_stats_entry()
1756 gbe_dev->hw_stats_prev[et_stats_entry] = curr; in gbe_update_hw_stats_entry()
1757 gbe_dev->hw_stats[et_stats_entry] += delta; in gbe_update_hw_stats_entry()
1760 static void gbe_update_stats(struct gbe_priv *gbe_dev, uint64_t *data) in gbe_update_stats() argument
1764 for (i = 0; i < gbe_dev->num_et_stats; i++) { in gbe_update_stats()
1765 gbe_update_hw_stats_entry(gbe_dev, i); in gbe_update_stats()
1768 data[i] = gbe_dev->hw_stats[i]; in gbe_update_stats()
1772 static inline void gbe_stats_mod_visible_ver14(struct gbe_priv *gbe_dev, in gbe_stats_mod_visible_ver14() argument
1777 val = readl(GBE_REG_ADDR(gbe_dev, switch_regs, stat_port_en)); in gbe_stats_mod_visible_ver14()
1793 writel(val, GBE_REG_ADDR(gbe_dev, switch_regs, stat_port_en)); in gbe_stats_mod_visible_ver14()
1796 static void gbe_reset_mod_stats_ver14(struct gbe_priv *gbe_dev, int stats_mod) in gbe_reset_mod_stats_ver14() argument
1798 gbe_stats_mod_visible_ver14(gbe_dev, stats_mod); in gbe_reset_mod_stats_ver14()
1799 gbe_reset_mod_stats(gbe_dev, stats_mod); in gbe_reset_mod_stats_ver14()
1802 static void gbe_update_stats_ver14(struct gbe_priv *gbe_dev, uint64_t *data) in gbe_update_stats_ver14() argument
1804 u32 half_num_et_stats = (gbe_dev->num_et_stats / 2); in gbe_update_stats_ver14()
1808 gbe_stats_mod_visible_ver14(gbe_dev, (pair ? in gbe_update_stats_ver14()
1814 gbe_update_hw_stats_entry(gbe_dev, et_entry); in gbe_update_stats_ver14()
1817 data[et_entry] = gbe_dev->hw_stats[et_entry]; in gbe_update_stats_ver14()
1828 struct gbe_priv *gbe_dev; in keystone_get_ethtool_stats() local
1834 gbe_dev = gbe_intf->gbe_dev; in keystone_get_ethtool_stats()
1835 spin_lock_bh(&gbe_dev->hw_stats_lock); in keystone_get_ethtool_stats()
1836 if (gbe_dev->ss_version == GBE_SS_VERSION_14) in keystone_get_ethtool_stats()
1837 gbe_update_stats_ver14(gbe_dev, data); in keystone_get_ethtool_stats()
1839 gbe_update_stats(gbe_dev, data); in keystone_get_ethtool_stats()
1840 spin_unlock_bh(&gbe_dev->hw_stats_lock); in keystone_get_ethtool_stats()
1940 static void netcp_ethss_link_state_action(struct gbe_priv *gbe_dev, in netcp_ethss_link_state_action() argument
1961 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in netcp_ethss_link_state_action()
1972 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in netcp_ethss_link_state_action()
1990 static void netcp_ethss_update_link_state(struct gbe_priv *gbe_dev, in netcp_ethss_update_link_state() argument
2002 netcp_sgmii_get_port_link(SGMII_BASE(gbe_dev, sp), sp); 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()
2041 struct gbe_priv *gbe_dev = netdev_priv(ndev); 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()
2070 static void gbe_port_config(struct gbe_priv *gbe_dev, struct gbe_slave *slave, in gbe_port_config() argument
2080 if ((gbe_dev->ss_version == XGBE_SS_VERSION_10) && in gbe_port_config()
2082 xgmii_mode = readl(GBE_REG_ADDR(gbe_dev, ss_regs, control)); in gbe_port_config()
2084 writel(xgmii_mode, GBE_REG_ADDR(gbe_dev, ss_regs, control)); in gbe_port_config()
2087 if (IS_SS_ID_MU(gbe_dev)) in gbe_port_config()
2108 struct gbe_priv *gbe_dev = intf->gbe_dev; in gbe_slave_stop() local
2111 gbe_sgmii_rtreset(gbe_dev, slave, true); in gbe_slave_stop()
2114 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in gbe_slave_stop()
2116 cpsw_ale_del_mcast(gbe_dev->ale, intf->ndev->broadcast, in gbe_slave_stop()
2139 struct gbe_priv *priv = gbe_intf->gbe_dev; in gbe_slave_open()
2232 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_add_mcast_addr() local
2235 cpsw_ale_add_mcast(gbe_dev->ale, addr, in gbe_add_mcast_addr()
2236 GBE_PORT_MASK(gbe_dev->ale_ports), 0, 0, in gbe_add_mcast_addr()
2239 cpsw_ale_add_mcast(gbe_dev->ale, addr, in gbe_add_mcast_addr()
2240 GBE_PORT_MASK(gbe_dev->ale_ports), in gbe_add_mcast_addr()
2247 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_add_ucast_addr() local
2250 cpsw_ale_add_ucast(gbe_dev->ale, addr, gbe_dev->host_port, 0, 0); in gbe_add_ucast_addr()
2253 cpsw_ale_add_ucast(gbe_dev->ale, addr, gbe_dev->host_port, in gbe_add_ucast_addr()
2259 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_del_mcast_addr() local
2262 cpsw_ale_del_mcast(gbe_dev->ale, addr, 0, 0, 0); in gbe_del_mcast_addr()
2265 cpsw_ale_del_mcast(gbe_dev->ale, addr, 0, ALE_VLAN, vlan_id); in gbe_del_mcast_addr()
2271 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_del_ucast_addr() local
2274 cpsw_ale_del_ucast(gbe_dev->ale, addr, gbe_dev->host_port, 0, 0); in gbe_del_ucast_addr()
2277 cpsw_ale_del_ucast(gbe_dev->ale, addr, gbe_dev->host_port, in gbe_del_ucast_addr()
2285 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_add_addr() local
2287 dev_dbg(gbe_dev->dev, "ethss adding address %pM, type %d\n", in gbe_add_addr()
2311 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_del_addr() local
2313 dev_dbg(gbe_dev->dev, "ethss deleting address %pM, type %d\n", in gbe_del_addr()
2337 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_add_vid() local
2341 cpsw_ale_add_vlan(gbe_dev->ale, vid, in gbe_add_vid()
2342 GBE_PORT_MASK(gbe_dev->ale_ports), in gbe_add_vid()
2344 GBE_PORT_MASK(gbe_dev->ale_ports), in gbe_add_vid()
2345 GBE_PORT_MASK(gbe_dev->ale_ports - 1)); in gbe_add_vid()
2353 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_del_vid() local
2355 cpsw_ale_del_vlan(gbe_dev->ale, vid, 0); in gbe_del_vid()
2374 struct gbe_priv *gbe_dev = (struct gbe_priv *)arg; in netcp_ethss_timer() local
2379 for_each_intf(gbe_intf, gbe_dev) { 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()
2392 spin_lock(&gbe_dev->hw_stats_lock); in netcp_ethss_timer()
2394 if (gbe_dev->ss_version == GBE_SS_VERSION_14) in netcp_ethss_timer()
2395 gbe_update_stats_ver14(gbe_dev, NULL); in netcp_ethss_timer()
2397 gbe_update_stats(gbe_dev, NULL); in netcp_ethss_timer()
2399 spin_unlock(&gbe_dev->hw_stats_lock); in netcp_ethss_timer()
2401 gbe_dev->timer.expires = jiffies + GBE_TIMER_INTERVAL; in netcp_ethss_timer()
2402 add_timer(&gbe_dev->timer); in netcp_ethss_timer()
2416 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_open() local
2423 reg = readl(GBE_REG_ADDR(gbe_dev, switch_regs, id_ver)); in gbe_open()
2424 dev_dbg(gbe_dev->dev, "initializing gbe version %d.%d (%d) GBE identification value 0x%x\n", in gbe_open()
2429 if ((gbe_dev->ss_version == XGBE_SS_VERSION_10) || IS_SS_ID_MU(gbe_dev)) in gbe_open()
2432 if (gbe_dev->enable_ale) in gbe_open()
2437 dev_dbg(gbe_dev->dev, in gbe_open()
2447 writel(0, GBE_REG_ADDR(gbe_dev, switch_regs, ptype)); in gbe_open()
2450 writel(GBE_CTL_P0_ENABLE, GBE_REG_ADDR(gbe_dev, switch_regs, control)); in gbe_open()
2453 writel(gbe_dev->stats_en_mask, GBE_REG_ADDR(gbe_dev, switch_regs, in gbe_open()
2464 netcp_ethss_update_link_state(gbe_dev, slave, ndev); in gbe_open()
2486 static int init_slave(struct gbe_priv *gbe_dev, struct gbe_slave *slave, in init_slave() argument
2494 dev_err(gbe_dev->dev, "missing slave-port parameter\n"); in init_slave()
2500 dev_warn(gbe_dev->dev, in init_slave()
2507 slave->port_num = gbe_get_slave_port(gbe_dev, slave->slave_num); in init_slave()
2516 if (gbe_dev->ss_version == GBE_SS_VERSION_14) { in init_slave()
2526 } else if (IS_SS_ID_MU(gbe_dev)) { in init_slave()
2531 } else if (gbe_dev->ss_version == XGBE_SS_VERSION_10) { in init_slave()
2537 dev_err(gbe_dev->dev, "unknown ethss(0x%x)\n", in init_slave()
2538 gbe_dev->ss_version); 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()
2547 if (gbe_dev->ss_version == GBE_SS_VERSION_14) { in init_slave()
2564 } else if (IS_SS_ID_MU(gbe_dev)) { in init_slave()
2581 } else if (gbe_dev->ss_version == XGBE_SS_VERSION_10) { in init_slave()
2603 static void init_secondary_ports(struct gbe_priv *gbe_dev, in init_secondary_ports() argument
2606 struct device *dev = gbe_dev->dev; in init_secondary_ports()
2622 if (init_slave(gbe_dev, slave, port)) { in init_secondary_ports()
2630 gbe_sgmii_config(gbe_dev, 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()
2634 gbe_dev->num_slaves++; in init_secondary_ports()
2640 if (gbe_dev->num_slaves >= gbe_dev->max_num_slaves) { in init_secondary_ports()
2651 gbe_dev->dummy_ndev = alloc_netdev(sizeof(gbe_dev), "dummy", in init_secondary_ports()
2653 if (!gbe_dev->dummy_ndev) { in init_secondary_ports()
2658 priv = netdev_priv(gbe_dev->dummy_ndev); in init_secondary_ports()
2659 *priv = gbe_dev; in init_secondary_ports()
2669 for_each_sec_slave(slave, gbe_dev) { in init_secondary_ports()
2674 of_phy_connect(gbe_dev->dummy_ndev, in init_secondary_ports()
2691 static void free_secondary_ports(struct gbe_priv *gbe_dev) in free_secondary_ports() argument
2695 while (!list_empty(&gbe_dev->secondary_slaves)) { in free_secondary_ports()
2696 slave = first_sec_slave(gbe_dev); in free_secondary_ports()
2702 if (gbe_dev->dummy_ndev) in free_secondary_ports()
2703 free_netdev(gbe_dev->dummy_ndev); in free_secondary_ports()
2706 static int set_xgbe_ethss10_priv(struct gbe_priv *gbe_dev, in set_xgbe_ethss10_priv() argument
2715 dev_err(gbe_dev->dev, in set_xgbe_ethss10_priv()
2721 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_xgbe_ethss10_priv()
2723 dev_err(gbe_dev->dev, "Failed to map xgbe ss register base\n"); in set_xgbe_ethss10_priv()
2726 gbe_dev->ss_regs = regs; in set_xgbe_ethss10_priv()
2730 dev_err(gbe_dev->dev, in set_xgbe_ethss10_priv()
2736 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_xgbe_ethss10_priv()
2738 dev_err(gbe_dev->dev, "Failed to map xgbe sm register base\n"); in set_xgbe_ethss10_priv()
2741 gbe_dev->switch_regs = regs; in set_xgbe_ethss10_priv()
2745 dev_err(gbe_dev->dev, in set_xgbe_ethss10_priv()
2751 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_xgbe_ethss10_priv()
2753 dev_err(gbe_dev->dev, "Failed to map xgbe serdes register base\n"); in set_xgbe_ethss10_priv()
2756 gbe_dev->xgbe_serdes_regs = regs; in set_xgbe_ethss10_priv()
2758 gbe_dev->num_stats_mods = gbe_dev->max_num_ports; in set_xgbe_ethss10_priv()
2759 gbe_dev->et_stats = xgbe10_et_stats; in set_xgbe_ethss10_priv()
2760 gbe_dev->num_et_stats = ARRAY_SIZE(xgbe10_et_stats); in set_xgbe_ethss10_priv()
2762 gbe_dev->hw_stats = devm_kzalloc(gbe_dev->dev, in set_xgbe_ethss10_priv()
2763 gbe_dev->num_et_stats * sizeof(u64), in set_xgbe_ethss10_priv()
2765 if (!gbe_dev->hw_stats) { in set_xgbe_ethss10_priv()
2766 dev_err(gbe_dev->dev, "hw_stats memory allocation failed\n"); in set_xgbe_ethss10_priv()
2770 gbe_dev->hw_stats_prev = in set_xgbe_ethss10_priv()
2771 devm_kzalloc(gbe_dev->dev, in set_xgbe_ethss10_priv()
2772 gbe_dev->num_et_stats * sizeof(u32), in set_xgbe_ethss10_priv()
2774 if (!gbe_dev->hw_stats_prev) { in set_xgbe_ethss10_priv()
2775 dev_err(gbe_dev->dev, in set_xgbe_ethss10_priv()
2780 gbe_dev->ss_version = XGBE_SS_VERSION_10; in set_xgbe_ethss10_priv()
2781 gbe_dev->sgmii_port_regs = gbe_dev->ss_regs + in set_xgbe_ethss10_priv()
2783 gbe_dev->host_port_regs = gbe_dev->ss_regs + XGBE10_HOST_PORT_OFFSET; in set_xgbe_ethss10_priv()
2785 for (i = 0; i < gbe_dev->max_num_ports; i++) in set_xgbe_ethss10_priv()
2786 gbe_dev->hw_stats_regs[i] = gbe_dev->switch_regs + in set_xgbe_ethss10_priv()
2789 gbe_dev->ale_reg = gbe_dev->switch_regs + XGBE10_ALE_OFFSET; in set_xgbe_ethss10_priv()
2790 gbe_dev->ale_ports = gbe_dev->max_num_ports; in set_xgbe_ethss10_priv()
2791 gbe_dev->host_port = XGBE10_HOST_PORT_NUM; in set_xgbe_ethss10_priv()
2792 gbe_dev->ale_entries = XGBE10_NUM_ALE_ENTRIES; in set_xgbe_ethss10_priv()
2793 gbe_dev->stats_en_mask = (1 << (gbe_dev->max_num_ports)) - 1; in set_xgbe_ethss10_priv()
2796 XGBE_SET_REG_OFS(gbe_dev, ss_regs, id_ver); in set_xgbe_ethss10_priv()
2797 XGBE_SET_REG_OFS(gbe_dev, ss_regs, control); in set_xgbe_ethss10_priv()
2800 XGBE_SET_REG_OFS(gbe_dev, switch_regs, id_ver); in set_xgbe_ethss10_priv()
2801 XGBE_SET_REG_OFS(gbe_dev, switch_regs, control); in set_xgbe_ethss10_priv()
2802 XGBE_SET_REG_OFS(gbe_dev, switch_regs, ptype); in set_xgbe_ethss10_priv()
2803 XGBE_SET_REG_OFS(gbe_dev, switch_regs, stat_port_en); in set_xgbe_ethss10_priv()
2804 XGBE_SET_REG_OFS(gbe_dev, switch_regs, flow_control); in set_xgbe_ethss10_priv()
2807 XGBE_SET_REG_OFS(gbe_dev, host_port_regs, port_vlan); in set_xgbe_ethss10_priv()
2808 XGBE_SET_REG_OFS(gbe_dev, host_port_regs, tx_pri_map); in set_xgbe_ethss10_priv()
2809 XGBE_SET_REG_OFS(gbe_dev, host_port_regs, rx_maxlen); in set_xgbe_ethss10_priv()
2813 static int get_gbe_resource_version(struct gbe_priv *gbe_dev, in get_gbe_resource_version() argument
2822 dev_err(gbe_dev->dev, in get_gbe_resource_version()
2828 regs = devm_ioremap_resource(gbe_dev->dev, &res); in get_gbe_resource_version()
2830 dev_err(gbe_dev->dev, "Failed to map gbe register base\n"); in get_gbe_resource_version()
2833 gbe_dev->ss_regs = regs; in get_gbe_resource_version()
2834 gbe_dev->ss_version = readl(gbe_dev->ss_regs); in get_gbe_resource_version()
2838 static int set_gbe_ethss14_priv(struct gbe_priv *gbe_dev, in set_gbe_ethss14_priv() argument
2847 dev_err(gbe_dev->dev, in set_gbe_ethss14_priv()
2853 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_gbe_ethss14_priv()
2855 dev_err(gbe_dev->dev, in set_gbe_ethss14_priv()
2859 gbe_dev->sgmii_port34_regs = regs; in set_gbe_ethss14_priv()
2863 dev_err(gbe_dev->dev, in set_gbe_ethss14_priv()
2869 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_gbe_ethss14_priv()
2871 dev_err(gbe_dev->dev, in set_gbe_ethss14_priv()
2875 gbe_dev->switch_regs = regs; in set_gbe_ethss14_priv()
2877 gbe_dev->num_stats_mods = gbe_dev->max_num_slaves; in set_gbe_ethss14_priv()
2878 gbe_dev->et_stats = gbe13_et_stats; in set_gbe_ethss14_priv()
2879 gbe_dev->num_et_stats = ARRAY_SIZE(gbe13_et_stats); in set_gbe_ethss14_priv()
2881 gbe_dev->hw_stats = devm_kzalloc(gbe_dev->dev, in set_gbe_ethss14_priv()
2882 gbe_dev->num_et_stats * sizeof(u64), in set_gbe_ethss14_priv()
2884 if (!gbe_dev->hw_stats) { in set_gbe_ethss14_priv()
2885 dev_err(gbe_dev->dev, "hw_stats memory allocation failed\n"); in set_gbe_ethss14_priv()
2889 gbe_dev->hw_stats_prev = in set_gbe_ethss14_priv()
2890 devm_kzalloc(gbe_dev->dev, in set_gbe_ethss14_priv()
2891 gbe_dev->num_et_stats * sizeof(u32), in set_gbe_ethss14_priv()
2893 if (!gbe_dev->hw_stats_prev) { in set_gbe_ethss14_priv()
2894 dev_err(gbe_dev->dev, in set_gbe_ethss14_priv()
2899 gbe_dev->sgmii_port_regs = gbe_dev->ss_regs + GBE13_SGMII_MODULE_OFFSET; in set_gbe_ethss14_priv()
2900 gbe_dev->host_port_regs = gbe_dev->switch_regs + GBE13_HOST_PORT_OFFSET; in set_gbe_ethss14_priv()
2906 for (i = 0; i < gbe_dev->max_num_slaves; i++) { in set_gbe_ethss14_priv()
2907 gbe_dev->hw_stats_regs[i] = in set_gbe_ethss14_priv()
2908 gbe_dev->switch_regs + GBE13_HW_STATS_OFFSET + in set_gbe_ethss14_priv()
2912 gbe_dev->ale_reg = gbe_dev->switch_regs + GBE13_ALE_OFFSET; in set_gbe_ethss14_priv()
2913 gbe_dev->ale_ports = gbe_dev->max_num_ports; in set_gbe_ethss14_priv()
2914 gbe_dev->host_port = GBE13_HOST_PORT_NUM; in set_gbe_ethss14_priv()
2915 gbe_dev->ale_entries = GBE13_NUM_ALE_ENTRIES; in set_gbe_ethss14_priv()
2916 gbe_dev->stats_en_mask = GBE13_REG_VAL_STAT_ENABLE_ALL; in set_gbe_ethss14_priv()
2919 GBE_SET_REG_OFS(gbe_dev, ss_regs, id_ver); in set_gbe_ethss14_priv()
2922 GBE_SET_REG_OFS(gbe_dev, switch_regs, id_ver); in set_gbe_ethss14_priv()
2923 GBE_SET_REG_OFS(gbe_dev, switch_regs, control); in set_gbe_ethss14_priv()
2924 GBE_SET_REG_OFS(gbe_dev, switch_regs, soft_reset); in set_gbe_ethss14_priv()
2925 GBE_SET_REG_OFS(gbe_dev, switch_regs, stat_port_en); in set_gbe_ethss14_priv()
2926 GBE_SET_REG_OFS(gbe_dev, switch_regs, ptype); in set_gbe_ethss14_priv()
2927 GBE_SET_REG_OFS(gbe_dev, switch_regs, flow_control); in set_gbe_ethss14_priv()
2930 GBE_SET_REG_OFS(gbe_dev, host_port_regs, port_vlan); in set_gbe_ethss14_priv()
2931 GBE_SET_REG_OFS(gbe_dev, host_port_regs, rx_maxlen); in set_gbe_ethss14_priv()
2935 static int set_gbenu_ethss_priv(struct gbe_priv *gbe_dev, in set_gbenu_ethss_priv() argument
2942 gbe_dev->num_stats_mods = gbe_dev->max_num_ports; in set_gbenu_ethss_priv()
2943 gbe_dev->et_stats = gbenu_et_stats; in set_gbenu_ethss_priv()
2945 if (IS_SS_ID_NU(gbe_dev)) in set_gbenu_ethss_priv()
2946 gbe_dev->num_et_stats = GBENU_ET_STATS_HOST_SIZE + in set_gbenu_ethss_priv()
2947 (gbe_dev->max_num_slaves * GBENU_ET_STATS_PORT_SIZE); in set_gbenu_ethss_priv()
2949 gbe_dev->num_et_stats = GBENU_ET_STATS_HOST_SIZE + in set_gbenu_ethss_priv()
2952 gbe_dev->hw_stats = devm_kzalloc(gbe_dev->dev, in set_gbenu_ethss_priv()
2953 gbe_dev->num_et_stats * sizeof(u64), in set_gbenu_ethss_priv()
2955 if (!gbe_dev->hw_stats) { in set_gbenu_ethss_priv()
2956 dev_err(gbe_dev->dev, "hw_stats memory allocation failed\n"); in set_gbenu_ethss_priv()
2960 gbe_dev->hw_stats_prev = in set_gbenu_ethss_priv()
2961 devm_kzalloc(gbe_dev->dev, in set_gbenu_ethss_priv()
2962 gbe_dev->num_et_stats * sizeof(u32), in set_gbenu_ethss_priv()
2964 if (!gbe_dev->hw_stats_prev) { in set_gbenu_ethss_priv()
2965 dev_err(gbe_dev->dev, in set_gbenu_ethss_priv()
2972 dev_err(gbe_dev->dev, in set_gbenu_ethss_priv()
2978 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_gbenu_ethss_priv()
2980 dev_err(gbe_dev->dev, in set_gbenu_ethss_priv()
2984 gbe_dev->switch_regs = regs; in set_gbenu_ethss_priv()
2986 gbe_dev->sgmii_port_regs = gbe_dev->ss_regs + GBENU_SGMII_MODULE_OFFSET; in set_gbenu_ethss_priv()
2992 gbe_dev->sgmii_port34_regs = gbe_dev->sgmii_port_regs + in set_gbenu_ethss_priv()
2995 gbe_dev->host_port_regs = gbe_dev->switch_regs + GBENU_HOST_PORT_OFFSET; in set_gbenu_ethss_priv()
2997 for (i = 0; i < (gbe_dev->max_num_ports); i++) in set_gbenu_ethss_priv()
2998 gbe_dev->hw_stats_regs[i] = gbe_dev->switch_regs + in set_gbenu_ethss_priv()
3001 gbe_dev->ale_reg = gbe_dev->switch_regs + GBENU_ALE_OFFSET; in set_gbenu_ethss_priv()
3002 gbe_dev->ale_ports = gbe_dev->max_num_ports; in set_gbenu_ethss_priv()
3003 gbe_dev->host_port = GBENU_HOST_PORT_NUM; in set_gbenu_ethss_priv()
3004 gbe_dev->ale_entries = GBE13_NUM_ALE_ENTRIES; in set_gbenu_ethss_priv()
3005 gbe_dev->stats_en_mask = (1 << (gbe_dev->max_num_ports)) - 1; in set_gbenu_ethss_priv()
3008 GBENU_SET_REG_OFS(gbe_dev, ss_regs, id_ver); in set_gbenu_ethss_priv()
3011 GBENU_SET_REG_OFS(gbe_dev, switch_regs, id_ver); in set_gbenu_ethss_priv()
3012 GBENU_SET_REG_OFS(gbe_dev, switch_regs, control); in set_gbenu_ethss_priv()
3013 GBENU_SET_REG_OFS(gbe_dev, switch_regs, stat_port_en); in set_gbenu_ethss_priv()
3014 GBENU_SET_REG_OFS(gbe_dev, switch_regs, ptype); in set_gbenu_ethss_priv()
3017 GBENU_SET_REG_OFS(gbe_dev, host_port_regs, port_vlan); in set_gbenu_ethss_priv()
3018 GBENU_SET_REG_OFS(gbe_dev, host_port_regs, rx_maxlen); in set_gbenu_ethss_priv()
3024 GBENU_SET_REG_OFS(gbe_dev, host_port_regs, tx_pri_map); in set_gbenu_ethss_priv()
3034 struct gbe_priv *gbe_dev; in gbe_probe() local
3043 gbe_dev = devm_kzalloc(dev, sizeof(struct gbe_priv), GFP_KERNEL); in gbe_probe()
3044 if (!gbe_dev) in gbe_probe()
3049 gbe_dev->max_num_slaves = 4; in gbe_probe()
3051 gbe_dev->max_num_slaves = 8; in gbe_probe()
3053 gbe_dev->max_num_slaves = 1; in gbe_probe()
3055 gbe_dev->max_num_slaves = 2; in gbe_probe()
3060 gbe_dev->max_num_ports = gbe_dev->max_num_slaves + 1; in gbe_probe()
3062 gbe_dev->dev = dev; in gbe_probe()
3063 gbe_dev->netcp_device = netcp_device; in gbe_probe()
3064 gbe_dev->rx_packet_max = NETCP_MAX_FRAME_SIZE; in gbe_probe()
3067 spin_lock_init(&gbe_dev->hw_stats_lock); in gbe_probe()
3070 gbe_dev->enable_ale = true; in gbe_probe()
3073 gbe_dev->enable_ale = false; in gbe_probe()
3078 &gbe_dev->tx_queue_id); in gbe_probe()
3081 gbe_dev->tx_queue_id = GBE_TX_QUEUE; in gbe_probe()
3085 &gbe_dev->dma_chan_name); in gbe_probe()
3092 ret = get_gbe_resource_version(gbe_dev, node); in gbe_probe()
3096 dev_dbg(dev, "ss_version: 0x%08x\n", gbe_dev->ss_version); in gbe_probe()
3098 if (gbe_dev->ss_version == GBE_SS_VERSION_14) in gbe_probe()
3099 ret = set_gbe_ethss14_priv(gbe_dev, node); in gbe_probe()
3100 else if (IS_SS_ID_MU(gbe_dev)) in gbe_probe()
3101 ret = set_gbenu_ethss_priv(gbe_dev, node); in gbe_probe()
3106 ret = set_xgbe_ethss10_priv(gbe_dev, node); in gbe_probe()
3109 ret = netcp_xgbe_serdes_init(gbe_dev->xgbe_serdes_regs, in gbe_probe()
3110 gbe_dev->ss_regs); in gbe_probe()
3123 ret = netcp_txpipe_init(&gbe_dev->tx_pipe, netcp_device, in gbe_probe()
3124 gbe_dev->dma_chan_name, gbe_dev->tx_queue_id); in gbe_probe()
3128 ret = netcp_txpipe_open(&gbe_dev->tx_pipe); in gbe_probe()
3133 INIT_LIST_HEAD(&gbe_dev->gbe_intf_head); in gbe_probe()
3141 gbe_dev->num_slaves++; in gbe_probe()
3142 if (gbe_dev->num_slaves >= gbe_dev->max_num_slaves) { in gbe_probe()
3149 if (!gbe_dev->num_slaves) in gbe_probe()
3154 INIT_LIST_HEAD(&gbe_dev->secondary_slaves); in gbe_probe()
3155 if (secondary_ports && (gbe_dev->num_slaves < gbe_dev->max_num_slaves)) in gbe_probe()
3156 init_secondary_ports(gbe_dev, secondary_ports); in gbe_probe()
3159 if (!gbe_dev->num_slaves) { in gbe_probe()
3167 ale_params.dev = gbe_dev->dev; in gbe_probe()
3168 ale_params.ale_regs = gbe_dev->ale_reg; in gbe_probe()
3170 ale_params.ale_entries = gbe_dev->ale_entries; in gbe_probe()
3171 ale_params.ale_ports = gbe_dev->ale_ports; in gbe_probe()
3173 gbe_dev->ale = cpsw_ale_create(&ale_params); in gbe_probe()
3174 if (!gbe_dev->ale) { in gbe_probe()
3175 dev_err(gbe_dev->dev, "error initializing ale engine\n"); in gbe_probe()
3179 dev_dbg(gbe_dev->dev, "Created a gbe ale engine\n"); in gbe_probe()
3183 gbe_init_host_port(gbe_dev); in gbe_probe()
3185 spin_lock_bh(&gbe_dev->hw_stats_lock); in gbe_probe()
3186 for (i = 0; i < gbe_dev->num_stats_mods; i++) { in gbe_probe()
3187 if (gbe_dev->ss_version == GBE_SS_VERSION_14) in gbe_probe()
3188 gbe_reset_mod_stats_ver14(gbe_dev, i); in gbe_probe()
3190 gbe_reset_mod_stats(gbe_dev, i); in gbe_probe()
3192 spin_unlock_bh(&gbe_dev->hw_stats_lock); in gbe_probe()
3194 init_timer(&gbe_dev->timer); in gbe_probe()
3195 gbe_dev->timer.data = (unsigned long)gbe_dev; in gbe_probe()
3196 gbe_dev->timer.function = netcp_ethss_timer; in gbe_probe()
3197 gbe_dev->timer.expires = jiffies + GBE_TIMER_INTERVAL; in gbe_probe()
3198 add_timer(&gbe_dev->timer); in gbe_probe()
3199 *inst_priv = gbe_dev; in gbe_probe()
3203 free_secondary_ports(gbe_dev); in gbe_probe()
3210 struct gbe_priv *gbe_dev = inst_priv; in gbe_attach() local
3215 dev_err(gbe_dev->dev, "interface node not available\n"); in gbe_attach()
3219 gbe_intf = devm_kzalloc(gbe_dev->dev, sizeof(*gbe_intf), GFP_KERNEL); in gbe_attach()
3224 gbe_intf->dev = gbe_dev->dev; in gbe_attach()
3225 gbe_intf->gbe_dev = gbe_dev; in gbe_attach()
3227 gbe_intf->slave = devm_kzalloc(gbe_dev->dev, in gbe_attach()
3235 if (init_slave(gbe_dev, gbe_intf->slave, node)) { in gbe_attach()
3240 gbe_intf->tx_pipe = gbe_dev->tx_pipe; in gbe_attach()
3242 list_add_tail(&gbe_intf->gbe_intf_list, &gbe_dev->gbe_intf_head); in gbe_attach()
3248 devm_kfree(gbe_dev->dev, gbe_intf->slave); in gbe_attach()
3250 devm_kfree(gbe_dev->dev, gbe_intf); in gbe_attach()
3267 struct gbe_priv *gbe_dev = inst_priv; in gbe_remove() local
3269 del_timer_sync(&gbe_dev->timer); in gbe_remove()
3270 cpsw_ale_stop(gbe_dev->ale); in gbe_remove()
3271 cpsw_ale_destroy(gbe_dev->ale); in gbe_remove()
3272 netcp_txpipe_close(&gbe_dev->tx_pipe); in gbe_remove()
3273 free_secondary_ports(gbe_dev); in gbe_remove()
3275 if (!list_empty(&gbe_dev->gbe_intf_head)) in gbe_remove()
3276 dev_alert(gbe_dev->dev, in gbe_remove()