mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-29 05:55:02 +08:00
e67fbcfbb4
Just as we recently added support for other stored firmware flash versions, support display of the stored UNDI Option ROM version via devlink info. To do this, we need to introduce a new ice_get_inactive_orom_ver function. This is a little trickier than with other flash versions. The Option ROM version data was being read from a special "Boot Configuration" block of the NVM Preserved Field Area. This block only contains the *active* Option ROM version data. It is populated when the device firmware finishes updating the Option ROM. This method is ineffective at reading the stored Option ROM version data. Instead of reading from this section of the flash, replace this version extraction with one which locates the Combo Version information from within the Option ROM binary. This data is stored within the Option ROM at a 512 byte offset, in a simple structured format. The structure uses a simple modulo 256 checksum for integrity verification. Scan through the Option ROM to locate the CIVD data section, and extract the Combo Version. Refactor ice_get_orom_ver_info so that it takes the bank select enumeration parameter. Use this to implement ice_get_inactive_orom_ver. Although all ice devices have a Boot Configuration block in the NVM PFA, not all devices have a valid Option ROM. In this case, the old ice_get_orom_ver_info would "succeed" but report a version of all zeros. The new implementation would fail to locate the $CIV section in the Option ROM and report an error. Thus, we must ensure that ice_init_nvm does not fail if ice_get_orom_ver_info fails. Use the new ice_get_inactive_orom_ver to allow reporting the Option ROM versions for a pending update via devlink info. Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Tested-by: Tony Brelinski <tonyx.brelinski@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
51 lines
2.1 KiB
C
51 lines
2.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* Copyright (c) 2019, Intel Corporation. */
|
|
|
|
#ifndef _ICE_NVM_H_
|
|
#define _ICE_NVM_H_
|
|
|
|
struct ice_orom_civd_info {
|
|
u8 signature[4]; /* Must match ASCII '$CIV' characters */
|
|
u8 checksum; /* Simple modulo 256 sum of all structure bytes must equal 0 */
|
|
__le32 combo_ver; /* Combo Image Version number */
|
|
u8 combo_name_len; /* Length of the unicode combo image version string, max of 32 */
|
|
__le16 combo_name[32]; /* Unicode string representing the Combo Image version */
|
|
} __packed;
|
|
|
|
enum ice_status
|
|
ice_acquire_nvm(struct ice_hw *hw, enum ice_aq_res_access_type access);
|
|
void ice_release_nvm(struct ice_hw *hw);
|
|
enum ice_status
|
|
ice_read_flat_nvm(struct ice_hw *hw, u32 offset, u32 *length, u8 *data,
|
|
bool read_shadow_ram);
|
|
enum ice_status
|
|
ice_get_pfa_module_tlv(struct ice_hw *hw, u16 *module_tlv, u16 *module_tlv_len,
|
|
u16 module_type);
|
|
enum ice_status
|
|
ice_get_inactive_orom_ver(struct ice_hw *hw, struct ice_orom_info *orom);
|
|
enum ice_status
|
|
ice_get_inactive_nvm_ver(struct ice_hw *hw, struct ice_nvm_info *nvm);
|
|
enum ice_status
|
|
ice_get_inactive_netlist_ver(struct ice_hw *hw, struct ice_netlist_info *netlist);
|
|
enum ice_status
|
|
ice_read_pba_string(struct ice_hw *hw, u8 *pba_num, u32 pba_num_size);
|
|
enum ice_status ice_init_nvm(struct ice_hw *hw);
|
|
enum ice_status ice_read_sr_word(struct ice_hw *hw, u16 offset, u16 *data);
|
|
enum ice_status
|
|
ice_aq_update_nvm(struct ice_hw *hw, u16 module_typeid, u32 offset,
|
|
u16 length, void *data, bool last_command, u8 command_flags,
|
|
struct ice_sq_cd *cd);
|
|
enum ice_status
|
|
ice_aq_erase_nvm(struct ice_hw *hw, u16 module_typeid, struct ice_sq_cd *cd);
|
|
enum ice_status ice_nvm_validate_checksum(struct ice_hw *hw);
|
|
enum ice_status ice_nvm_write_activate(struct ice_hw *hw, u8 cmd_flags);
|
|
enum ice_status ice_aq_nvm_update_empr(struct ice_hw *hw);
|
|
enum ice_status
|
|
ice_nvm_set_pkg_data(struct ice_hw *hw, bool del_pkg_data_flag, u8 *data,
|
|
u16 length, struct ice_sq_cd *cd);
|
|
enum ice_status
|
|
ice_nvm_pass_component_tbl(struct ice_hw *hw, u8 *data, u16 length,
|
|
u8 transfer_flag, u8 *comp_response,
|
|
u8 *comp_response_code, struct ice_sq_cd *cd);
|
|
#endif /* _ICE_NVM_H_ */
|