[ Upstream commit f438bfe9d4fe2e491505abfbf04d7c506e00d146 ]

The FEC capbility may be changed with port speed changes. Driver
needs to read the active FEC mode, and update FEC capability
when port speed changes.

Fixes: 7e6ec9148a1d ("net: hns3: add support for FEC encoding control")
Signed-off-by: Jian Shen <shenjia...@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazh...@huawei.com>
Signed-off-by: David S. Miller <da...@davemloft.net>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c 
b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
index d3b1f8cb1155..4d9bcad26f06 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -2508,6 +2508,9 @@ static void hclge_update_link_status(struct hclge_dev 
*hdev)
 
 static void hclge_update_port_capability(struct hclge_mac *mac)
 {
+       /* update fec ability by speed */
+       hclge_convert_setting_fec(mac);
+
        /* firmware can not identify back plane type, the media type
         * read from configuration can help deal it
         */
@@ -2580,6 +2583,10 @@ static int hclge_get_sfp_info(struct hclge_dev *hdev, 
struct hclge_mac *mac)
                mac->speed_ability = le32_to_cpu(resp->speed_ability);
                mac->autoneg = resp->autoneg;
                mac->support_autoneg = resp->autoneg_ability;
+               if (!resp->active_fec)
+                       mac->fec_mode = 0;
+               else
+                       mac->fec_mode = BIT(resp->active_fec);
        } else {
                mac->speed_type = QUERY_SFP_SPEED;
        }
-- 
2.20.1



Reply via email to