[dpdk-dev] [PATCH v3 02/30] i40e/base: acquire NVM, before issuing an AQ read nvm command
Helin Zhang
helin.zhang at intel.com
Thu Feb 18 15:34:08 CET 2016
It needs to acquire the NVM before issuing an AQ read to the
X722 NVM otherwise it will get EBUSY from the FW. Also release
when done.
Signed-off-by: Helin Zhang <helin.zhang at intel.com>
---
drivers/net/i40e/base/i40e_nvm.c | 35 +++++++++++++++++++++++++++++------
1 file changed, 29 insertions(+), 6 deletions(-)
diff --git a/drivers/net/i40e/base/i40e_nvm.c b/drivers/net/i40e/base/i40e_nvm.c
index 60f2bb9..bfa3315 100644
--- a/drivers/net/i40e/base/i40e_nvm.c
+++ b/drivers/net/i40e/base/i40e_nvm.c
@@ -217,11 +217,22 @@ static enum i40e_status_code i40e_poll_sr_srctl_done_bit(struct i40e_hw *hw)
enum i40e_status_code i40e_read_nvm_word(struct i40e_hw *hw, u16 offset,
u16 *data)
{
+ enum i40e_status_code ret_code = I40E_SUCCESS;
+
#ifdef X722_SUPPORT
- if (hw->mac.type == I40E_MAC_X722)
- return i40e_read_nvm_word_aq(hw, offset, data);
+ if (hw->mac.type == I40E_MAC_X722) {
+ ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
+ if (!ret_code) {
+ ret_code = i40e_read_nvm_word_aq(hw, offset, data);
+ i40e_release_nvm(hw);
+ }
+ } else {
+ ret_code = i40e_read_nvm_word_srctl(hw, offset, data);
+ }
+#else
+ ret_code = i40e_read_nvm_word_srctl(hw, offset, data);
#endif
- return i40e_read_nvm_word_srctl(hw, offset, data);
+ return ret_code;
}
/**
@@ -309,11 +320,23 @@ enum i40e_status_code i40e_read_nvm_word_aq(struct i40e_hw *hw, u16 offset,
enum i40e_status_code i40e_read_nvm_buffer(struct i40e_hw *hw, u16 offset,
u16 *words, u16 *data)
{
+ enum i40e_status_code ret_code = I40E_SUCCESS;
+
#ifdef X722_SUPPORT
- if (hw->mac.type == I40E_MAC_X722)
- return i40e_read_nvm_buffer_aq(hw, offset, words, data);
+ if (hw->mac.type == I40E_MAC_X722) {
+ ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
+ if (!ret_code) {
+ ret_code = i40e_read_nvm_buffer_aq(hw, offset, words,
+ data);
+ i40e_release_nvm(hw);
+ }
+ } else {
+ ret_code = i40e_read_nvm_buffer_srctl(hw, offset, words, data);
+ }
+#else
+ ret_code = i40e_read_nvm_buffer_srctl(hw, offset, words, data);
#endif
- return i40e_read_nvm_buffer_srctl(hw, offset, words, data);
+ return ret_code;
}
/**
--
2.5.0
More information about the dev
mailing list