}
 }
 
+/**
+ * i40e_get_settings_link_up_fec - Get the FEC mode encoding from mask
+ * @req_fec_info: mask request FEC info
+ * @ks: ethtool ksettings to fill in
+ **/
+static void i40e_get_settings_link_up_fec(u8 req_fec_info,
+                                         struct ethtool_link_ksettings *ks)
+{
+       ethtool_link_ksettings_add_link_mode(ks, supported, FEC_NONE);
+       ethtool_link_ksettings_add_link_mode(ks, supported, FEC_RS);
+       ethtool_link_ksettings_add_link_mode(ks, supported, FEC_BASER);
+
+       if (I40E_AQ_SET_FEC_REQUEST_RS & req_fec_info) {
+               ethtool_link_ksettings_add_link_mode(ks, advertising, FEC_RS);
+       } else if (I40E_AQ_SET_FEC_REQUEST_KR & req_fec_info) {
+               ethtool_link_ksettings_add_link_mode(ks, advertising,
+                                                    FEC_BASER);
+       } else {
+               ethtool_link_ksettings_add_link_mode(ks, advertising,
+                                                    FEC_NONE);
+               if (I40E_AQ_SET_FEC_AUTO & req_fec_info) {
+                       ethtool_link_ksettings_add_link_mode(ks, advertising,
+                                                            FEC_RS);
+                       ethtool_link_ksettings_add_link_mode(ks, advertising,
+                                                            FEC_BASER);
+               }
+       }
+}
+
 /**
  * i40e_get_settings_link_up - Get the Link settings for when link is up
  * @hw: hw structure
                                                     25000baseSR_Full);
                ethtool_link_ksettings_add_link_mode(ks, advertising,
                                                     25000baseSR_Full);
-               ethtool_link_ksettings_add_link_mode(ks, supported, FEC_NONE);
-               ethtool_link_ksettings_add_link_mode(ks, supported, FEC_RS);
-               ethtool_link_ksettings_add_link_mode(ks, supported, FEC_BASER);
-               ethtool_link_ksettings_add_link_mode(ks, advertising, FEC_NONE);
-               ethtool_link_ksettings_add_link_mode(ks, advertising, FEC_RS);
-               ethtool_link_ksettings_add_link_mode(ks, advertising,
-                                                    FEC_BASER);
+               i40e_get_settings_link_up_fec(hw_link_info->req_fec_info, ks);
                ethtool_link_ksettings_add_link_mode(ks, supported,
                                                     10000baseSR_Full);
                ethtool_link_ksettings_add_link_mode(ks, advertising,
                                                     40000baseKR4_Full);
                ethtool_link_ksettings_add_link_mode(ks, supported,
                                                     25000baseKR_Full);
-               ethtool_link_ksettings_add_link_mode(ks, supported, FEC_NONE);
-               ethtool_link_ksettings_add_link_mode(ks, supported, FEC_RS);
-               ethtool_link_ksettings_add_link_mode(ks, supported, FEC_BASER);
                ethtool_link_ksettings_add_link_mode(ks, supported,
                                                     20000baseKR2_Full);
                ethtool_link_ksettings_add_link_mode(ks, supported,
                                                     40000baseKR4_Full);
                ethtool_link_ksettings_add_link_mode(ks, advertising,
                                                     25000baseKR_Full);
-               ethtool_link_ksettings_add_link_mode(ks, advertising, FEC_NONE);
-               ethtool_link_ksettings_add_link_mode(ks, advertising, FEC_RS);
-               ethtool_link_ksettings_add_link_mode(ks, advertising,
-                                                    FEC_BASER);
+               i40e_get_settings_link_up_fec(hw_link_info->req_fec_info, ks);
                ethtool_link_ksettings_add_link_mode(ks, advertising,
                                                     20000baseKR2_Full);
                ethtool_link_ksettings_add_link_mode(ks, advertising,
                                                     25000baseCR_Full);
                ethtool_link_ksettings_add_link_mode(ks, advertising,
                                                     25000baseCR_Full);
-               ethtool_link_ksettings_add_link_mode(ks, supported, FEC_NONE);
-               ethtool_link_ksettings_add_link_mode(ks, supported, FEC_RS);
-               ethtool_link_ksettings_add_link_mode(ks, supported, FEC_BASER);
-               ethtool_link_ksettings_add_link_mode(ks, advertising, FEC_NONE);
-               ethtool_link_ksettings_add_link_mode(ks, advertising, FEC_RS);
-               ethtool_link_ksettings_add_link_mode(ks, advertising,
-                                                    FEC_BASER);
+               i40e_get_settings_link_up_fec(hw_link_info->req_fec_info, ks);
+
                break;
        case I40E_PHY_TYPE_25GBASE_AOC:
        case I40E_PHY_TYPE_25GBASE_ACC:
                                                     25000baseCR_Full);
                ethtool_link_ksettings_add_link_mode(ks, advertising,
                                                     25000baseCR_Full);
-               ethtool_link_ksettings_add_link_mode(ks, supported, FEC_NONE);
-               ethtool_link_ksettings_add_link_mode(ks, supported, FEC_RS);
-               ethtool_link_ksettings_add_link_mode(ks, supported, FEC_BASER);
-               ethtool_link_ksettings_add_link_mode(ks, advertising, FEC_NONE);
-               ethtool_link_ksettings_add_link_mode(ks, advertising, FEC_RS);
-               ethtool_link_ksettings_add_link_mode(ks, advertising,
-                                                    FEC_BASER);
+               i40e_get_settings_link_up_fec(hw_link_info->req_fec_info, ks);
+
                ethtool_link_ksettings_add_link_mode(ks, supported,
                                                     10000baseCR_Full);
                ethtool_link_ksettings_add_link_mode(ks, advertising,