From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
To: davem@davemloft.net
Cc: Bruce Allan <bruce.w.allan@intel.com>,
netdev@vger.kernel.org, gospo@redhat.com, sassmann@redhat.com,
Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Subject: [net-next 02/15] e1000e: Acquire/release semaphore when writing each EEPROM page
Date: Wed, 16 Jan 2013 01:10:14 -0800 [thread overview]
Message-ID: <1358327427-3146-3-git-send-email-jeffrey.t.kirsher@intel.com> (raw)
In-Reply-To: <1358327427-3146-1-git-send-email-jeffrey.t.kirsher@intel.com>
From: Bruce Allan <bruce.w.allan@intel.com>
When data blocks are written to the EEPROM, the HW/SW/FW semaphore must be
held for the duration. With large data blocks on 80003es2lan, 82571 and
82572, this can take too long and cause the firmware to take ownership of
the semaphore and consequently ownership of writes to the EEPROM.
Instead, acquire and release the semaphore for each page of the block
written.
Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/e1000e/nvm.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/drivers/net/ethernet/intel/e1000e/nvm.c b/drivers/net/ethernet/intel/e1000e/nvm.c
index b646880..71938ed 100644
--- a/drivers/net/ethernet/intel/e1000e/nvm.c
+++ b/drivers/net/ethernet/intel/e1000e/nvm.c
@@ -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;
}
--
1.7.11.7
next prev parent reply other threads:[~2013-01-16 9:10 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-16 9:10 [net-nexti v2 00/15][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
2013-01-16 9:10 ` [net-next 01/15] e1000e: SerDes autoneg flow control Jeff Kirsher
2013-01-16 9:10 ` Jeff Kirsher [this message]
2013-01-16 9:10 ` [net-next 03/15] e1000e: Invalid Image CSUM bit changed for I217 Jeff Kirsher
2013-01-16 9:10 ` [net-next 04/15] e1000e: helper functions for accessing EMI registers Jeff Kirsher
2013-01-16 9:10 ` [net-next 05/15] e1000e: 82577: workaround for link drop issue Jeff Kirsher
2013-01-16 9:10 ` [net-next 06/15] e1000e: fix enabling of EEE on 82579 and I217 Jeff Kirsher
2013-01-16 9:10 ` [net-next 07/15] e1000e: unexpected "Reset adapter" message when cable pulled Jeff Kirsher
2013-01-16 9:10 ` [net-next 08/15] e1000e: add missing bailout on error Jeff Kirsher
2013-01-16 9:10 ` [net-next v2 09/15] e1000e: resolve checkpatch PREFER_PR_LEVEL warning Jeff Kirsher
2013-01-16 9:10 ` [net-next 10/15] e1000e: cleanup redundant statistics counter Jeff Kirsher
2013-01-16 9:10 ` [net-next 11/15] e1000e: cleanup unusual comment placement Jeff Kirsher
2013-01-16 9:10 ` [net-next 12/15] e1000e: cleanup unnecessary line wrap Jeff Kirsher
2013-01-16 9:10 ` [net-next 13/15] e1000e: cleanup magic number Jeff Kirsher
2013-01-16 9:10 ` [net-next 14/15] e1000e: cleanup code duplication Jeff Kirsher
2013-01-16 9:10 ` [net-next 15/15] e1000e: merge multiple conditional statements into one Jeff Kirsher
2013-01-16 19:32 ` [net-nexti v2 00/15][pull request] Intel Wired LAN Driver Updates David Miller
-- strict thread matches above, loose matches on Subject: below --
2013-01-11 10:23 [net-next " Jeff Kirsher
2013-01-11 10:23 ` [net-next 02/15] e1000e: Acquire/release semaphore when writing each EEPROM page Jeff Kirsher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1358327427-3146-3-git-send-email-jeffrey.t.kirsher@intel.com \
--to=jeffrey.t.kirsher@intel.com \
--cc=bruce.w.allan@intel.com \
--cc=davem@davemloft.net \
--cc=gospo@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=sassmann@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).