From: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Decrease hw_semaphore_timeout size down to 32bits, because FW
I40E_GLVFGEN_TIMER register is 32bits only anyway, and having both
variables as same 32-bit size simplifies code. Also, fix FW write semaphore
expiration condition, taking into account that I40E_GLVFGEN_TIMER wraps,
by checking the sign of substraction of two 32 bit vaues.
Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
drivers/net/i40e/base/i40e_nvm.c | 8 ++++----
drivers/net/i40e/base/i40e_type.h | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
@@ -61,7 +61,7 @@ enum i40e_status_code i40e_acquire_nvm(struct i40e_hw *hw,
enum i40e_aq_resource_access_type access)
{
enum i40e_status_code ret_code = I40E_SUCCESS;
- u64 gtime, timeout;
+ u32 gtime, timeout;
u64 time_left = 0;
DEBUGFUNC("i40e_acquire_nvm");
@@ -85,7 +85,7 @@ enum i40e_status_code i40e_acquire_nvm(struct i40e_hw *hw,
if (ret_code && time_left) {
/* Poll until the current NVM owner timeouts */
timeout = I40E_MS_TO_GTIME(I40E_MAX_NVM_TIMEOUT) + gtime;
- while ((gtime < timeout) && time_left) {
+ while ((s32)(gtime - timeout) < 0 && time_left) {
i40e_msec_delay(10);
gtime = rd32(hw, I40E_GLVFGEN_TIMER);
ret_code = i40e_aq_request_resource(hw,
@@ -1301,9 +1301,9 @@ STATIC enum i40e_status_code i40e_nvmupd_state_writing(struct i40e_hw *hw,
u32 gtime;
gtime = rd32(hw, I40E_GLVFGEN_TIMER);
- if (gtime >= hw->nvm.hw_semaphore_timeout) {
+ if ((s32)(gtime - hw->nvm.hw_semaphore_timeout) >= 0) {
i40e_debug(hw, I40E_DEBUG_ALL,
- "NVMUPD: write semaphore expired (%d >= %" PRIu64 "), retrying\n",
+ "NVMUPD: write semaphore expired (%d >= %" PRIu32 "), retrying\n",
gtime, hw->nvm.hw_semaphore_timeout);
i40e_release_nvm(hw);
status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE);
@@ -443,7 +443,7 @@ enum i40e_aq_resource_access_type {
};
struct i40e_nvm_info {
- u64 hw_semaphore_timeout; /* usec global time (GTIME resolution) */
+ u32 hw_semaphore_timeout; /* usec global time (GTIME resolution) */
u32 timeout; /* [ms] */
u16 sr_size; /* Shadow RAM size in words */
bool blank_nvm_mode; /* is NVM empty (no FW present)*/