net/dpaa: support 2.5G
authorSachin Saxena <sachin.saxena@nxp.com>
Tue, 7 Jul 2020 09:22:25 +0000 (14:52 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Sat, 11 Jul 2020 04:18:52 +0000 (06:18 +0200)
Handle 2.5Gbps ethernet ports as well.

Signed-off-by: Sachin Saxena <sachin.saxena@nxp.com>
Signed-off-by: Gagandeep Singh <g.singh@nxp.com>
doc/guides/nics/features/dpaa.ini
drivers/bus/dpaa/base/fman/fman.c
drivers/bus/dpaa/base/fman/netcfg_layer.c
drivers/bus/dpaa/include/fman.h
drivers/net/dpaa/dpaa_ethdev.c

index 24cfd85..b00f46a 100644 (file)
@@ -4,7 +4,7 @@
 ; Refer to default.ini for the full list of available PMD features.
 ;
 [Features]
-Speed capabilities   = P
+Speed capabilities   = Y
 Link status          = Y
 Jumbo frame          = Y
 MTU update           = Y
index 6d77a7e..ae26041 100644 (file)
@@ -263,7 +263,7 @@ fman_if_init(const struct device_node *dpa_node)
                fman_dealloc_bufs_mask_hi = 0;
                fman_dealloc_bufs_mask_lo = 0;
        }
-       /* Is the MAC node 1G, 10G? */
+       /* Is the MAC node 1G, 2.5G, 10G? */
        __if->__if.is_memac = 0;
 
        if (of_device_is_compatible(mac_node, "fsl,fman-1g-mac"))
@@ -279,7 +279,9 @@ fman_if_init(const struct device_node *dpa_node)
                        /* Right now forcing memac to 1g in case of error*/
                        __if->__if.mac_type = fman_mac_1g;
                } else {
-                       if (strstr(char_prop, "sgmii"))
+                       if (strstr(char_prop, "sgmii-2500"))
+                               __if->__if.mac_type = fman_mac_2_5g;
+                       else if (strstr(char_prop, "sgmii"))
                                __if->__if.mac_type = fman_mac_1g;
                        else if (strstr(char_prop, "rgmii")) {
                                __if->__if.mac_type = fman_mac_1g;
index 36eca88..b7009f2 100644 (file)
@@ -44,7 +44,8 @@ dump_netcfg(struct netcfg_info *cfg_ptr)
 
                printf("\n+ Fman %d, MAC %d (%s);\n",
                       __if->fman_idx, __if->mac_idx,
-                      (__if->mac_type == fman_mac_1g) ? "1G" : "10G");
+                      (__if->mac_type == fman_mac_1g) ? "1G" :
+                      (__if->mac_type == fman_mac_2_5g) ? "2.5G" : "10G");
 
                printf("\tmac_addr: %02x:%02x:%02x:%02x:%02x:%02x\n",
                       (&__if->mac_addr)->addr_bytes[0],
index c02d32d..b6293b6 100644 (file)
@@ -72,6 +72,7 @@ enum fman_mac_type {
        fman_offline = 0,
        fman_mac_1g,
        fman_mac_10g,
+       fman_mac_2_5g,
 };
 
 struct mac_addr {
index fd2c0c6..c0ded90 100644 (file)
@@ -356,8 +356,13 @@ static int dpaa_eth_dev_info(struct rte_eth_dev *dev,
 
        if (dpaa_intf->fif->mac_type == fman_mac_1g) {
                dev_info->speed_capa = ETH_LINK_SPEED_1G;
+       } else if (dpaa_intf->fif->mac_type == fman_mac_2_5g) {
+               dev_info->speed_capa = ETH_LINK_SPEED_1G
+                                       | ETH_LINK_SPEED_2_5G;
        } else if (dpaa_intf->fif->mac_type == fman_mac_10g) {
-               dev_info->speed_capa = (ETH_LINK_SPEED_1G | ETH_LINK_SPEED_10G);
+               dev_info->speed_capa = ETH_LINK_SPEED_1G
+                                       | ETH_LINK_SPEED_2_5G
+                                       | ETH_LINK_SPEED_10G;
        } else {
                DPAA_PMD_ERR("invalid link_speed: %s, %d",
                             dpaa_intf->name, dpaa_intf->fif->mac_type);
@@ -388,6 +393,8 @@ static int dpaa_eth_link_update(struct rte_eth_dev *dev,
 
        if (dpaa_intf->fif->mac_type == fman_mac_1g)
                link->link_speed = ETH_SPEED_NUM_1G;
+       else if (dpaa_intf->fif->mac_type == fman_mac_2_5g)
+               link->link_speed = ETH_SPEED_NUM_2_5G;
        else if (dpaa_intf->fif->mac_type == fman_mac_10g)
                link->link_speed = ETH_SPEED_NUM_10G;
        else