DPDK patches and discussions
 help / color / mirror / Atom feed
From: Wang Xiao W <xiao.w.wang@intel.com>
To: dev@dpdk.org
Cc: Wang Xiao W <xiao.w.wang@intel.com>
Subject: [dpdk-dev] [PATCH 26/28] fm10k: add 1588 clock owner message support
Date: Thu, 10 Sep 2015 12:38:35 +0800	[thread overview]
Message-ID: <1441859917-26475-27-git-send-email-xiao.w.wang@intel.com> (raw)
In-Reply-To: <1441859917-26475-1-git-send-email-xiao.w.wang@intel.com>

Add support for tx timestamp mode response message. The switch manager
should send this message whenever the owner changes or when a new port
appears. To simplify logic, treat this as full clock ownership, and call
it the CLOCK_OWNER message. Implement this as a hw->flags field, so that
base driver may use it to disable any functions which modify the clock
including Tx timestamps, frequency adjustments, and offset adjustments.
This ensures only one PEP will be handling these at a time.

Signed-off-by: Wang Xiao W <xiao.w.wang@intel.com>
---
 drivers/net/fm10k/base/fm10k_osdep.h |  1 +
 drivers/net/fm10k/base/fm10k_pf.c    | 47 ++++++++++++++++++++++++++++++++++++
 drivers/net/fm10k/base/fm10k_pf.h    | 13 ++++++++++
 drivers/net/fm10k/base/fm10k_type.h  |  2 ++
 4 files changed, 63 insertions(+)

diff --git a/drivers/net/fm10k/base/fm10k_osdep.h b/drivers/net/fm10k/base/fm10k_osdep.h
index 53c433c..64f09dc 100644
--- a/drivers/net/fm10k/base/fm10k_osdep.h
+++ b/drivers/net/fm10k/base/fm10k_osdep.h
@@ -106,6 +106,7 @@ typedef int        bool;
 #define FM10K_LE32_TO_CPU    rte_le_to_cpu_32
 #define FM10K_CPU_TO_LE32    rte_cpu_to_le_32
 #define FM10K_CPU_TO_LE16    rte_cpu_to_le_16
+#define le16_to_cpu          rte_le_to_cpu_16
 
 #define FM10K_RMB            rte_rmb
 #define FM10K_WMB            rte_wmb
diff --git a/drivers/net/fm10k/base/fm10k_pf.c b/drivers/net/fm10k/base/fm10k_pf.c
index 0526077..396a2e0 100644
--- a/drivers/net/fm10k/base/fm10k_pf.c
+++ b/drivers/net/fm10k/base/fm10k_pf.c
@@ -1852,6 +1852,48 @@ const struct fm10k_tlv_attr fm10k_1588_timestamp_msg_attr[] = {
 	FM10K_TLV_ATTR_LAST
 };
 
