net/ice/base: enhance NVM read

Add an option to read NVM from flash directly.

Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Acked-by: Xiaolong Ye <xiaolong.ye@intel.com>
This commit is contained in:
Qi Zhang 2019-08-29 10:35:54 +08:00 committed by Ferruh Yigit
parent 3937b8b0f0
commit 4b6e8c03be
3 changed files with 32 additions and 3 deletions

View File

@ -1684,6 +1684,28 @@ struct ice_aqc_nvm {
__le32 addr_low;
};
/* NVM Module_Type ID, needed offset and read_len for struct ice_aqc_nvm. */
#define ICE_AQC_NVM_SECTOR_UNIT 4096 /* In Bytes */
#define ICE_AQC_NVM_WORD_UNIT 2 /* In Bytes */
#define ICE_AQC_NVM_START_POINT 0
#define ICE_AQC_NVM_EMP_SR_PTR_OFFSET 0x90
#define ICE_AQC_NVM_EMP_SR_PTR_RD_LEN 2 /* In Bytes */
#define ICE_AQC_NVM_EMP_SR_PTR_M MAKEMASK(0x7FFF, 0)
#define ICE_AQC_NVM_EMP_SR_PTR_TYPE_S 15
#define ICE_AQC_NVM_EMP_SR_PTR_TYPE_M BIT(15)
#define ICE_AQC_NVM_EMP_SR_PTR_TYPE_SECTOR 1
#define ICE_AQC_NVM_LLDP_CFG_PTR_OFFSET 0x46
#define ICE_AQC_NVM_LLDP_CFG_HEADER_LEN 2 /* In Bytes */
#define ICE_AQC_NVM_LLDP_CFG_PTR_RD_LEN 2 /* In Bytes */
#define ICE_AQC_NVM_LLDP_PRESERVED_MOD_ID 0x129
#define ICE_AQC_NVM_CUR_LLDP_PERSIST_RD_OFFSET 2 /* In Bytes */
#define ICE_AQC_NVM_LLDP_STATUS_M MAKEMASK(0xF, 0)
#define ICE_AQC_NVM_LLDP_STATUS_M_LEN 4 /* In Bits */
#define ICE_AQC_NVM_LLDP_STATUS_RD_LEN 4 /* In Bytes */
/* Used for 0x0704 as well as for 0x0705 commands */
struct ice_aqc_nvm_cfg {

View File

@ -6,6 +6,7 @@
#define _ICE_DCB_H_
#include "ice_type.h"
#include "ice_common.h"
#define ICE_DCBX_OFFLOAD_DIS 0
#define ICE_DCBX_OFFLOAD_ENABLED 1

View File

@ -13,13 +13,15 @@
* @length: length of the section to be read (in bytes from the offset)
* @data: command buffer (size [bytes] = length)
* @last_command: tells if this is the last command in a series
* @read_shadow_ram: tell if this is a shadow RAM read
* @cd: pointer to command details structure or NULL
*
* Read the NVM using the admin queue commands (0x0701)
*/
static enum ice_status
ice_aq_read_nvm(struct ice_hw *hw, u16 module_typeid, u32 offset, u16 length,
void *data, bool last_command, struct ice_sq_cd *cd)
void *data, bool last_command, bool read_shadow_ram,
struct ice_sq_cd *cd)
{
struct ice_aq_desc desc;
struct ice_aqc_nvm *cmd;
@ -34,6 +36,9 @@ ice_aq_read_nvm(struct ice_hw *hw, u16 module_typeid, u32 offset, u16 length,
ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_nvm_read);
if (!read_shadow_ram && module_typeid == ICE_AQC_NVM_START_POINT)
cmd->cmd_flags |= ICE_AQC_NVM_FLASH_ONLY;
/* If this is the last command in a series, set the proper flag. */
if (last_command)
cmd->cmd_flags |= ICE_AQC_NVM_LAST_CMD;
@ -104,8 +109,9 @@ ice_read_sr_aq(struct ice_hw *hw, u32 offset, u16 words, u16 *data,
* So do this conversion while calling ice_aq_read_nvm.
*/
if (!status)
status = ice_aq_read_nvm(hw, 0, 2 * offset, 2 * words, data,
last_command, NULL);
status = ice_aq_read_nvm(hw, ICE_AQC_NVM_START_POINT,
2 * offset, 2 * words, data,
last_command, true, NULL);
return status;
}