After a flash update, the pending status of the update can be determined
from the device capabilities.

Read the appropriate device capability and store whether there is
a pending update awaiting a reboot.

Signed-off-by: Jacob Keller <jacob.e.kel...@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_adminq_cmd.h |  6 ++++++
 drivers/net/ethernet/intel/ice/ice_common.c     | 12 ++++++++++++
 drivers/net/ethernet/intel/ice/ice_type.h       |  6 ++++++
 3 files changed, 24 insertions(+)

diff --git a/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h 
b/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
index d81ee985a2c3..a35739d726a7 100644
--- a/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
+++ b/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
@@ -109,6 +109,12 @@ struct ice_aqc_list_caps_elem {
 #define ICE_AQC_CAPS_MSIX                              0x0043
 #define ICE_AQC_CAPS_FD                                        0x0045
 #define ICE_AQC_CAPS_MAX_MTU                           0x0047
+#define ICE_AQC_CAPS_NVM_VER                           0x0048
+#define ICE_AQC_CAPS_PENDING_NVM_VER                   0x0049
+#define ICE_AQC_CAPS_OROM_VER                          0x004A
+#define ICE_AQC_CAPS_PENDING_OROM_VER                  0x004B
+#define ICE_AQC_CAPS_NET_VER                           0x004C
+#define ICE_AQC_CAPS_PENDING_NET_VER                   0x004D
 #define ICE_AQC_CAPS_NVM_MGMT                          0x0080
 
        u8 major_ver;
diff --git a/drivers/net/ethernet/intel/ice/ice_common.c 
b/drivers/net/ethernet/intel/ice/ice_common.c
index dcfb75c10944..7a6eb36ef2da 100644
--- a/drivers/net/ethernet/intel/ice/ice_common.c
+++ b/drivers/net/ethernet/intel/ice/ice_common.c
@@ -1857,6 +1857,18 @@ ice_parse_common_caps(struct ice_hw *hw, struct 
ice_hw_common_caps *caps,
                          "%s: msix_vector_first_id = %d\n", prefix,
                          caps->msix_vector_first_id);
                break;
+       case ICE_AQC_CAPS_PENDING_NVM_VER:
+               caps->nvm_update_pending_nvm = true;
+               ice_debug(hw, ICE_DBG_INIT, "%s: update_pending_nvm\n", prefix);
+               break;
+       case ICE_AQC_CAPS_PENDING_OROM_VER:
+               caps->nvm_update_pending_orom = true;
+               ice_debug(hw, ICE_DBG_INIT, "%s: update_pending_orom\n", 
prefix);
+               break;
+       case ICE_AQC_CAPS_PENDING_NET_VER:
+               caps->nvm_update_pending_netlist = true;
+               ice_debug(hw, ICE_DBG_INIT, "%s: update_pending_netlist\n", 
prefix);
+               break;
        case ICE_AQC_CAPS_NVM_MGMT:
                caps->nvm_unified_update =
                        (number & ICE_NVM_MGMT_UNIFIED_UPD_SUPPORT) ?
diff --git a/drivers/net/ethernet/intel/ice/ice_type.h 
b/drivers/net/ethernet/intel/ice/ice_type.h
index 74ef42b0721b..4207790bd9ec 100644
--- a/drivers/net/ethernet/intel/ice/ice_type.h
+++ b/drivers/net/ethernet/intel/ice/ice_type.h
@@ -263,6 +263,12 @@ struct ice_hw_common_caps {
 
        u8 dcb;
 
+       bool nvm_update_pending_nvm;
+       bool nvm_update_pending_orom;
+       bool nvm_update_pending_netlist;
+#define ICE_NVM_PENDING_NVM_IMAGE              BIT(0)
+#define ICE_NVM_PENDING_OROM                   BIT(1)
+#define ICE_NVM_PENDING_NETLIST                        BIT(2)
        bool nvm_unified_update;
 #define ICE_NVM_MGMT_UNIFIED_UPD_SUPPORT       BIT(3)
 };
-- 
2.27.0.353.gb9a2d1a0207f

Reply via email to