+const struct fm10k_tlv_attr fm10k_1588_clock_owner_attr[] = {
+	FM10K_TLV_ATTR_LE_STRUCT(FM10K_PF_ATTR_ID_1588_CLOCK_OWNER,
+				 sizeof(struct fm10k_swapi_1588_clock_owner)),
+	FM10K_TLV_ATTR_LAST
+};
+
+/**
+ *  fm10k_msg_1588_clock_owner_pf - Message handler for clock ownership from SM
+ *  @hw: pointer to hardware structure
+ *  @results: pointer to array containing parsed data,
+ *  @mbx: Pointer to mailbox information structure
+ *
+ *  This handler configures the FM10K_HW_FLAG_CLOCK_OWNER field for the PF
+ */
+s32 fm10k_msg_1588_clock_owner_pf(struct fm10k_hw *hw, u32 **results,
+				  struct fm10k_mbx_info *mbx)
+{
+	struct fm10k_swapi_1588_clock_owner msg;
+	u16 glort;
+	s32 err;
+
+	UNREFERENCED_1PARAMETER(mbx);
+	DEBUGFUNC("fm10k_msg_1588_clock_owner");
+
+	err = fm10k_tlv_attr_get_le_struct(
+		results[FM10K_PF_ATTR_ID_1588_CLOCK_OWNER],
+		&msg, sizeof(msg));
+	if (err)
+		return err;
+
+	/* We own the clock iff the glort matches us and the enabled field is
+	 * true. Otherwise, the clock must belong to some other port.
+	 */
+	glort = le16_to_cpu(msg.glort);
+	if (fm10k_glort_valid_pf(hw, glort) && msg.enabled)
+		hw->flags |= FM10K_HW_FLAG_CLOCK_OWNER;
+	else
+		hw->flags &= ~FM10K_HW_FLAG_CLOCK_OWNER;
+
+	return FM10K_SUCCESS;
+}
+
 /**
  *  fm10k_adjust_systime_pf - Adjust systime frequency
  *  @hw: pointer to hardware structure
@@ -1871,6 +1913,10 @@ STATIC s32 fm10k_adjust_systime_pf(struct fm10k_hw *hw, s32 ppb)
 
 	DEBUGFUNC("fm10k_adjust_systime_vf");
 
+	/* ensure that we control the clock */
+	if (!(hw->flags & FM10K_HW_FLAG_CLOCK_OWNER))
+		return FM10K_ERR_DEVICE_NOT_SUPPORTED;
+
 	/* if sw_addr is not set we don't have switch register access */
 	if (!hw->sw_addr)
 		return ppb ? FM10K_ERR_PARAM : FM10K_SUCCESS;
@@ -1936,6 +1982,7 @@ static const struct fm10k_msg_data fm10k_msg_data_pf[] = {
 	FM10K_PF_MSG_ERR_HANDLER(LPORT_CREATE, fm10k_msg_err_pf),
 	FM10K_PF_MSG_ERR_HANDLER(LPORT_DELETE, fm10k_msg_err_pf),
 	FM10K_PF_MSG_UPDATE_PVID_HANDLER(fm10k_msg_update_pvid_pf),
+	FM10K_PF_MSG_1588_CLOCK_OWNER_HANDLER(fm10k_msg_1588_clock_owner_pf),
 	FM10K_TLV_MSG_ERROR_HANDLER(fm10k_tlv_msg_error),
 };
 
