|
@@ -359,7 +359,7 @@ s32 e1000e_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
|
|
|
s32 e1000e_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
|
|
|
{
|
|
|
struct e1000_nvm_info *nvm = &hw->nvm;
|
|
|
- s32 ret_val;
|
|
|
+ s32 ret_val = -E1000_ERR_NVM;
|
|
|
u16 widx = 0;
|
|
|
|
|
|
/* A check for invalid values: offset too large, too many words,
|
|
@@ -371,16 +371,18 @@ s32 e1000e_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
|
|
|
return -E1000_ERR_NVM;
|
|
|
}
|
|
|
|
|
|
- ret_val = nvm->ops.acquire(hw);
|
|
|
- if (ret_val)
|
|
|
- return ret_val;
|
|
|
-
|
|
|
while (widx < words) {
|
|
|
u8 write_opcode = NVM_WRITE_OPCODE_SPI;
|
|
|
|
|
|
- ret_val = e1000_ready_nvm_eeprom(hw);
|
|
|
+ ret_val = nvm->ops.acquire(hw);
|
|
|
if (ret_val)
|
|
|
- goto release;
|
|
|
+ return ret_val;
|
|
|
+
|
|
|
+ ret_val = e1000_ready_nvm_eeprom(hw);
|
|
|
+ if (ret_val) {
|
|
|
+ nvm->ops.release(hw);
|
|
|
+ return ret_val;
|
|
|
+ }
|
|
|
|
|
|
e1000_standby_nvm(hw);
|
|
|
|
|
@@ -413,12 +415,10 @@ s32 e1000e_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+ usleep_range(10000, 20000);
|
|
|
+ nvm->ops.release(hw);
|
|
|
}
|
|
|
|
|
|
- usleep_range(10000, 20000);
|
|
|
-release:
|
|
|
- nvm->ops.release(hw);
|
|
|
-
|
|
|
return ret_val;
|
|
|
}
|
|
|
|