if (hw_link_info->requested_speeds & I40E_LINK_SPEED_10GB)
                        ethtool_link_ksettings_add_link_mode(ks, advertising,
                                                             10000baseT_Full);
+               i40e_get_settings_link_up_fec(hw_link_info->req_fec_info, ks);
                break;
        case I40E_PHY_TYPE_SGMII:
                ethtool_link_ksettings_add_link_mode(ks, supported, Autoneg);
        struct i40e_pf *pf = np->vsi->back;
        struct i40e_hw *hw = &pf->hw;
        u8 fec_cfg = 0;
-       int err = 0;
 
        if (hw->device_id != I40E_DEV_ID_25G_SFP28 &&
-           hw->device_id != I40E_DEV_ID_25G_B) {
-               err = -EPERM;
-               goto done;
+           hw->device_id != I40E_DEV_ID_25G_B &&
+           hw->device_id != I40E_DEV_ID_KX_X722)
+               return -EPERM;
+
+       if (hw->mac.type == I40E_MAC_X722 &&
+           !(hw->flags & I40E_HW_FLAG_X722_FEC_REQUEST_CAPABLE)) {
+               netdev_err(netdev, "Setting FEC encoding not supported by firmware. Please update the NVM image.\n");
+               return -EOPNOTSUPP;
        }
 
        switch (fecparam->fec) {
        default:
                dev_warn(&pf->pdev->dev, "Unsupported FEC mode: %d",
                         fecparam->fec);
-               err = -EINVAL;
-               goto done;
+               return -EINVAL;
        }
 
-       err = i40e_set_fec_cfg(netdev, fec_cfg);
-
-done:
-       return err;
+       return i40e_set_fec_cfg(netdev, fec_cfg);
 }
 
 static int i40e_nway_reset(struct net_device *netdev)
                }
        }
 
-       if (((changed_flags & I40E_FLAG_RS_FEC) ||
-            (changed_flags & I40E_FLAG_BASE_R_FEC)) &&
+       if (changed_flags & I40E_FLAG_RS_FEC &&
            pf->hw.device_id != I40E_DEV_ID_25G_SFP28 &&
            pf->hw.device_id != I40E_DEV_ID_25G_B) {
                dev_warn(&pf->pdev->dev,
                return -EOPNOTSUPP;
        }
 
+       if (changed_flags & I40E_FLAG_BASE_R_FEC &&
+           pf->hw.device_id != I40E_DEV_ID_25G_SFP28 &&
+           pf->hw.device_id != I40E_DEV_ID_25G_B &&
+           pf->hw.device_id != I40E_DEV_ID_KX_X722) {
+               dev_warn(&pf->pdev->dev,
+                        "Device does not support changing FEC configuration\n");
+               return -EOPNOTSUPP;
+       }
+
        /* Process any additional changes needed as a result of flag changes.
         * The changed_flags value reflects the list of bits that were
         * changed in the code above.
 
                        else
                                req_fec = "CL74 FC-FEC/BASE-R";
                }
+               netdev_info(vsi->netdev,
+                           "NIC Link is Up, %sbps Full Duplex, Requested FEC: %s, Negotiated FEC: %s, Autoneg: %s, Flow Control: %s\n",
+                           speed, req_fec, fec, an, fc);
+       } else if (pf->hw.device_id == I40E_DEV_ID_KX_X722) {
+               req_fec = "None";
+               fec = "None";
+               an = "False";
+
+               if (pf->hw.phy.link_info.an_info & I40E_AQ_AN_COMPLETED)
+                       an = "True";
+
+               if (pf->hw.phy.link_info.fec_info &
+                   I40E_AQ_CONFIG_FEC_KR_ENA)
+                       fec = "CL74 FC-FEC/BASE-R";
+
+               if (pf->hw.phy.link_info.req_fec_info &
+                   I40E_AQ_REQUEST_FEC_KR)
+                       req_fec = "CL74 FC-FEC/BASE-R";
+
                netdev_info(vsi->netdev,
                            "NIC Link is Up, %sbps Full Duplex, Requested FEC: %s, Negotiated FEC: %s, Autoneg: %s, Flow Control: %s\n",
                            speed, req_fec, fec, an, fc);