Skip to content

Commit

Permalink
igb: Acquire, release semaphore for writing each EEPROM page
Browse files Browse the repository at this point in the history
This patch allows software acquires and releases NVM resource for
writing each EEPROM page, instead of holding semaphore for the whole
data block which is too long and could trigger write fails on
unpredictable addresses.

Signed-off-by: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
  • Loading branch information
Akeem G. Abodunrin authored and Jeff Kirsher committed Dec 1, 2012
1 parent 1720ee3 commit 23e0f14
Showing 1 changed file with 12 additions and 16 deletions.
28 changes: 12 additions & 16 deletions drivers/net/ethernet/intel/igb/e1000_nvm.c
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ s32 igb_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
s32 igb_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;

/*
Expand All @@ -448,22 +448,21 @@ s32 igb_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) ||
(words == 0)) {
hw_dbg("nvm parameter(s) out of bounds\n");
ret_val = -E1000_ERR_NVM;
goto out;
return ret_val;
}

ret_val = hw->nvm.ops.acquire(hw);
if (ret_val)
goto out;

msleep(10);

while (widx < words) {
u8 write_opcode = NVM_WRITE_OPCODE_SPI;

ret_val = igb_ready_nvm_eeprom(hw);
ret_val = nvm->ops.acquire(hw);
if (ret_val)
goto release;
return ret_val;

ret_val = igb_ready_nvm_eeprom(hw);
if (ret_val) {
nvm->ops.release(hw);
return ret_val;
}

igb_standby_nvm(hw);

Expand Down Expand Up @@ -497,13 +496,10 @@ s32 igb_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
break;
}
}
usleep_range(1000, 2000);
nvm->ops.release(hw);
}

msleep(10);
release:
hw->nvm.ops.release(hw);

out:
return ret_val;
}

Expand Down

0 comments on commit 23e0f14

Please sign in to comment.