#define ICE_AQ_LINK_SPEED_100GB                BIT(10)
 #define ICE_AQ_LINK_SPEED_200GB                BIT(11)
 #define ICE_AQ_LINK_SPEED_UNKNOWN      BIT(15)
-       __le32 reserved3; /* Aligns next field to 8-byte boundary */
-       __le64 phy_type_low; /* Use values from ICE_PHY_TYPE_LOW_* */
-       __le64 phy_type_high; /* Use values from ICE_PHY_TYPE_HIGH_* */
-};
+       /* Aligns next field to 8-byte boundary */
+       __le16 reserved3;
+       u8 ext_fec_status;
+       /* RS 272 FEC enabled */
+#define ICE_AQ_LINK_RS_272_FEC_EN      BIT(0)
+       u8 reserved4;
+       /* Use values from ICE_PHY_TYPE_LOW_* */
+       __le64 phy_type_low;
+       /* Use values from ICE_PHY_TYPE_HIGH_* */
+       __le64 phy_type_high;
+#define ICE_AQC_LS_DATA_SIZE_V1 \
+       offsetofend(struct ice_aqc_get_link_status_data, phy_type_high)
+       /* Get link status v2 link partner data */
+       __le64 lp_phy_type_low;
+       __le64 lp_phy_type_high;
+       u8 lp_fec_adv;
+#define ICE_AQ_LINK_LP_10G_KR_FEC_CAP  BIT(0)
+#define ICE_AQ_LINK_LP_25G_KR_FEC_CAP  BIT(1)
+#define ICE_AQ_LINK_LP_RS_528_FEC_CAP  BIT(2)
+#define ICE_AQ_LINK_LP_50G_KR_272_FEC_CAP BIT(3)
+#define ICE_AQ_LINK_LP_100G_KR_272_FEC_CAP BIT(4)
+#define ICE_AQ_LINK_LP_200G_KR_272_FEC_CAP BIT(5)
+       u8 lp_fec_req;
+#define ICE_AQ_LINK_LP_10G_KR_FEC_REQ  BIT(0)
+#define ICE_AQ_LINK_LP_25G_KR_FEC_REQ  BIT(1)
+#define ICE_AQ_LINK_LP_RS_528_FEC_REQ  BIT(2)
+#define ICE_AQ_LINK_LP_KR_272_FEC_REQ  BIT(3)
+       u8 lp_flowcontrol;
+#define ICE_AQ_LINK_LP_PAUSE_ADV       BIT(0)
+#define ICE_AQ_LINK_LP_ASM_DIR_ADV     BIT(1)
+#define ICE_AQC_LS_DATA_SIZE_V2 \
+       offsetofend(struct ice_aqc_get_link_status_data, lp_flowcontrol)
+} __packed;
 
 /* Set event mask command (direct 0x0613) */
 struct ice_aqc_set_event_mask {
 
        return ICE_MEDIA_UNKNOWN;
 }
 
+/**
+ * ice_get_link_status_datalen
+ * @hw: pointer to the HW struct
+ *
+ * Returns datalength for the Get Link Status AQ command, which is bigger for
+ * newer adapter families handled by ice driver.
+ */
+static u16 ice_get_link_status_datalen(struct ice_hw *hw)
+{
+       switch (hw->mac_type) {
+       case ICE_MAC_E830:
+               return ICE_AQC_LS_DATA_SIZE_V2;
+       case ICE_MAC_E810:
+       default:
+               return ICE_AQC_LS_DATA_SIZE_V1;
+       }
+}
+
 /**
  * ice_aq_get_link_info
  * @pi: port information structure
        resp->cmd_flags = cpu_to_le16(cmd_flags);
        resp->lport_num = pi->lport;
 
-       status = ice_aq_send_cmd(hw, &desc, &link_data, sizeof(link_data), cd);
-
+       status = ice_aq_send_cmd(hw, &desc, &link_data,
+                                ice_get_link_status_datalen(hw), cd);
        if (status)
                return status;