dev_info->wol_support = true;
 
                dev_info->smart_an = qed_mcp_is_smart_an_supported(p_hwfn);
-
+               dev_info->esl = qed_mcp_is_esl_supported(p_hwfn);
                dev_info->abs_pf_id = QED_LEADING_HWFN(cdev)->abs_pf_id;
        } else {
                qed_vf_get_fw_version(&cdev->hwfns[0], &dev_info->fw_major,
        return QED_AFFIN_HWFN_IDX(cdev);
 }
 
+static int qed_get_esl_status(struct qed_dev *cdev, bool *esl_active)
+{
+       struct qed_hwfn *hwfn = QED_LEADING_HWFN(cdev);
+       struct qed_ptt *ptt;
+       int rc = 0;
+
+       *esl_active = false;
+
+       if (IS_VF(cdev))
+               return 0;
+
+       ptt = qed_ptt_acquire(hwfn);
+       if (!ptt)
+               return -EAGAIN;
+
+       rc = qed_mcp_get_esl_status(hwfn, ptt, esl_active);
+
+       qed_ptt_release(hwfn, ptt);
+
+       return rc;
+}
+
 static struct qed_selftest_ops qed_selftest_ops_pass = {
        .selftest_memory = &qed_selftest_memory,
        .selftest_interrupt = &qed_selftest_interrupt,
        .set_grc_config = &qed_set_grc_config,
        .mfw_report = &qed_mfw_report,
        .get_sb_info = &qed_get_sb_info,
+       .get_esl_status = &qed_get_esl_status,
 };
 
 void qed_get_protocol_stats(struct qed_dev *cdev,
 
        return qed_mcp_send_debug_data(p_hwfn, p_ptt,
                                       QED_MCP_DBG_DATA_TYPE_RAW, p_buf, size);
 }
+
+bool qed_mcp_is_esl_supported(struct qed_hwfn *p_hwfn)
+{
+       return !!(p_hwfn->mcp_info->capabilities &
+                 FW_MB_PARAM_FEATURE_SUPPORT_ENHANCED_SYS_LCK);
+}
+
+int qed_mcp_get_esl_status(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt, bool *active)
+{
+       u32 resp = 0, param = 0;
+       int rc;
+
+       rc = qed_mcp_cmd(p_hwfn, p_ptt, DRV_MSG_CODE_GET_MANAGEMENT_STATUS, 0, &resp, ¶m);
+       if (rc) {
+               DP_NOTICE(p_hwfn, "Failed to send ESL command, rc = %d\n", rc);
+               return rc;
+       }
+
+       *active = !!(param & FW_MB_PARAM_MANAGEMENT_STATUS_LOCKDOWN_ENABLED);
+
+       return 0;
+}
 
 int qed_mcp_nvm_set_cfg(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt,
                        u16 option_id, u8 entity_id, u16 flags, u8 *p_buf,
                        u32 len);
+
+/**
+ * qed_mcp_is_esl_supported(): Return whether management firmware support ESL or not.
+ *
+ * @p_hwfn: hw function pointer
+ *
+ * Return: true if esl is supported, otherwise return false
+ */
+bool qed_mcp_is_esl_supported(struct qed_hwfn *p_hwfn);
+
+/**
+ * qed_mcp_get_esl_status(): Get enhanced system lockdown status
+ *
+ * @p_hwfn: hw function pointer
+ * @p_ptt: ptt resource pointer
+ * @active: ESL active status data pointer
+ *
+ * Return: 0 with esl status info on success, otherwise return error
+ */
+int qed_mcp_get_esl_status(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt, bool *active);
 #endif
 
        DRV_MSG_CODE_CFG_VF_MSIX = DRV_MSG_CODE(0xc001),
        DRV_MSG_CODE_CFG_PF_VFS_MSIX = DRV_MSG_CODE(0xc002),
        DRV_MSG_CODE_DEBUG_DATA_SEND = DRV_MSG_CODE(0xc004),
+       DRV_MSG_CODE_GET_MANAGEMENT_STATUS = DRV_MSG_CODE(0xc007),
 };
 
 #define DRV_MSG_CODE_VMAC_TYPE_SHIFT            4
 
        QEDE_PRI_FLAG_CMT,
        QEDE_PRI_FLAG_SMART_AN_SUPPORT, /* MFW supports SmartAN */
        QEDE_PRI_FLAG_RECOVER_ON_ERROR,
+       QEDE_PRI_FLAG_ESL_SUPPORT, /* MFW supports Enhanced System Lockdown */
+       QEDE_PRI_FLAG_ESL_ACTIVE, /* Enhanced System Lockdown Active status */
        QEDE_PRI_FLAG_LEN,
 };
 
        "Coupled-Function",
        "SmartAN capable",
        "Recover on error",
+       "ESL capable",
+       "ESL active",
 };
 
 enum qede_ethtool_tests {
 static u32 qede_get_priv_flags(struct net_device *dev)
 {
        struct qede_dev *edev = netdev_priv(dev);
+       bool esl_active;
        u32 flags = 0;
 
        if (edev->dev_info.common.num_hwfns > 1)
        if (edev->err_flags & BIT(QEDE_ERR_IS_RECOVERABLE))
                flags |= BIT(QEDE_PRI_FLAG_RECOVER_ON_ERROR);
 
+       if (edev->dev_info.common.esl)
+               flags |= BIT(QEDE_PRI_FLAG_ESL_SUPPORT);
+
+       edev->ops->common->get_esl_status(edev->cdev, &esl_active);
+
+       if (esl_active)
+               flags |= BIT(QEDE_PRI_FLAG_ESL_ACTIVE);
+
        return flags;
 }
 
 
 
        bool wol_support;
        bool smart_an;
+       bool esl;
 
        /* MBI version */
        u32 mbi_version;
 
        int (*get_sb_info)(struct qed_dev *cdev, struct qed_sb_info *sb,
                           u16 qid, struct qed_sb_info_dbg *sb_dbg);
+
+       int (*get_esl_status)(struct qed_dev *cdev, bool *esl_active);
 };
 
 #define MASK_FIELD(_name, _value) \