diff --git a/drivers/net/fm10k/base/fm10k_pf.h b/drivers/net/fm10k/base/fm10k_pf.h
index dd25c49..ae8a737 100644
--- a/drivers/net/fm10k/base/fm10k_pf.h
+++ b/drivers/net/fm10k/base/fm10k_pf.h
@@ -57,6 +57,7 @@ enum fm10k_pf_tlv_msg_id_v1 {
 	FM10K_PF_MSG_ID_SET_FLOW_STATE		= 0x505,
 	FM10K_PF_MSG_ID_GET_1588_INFO		= 0x506,
 	FM10K_PF_MSG_ID_1588_TIMESTAMP		= 0x701,
+	FM10K_PF_MSG_ID_1588_CLOCK_OWNER	= 0x702,
 };
 
 enum fm10k_pf_tlv_attr_id_v1 {
@@ -75,6 +76,7 @@ enum fm10k_pf_tlv_attr_id_v1 {
 	FM10K_PF_ATTR_ID_PORT			= 0x0C,
 	FM10K_PF_ATTR_ID_UPDATE_PVID		= 0x0D,
 	FM10K_PF_ATTR_ID_1588_TIMESTAMP		= 0x10,
+	FM10K_PF_ATTR_ID_1588_CLOCK_OWNER	= 0x12,
 };
 
 #define FM10K_MSG_LPORT_MAP_GLORT_SHIFT	0
@@ -125,6 +127,10 @@ struct fm10k_swapi_1588_timestamp {
 	__le16 sglort;
 };
 
+struct fm10k_swapi_1588_clock_owner {
+	__le16 glort;
+	__le16 enabled;
+};
 
 #ifdef C99
 #pragma pack(pop)
@@ -158,6 +164,13 @@ extern const struct fm10k_tlv_attr fm10k_1588_timestamp_msg_attr[];
 	FM10K_MSG_HANDLER(FM10K_PF_MSG_ID_1588_TIMESTAMP, \
 			  fm10k_1588_timestamp_msg_attr, func)
 
+s32 fm10k_msg_1588_clock_owner_pf(struct fm10k_hw *, u32 **,
+				  struct fm10k_mbx_info *);
+extern const struct fm10k_tlv_attr fm10k_1588_clock_owner_attr[];
+#define FM10K_PF_MSG_1588_CLOCK_OWNER_HANDLER(func) \
+	FM10K_MSG_HANDLER(FM10K_PF_MSG_ID_1588_CLOCK_OWNER, \
+			  fm10k_1588_clock_owner_attr, func)
+
 s32 fm10k_iov_msg_msix_pf(struct fm10k_hw *, u32 **, struct fm10k_mbx_info *);
 s32 fm10k_iov_msg_mac_vlan_pf(struct fm10k_hw *, u32 **,
 			      struct fm10k_mbx_info *);
diff --git a/drivers/net/fm10k/base/fm10k_type.h b/drivers/net/fm10k/base/fm10k_type.h
index 7fdf8a4..e0fc08d 100644
--- a/drivers/net/fm10k/base/fm10k_type.h
+++ b/drivers/net/fm10k/base/fm10k_type.h
@@ -805,6 +805,8 @@ struct fm10k_hw {
 	u16 subsystem_device_id;
 	u16 subsystem_vendor_id;
 	u8 revision_id;
+	u32 flags;
+#define FM10K_HW_FLAG_CLOCK_OWNER	(u32)(1 << 0)
 };
 
 /* Number of Transmit and Receive Descriptors must be a multiple of 8 */
-- 
1.9.3

  parent reply	other threads:[~2015-09-10  4:39 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-10  4:38 [dpdk-dev] [PATCH 00/28] fm10k: update shared code from ND team Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 01/28] fm10k: add PF Tx Timestamp mode handler function Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 02/28] fm10k: add no-op pointer for VF request_tx_timestamp_mode Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 03/28] fm10k: Set PF queues to unlimited bandwidth Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 04/28] fm10k: fix fm10k_mbx_write_copy header comment Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 05/28] fm10k: Add support for ITR scaling based on PCIe link speed Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 06/28] fm10k: reset head instead of calling update_max_size Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 07/28] fm10k: mbx_update_max_size does not drop all Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 08/28] fm10k: ensure VF restores itr_scale on stop_hw Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 09/28] fm10k: ensure itr_scale is set even if we don't know speed Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 10/28] fm10k: correct VF multicast update Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 11/28] fm10k: Re-map all possible VF queues after a VFLR Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 12/28] fm10k: pack TLV overlay structures correctly Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 13/28] fm10k: 1558 DIR_NEGATIVE bit is actually DIR_POSITIVE Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 14/28] fm10k: remove err_no reference Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 15/28] fm10k: fix iov_msg_lport_state_pf re-enable bug Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 16/28] fm10k: add macro definitions about valid ether addr Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 17/28] fm10k: store actual count of DWORDS pulled/pushed from mbmem Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 18/28] fm10k: fix iov_msg_mac_vlan_pf VID checks Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 19/28] fm10k: Fix Solaris build issue Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 20/28] fm10k: fix Tx FIFO clearing for phantom messages Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 21/28] fm10k: create "correct" header for the remote end on connect Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 22/28] fm10k: do not assume VF always has 1 queue Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 23/28] fm10k: Add support for Boulder Rapids and Atwood Channel Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 24/28] fm10k: remove report_timestamp PF<->VF message Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 25/28] fm10k: remove request_tx_timestamp_mode call Wang Xiao W
2015-09-10  4:38 ` Wang Xiao W [this message]
2015-09-10  4:38 ` [dpdk-dev] [PATCH 27/28] fm10k: TRIVIAL fix typo in DEBUGFUNC Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 28/28] fm10k: add support for MASTER_CLK_OFFSET message Wang Xiao W
2015-10-07 11:40 ` [dpdk-dev] [PATCH 00/28] fm10k: update shared code from ND team Thomas Monjalon

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=1441859917-26475-27-git-send-email-xiao.w.wang@intel.com \
    --to=xiao.w.wang@intel.com \
    --cc=dev@dpdk.org \
    /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).