hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/drivers/net/ethernet/ti/netcp_ethss.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0
12 /*
23 * Keystone GBE and XGBE subsystem code
34 *
....@@ -7,15 +8,6 @@
78 * Cyril Chemparathy <cyril@ti.com>
89 * Santosh Shilimkar <santosh.shilimkar@ti.com>
910 * Wingman Kwok <w-kwok2@ti.com>
10
- *
11
- * This program is free software; you can redistribute it and/or
12
- * modify it under the terms of the GNU General Public License as
13
- * published by the Free Software Foundation version 2.
14
- *
15
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
16
- * kind, whether express or implied; without even the implied warranty
17
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
- * GNU General Public License for more details.
1911 */
2012
2113 #include <linux/io.h>
....@@ -59,7 +51,6 @@
5951 #define GBE13_CPTS_OFFSET 0x500
6052 #define GBE13_ALE_OFFSET 0x600
6153 #define GBE13_HOST_PORT_NUM 0
62
-#define GBE13_NUM_ALE_ENTRIES 1024
6354
6455 /* 1G Ethernet NU SS defines */
6556 #define GBENU_MODULE_NAME "netcp-gbenu"
....@@ -109,7 +100,6 @@
109100 #define XGBE10_ALE_OFFSET 0x700
110101 #define XGBE10_HW_STATS_OFFSET 0x800
111102 #define XGBE10_HOST_PORT_NUM 0
112
-#define XGBE10_NUM_ALE_ENTRIES 2048
113103
114104 #define GBE_TIMER_INTERVAL (HZ / 2)
115105
....@@ -719,7 +709,6 @@
719709 struct netcp_device *netcp_device;
720710 struct timer_list timer;
721711 u32 num_slaves;
722
- u32 ale_entries;
723712 u32 ale_ports;
724713 bool enable_ale;
725714 u8 max_num_slaves;
....@@ -763,6 +752,8 @@
763752
764753 int cpts_registered;
765754 struct cpts *cpts;
755
+ int rx_ts_enabled;
756
+ int tx_ts_enabled;
766757 };
767758
768759 struct gbe_intf {
....@@ -789,28 +780,28 @@
789780 #define GBE_STATSA_INFO(field) \
790781 { \
791782 "GBE_A:"#field, GBE_STATSA_MODULE, \
792
- FIELD_SIZEOF(struct gbe_hw_stats, field), \
783
+ sizeof_field(struct gbe_hw_stats, field), \
793784 offsetof(struct gbe_hw_stats, field) \
794785 }
795786
796787 #define GBE_STATSB_INFO(field) \
797788 { \
798789 "GBE_B:"#field, GBE_STATSB_MODULE, \
799
- FIELD_SIZEOF(struct gbe_hw_stats, field), \
790
+ sizeof_field(struct gbe_hw_stats, field), \
800791 offsetof(struct gbe_hw_stats, field) \
801792 }
802793
803794 #define GBE_STATSC_INFO(field) \
804795 { \
805796 "GBE_C:"#field, GBE_STATSC_MODULE, \
806
- FIELD_SIZEOF(struct gbe_hw_stats, field), \
797
+ sizeof_field(struct gbe_hw_stats, field), \
807798 offsetof(struct gbe_hw_stats, field) \
808799 }
809800
810801 #define GBE_STATSD_INFO(field) \
811802 { \
812803 "GBE_D:"#field, GBE_STATSD_MODULE, \
813
- FIELD_SIZEOF(struct gbe_hw_stats, field), \
804
+ sizeof_field(struct gbe_hw_stats, field), \
814805 offsetof(struct gbe_hw_stats, field) \
815806 }
816807
....@@ -963,7 +954,7 @@
963954 #define GBENU_STATS_HOST(field) \
964955 { \
965956 "GBE_HOST:"#field, GBENU_STATS0_MODULE, \
966
- FIELD_SIZEOF(struct gbenu_hw_stats, field), \
957
+ sizeof_field(struct gbenu_hw_stats, field), \
967958 offsetof(struct gbenu_hw_stats, field) \
968959 }
969960
....@@ -973,56 +964,56 @@
973964 #define GBENU_STATS_P1(field) \
974965 { \
975966 "GBE_P1:"#field, GBENU_STATS1_MODULE, \
976
- FIELD_SIZEOF(struct gbenu_hw_stats, field), \
967
+ sizeof_field(struct gbenu_hw_stats, field), \
977968 offsetof(struct gbenu_hw_stats, field) \
978969 }
979970
980971 #define GBENU_STATS_P2(field) \
981972 { \
982973 "GBE_P2:"#field, GBENU_STATS2_MODULE, \
983
- FIELD_SIZEOF(struct gbenu_hw_stats, field), \
974
+ sizeof_field(struct gbenu_hw_stats, field), \
984975 offsetof(struct gbenu_hw_stats, field) \
985976 }
986977
987978 #define GBENU_STATS_P3(field) \
988979 { \
989980 "GBE_P3:"#field, GBENU_STATS3_MODULE, \
990
- FIELD_SIZEOF(struct gbenu_hw_stats, field), \
981
+ sizeof_field(struct gbenu_hw_stats, field), \
991982 offsetof(struct gbenu_hw_stats, field) \
992983 }
993984
994985 #define GBENU_STATS_P4(field) \
995986 { \
996987 "GBE_P4:"#field, GBENU_STATS4_MODULE, \
997
- FIELD_SIZEOF(struct gbenu_hw_stats, field), \
988
+ sizeof_field(struct gbenu_hw_stats, field), \
998989 offsetof(struct gbenu_hw_stats, field) \
999990 }
1000991
1001992 #define GBENU_STATS_P5(field) \
1002993 { \
1003994 "GBE_P5:"#field, GBENU_STATS5_MODULE, \
1004
- FIELD_SIZEOF(struct gbenu_hw_stats, field), \
995
+ sizeof_field(struct gbenu_hw_stats, field), \
1005996 offsetof(struct gbenu_hw_stats, field) \
1006997 }
1007998
1008999 #define GBENU_STATS_P6(field) \
10091000 { \
10101001 "GBE_P6:"#field, GBENU_STATS6_MODULE, \
1011
- FIELD_SIZEOF(struct gbenu_hw_stats, field), \
1002
+ sizeof_field(struct gbenu_hw_stats, field), \
10121003 offsetof(struct gbenu_hw_stats, field) \
10131004 }
10141005
10151006 #define GBENU_STATS_P7(field) \
10161007 { \
10171008 "GBE_P7:"#field, GBENU_STATS7_MODULE, \
1018
- FIELD_SIZEOF(struct gbenu_hw_stats, field), \
1009
+ sizeof_field(struct gbenu_hw_stats, field), \
10191010 offsetof(struct gbenu_hw_stats, field) \
10201011 }
10211012
10221013 #define GBENU_STATS_P8(field) \
10231014 { \
10241015 "GBE_P8:"#field, GBENU_STATS8_MODULE, \
1025
- FIELD_SIZEOF(struct gbenu_hw_stats, field), \
1016
+ sizeof_field(struct gbenu_hw_stats, field), \
10261017 offsetof(struct gbenu_hw_stats, field) \
10271018 }
10281019
....@@ -1613,21 +1604,21 @@
16131604 #define XGBE_STATS0_INFO(field) \
16141605 { \
16151606 "GBE_0:"#field, XGBE_STATS0_MODULE, \
1616
- FIELD_SIZEOF(struct xgbe_hw_stats, field), \
1607
+ sizeof_field(struct xgbe_hw_stats, field), \
16171608 offsetof(struct xgbe_hw_stats, field) \
16181609 }
16191610
16201611 #define XGBE_STATS1_INFO(field) \
16211612 { \
16221613 "GBE_1:"#field, XGBE_STATS1_MODULE, \
1623
- FIELD_SIZEOF(struct xgbe_hw_stats, field), \
1614
+ sizeof_field(struct xgbe_hw_stats, field), \
16241615 offsetof(struct xgbe_hw_stats, field) \
16251616 }
16261617
16271618 #define XGBE_STATS2_INFO(field) \
16281619 { \
16291620 "GBE_2:"#field, XGBE_STATS2_MODULE, \
1630
- FIELD_SIZEOF(struct xgbe_hw_stats, field), \
1621
+ sizeof_field(struct xgbe_hw_stats, field), \
16311622 offsetof(struct xgbe_hw_stats, field) \
16321623 }
16331624
....@@ -2297,6 +2288,7 @@
22972288 struct gbe_slave *slave = gbe_intf->slave;
22982289 phy_interface_t phy_mode;
22992290 bool has_phy = false;
2291
+ int err;
23002292
23012293 void (*hndlr)(struct net_device *) = gbe_adjust_link;
23022294
....@@ -2326,11 +2318,11 @@
23262318 slave->phy_port_t = PORT_MII;
23272319 } else if (slave->link_interface == RGMII_LINK_MAC_PHY) {
23282320 has_phy = true;
2329
- phy_mode = of_get_phy_mode(slave->node);
2321
+ err = of_get_phy_mode(slave->node, &phy_mode);
23302322 /* if phy-mode is not present, default to
23312323 * PHY_INTERFACE_MODE_RGMII
23322324 */
2333
- if (phy_mode < 0)
2325
+ if (err)
23342326 phy_mode = PHY_INTERFACE_MODE_RGMII;
23352327
23362328 if (!phy_interface_mode_is_rgmii(phy_mode)) {
....@@ -2538,8 +2530,6 @@
25382530 }
25392531
25402532 #if IS_ENABLED(CONFIG_TI_CPTS)
2541
-#define HAS_PHY_TXTSTAMP(p) ((p)->drv && (p)->drv->txtstamp)
2542
-#define HAS_PHY_RXTSTAMP(p) ((p)->drv && (p)->drv->rxtstamp)
25432533
25442534 static void gbe_txtstamp(void *context, struct sk_buff *skb)
25452535 {
....@@ -2564,14 +2554,14 @@
25642554 struct gbe_priv *gbe_dev = gbe_intf->gbe_dev;
25652555
25662556 if (!(skb_shinfo(p_info->skb)->tx_flags & SKBTX_HW_TSTAMP) ||
2567
- !cpts_is_tx_enabled(gbe_dev->cpts))
2557
+ !gbe_dev->tx_ts_enabled)
25682558 return 0;
25692559
25702560 /* If phy has the txtstamp api, assume it will do it.
25712561 * We mark it here because skb_tx_timestamp() is called
25722562 * after all the txhooks are called.
25732563 */
2574
- if (phydev && HAS_PHY_TXTSTAMP(phydev)) {
2564
+ if (phy_has_txtstamp(phydev)) {
25752565 skb_shinfo(p_info->skb)->tx_flags |= SKBTX_IN_PROGRESS;
25762566 return 0;
25772567 }
....@@ -2593,12 +2583,14 @@
25932583 if (p_info->rxtstamp_complete)
25942584 return 0;
25952585
2596
- if (phydev && HAS_PHY_RXTSTAMP(phydev)) {
2586
+ if (phy_has_rxtstamp(phydev)) {
25972587 p_info->rxtstamp_complete = true;
25982588 return 0;
25992589 }
26002590
2601
- cpts_rx_timestamp(gbe_dev->cpts, p_info->skb);
2591
+ if (gbe_dev->rx_ts_enabled)
2592
+ cpts_rx_timestamp(gbe_dev->cpts, p_info->skb);
2593
+
26022594 p_info->rxtstamp_complete = true;
26032595
26042596 return 0;
....@@ -2614,10 +2606,8 @@
26142606 return -EOPNOTSUPP;
26152607
26162608 cfg.flags = 0;
2617
- cfg.tx_type = cpts_is_tx_enabled(cpts) ?
2618
- HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF;
2619
- cfg.rx_filter = (cpts_is_rx_enabled(cpts) ?
2620
- cpts->rx_enable : HWTSTAMP_FILTER_NONE);
2609
+ cfg.tx_type = gbe_dev->tx_ts_enabled ? HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF;
2610
+ cfg.rx_filter = gbe_dev->rx_ts_enabled;
26212611
26222612 return copy_to_user(ifr->ifr_data, &cfg, sizeof(cfg)) ? -EFAULT : 0;
26232613 }
....@@ -2628,8 +2618,8 @@
26282618 struct gbe_slave *slave = gbe_intf->slave;
26292619 u32 ts_en, seq_id, ctl;
26302620
2631
- if (!cpts_is_rx_enabled(gbe_dev->cpts) &&
2632
- !cpts_is_tx_enabled(gbe_dev->cpts)) {
2621
+ if (!gbe_dev->rx_ts_enabled &&
2622
+ !gbe_dev->tx_ts_enabled) {
26332623 writel(0, GBE_REG_ADDR(slave, port_regs, ts_ctl));
26342624 return;
26352625 }
....@@ -2641,10 +2631,10 @@
26412631 (slave->ts_ctl.uni ? TS_UNI_EN :
26422632 slave->ts_ctl.maddr_map << TS_CTL_MADDR_SHIFT);
26432633
2644
- if (cpts_is_tx_enabled(gbe_dev->cpts))
2634
+ if (gbe_dev->tx_ts_enabled)
26452635 ts_en |= (TS_TX_ANX_ALL_EN | TS_TX_VLAN_LT1_EN);
26462636
2647
- if (cpts_is_rx_enabled(gbe_dev->cpts))
2637
+ if (gbe_dev->rx_ts_enabled)
26482638 ts_en |= (TS_RX_ANX_ALL_EN | TS_RX_VLAN_LT1_EN);
26492639
26502640 writel(ts_en, GBE_REG_ADDR(slave, port_regs, ts_ctl));
....@@ -2670,10 +2660,10 @@
26702660
26712661 switch (cfg.tx_type) {
26722662 case HWTSTAMP_TX_OFF:
2673
- cpts_tx_enable(cpts, 0);
2663
+ gbe_dev->tx_ts_enabled = 0;
26742664 break;
26752665 case HWTSTAMP_TX_ON:
2676
- cpts_tx_enable(cpts, 1);
2666
+ gbe_dev->tx_ts_enabled = 1;
26772667 break;
26782668 default:
26792669 return -ERANGE;
....@@ -2681,12 +2671,12 @@
26812671
26822672 switch (cfg.rx_filter) {
26832673 case HWTSTAMP_FILTER_NONE:
2684
- cpts_rx_enable(cpts, 0);
2674
+ gbe_dev->rx_ts_enabled = HWTSTAMP_FILTER_NONE;
26852675 break;
26862676 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
26872677 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
26882678 case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
2689
- cpts_rx_enable(cpts, HWTSTAMP_FILTER_PTP_V1_L4_EVENT);
2679
+ gbe_dev->rx_ts_enabled = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
26902680 cfg.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
26912681 break;
26922682 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
....@@ -2698,7 +2688,7 @@
26982688 case HWTSTAMP_FILTER_PTP_V2_EVENT:
26992689 case HWTSTAMP_FILTER_PTP_V2_SYNC:
27002690 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
2701
- cpts_rx_enable(cpts, HWTSTAMP_FILTER_PTP_V2_EVENT);
2691
+ gbe_dev->rx_ts_enabled = HWTSTAMP_FILTER_PTP_V2_EVENT;
27022692 cfg.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
27032693 break;
27042694 default:
....@@ -2835,7 +2825,7 @@
28352825 struct gbe_intf *gbe_intf = intf_priv;
28362826 struct phy_device *phy = gbe_intf->slave->phy;
28372827
2838
- if (!phy || !phy->drv->hwtstamp) {
2828
+ if (!phy_has_hwtstamp(phy)) {
28392829 switch (cmd) {
28402830 case SIOCGHWTSTAMP:
28412831 return gbe_hwtstamp_get(gbe_intf, req);
....@@ -3137,15 +3127,15 @@
31373127 for_each_child_of_node(node, port) {
31383128 slave = devm_kzalloc(dev, sizeof(*slave), GFP_KERNEL);
31393129 if (!slave) {
3140
- dev_err(dev, "memory alloc failed for secondary port(%s), skipping...\n",
3141
- port->name);
3130
+ dev_err(dev, "memory alloc failed for secondary port(%pOFn), skipping...\n",
3131
+ port);
31423132 continue;
31433133 }
31443134
31453135 if (init_slave(gbe_dev, slave, port)) {
31463136 dev_err(dev,
3147
- "Failed to initialize secondary port(%s), skipping...\n",
3148
- port->name);
3137
+ "Failed to initialize secondary port(%pOFn), skipping...\n",
3138
+ port);
31493139 devm_kfree(dev, slave);
31503140 continue;
31513141 }
....@@ -3239,8 +3229,8 @@
32393229 ret = of_address_to_resource(node, XGBE_SS_REG_INDEX, &res);
32403230 if (ret) {
32413231 dev_err(gbe_dev->dev,
3242
- "Can't xlate xgbe of node(%s) ss address at %d\n",
3243
- node->name, XGBE_SS_REG_INDEX);
3232
+ "Can't xlate xgbe of node(%pOFn) ss address at %d\n",
3233
+ node, XGBE_SS_REG_INDEX);
32443234 return ret;
32453235 }
32463236
....@@ -3254,8 +3244,8 @@
32543244 ret = of_address_to_resource(node, XGBE_SM_REG_INDEX, &res);
32553245 if (ret) {
32563246 dev_err(gbe_dev->dev,
3257
- "Can't xlate xgbe of node(%s) sm address at %d\n",
3258
- node->name, XGBE_SM_REG_INDEX);
3247
+ "Can't xlate xgbe of node(%pOFn) sm address at %d\n",
3248
+ node, XGBE_SM_REG_INDEX);
32593249 return ret;
32603250 }
32613251
....@@ -3269,8 +3259,8 @@
32693259 ret = of_address_to_resource(node, XGBE_SERDES_REG_INDEX, &res);
32703260 if (ret) {
32713261 dev_err(gbe_dev->dev,
3272
- "Can't xlate xgbe serdes of node(%s) address at %d\n",
3273
- node->name, XGBE_SERDES_REG_INDEX);
3262
+ "Can't xlate xgbe serdes of node(%pOFn) address at %d\n",
3263
+ node, XGBE_SERDES_REG_INDEX);
32743264 return ret;
32753265 }
32763266
....@@ -3316,7 +3306,6 @@
33163306 gbe_dev->cpts_reg = gbe_dev->switch_regs + XGBE10_CPTS_OFFSET;
33173307 gbe_dev->ale_ports = gbe_dev->max_num_ports;
33183308 gbe_dev->host_port = XGBE10_HOST_PORT_NUM;
3319
- gbe_dev->ale_entries = XGBE10_NUM_ALE_ENTRIES;
33203309 gbe_dev->stats_en_mask = (1 << (gbe_dev->max_num_ports)) - 1;
33213310
33223311 /* Subsystem registers */
....@@ -3347,8 +3336,8 @@
33473336 ret = of_address_to_resource(node, GBE_SS_REG_INDEX, &res);
33483337 if (ret) {
33493338 dev_err(gbe_dev->dev,
3350
- "Can't translate of node(%s) of gbe ss address at %d\n",
3351
- node->name, GBE_SS_REG_INDEX);
3339
+ "Can't translate of node(%pOFn) of gbe ss address at %d\n",
3340
+ node, GBE_SS_REG_INDEX);
33523341 return ret;
33533342 }
33543343
....@@ -3372,8 +3361,8 @@
33723361 ret = of_address_to_resource(node, GBE_SGMII34_REG_INDEX, &res);
33733362 if (ret) {
33743363 dev_err(gbe_dev->dev,
3375
- "Can't translate of gbe node(%s) address at index %d\n",
3376
- node->name, GBE_SGMII34_REG_INDEX);
3364
+ "Can't translate of gbe node(%pOFn) address at index %d\n",
3365
+ node, GBE_SGMII34_REG_INDEX);
33773366 return ret;
33783367 }
33793368
....@@ -3388,8 +3377,8 @@
33883377 ret = of_address_to_resource(node, GBE_SM_REG_INDEX, &res);
33893378 if (ret) {
33903379 dev_err(gbe_dev->dev,
3391
- "Can't translate of gbe node(%s) address at index %d\n",
3392
- node->name, GBE_SM_REG_INDEX);
3380
+ "Can't translate of gbe node(%pOFn) address at index %d\n",
3381
+ node, GBE_SM_REG_INDEX);
33933382 return ret;
33943383 }
33953384
....@@ -3440,7 +3429,6 @@
34403429 gbe_dev->ale_reg = gbe_dev->switch_regs + GBE13_ALE_OFFSET;
34413430 gbe_dev->ale_ports = gbe_dev->max_num_ports;
34423431 gbe_dev->host_port = GBE13_HOST_PORT_NUM;
3443
- gbe_dev->ale_entries = GBE13_NUM_ALE_ENTRIES;
34443432 gbe_dev->stats_en_mask = GBE13_REG_VAL_STAT_ENABLE_ALL;
34453433
34463434 /* Subsystem registers */
....@@ -3498,8 +3486,8 @@
34983486 ret = of_address_to_resource(node, GBENU_SM_REG_INDEX, &res);
34993487 if (ret) {
35003488 dev_err(gbe_dev->dev,
3501
- "Can't translate of gbenu node(%s) addr at index %d\n",
3502
- node->name, GBENU_SM_REG_INDEX);
3489
+ "Can't translate of gbenu node(%pOFn) addr at index %d\n",
3490
+ node, GBENU_SM_REG_INDEX);
35033491 return ret;
35043492 }
35053493
....@@ -3560,7 +3548,7 @@
35603548 static int gbe_probe(struct netcp_device *netcp_device, struct device *dev,
35613549 struct device_node *node, void **inst_priv)
35623550 {
3563
- struct device_node *interfaces, *interface;
3551
+ struct device_node *interfaces, *interface, *cpts_node;
35643552 struct device_node *secondary_ports;
35653553 struct cpsw_ale_params ale_params;
35663554 struct gbe_priv *gbe_dev;
....@@ -3621,7 +3609,7 @@
36213609 return -EINVAL;
36223610 }
36233611
3624
- if (!strcmp(node->name, "gbe")) {
3612
+ if (of_node_name_eq(node, "gbe")) {
36253613 ret = get_gbe_resource_version(gbe_dev, node);
36263614 if (ret)
36273615 return ret;
....@@ -3635,14 +3623,14 @@
36353623 else
36363624 ret = -ENODEV;
36373625
3638
- } else if (!strcmp(node->name, "xgbe")) {
3626
+ } else if (of_node_name_eq(node, "xgbe")) {
36393627 ret = set_xgbe_ethss10_priv(gbe_dev, node);
36403628 if (ret)
36413629 return ret;
36423630 ret = netcp_xgbe_serdes_init(gbe_dev->xgbe_serdes_regs,
36433631 gbe_dev->ss_regs);
36443632 } else {
3645
- dev_err(dev, "unknown GBE node(%s)\n", node->name);
3633
+ dev_err(dev, "unknown GBE node(%pOFn)\n", node);
36463634 ret = -ENODEV;
36473635 }
36483636
....@@ -3671,8 +3659,8 @@
36713659 for_each_child_of_node(interfaces, interface) {
36723660 ret = of_property_read_u32(interface, "slave-port", &slave_num);
36733661 if (ret) {
3674
- dev_err(dev, "missing slave-port parameter, skipping interface configuration for %s\n",
3675
- interface->name);
3662
+ dev_err(dev, "missing slave-port parameter, skipping interface configuration for %pOFn\n",
3663
+ interface);
36763664 continue;
36773665 }
36783666 gbe_dev->num_slaves++;
....@@ -3704,22 +3692,31 @@
37043692 ale_params.dev = gbe_dev->dev;
37053693 ale_params.ale_regs = gbe_dev->ale_reg;
37063694 ale_params.ale_ageout = GBE_DEFAULT_ALE_AGEOUT;
3707
- ale_params.ale_entries = gbe_dev->ale_entries;
37083695 ale_params.ale_ports = gbe_dev->ale_ports;
3709
- if (IS_SS_ID_MU(gbe_dev)) {
3710
- ale_params.major_ver_mask = 0x7;
3711
- ale_params.nu_switch_ale = true;
3712
- }
3696
+ ale_params.dev_id = "cpsw";
3697
+ if (IS_SS_ID_NU(gbe_dev))
3698
+ ale_params.dev_id = "66ak2el";
3699
+ else if (IS_SS_ID_2U(gbe_dev))
3700
+ ale_params.dev_id = "66ak2g";
3701
+ else if (IS_SS_ID_XGBE(gbe_dev))
3702
+ ale_params.dev_id = "66ak2h-xgbe";
3703
+
37133704 gbe_dev->ale = cpsw_ale_create(&ale_params);
3714
- if (!gbe_dev->ale) {
3705
+ if (IS_ERR(gbe_dev->ale)) {
37153706 dev_err(gbe_dev->dev, "error initializing ale engine\n");
3716
- ret = -ENODEV;
3707
+ ret = PTR_ERR(gbe_dev->ale);
37173708 goto free_sec_ports;
37183709 } else {
37193710 dev_dbg(gbe_dev->dev, "Created a gbe ale engine\n");
37203711 }
37213712
3722
- gbe_dev->cpts = cpts_create(gbe_dev->dev, gbe_dev->cpts_reg, node);
3713
+ cpts_node = of_get_child_by_name(node, "cpts");
3714
+ if (!cpts_node)
3715
+ cpts_node = of_node_get(node);
3716
+
3717
+ gbe_dev->cpts = cpts_create(gbe_dev->dev, gbe_dev->cpts_reg,
3718
+ cpts_node, 0);
3719
+ of_node_put(cpts_node);
37233720 if (IS_ENABLED(CONFIG_TI_CPTS) && IS_ERR(gbe_dev->cpts)) {
37243721 ret = PTR_ERR(gbe_dev->cpts);
37253722 goto free_sec_ports;