From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
To: davem@davemloft.net
Cc: Jacob Keller <jacob.e.keller@intel.com>,
netdev@vger.kernel.org, nhorman@redhat.com, sassmann@redhat.com,
jogreene@redhat.com, Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Subject: [net-next 05/17] fm10k: create "correct" header for the remote end on connect
Date: Tue, 22 Sep 2015 16:54:24 -0700 [thread overview]
Message-ID: <1442966076-14359-6-git-send-email-jeffrey.t.kirsher@intel.com> (raw)
In-Reply-To: <1442966076-14359-1-git-send-email-jeffrey.t.kirsher@intel.com>
From: Jacob Keller <jacob.e.keller@intel.com>
When we connect to the mailbox, we insert a fake disconnect header so
that the code does not see an invalid header and thus instantly error
every time we bring up the mailbox. However, we incorrectly record the
tail and head from the local perspective. Since the remote end shouldn't
have anything for us, add a "create_fake_disconnect_hdr" function which
inverts the TAIL and HEAD fields. This enables us to connect without any
errors of either TAIL or HEAD incorrectness, and prevents creating
extraneous error messages. This is necessary now since mbx_reset_work
does not actually reset the Tx FIFO head and tail pointers, thus head
and tail might not be equivalent on a reconnect.
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Krishneil Singh <krishneil.k.singh@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/fm10k/fm10k_mbx.c | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_mbx.c b/drivers/net/ethernet/intel/fm10k/fm10k_mbx.c
index 0ff21d1..5403d86 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_mbx.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_mbx.c
@@ -899,6 +899,27 @@ static void fm10k_mbx_create_disconnect_hdr(struct fm10k_mbx_info *mbx)
}
/**
+ * fm10k_mbx_create_fake_disconnect_hdr - Generate a false disconnect mailbox header
+ * @mbx: pointer to mailbox
+ *
+ * This function creates a fake disconnect header for loading into remote
+ * mailbox header. The primary purpose is to prevent errors on immediate
+ * start up after mbx->connect.
+ **/
+static void fm10k_mbx_create_fake_disconnect_hdr(struct fm10k_mbx_info *mbx)
+{
+ u32 hdr = FM10K_MSG_HDR_FIELD_SET(FM10K_MSG_DISCONNECT, TYPE) |
+ FM10K_MSG_HDR_FIELD_SET(mbx->head, TAIL) |
+ FM10K_MSG_HDR_FIELD_SET(mbx->tail, HEAD);
+ u16 crc = fm10k_crc_16b(&hdr, mbx->local, 1);
+
+ mbx->mbx_lock |= FM10K_MBX_ACK;
+
+ /* load header to memory to be written */
+ mbx->mbx_hdr = hdr | FM10K_MSG_HDR_FIELD_SET(crc, CRC);
+}
+
+/**
* fm10k_mbx_create_error_msg - Generate a error message
* @mbx: pointer to mailbox
* @err: local error encountered
@@ -1435,8 +1456,10 @@ static s32 fm10k_mbx_connect(struct fm10k_hw *hw, struct fm10k_mbx_info *mbx)
/* Place mbx in ready to connect state */
mbx->state = FM10K_STATE_CONNECT;
+ fm10k_mbx_reset_work(mbx);
+
/* initialize header of remote mailbox */
- fm10k_mbx_create_disconnect_hdr(mbx);
+ fm10k_mbx_create_fake_disconnect_hdr(mbx);
fm10k_write_reg(hw, mbx->mbmem_reg ^ mbx->mbmem_len, mbx->mbx_hdr);
/* enable interrupt and notify other party of new message */
--
2.4.3
next prev parent reply other threads:[~2015-09-22 23:54 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-22 23:54 [net-next 00/17][pull request] Intel Wired LAN Driver Updates 2015-09-22 Jeff Kirsher
2015-09-22 23:54 ` [net-next 01/17] fm10k: remove comment about rtnl_lock around mbx operations Jeff Kirsher
2015-09-22 23:54 ` [net-next 02/17] ixgbe: Add SFP+ detection for X550 hardware Jeff Kirsher
2015-09-22 23:54 ` [net-next 03/17] ixgbe: Add fdir support for SCTP on X550 Jeff Kirsher
2015-09-22 23:54 ` [net-next 04/17] fm10k: drop transmitted messages in Tx FIFO as part of reset_work Jeff Kirsher
2015-09-22 23:54 ` Jeff Kirsher [this message]
2015-09-22 23:54 ` [net-next 06/17] fm10k: TRIVIAL remove unnecessary comma Jeff Kirsher
2015-09-22 23:54 ` [net-next 07/17] fm10k: add support for extra debug statistics Jeff Kirsher
2015-09-22 23:54 ` [net-next 08/17] e1000: remove dead e1000_init_eeprom_params calls Jeff Kirsher
2015-09-22 23:54 ` [net-next 09/17] igbvf: Enable TSO for stacked VLAN Jeff Kirsher
2015-09-22 23:54 ` [net-next 10/17] e1000e: " Jeff Kirsher
2015-09-22 23:54 ` [net-next 11/17] ixgbevf: Enables " Jeff Kirsher
2015-09-22 23:54 ` [net-next 12/17] ixgbe: Accept SFP not present errors on all devices Jeff Kirsher
2015-09-22 23:54 ` [net-next 13/17] ixgbe: Add X550EM support for SFP insertion interrupt Jeff Kirsher
2015-09-22 23:54 ` [net-next 14/17] ixgbe: Provide I2C combined on X550EM Jeff Kirsher
2015-09-22 23:54 ` [net-next 15/17] ixgbe: Provide unlocked I2C methods Jeff Kirsher
2015-09-22 23:54 ` [net-next 16/17] ixgbe: Set lan_id before first I2C eeprom access Jeff Kirsher
2015-09-22 23:54 ` [net-next 17/17] ixgbe: Enable bit-banging mode on X550 Jeff Kirsher
2015-09-23 21:52 ` [net-next 00/17][pull request] Intel Wired LAN Driver Updates 2015-09-22 David Miller
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=1442966076-14359-6-git-send-email-jeffrey.t.kirsher@intel.com \
--to=jeffrey.t.kirsher@intel.com \
--cc=davem@davemloft.net \
--cc=jacob.e.keller@intel.com \
--cc=jogreene@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=nhorman@redhat.com \
--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).