Lines Matching refs:gbe_dev
762 struct gbe_priv *gbe_dev; member
1772 struct gbe_priv *gbe_dev; in keystone_get_stat_strings() local
1778 gbe_dev = gbe_intf->gbe_dev; in keystone_get_stat_strings()
1782 for (i = 0; i < gbe_dev->num_et_stats; i++) { in keystone_get_stat_strings()
1783 memcpy(data, gbe_dev->et_stats[i].desc, in keystone_get_stat_strings()
1797 struct gbe_priv *gbe_dev; in keystone_get_sset_count() local
1802 gbe_dev = gbe_intf->gbe_dev; in keystone_get_sset_count()
1808 return gbe_dev->num_et_stats; in keystone_get_sset_count()
1814 static void gbe_reset_mod_stats(struct gbe_priv *gbe_dev, int stats_mod) in gbe_reset_mod_stats() argument
1816 void __iomem *base = gbe_dev->hw_stats_regs[stats_mod]; in gbe_reset_mod_stats()
1820 for (i = 0; i < gbe_dev->num_et_stats; i++) { in gbe_reset_mod_stats()
1821 if (gbe_dev->et_stats[i].type == stats_mod) { in gbe_reset_mod_stats()
1822 p_stats_entry = base + gbe_dev->et_stats[i].offset; in gbe_reset_mod_stats()
1823 gbe_dev->hw_stats[i] = 0; in gbe_reset_mod_stats()
1824 gbe_dev->hw_stats_prev[i] = readl(p_stats_entry); in gbe_reset_mod_stats()
1829 static inline void gbe_update_hw_stats_entry(struct gbe_priv *gbe_dev, in gbe_update_hw_stats_entry() argument
1839 base = gbe_dev->hw_stats_regs[gbe_dev->et_stats[et_stats_entry].type]; in gbe_update_hw_stats_entry()
1840 p_stats_entry = base + gbe_dev->et_stats[et_stats_entry].offset; in gbe_update_hw_stats_entry()
1842 delta = curr - gbe_dev->hw_stats_prev[et_stats_entry]; in gbe_update_hw_stats_entry()
1843 gbe_dev->hw_stats_prev[et_stats_entry] = curr; in gbe_update_hw_stats_entry()
1844 gbe_dev->hw_stats[et_stats_entry] += delta; in gbe_update_hw_stats_entry()
1847 static void gbe_update_stats(struct gbe_priv *gbe_dev, uint64_t *data) in gbe_update_stats() argument
1851 for (i = 0; i < gbe_dev->num_et_stats; i++) { in gbe_update_stats()
1852 gbe_update_hw_stats_entry(gbe_dev, i); in gbe_update_stats()
1855 data[i] = gbe_dev->hw_stats[i]; in gbe_update_stats()
1859 static inline void gbe_stats_mod_visible_ver14(struct gbe_priv *gbe_dev, in gbe_stats_mod_visible_ver14() argument
1864 val = readl(GBE_REG_ADDR(gbe_dev, switch_regs, stat_port_en)); in gbe_stats_mod_visible_ver14()
1880 writel(val, GBE_REG_ADDR(gbe_dev, switch_regs, stat_port_en)); in gbe_stats_mod_visible_ver14()
1883 static void gbe_reset_mod_stats_ver14(struct gbe_priv *gbe_dev, int stats_mod) in gbe_reset_mod_stats_ver14() argument
1885 gbe_stats_mod_visible_ver14(gbe_dev, stats_mod); in gbe_reset_mod_stats_ver14()
1886 gbe_reset_mod_stats(gbe_dev, stats_mod); in gbe_reset_mod_stats_ver14()
1889 static void gbe_update_stats_ver14(struct gbe_priv *gbe_dev, uint64_t *data) in gbe_update_stats_ver14() argument
1891 u32 half_num_et_stats = (gbe_dev->num_et_stats / 2); in gbe_update_stats_ver14()
1895 gbe_stats_mod_visible_ver14(gbe_dev, (pair ? in gbe_update_stats_ver14()
1901 gbe_update_hw_stats_entry(gbe_dev, et_entry); in gbe_update_stats_ver14()
1904 data[et_entry] = gbe_dev->hw_stats[et_entry]; in gbe_update_stats_ver14()
1915 struct gbe_priv *gbe_dev; in keystone_get_ethtool_stats() local
1921 gbe_dev = gbe_intf->gbe_dev; in keystone_get_ethtool_stats()
1922 spin_lock_bh(&gbe_dev->hw_stats_lock); in keystone_get_ethtool_stats()
1923 if (IS_SS_ID_VER_14(gbe_dev)) in keystone_get_ethtool_stats()
1924 gbe_update_stats_ver14(gbe_dev, data); in keystone_get_ethtool_stats()
1926 gbe_update_stats(gbe_dev, data); in keystone_get_ethtool_stats()
1927 spin_unlock_bh(&gbe_dev->hw_stats_lock); in keystone_get_ethtool_stats()
2008 if (!gbe_intf || !gbe_intf->gbe_dev->cpts) in keystone_get_ts_info()
2016 info->phc_index = gbe_intf->gbe_dev->cpts->phc_index; in keystone_get_ts_info()
2068 static void netcp_ethss_link_state_action(struct gbe_priv *gbe_dev, in netcp_ethss_link_state_action() argument
2089 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in netcp_ethss_link_state_action()
2101 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in netcp_ethss_link_state_action()
2122 static void netcp_2u_rgmii_get_port_link(struct gbe_priv *gbe_dev, bool *status) in netcp_2u_rgmii_get_port_link() argument
2126 val = readl(GBE_REG_ADDR(gbe_dev, ss_regs, rgmii_status)); in netcp_2u_rgmii_get_port_link()
2130 static void netcp_ethss_update_link_state(struct gbe_priv *gbe_dev, in netcp_ethss_update_link_state() argument
2141 netcp_2u_rgmii_get_port_link(gbe_dev, in netcp_ethss_update_link_state()
2145 netcp_sgmii_get_port_link(SGMII_BASE(gbe_dev, sp), sp); in netcp_ethss_update_link_state()
2151 netcp_ethss_link_state_action(gbe_dev, ndev, slave, in netcp_ethss_update_link_state()
2164 netcp_ethss_update_link_state(gbe_intf->gbe_dev, gbe_intf->slave, in xgbe_adjust_link()
2177 netcp_ethss_update_link_state(gbe_intf->gbe_dev, gbe_intf->slave, in gbe_adjust_link()
2183 struct gbe_priv *gbe_dev = netdev_priv(ndev); in gbe_adjust_link_sec_slaves() local
2186 for_each_sec_slave(slave, gbe_dev) in gbe_adjust_link_sec_slaves()
2187 netcp_ethss_update_link_state(gbe_dev, slave, NULL); in gbe_adjust_link_sec_slaves()
2212 static void gbe_port_config(struct gbe_priv *gbe_dev, struct gbe_slave *slave, in gbe_port_config() argument
2222 if (IS_SS_ID_XGBE(gbe_dev) && in gbe_port_config()
2224 xgmii_mode = readl(GBE_REG_ADDR(gbe_dev, ss_regs, control)); in gbe_port_config()
2226 writel(xgmii_mode, GBE_REG_ADDR(gbe_dev, ss_regs, control)); in gbe_port_config()
2229 if (IS_SS_ID_MU(gbe_dev)) in gbe_port_config()
2250 struct gbe_priv *gbe_dev = intf->gbe_dev; in gbe_slave_stop() local
2253 if (!IS_SS_ID_2U(gbe_dev)) in gbe_slave_stop()
2254 gbe_sgmii_rtreset(gbe_dev, slave, true); in gbe_slave_stop()
2257 cpsw_ale_control_set(gbe_dev->ale, slave->port_num, in gbe_slave_stop()
2259 cpsw_ale_del_mcast(gbe_dev->ale, intf->ndev->broadcast, in gbe_slave_stop()
2282 struct gbe_priv *priv = gbe_intf->gbe_dev; in gbe_slave_open()
2399 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_add_mcast_addr() local
2402 cpsw_ale_add_mcast(gbe_dev->ale, addr, in gbe_add_mcast_addr()
2403 GBE_PORT_MASK(gbe_dev->ale_ports), 0, 0, in gbe_add_mcast_addr()
2406 cpsw_ale_add_mcast(gbe_dev->ale, addr, in gbe_add_mcast_addr()
2407 GBE_PORT_MASK(gbe_dev->ale_ports), in gbe_add_mcast_addr()
2414 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_add_ucast_addr() local
2417 cpsw_ale_add_ucast(gbe_dev->ale, addr, gbe_dev->host_port, 0, 0); in gbe_add_ucast_addr()
2420 cpsw_ale_add_ucast(gbe_dev->ale, addr, gbe_dev->host_port, in gbe_add_ucast_addr()
2426 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_del_mcast_addr() local
2429 cpsw_ale_del_mcast(gbe_dev->ale, addr, 0, 0, 0); in gbe_del_mcast_addr()
2432 cpsw_ale_del_mcast(gbe_dev->ale, addr, 0, ALE_VLAN, vlan_id); in gbe_del_mcast_addr()
2438 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_del_ucast_addr() local
2441 cpsw_ale_del_ucast(gbe_dev->ale, addr, gbe_dev->host_port, 0, 0); in gbe_del_ucast_addr()
2444 cpsw_ale_del_ucast(gbe_dev->ale, addr, gbe_dev->host_port, in gbe_del_ucast_addr()
2452 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_add_addr() local
2454 dev_dbg(gbe_dev->dev, "ethss adding address %pM, type %d\n", in gbe_add_addr()
2478 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_del_addr() local
2480 dev_dbg(gbe_dev->dev, "ethss deleting address %pM, type %d\n", in gbe_del_addr()
2504 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_add_vid() local
2508 cpsw_ale_add_vlan(gbe_dev->ale, vid, in gbe_add_vid()
2509 GBE_PORT_MASK(gbe_dev->ale_ports), in gbe_add_vid()
2511 GBE_PORT_MASK(gbe_dev->ale_ports), in gbe_add_vid()
2512 GBE_PORT_MASK(gbe_dev->ale_ports - 1)); in gbe_add_vid()
2520 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_del_vid() local
2522 cpsw_ale_del_vlan(gbe_dev->ale, vid, 0); in gbe_del_vid()
2532 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_txtstamp() local
2534 cpts_tx_timestamp(gbe_dev->cpts, skb); in gbe_txtstamp()
2542 return cpts_can_timestamp(gbe_intf->gbe_dev->cpts, skb); in gbe_need_txtstamp()
2549 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_txtstamp_mark_pkt() local
2552 !gbe_dev->tx_ts_enabled) in gbe_txtstamp_mark_pkt()
2576 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_rxtstamp() local
2586 if (gbe_dev->rx_ts_enabled) in gbe_rxtstamp()
2587 cpts_rx_timestamp(gbe_dev->cpts, p_info->skb); in gbe_rxtstamp()
2597 struct gbe_priv *gbe_dev; in gbe_hwtstamp_get() local
2600 gbe_dev = gbe_intf->gbe_dev; in gbe_hwtstamp_get()
2602 if (!gbe_dev->cpts) in gbe_hwtstamp_get()
2610 cfg->tx_type = gbe_dev->tx_ts_enabled ? HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF; in gbe_hwtstamp_get()
2611 cfg->rx_filter = gbe_dev->rx_ts_enabled; in gbe_hwtstamp_get()
2618 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_hwtstamp() local
2622 if (!gbe_dev->rx_ts_enabled && in gbe_hwtstamp()
2623 !gbe_dev->tx_ts_enabled) { in gbe_hwtstamp()
2635 if (gbe_dev->tx_ts_enabled) in gbe_hwtstamp()
2638 if (gbe_dev->rx_ts_enabled) in gbe_hwtstamp()
2650 struct gbe_priv *gbe_dev; in gbe_hwtstamp_set() local
2653 gbe_dev = gbe_intf->gbe_dev; in gbe_hwtstamp_set()
2655 if (!gbe_dev->cpts) in gbe_hwtstamp_set()
2664 gbe_dev->tx_ts_enabled = 0; in gbe_hwtstamp_set()
2667 gbe_dev->tx_ts_enabled = 1; in gbe_hwtstamp_set()
2675 gbe_dev->rx_ts_enabled = HWTSTAMP_FILTER_NONE; in gbe_hwtstamp_set()
2680 gbe_dev->rx_ts_enabled = HWTSTAMP_FILTER_PTP_V1_L4_EVENT; in gbe_hwtstamp_set()
2692 gbe_dev->rx_ts_enabled = HWTSTAMP_FILTER_PTP_V2_EVENT; in gbe_hwtstamp_set()
2704 static void gbe_register_cpts(struct gbe_priv *gbe_dev) in gbe_register_cpts() argument
2706 if (!gbe_dev->cpts) in gbe_register_cpts()
2709 if (gbe_dev->cpts_registered > 0) in gbe_register_cpts()
2712 if (cpts_register(gbe_dev->cpts)) { in gbe_register_cpts()
2713 dev_err(gbe_dev->dev, "error registering cpts device\n"); in gbe_register_cpts()
2718 ++gbe_dev->cpts_registered; in gbe_register_cpts()
2721 static void gbe_unregister_cpts(struct gbe_priv *gbe_dev) in gbe_unregister_cpts() argument
2723 if (!gbe_dev->cpts || (gbe_dev->cpts_registered <= 0)) in gbe_unregister_cpts()
2726 if (--gbe_dev->cpts_registered) in gbe_unregister_cpts()
2729 cpts_unregister(gbe_dev->cpts); in gbe_unregister_cpts()
2750 static inline void gbe_register_cpts(struct gbe_priv *gbe_dev) in gbe_register_cpts() argument
2754 static inline void gbe_unregister_cpts(struct gbe_priv *gbe_dev) in gbe_unregister_cpts() argument
2775 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_set_rx_mode() local
2776 struct cpsw_ale *ale = gbe_dev->ale; in gbe_set_rx_mode()
2783 for (i = 0; i <= gbe_dev->num_slaves; i++) { in gbe_set_rx_mode()
2793 dev_vdbg(gbe_dev->dev, "promiscuous mode disabled\n"); in gbe_set_rx_mode()
2818 GBE_PORT_MASK(gbe_dev->ale_ports), in gbe_set_rx_mode()
2823 dev_vdbg(gbe_dev->dev, "promiscuous mode enabled\n"); in gbe_set_rx_mode()
2840 struct gbe_priv *gbe_dev = timer_container_of(gbe_dev, t, timer); in netcp_ethss_timer() local
2845 for_each_intf(gbe_intf, gbe_dev) { in netcp_ethss_timer()
2848 netcp_ethss_update_link_state(gbe_dev, gbe_intf->slave, in netcp_ethss_timer()
2853 for_each_sec_slave(slave, gbe_dev) { in netcp_ethss_timer()
2854 netcp_ethss_update_link_state(gbe_dev, slave, NULL); in netcp_ethss_timer()
2858 spin_lock(&gbe_dev->hw_stats_lock); in netcp_ethss_timer()
2860 if (IS_SS_ID_VER_14(gbe_dev)) in netcp_ethss_timer()
2861 gbe_update_stats_ver14(gbe_dev, NULL); in netcp_ethss_timer()
2863 gbe_update_stats(gbe_dev, NULL); in netcp_ethss_timer()
2865 spin_unlock(&gbe_dev->hw_stats_lock); in netcp_ethss_timer()
2867 gbe_dev->timer.expires = jiffies + GBE_TIMER_INTERVAL; in netcp_ethss_timer()
2868 add_timer(&gbe_dev->timer); in netcp_ethss_timer()
2890 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_open() local
2897 reg = readl(GBE_REG_ADDR(gbe_dev, switch_regs, id_ver)); in gbe_open()
2898 dev_dbg(gbe_dev->dev, "initializing gbe version %d.%d (%d) GBE identification value 0x%x\n", in gbe_open()
2903 if (IS_SS_ID_XGBE(gbe_dev) || IS_SS_ID_MU(gbe_dev)) in gbe_open()
2906 if (gbe_dev->enable_ale) in gbe_open()
2911 dev_dbg(gbe_dev->dev, in gbe_open()
2921 writel(0, GBE_REG_ADDR(gbe_dev, switch_regs, ptype)); in gbe_open()
2925 if (IS_SS_ID_MU(gbe_dev)) { in gbe_open()
2929 writel(val, GBE_REG_ADDR(gbe_dev, switch_regs, control)); in gbe_open()
2932 writel(gbe_dev->stats_en_mask, GBE_REG_ADDR(gbe_dev, switch_regs, in gbe_open()
2943 netcp_ethss_update_link_state(gbe_dev, slave, ndev); in gbe_open()
2945 gbe_register_cpts(gbe_dev); in gbe_open()
2958 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; in gbe_close() local
2960 gbe_unregister_cpts(gbe_dev); in gbe_close()
2988 static int init_slave(struct gbe_priv *gbe_dev, struct gbe_slave *slave, in init_slave() argument
2996 dev_err(gbe_dev->dev, "missing slave-port parameter\n"); in init_slave()
3002 dev_warn(gbe_dev->dev, in init_slave()
3013 slave->port_num = gbe_get_slave_port(gbe_dev, slave->slave_num); in init_slave()
3022 if (IS_SS_ID_VER_14(gbe_dev)) { in init_slave()
3032 } else if (IS_SS_ID_MU(gbe_dev)) { in init_slave()
3037 } else if (IS_SS_ID_XGBE(gbe_dev)) { in init_slave()
3043 dev_err(gbe_dev->dev, "unknown ethss(0x%x)\n", in init_slave()
3044 gbe_dev->ss_version); in init_slave()
3048 slave->port_regs = gbe_dev->switch_regs + port_reg_ofs + in init_slave()
3050 slave->emac_regs = gbe_dev->switch_regs + emac_reg_ofs + in init_slave()
3053 if (IS_SS_ID_VER_14(gbe_dev)) { in init_slave()
3070 } else if (IS_SS_ID_MU(gbe_dev)) { in init_slave()
3088 } else if (IS_SS_ID_XGBE(gbe_dev)) { in init_slave()
3112 static void init_secondary_ports(struct gbe_priv *gbe_dev, in init_secondary_ports() argument
3115 struct device *dev = gbe_dev->dev; in init_secondary_ports()
3130 if (init_slave(gbe_dev, slave, port)) { in init_secondary_ports()
3138 if (!IS_SS_ID_2U(gbe_dev)) in init_secondary_ports()
3139 gbe_sgmii_config(gbe_dev, slave); in init_secondary_ports()
3141 gbe_port_config(gbe_dev, slave, gbe_dev->rx_packet_max); in init_secondary_ports()
3142 list_add_tail(&slave->slave_list, &gbe_dev->secondary_slaves); in init_secondary_ports()
3143 gbe_dev->num_slaves++; in init_secondary_ports()
3149 if (gbe_dev->num_slaves >= gbe_dev->max_num_slaves) { in init_secondary_ports()
3160 gbe_dev->dummy_ndev = alloc_netdev(sizeof(gbe_dev), "dummy", in init_secondary_ports()
3162 if (!gbe_dev->dummy_ndev) { in init_secondary_ports()
3167 priv = netdev_priv(gbe_dev->dummy_ndev); in init_secondary_ports()
3168 *priv = gbe_dev; in init_secondary_ports()
3181 for_each_sec_slave(slave, gbe_dev) { in init_secondary_ports()
3187 of_phy_connect(gbe_dev->dummy_ndev, in init_secondary_ports()
3202 static void free_secondary_ports(struct gbe_priv *gbe_dev) in free_secondary_ports() argument
3206 while (!list_empty(&gbe_dev->secondary_slaves)) { in free_secondary_ports()
3207 slave = first_sec_slave(gbe_dev); in free_secondary_ports()
3213 if (gbe_dev->dummy_ndev) in free_secondary_ports()
3214 free_netdev(gbe_dev->dummy_ndev); in free_secondary_ports()
3217 static int set_xgbe_ethss10_priv(struct gbe_priv *gbe_dev, in set_xgbe_ethss10_priv() argument
3226 dev_err(gbe_dev->dev, in set_xgbe_ethss10_priv()
3232 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_xgbe_ethss10_priv()
3234 dev_err(gbe_dev->dev, "Failed to map xgbe ss register base\n"); in set_xgbe_ethss10_priv()
3237 gbe_dev->ss_regs = regs; in set_xgbe_ethss10_priv()
3241 dev_err(gbe_dev->dev, in set_xgbe_ethss10_priv()
3247 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_xgbe_ethss10_priv()
3249 dev_err(gbe_dev->dev, "Failed to map xgbe sm register base\n"); in set_xgbe_ethss10_priv()
3252 gbe_dev->switch_regs = regs; in set_xgbe_ethss10_priv()
3256 dev_err(gbe_dev->dev, in set_xgbe_ethss10_priv()
3262 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_xgbe_ethss10_priv()
3264 dev_err(gbe_dev->dev, "Failed to map xgbe serdes register base\n"); in set_xgbe_ethss10_priv()
3267 gbe_dev->xgbe_serdes_regs = regs; in set_xgbe_ethss10_priv()
3269 gbe_dev->num_stats_mods = gbe_dev->max_num_ports; in set_xgbe_ethss10_priv()
3270 gbe_dev->et_stats = xgbe10_et_stats; in set_xgbe_ethss10_priv()
3271 gbe_dev->num_et_stats = ARRAY_SIZE(xgbe10_et_stats); in set_xgbe_ethss10_priv()
3273 gbe_dev->hw_stats = devm_kcalloc(gbe_dev->dev, in set_xgbe_ethss10_priv()
3274 gbe_dev->num_et_stats, sizeof(u64), in set_xgbe_ethss10_priv()
3276 if (!gbe_dev->hw_stats) { in set_xgbe_ethss10_priv()
3277 dev_err(gbe_dev->dev, "hw_stats memory allocation failed\n"); in set_xgbe_ethss10_priv()
3281 gbe_dev->hw_stats_prev = in set_xgbe_ethss10_priv()
3282 devm_kcalloc(gbe_dev->dev, in set_xgbe_ethss10_priv()
3283 gbe_dev->num_et_stats, sizeof(u32), in set_xgbe_ethss10_priv()
3285 if (!gbe_dev->hw_stats_prev) { in set_xgbe_ethss10_priv()
3286 dev_err(gbe_dev->dev, in set_xgbe_ethss10_priv()
3291 gbe_dev->ss_version = XGBE_SS_VERSION_10; in set_xgbe_ethss10_priv()
3292 gbe_dev->sgmii_port_regs = gbe_dev->ss_regs + in set_xgbe_ethss10_priv()
3294 gbe_dev->host_port_regs = gbe_dev->ss_regs + XGBE10_HOST_PORT_OFFSET; in set_xgbe_ethss10_priv()
3296 for (i = 0; i < gbe_dev->max_num_ports; i++) in set_xgbe_ethss10_priv()
3297 gbe_dev->hw_stats_regs[i] = gbe_dev->switch_regs + in set_xgbe_ethss10_priv()
3300 gbe_dev->ale_reg = gbe_dev->switch_regs + XGBE10_ALE_OFFSET; in set_xgbe_ethss10_priv()
3301 gbe_dev->cpts_reg = gbe_dev->switch_regs + XGBE10_CPTS_OFFSET; in set_xgbe_ethss10_priv()
3302 gbe_dev->ale_ports = gbe_dev->max_num_ports; in set_xgbe_ethss10_priv()
3303 gbe_dev->host_port = XGBE10_HOST_PORT_NUM; in set_xgbe_ethss10_priv()
3304 gbe_dev->stats_en_mask = (1 << (gbe_dev->max_num_ports)) - 1; in set_xgbe_ethss10_priv()
3307 XGBE_SET_REG_OFS(gbe_dev, ss_regs, id_ver); in set_xgbe_ethss10_priv()
3308 XGBE_SET_REG_OFS(gbe_dev, ss_regs, control); in set_xgbe_ethss10_priv()
3311 XGBE_SET_REG_OFS(gbe_dev, switch_regs, id_ver); in set_xgbe_ethss10_priv()
3312 XGBE_SET_REG_OFS(gbe_dev, switch_regs, control); in set_xgbe_ethss10_priv()
3313 XGBE_SET_REG_OFS(gbe_dev, switch_regs, ptype); in set_xgbe_ethss10_priv()
3314 XGBE_SET_REG_OFS(gbe_dev, switch_regs, stat_port_en); in set_xgbe_ethss10_priv()
3315 XGBE_SET_REG_OFS(gbe_dev, switch_regs, flow_control); in set_xgbe_ethss10_priv()
3318 XGBE_SET_REG_OFS(gbe_dev, host_port_regs, port_vlan); in set_xgbe_ethss10_priv()
3319 XGBE_SET_REG_OFS(gbe_dev, host_port_regs, tx_pri_map); in set_xgbe_ethss10_priv()
3320 XGBE_SET_REG_OFS(gbe_dev, host_port_regs, rx_maxlen); in set_xgbe_ethss10_priv()
3324 static int get_gbe_resource_version(struct gbe_priv *gbe_dev, in get_gbe_resource_version() argument
3333 dev_err(gbe_dev->dev, in get_gbe_resource_version()
3339 regs = devm_ioremap_resource(gbe_dev->dev, &res); in get_gbe_resource_version()
3341 dev_err(gbe_dev->dev, "Failed to map gbe register base\n"); in get_gbe_resource_version()
3344 gbe_dev->ss_regs = regs; in get_gbe_resource_version()
3345 gbe_dev->ss_version = readl(gbe_dev->ss_regs); in get_gbe_resource_version()
3349 static int set_gbe_ethss14_priv(struct gbe_priv *gbe_dev, in set_gbe_ethss14_priv() argument
3358 dev_err(gbe_dev->dev, in set_gbe_ethss14_priv()
3364 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_gbe_ethss14_priv()
3366 dev_err(gbe_dev->dev, in set_gbe_ethss14_priv()
3370 gbe_dev->sgmii_port34_regs = regs; in set_gbe_ethss14_priv()
3374 dev_err(gbe_dev->dev, in set_gbe_ethss14_priv()
3380 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_gbe_ethss14_priv()
3382 dev_err(gbe_dev->dev, in set_gbe_ethss14_priv()
3386 gbe_dev->switch_regs = regs; in set_gbe_ethss14_priv()
3388 gbe_dev->num_stats_mods = gbe_dev->max_num_slaves; in set_gbe_ethss14_priv()
3389 gbe_dev->et_stats = gbe13_et_stats; in set_gbe_ethss14_priv()
3390 gbe_dev->num_et_stats = ARRAY_SIZE(gbe13_et_stats); in set_gbe_ethss14_priv()
3392 gbe_dev->hw_stats = devm_kcalloc(gbe_dev->dev, in set_gbe_ethss14_priv()
3393 gbe_dev->num_et_stats, sizeof(u64), in set_gbe_ethss14_priv()
3395 if (!gbe_dev->hw_stats) { in set_gbe_ethss14_priv()
3396 dev_err(gbe_dev->dev, "hw_stats memory allocation failed\n"); in set_gbe_ethss14_priv()
3400 gbe_dev->hw_stats_prev = in set_gbe_ethss14_priv()
3401 devm_kcalloc(gbe_dev->dev, in set_gbe_ethss14_priv()
3402 gbe_dev->num_et_stats, sizeof(u32), in set_gbe_ethss14_priv()
3404 if (!gbe_dev->hw_stats_prev) { in set_gbe_ethss14_priv()
3405 dev_err(gbe_dev->dev, in set_gbe_ethss14_priv()
3410 gbe_dev->sgmii_port_regs = gbe_dev->ss_regs + GBE13_SGMII_MODULE_OFFSET; in set_gbe_ethss14_priv()
3411 gbe_dev->host_port_regs = gbe_dev->switch_regs + GBE13_HOST_PORT_OFFSET; in set_gbe_ethss14_priv()
3417 for (i = 0; i < gbe_dev->max_num_slaves; i++) { in set_gbe_ethss14_priv()
3418 gbe_dev->hw_stats_regs[i] = in set_gbe_ethss14_priv()
3419 gbe_dev->switch_regs + GBE13_HW_STATS_OFFSET + in set_gbe_ethss14_priv()
3423 gbe_dev->cpts_reg = gbe_dev->switch_regs + GBE13_CPTS_OFFSET; in set_gbe_ethss14_priv()
3424 gbe_dev->ale_reg = gbe_dev->switch_regs + GBE13_ALE_OFFSET; in set_gbe_ethss14_priv()
3425 gbe_dev->ale_ports = gbe_dev->max_num_ports; in set_gbe_ethss14_priv()
3426 gbe_dev->host_port = GBE13_HOST_PORT_NUM; in set_gbe_ethss14_priv()
3427 gbe_dev->stats_en_mask = GBE13_REG_VAL_STAT_ENABLE_ALL; in set_gbe_ethss14_priv()
3430 GBE_SET_REG_OFS(gbe_dev, ss_regs, id_ver); in set_gbe_ethss14_priv()
3433 GBE_SET_REG_OFS(gbe_dev, switch_regs, id_ver); in set_gbe_ethss14_priv()
3434 GBE_SET_REG_OFS(gbe_dev, switch_regs, control); in set_gbe_ethss14_priv()
3435 GBE_SET_REG_OFS(gbe_dev, switch_regs, soft_reset); in set_gbe_ethss14_priv()
3436 GBE_SET_REG_OFS(gbe_dev, switch_regs, stat_port_en); in set_gbe_ethss14_priv()
3437 GBE_SET_REG_OFS(gbe_dev, switch_regs, ptype); in set_gbe_ethss14_priv()
3438 GBE_SET_REG_OFS(gbe_dev, switch_regs, flow_control); in set_gbe_ethss14_priv()
3441 GBE_SET_REG_OFS(gbe_dev, host_port_regs, port_vlan); in set_gbe_ethss14_priv()
3442 GBE_SET_REG_OFS(gbe_dev, host_port_regs, rx_maxlen); in set_gbe_ethss14_priv()
3446 static int set_gbenu_ethss_priv(struct gbe_priv *gbe_dev, in set_gbenu_ethss_priv() argument
3453 gbe_dev->num_stats_mods = gbe_dev->max_num_ports; in set_gbenu_ethss_priv()
3454 gbe_dev->et_stats = gbenu_et_stats; in set_gbenu_ethss_priv()
3456 if (IS_SS_ID_MU(gbe_dev)) in set_gbenu_ethss_priv()
3457 gbe_dev->num_et_stats = GBENU_ET_STATS_HOST_SIZE + in set_gbenu_ethss_priv()
3458 (gbe_dev->max_num_slaves * GBENU_ET_STATS_PORT_SIZE); in set_gbenu_ethss_priv()
3460 gbe_dev->num_et_stats = GBENU_ET_STATS_HOST_SIZE + in set_gbenu_ethss_priv()
3463 gbe_dev->hw_stats = devm_kcalloc(gbe_dev->dev, in set_gbenu_ethss_priv()
3464 gbe_dev->num_et_stats, sizeof(u64), in set_gbenu_ethss_priv()
3466 if (!gbe_dev->hw_stats) { in set_gbenu_ethss_priv()
3467 dev_err(gbe_dev->dev, "hw_stats memory allocation failed\n"); in set_gbenu_ethss_priv()
3471 gbe_dev->hw_stats_prev = in set_gbenu_ethss_priv()
3472 devm_kcalloc(gbe_dev->dev, in set_gbenu_ethss_priv()
3473 gbe_dev->num_et_stats, sizeof(u32), in set_gbenu_ethss_priv()
3475 if (!gbe_dev->hw_stats_prev) { in set_gbenu_ethss_priv()
3476 dev_err(gbe_dev->dev, in set_gbenu_ethss_priv()
3483 dev_err(gbe_dev->dev, in set_gbenu_ethss_priv()
3489 regs = devm_ioremap_resource(gbe_dev->dev, &res); in set_gbenu_ethss_priv()
3491 dev_err(gbe_dev->dev, in set_gbenu_ethss_priv()
3495 gbe_dev->switch_regs = regs; in set_gbenu_ethss_priv()
3497 if (!IS_SS_ID_2U(gbe_dev)) in set_gbenu_ethss_priv()
3498 gbe_dev->sgmii_port_regs = in set_gbenu_ethss_priv()
3499 gbe_dev->ss_regs + GBENU_SGMII_MODULE_OFFSET; in set_gbenu_ethss_priv()
3505 gbe_dev->sgmii_port34_regs = gbe_dev->sgmii_port_regs + in set_gbenu_ethss_priv()
3508 gbe_dev->host_port_regs = gbe_dev->switch_regs + GBENU_HOST_PORT_OFFSET; in set_gbenu_ethss_priv()
3510 for (i = 0; i < (gbe_dev->max_num_ports); i++) in set_gbenu_ethss_priv()
3511 gbe_dev->hw_stats_regs[i] = gbe_dev->switch_regs + in set_gbenu_ethss_priv()
3514 gbe_dev->cpts_reg = gbe_dev->switch_regs + GBENU_CPTS_OFFSET; in set_gbenu_ethss_priv()
3515 gbe_dev->ale_reg = gbe_dev->switch_regs + GBENU_ALE_OFFSET; in set_gbenu_ethss_priv()
3516 gbe_dev->ale_ports = gbe_dev->max_num_ports; in set_gbenu_ethss_priv()
3517 gbe_dev->host_port = GBENU_HOST_PORT_NUM; in set_gbenu_ethss_priv()
3518 gbe_dev->stats_en_mask = (1 << (gbe_dev->max_num_ports)) - 1; in set_gbenu_ethss_priv()
3521 GBENU_SET_REG_OFS(gbe_dev, ss_regs, id_ver); in set_gbenu_ethss_priv()
3523 GBENU_SET_REG_OFS(gbe_dev, ss_regs, rgmii_status); in set_gbenu_ethss_priv()
3526 GBENU_SET_REG_OFS(gbe_dev, switch_regs, id_ver); in set_gbenu_ethss_priv()
3527 GBENU_SET_REG_OFS(gbe_dev, switch_regs, control); in set_gbenu_ethss_priv()
3528 GBENU_SET_REG_OFS(gbe_dev, switch_regs, stat_port_en); in set_gbenu_ethss_priv()
3529 GBENU_SET_REG_OFS(gbe_dev, switch_regs, ptype); in set_gbenu_ethss_priv()
3532 GBENU_SET_REG_OFS(gbe_dev, host_port_regs, port_vlan); in set_gbenu_ethss_priv()
3533 GBENU_SET_REG_OFS(gbe_dev, host_port_regs, rx_maxlen); in set_gbenu_ethss_priv()
3539 GBENU_SET_REG_OFS(gbe_dev, host_port_regs, tx_pri_map); in set_gbenu_ethss_priv()
3549 struct gbe_priv *gbe_dev; in gbe_probe() local
3558 gbe_dev = devm_kzalloc(dev, sizeof(struct gbe_priv), GFP_KERNEL); in gbe_probe()
3559 if (!gbe_dev) in gbe_probe()
3564 gbe_dev->max_num_slaves = 4; in gbe_probe()
3566 gbe_dev->max_num_slaves = 8; in gbe_probe()
3568 gbe_dev->max_num_slaves = 1; in gbe_probe()
3571 gbe_dev->max_num_slaves = 2; in gbe_probe()
3576 gbe_dev->max_num_ports = gbe_dev->max_num_slaves + 1; in gbe_probe()
3578 gbe_dev->dev = dev; in gbe_probe()
3579 gbe_dev->netcp_device = netcp_device; in gbe_probe()
3580 gbe_dev->rx_packet_max = NETCP_MAX_FRAME_SIZE; in gbe_probe()
3583 spin_lock_init(&gbe_dev->hw_stats_lock); in gbe_probe()
3585 gbe_dev->enable_ale = of_property_read_bool(node, "enable-ale"); in gbe_probe()
3586 if (gbe_dev->enable_ale) in gbe_probe()
3592 &gbe_dev->tx_queue_id); in gbe_probe()
3595 gbe_dev->tx_queue_id = GBE_TX_QUEUE; in gbe_probe()
3599 &gbe_dev->dma_chan_name); in gbe_probe()
3606 ret = get_gbe_resource_version(gbe_dev, node); in gbe_probe()
3610 dev_dbg(dev, "ss_version: 0x%08x\n", gbe_dev->ss_version); in gbe_probe()
3612 if (IS_SS_ID_VER_14(gbe_dev)) in gbe_probe()
3613 ret = set_gbe_ethss14_priv(gbe_dev, node); in gbe_probe()
3614 else if (IS_SS_ID_MU(gbe_dev)) in gbe_probe()
3615 ret = set_gbenu_ethss_priv(gbe_dev, node); in gbe_probe()
3620 ret = set_xgbe_ethss10_priv(gbe_dev, node); in gbe_probe()
3623 ret = netcp_xgbe_serdes_init(gbe_dev->xgbe_serdes_regs, in gbe_probe()
3624 gbe_dev->ss_regs); in gbe_probe()
3637 ret = netcp_txpipe_init(&gbe_dev->tx_pipe, netcp_device, in gbe_probe()
3638 gbe_dev->dma_chan_name, gbe_dev->tx_queue_id); in gbe_probe()
3644 ret = netcp_txpipe_open(&gbe_dev->tx_pipe); in gbe_probe()
3651 INIT_LIST_HEAD(&gbe_dev->gbe_intf_head); in gbe_probe()
3659 gbe_dev->num_slaves++; in gbe_probe()
3660 if (gbe_dev->num_slaves >= gbe_dev->max_num_slaves) { in gbe_probe()
3667 if (!gbe_dev->num_slaves) in gbe_probe()
3672 INIT_LIST_HEAD(&gbe_dev->secondary_slaves); in gbe_probe()
3673 if (secondary_ports && (gbe_dev->num_slaves < gbe_dev->max_num_slaves)) in gbe_probe()
3674 init_secondary_ports(gbe_dev, secondary_ports); in gbe_probe()
3677 if (!gbe_dev->num_slaves) { in gbe_probe()
3685 ale_params.dev = gbe_dev->dev; in gbe_probe()
3686 ale_params.ale_regs = gbe_dev->ale_reg; in gbe_probe()
3688 ale_params.ale_ports = gbe_dev->ale_ports; in gbe_probe()
3690 if (IS_SS_ID_NU(gbe_dev)) in gbe_probe()
3692 else if (IS_SS_ID_2U(gbe_dev)) in gbe_probe()
3694 else if (IS_SS_ID_XGBE(gbe_dev)) in gbe_probe()
3697 gbe_dev->ale = cpsw_ale_create(&ale_params); in gbe_probe()
3698 if (IS_ERR(gbe_dev->ale)) { in gbe_probe()
3699 dev_err(gbe_dev->dev, "error initializing ale engine\n"); in gbe_probe()
3700 ret = PTR_ERR(gbe_dev->ale); in gbe_probe()
3703 dev_dbg(gbe_dev->dev, "Created a gbe ale engine\n"); in gbe_probe()
3710 gbe_dev->cpts = cpts_create(gbe_dev->dev, gbe_dev->cpts_reg, in gbe_probe()
3713 if (IS_ENABLED(CONFIG_TI_CPTS) && IS_ERR(gbe_dev->cpts)) { in gbe_probe()
3714 ret = PTR_ERR(gbe_dev->cpts); in gbe_probe()
3719 gbe_init_host_port(gbe_dev); in gbe_probe()
3721 spin_lock_bh(&gbe_dev->hw_stats_lock); in gbe_probe()
3722 for (i = 0; i < gbe_dev->num_stats_mods; i++) { in gbe_probe()
3723 if (IS_SS_ID_VER_14(gbe_dev)) in gbe_probe()
3724 gbe_reset_mod_stats_ver14(gbe_dev, i); in gbe_probe()
3726 gbe_reset_mod_stats(gbe_dev, i); in gbe_probe()
3728 spin_unlock_bh(&gbe_dev->hw_stats_lock); in gbe_probe()
3730 timer_setup(&gbe_dev->timer, netcp_ethss_timer, 0); in gbe_probe()
3731 gbe_dev->timer.expires = jiffies + GBE_TIMER_INTERVAL; in gbe_probe()
3732 add_timer(&gbe_dev->timer); in gbe_probe()
3733 *inst_priv = gbe_dev; in gbe_probe()
3737 free_secondary_ports(gbe_dev); in gbe_probe()
3744 struct gbe_priv *gbe_dev = inst_priv; in gbe_attach() local
3749 dev_err(gbe_dev->dev, "interface node not available\n"); in gbe_attach()
3753 gbe_intf = devm_kzalloc(gbe_dev->dev, sizeof(*gbe_intf), GFP_KERNEL); in gbe_attach()
3758 gbe_intf->dev = gbe_dev->dev; in gbe_attach()
3759 gbe_intf->gbe_dev = gbe_dev; in gbe_attach()
3761 gbe_intf->slave = devm_kzalloc(gbe_dev->dev, in gbe_attach()
3769 if (init_slave(gbe_dev, gbe_intf->slave, node)) { in gbe_attach()
3774 gbe_intf->tx_pipe = gbe_dev->tx_pipe; in gbe_attach()
3776 list_add_tail(&gbe_intf->gbe_intf_list, &gbe_dev->gbe_intf_head); in gbe_attach()
3782 devm_kfree(gbe_dev->dev, gbe_intf->slave); in gbe_attach()
3784 devm_kfree(gbe_dev->dev, gbe_intf); in gbe_attach()
3801 struct gbe_priv *gbe_dev = inst_priv; in gbe_remove() local
3803 timer_delete_sync(&gbe_dev->timer); in gbe_remove()
3804 cpts_release(gbe_dev->cpts); in gbe_remove()
3805 cpsw_ale_stop(gbe_dev->ale); in gbe_remove()
3806 netcp_txpipe_close(&gbe_dev->tx_pipe); in gbe_remove()
3807 free_secondary_ports(gbe_dev); in gbe_remove()
3809 if (!list_empty(&gbe_dev->gbe_intf_head)) in gbe_remove()
3810 dev_alert(gbe_dev->dev, in gbe_remove()