eth_fec |= ETHTOOL_FEC_LLRS;
        if (loc_fec & BIT(HNAE3_FEC_BASER))
                eth_fec |= ETHTOOL_FEC_BASER;
-
-       /* if nothing is set, then FEC is off */
-       if (!eth_fec)
-               eth_fec = ETHTOOL_FEC_OFF;
+       if (loc_fec & BIT(HNAE3_FEC_NONE))
+               eth_fec |= ETHTOOL_FEC_OFF;
 
        return eth_fec;
 }
        u32 loc_fec = 0;
 
        if (eth_fec & ETHTOOL_FEC_OFF)
-               return loc_fec;
-
+               loc_fec |= BIT(HNAE3_FEC_NONE);
        if (eth_fec & ETHTOOL_FEC_AUTO)
                loc_fec |= BIT(HNAE3_FEC_AUTO);
        if (eth_fec & ETHTOOL_FEC_RS)
 
        fec->fec = loc_to_eth_fec(fec_ability);
        fec->active_fec = loc_to_eth_fec(fec_mode);
+       if (!fec->active_fec)
+               fec->active_fec = ETHTOOL_FEC_OFF;
 
        return 0;
 }
 
        linkmode_clear_bit(ETHTOOL_LINK_MODE_FEC_BASER_BIT, mac->supported);
        linkmode_clear_bit(ETHTOOL_LINK_MODE_FEC_RS_BIT, mac->supported);
        linkmode_clear_bit(ETHTOOL_LINK_MODE_FEC_LLRS_BIT, mac->supported);
+       linkmode_clear_bit(ETHTOOL_LINK_MODE_FEC_NONE_BIT, mac->supported);
 
        if (mac->fec_ability & BIT(HNAE3_FEC_BASER))
                linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_BASER_BIT,
        if (mac->fec_ability & BIT(HNAE3_FEC_LLRS))
                linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_LLRS_BIT,
                                 mac->supported);
+       if (mac->fec_ability & BIT(HNAE3_FEC_NONE))
+               linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_NONE_BIT,
+                                mac->supported);
 }
 
 static void hclge_convert_setting_sr(u16 speed_ability,
        switch (mac->speed) {
        case HCLGE_MAC_SPEED_10G:
        case HCLGE_MAC_SPEED_40G:
-               mac->fec_ability =
-                       BIT(HNAE3_FEC_BASER) | BIT(HNAE3_FEC_AUTO);
+               mac->fec_ability = BIT(HNAE3_FEC_BASER) | BIT(HNAE3_FEC_AUTO) |
+                                  BIT(HNAE3_FEC_NONE);
                break;
        case HCLGE_MAC_SPEED_25G:
        case HCLGE_MAC_SPEED_50G:
-               mac->fec_ability =
-                       BIT(HNAE3_FEC_BASER) | BIT(HNAE3_FEC_RS) |
-                       BIT(HNAE3_FEC_AUTO);
+               mac->fec_ability = BIT(HNAE3_FEC_BASER) | BIT(HNAE3_FEC_RS) |
+                                  BIT(HNAE3_FEC_AUTO) | BIT(HNAE3_FEC_NONE);
                break;
        case HCLGE_MAC_SPEED_100G:
-               mac->fec_ability = BIT(HNAE3_FEC_RS) | BIT(HNAE3_FEC_AUTO);
+               mac->fec_ability = BIT(HNAE3_FEC_RS) | BIT(HNAE3_FEC_AUTO) |
+                                  BIT(HNAE3_FEC_NONE);
                break;
        case HCLGE_MAC_SPEED_200G:
                mac->fec_ability = BIT(HNAE3_FEC_RS) | BIT(HNAE3_FEC_AUTO) |