@@ -1058,8 +1058,8 @@ struct hwrm_err_output {
#define HWRM_VERSION_MINOR 10
#define HWRM_VERSION_UPDATE 2
/* non-zero means beta version */
-#define HWRM_VERSION_RSVD 54
-#define HWRM_VERSION_STR "1.10.2.54"
+#define HWRM_VERSION_RSVD 55
+#define HWRM_VERSION_STR "1.10.2.55"
/****************
* hwrm_ver_get *
@@ -46253,13 +46253,22 @@ struct hwrm_tf_tbl_type_get_input {
/* Control flags. */
uint16_t flags;
/* Indicates the flow direction. */
- #define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR UINT32_C(0x1)
+ #define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR \
+ UINT32_C(0x1)
/* If this bit set to 0, then it indicates rx flow. */
- #define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_RX UINT32_C(0x0)
+ #define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_RX \
+ UINT32_C(0x0)
/* If this bit is set to 1, then it indicates tx flow. */
- #define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_TX UINT32_C(0x1)
+ #define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_TX \
+ UINT32_C(0x1)
#define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_LAST \
HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_TX
+ /*
+ * When set use the special access register access to clear
+ * the table entry on read.
+ */
+ #define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_CLEAR_ON_READ \
+ UINT32_C(0x2)
/* unused. */
uint8_t unused0[2];
/*
@@ -48489,13 +48498,22 @@ struct hwrm_tf_tbl_type_bulk_get_input {
/* Control flags. */
uint16_t flags;
/* Indicates the flow direction. */
- #define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR UINT32_C(0x1)
+ #define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR \
+ UINT32_C(0x1)
/* If this bit set to 0, then it indicates rx flow. */
- #define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_RX UINT32_C(0x0)
+ #define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_RX \
+ UINT32_C(0x0)
/* If this bit is set to 1, then it indicates tx flow. */
- #define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_TX UINT32_C(0x1)
+ #define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_TX \
+ UINT32_C(0x1)
#define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_LAST \
HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_TX
+ /*
+ * When set use the special access register access to clear
+ * the table entries on read.
+ */
+ #define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_CLEAR_ON_READ \
+ UINT32_C(0x2)
/* unused. */
uint8_t unused0[2];
/*
@@ -1851,7 +1851,8 @@ tf_msg_get_tbl_entry(struct tf *tfp,
uint16_t hcapi_type,
uint16_t size,
uint8_t *data,
- uint32_t index)
+ uint32_t index,
+ bool clear_on_read)
{
int rc;
struct hwrm_tf_tbl_type_get_input req = { 0 };
@@ -1860,6 +1861,7 @@ tf_msg_get_tbl_entry(struct tf *tfp,
uint8_t fw_session_id;
struct tf_dev_info *dev;
struct tf_session *tfs;
+ uint32_t flags = 0;
/* Retrieve the session information */
rc = tf_session_get_session_internal(tfp, &tfs);
@@ -1889,10 +1891,16 @@ tf_msg_get_tbl_entry(struct tf *tfp,
strerror(-rc));
return rc;
}
+ flags = (dir == TF_DIR_TX ?
+ HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_TX :
+ HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_RX);
+
+ if (clear_on_read)
+ flags |= HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_CLEAR_ON_READ;
/* Populate the request */
req.fw_session_id = tfp_cpu_to_le_32(fw_session_id);
- req.flags = tfp_cpu_to_le_16(dir);
+ req.flags = tfp_cpu_to_le_16(flags);
req.type = tfp_cpu_to_le_32(hcapi_type);
req.index = tfp_cpu_to_le_32(index);
@@ -2105,7 +2113,8 @@ tf_msg_bulk_get_tbl_entry(struct tf *tfp,
uint32_t starting_idx,
uint16_t num_entries,
uint16_t entry_sz_in_bytes,
- uint64_t physical_mem_addr)
+ uint64_t physical_mem_addr,
+ bool clear_on_read)
{
int rc;
struct tfp_send_msg_parms parms = { 0 };
@@ -2115,6 +2124,7 @@ tf_msg_bulk_get_tbl_entry(struct tf *tfp,
uint8_t fw_session_id;
struct tf_dev_info *dev;
struct tf_session *tfs;
+ uint32_t flags = 0;
/* Retrieve the session information */
rc = tf_session_get_session(tfp, &tfs);
@@ -2144,10 +2154,16 @@ tf_msg_bulk_get_tbl_entry(struct tf *tfp,
strerror(-rc));
return rc;
}
+ flags = (dir == TF_DIR_TX ?
+ HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_TX :
+ HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_RX);
+
+ if (clear_on_read)
+ flags |= HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_CLEAR_ON_READ;
/* Populate the request */
req.fw_session_id = tfp_cpu_to_le_32(fw_session_id);
- req.flags = tfp_cpu_to_le_16(dir);
+ req.flags = tfp_cpu_to_le_16(flags);
req.type = tfp_cpu_to_le_32(hcapi_type);
req.start_index = tfp_cpu_to_le_32(starting_idx);
req.num_entries = tfp_cpu_to_le_32(num_entries);
@@ -652,7 +652,8 @@ int tf_msg_get_tbl_entry(struct tf *tfp,
uint16_t hcapi_type,
uint16_t size,
uint8_t *data,
- uint32_t index);
+ uint32_t index,
+ bool clear_on_read);
/* HWRM Tunneled messages */
@@ -704,7 +705,8 @@ int tf_msg_bulk_get_tbl_entry(struct tf *tfp,
uint32_t starting_idx,
uint16_t num_entries,
uint16_t entry_sz_in_bytes,
- uint64_t physical_mem_addr);
+ uint64_t physical_mem_addr,
+ bool clear_on_read);
/**
* Sends Set message of a IF Table Type element to the firmware.
@@ -441,7 +441,8 @@ tf_tbl_get(struct tf *tfp,
hcapi_type,
parms->data_sz_in_bytes,
parms->data,
- parms->idx);
+ parms->idx,
+ false);
if (rc) {
TFP_DRV_LOG(ERR,
"%s, Get failed, type:%s, rc:%s\n",
@@ -526,7 +527,8 @@ tf_tbl_bulk_get(struct tf *tfp,
parms->starting_idx,
parms->num_entries,
parms->entry_sz_in_bytes,
- parms->physical_mem_addr);
+ parms->physical_mem_addr,
+ false);
if (rc) {
TFP_DRV_LOG(ERR,
"%s, Bulk get failed, type:%s, rc:%s\n",
@@ -539,6 +539,7 @@ tf_tbl_sram_get(struct tf *tfp,
struct tf_tbl_sram_get_info_parms iparms = { 0 };
struct tf_sram_mgr_is_allocated_parms aparms = { 0 };
void *sram_handle = NULL;
+ bool clear_on_read = false;
TF_CHECK_PARMS3(tfp, parms, parms->data);
@@ -608,6 +609,8 @@ tf_tbl_sram_get(struct tf *tfp,
strerror(-rc));
return rc;
}
+ if (parms->type == TF_TBL_TYPE_ACT_STATS_64)
+ clear_on_read = true;
/* Get the entry */
rc = tf_msg_get_tbl_entry(tfp,
@@ -615,7 +618,8 @@ tf_tbl_sram_get(struct tf *tfp,
hcapi_type,
parms->data_sz_in_bytes,
parms->data,
- parms->idx);
+ parms->idx,
+ clear_on_read);
if (rc) {
TFP_DRV_LOG(ERR,
"%s, Get failed, type:%s, rc:%s\n",
@@ -643,6 +647,7 @@ tf_tbl_sram_bulk_get(struct tf *tfp,
struct tf_sram_mgr_is_allocated_parms aparms = { 0 };
bool allocated = false;
void *sram_handle = NULL;
+ bool clear_on_read = false;
TF_CHECK_PARMS2(tfp, parms);
@@ -728,6 +733,9 @@ tf_tbl_sram_bulk_get(struct tf *tfp,
return rc;
}
+ if (parms->type == TF_TBL_TYPE_ACT_STATS_64)
+ clear_on_read = true;
+
/* Get the entries */
rc = tf_msg_bulk_get_tbl_entry(tfp,
parms->dir,
@@ -735,7 +743,8 @@ tf_tbl_sram_bulk_get(struct tf *tfp,
parms->starting_idx,
parms->num_entries,
parms->entry_sz_in_bytes,
- parms->physical_mem_addr);
+ parms->physical_mem_addr,
+ clear_on_read);
if (rc) {
TFP_DRV_LOG(ERR,
"%s, Bulk get failed, type:%s, rc:%s\n",
@@ -1483,7 +1483,8 @@ bnxt_ulp_port_init(struct bnxt *bp)
goto jump_to_error;
}
- if (devid != BNXT_ULP_DEVICE_ID_THOR && BNXT_ACCUM_STATS_EN(bp))
+ /* set the accumulation of the stats */
+ if (BNXT_ACCUM_STATS_EN(bp))
bp->ulp_ctx->cfg_data->accum_stats = true;
BNXT_TF_DBG(DEBUG, "BNXT Port:%d ULP port init, accum_stats:%d\n",