• Jacob Keller's avatar
    ice: display some stored NVM versions via devlink info · 2c4fe41d
    Jacob Keller authored
    The devlink info interface supports drivers reporting "stored" versions.
    These versions indicate the version of an update that has been
    downloaded to the device, but is not yet active.
    
    The code for extracting the NVM version recently changed to enable
    support for reading from either the active or the inactive bank. Use
    this to implement ice_get_inactive_nvm_ver, which will read the NVM
    version data from the inactive section of flash.
    
    When reporting the versions via devlink info, first read the device
    capabilities. Determine if there is a pending flash update, and if so,
    extract relevant version information from the inactive flash. Store
    these within the info context structure.
    
    When reporting "stored" firmware versions, devlink documentation
    indicates that we ought to always report a stored value, even if there
    is no pending update. In this common case, the stored version should
    match the running version. This means that each stored version should by
    default fallback to the same value as reported by the running handler.
    
    To support this, modify the version structure to have both a "getter"
    and a "fallback". Modify the control loop so that it will use the
    "fallback" function if the "getter" function does not report a version.
    
    To report versions for which we can read the stored value, use a new
    "stored()" macro. This macro will insert two entries into the version
    list. The first entry is the traditional running version. The second is
    the stored version, implemented with a fallback to the active version.
    This is a little tricky, but reduces the overall duplication of elements
    in the entry list, and ensures that running and stored values remain
    consistent.
    
    To avoid some duplication, add a combined() macro that will insert both
    the running and stored versions into the version entry list.
    
    Using this new support, add pending version reporter functions for
    "fw.psid.api" and "fw.bundle_id". This enables reporting the stored
    values for some of versions in the NVM module of the flash.
    
    Reporting management versions is not implemented by this patch. The
    active management version is reported to the driver via the AdminQ
    mailbox during load. Although the version must be in the firmware binary
    somewhere, accessing this from the inactive firmware is not trivial and
    has not been implemented in this change.
    
    Future changes will introduce support for reading the UNDI Option ROM
    version and the version associated with the Netlist module.
    Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Tested-by: default avatarTony Brelinski <tonyx.brelinski@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    2c4fe41d
ice_nvm.c 32.3 KB