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 28/28] fm10k: add support for MASTER_CLK_OFFSET message
Date: Thu, 10 Sep 2015 12:38:37 +0800	[thread overview]
Message-ID: <1441859917-26475-29-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 clock offset message from switch manager. Each PEP will
be responsible for notifying its own VFs, and the originating PEP must
notify its own VFs prior or in addition to sending, as it will not
receive a copy of its own message. Base drivers are expected to need
custom implementations so no message handler is provided in shared code.

Signed-off-by: Wang Xiao W <xiao.w.wang@intel.com>
---
 drivers/net/fm10k/base/fm10k_api.c  | 14 ++++++++++
 drivers/net/fm10k/base/fm10k_api.h  |  1 +
 drivers/net/fm10k/base/fm10k_pf.c   | 56 +++++++++++++++++++++++++++++++++++++
 drivers/net/fm10k/base/fm10k_pf.h   |  7 +++++
 drivers/net/fm10k/base/fm10k_type.h |  2 ++
 drivers/net/fm10k/base/fm10k_vf.c   |  3 ++
 drivers/net/fm10k/base/fm10k_vf.h   |  1 +
 7 files changed, 84 insertions(+)

diff --git a/drivers/net/fm10k/base/fm10k_api.c b/drivers/net/fm10k/base/fm10k_api.c
index a1ab6b1..eb5bdaa 100644
--- a/drivers/net/fm10k/base/fm10k_api.c
+++ b/drivers/net/fm10k/base/fm10k_api.c
@@ -345,3 +345,17 @@ s32 fm10k_adjust_systime(struct fm10k_hw *hw, s32 ppb)
 	return fm10k_call_func(hw, hw->mac.ops.adjust_systime,
 			       (hw, ppb), FM10K_NOT_IMPLEMENTED);
 }
+
+/**
+ *  fm10k_notify_offset - Notify switch of change in PTP offset
+ *  @hw: pointer to hardware structure
+ *  @offset: 64bit unsigned offset from hardware SYSTIME value
+ *
+ *  This function is meant to notify switch of change in the PTP offset for
+ *  the hardware SYSTIME registers.
+ **/
+s32 fm10k_notify_offset(struct fm10k_hw *hw, u64 offset)
+{
+	return fm10k_call_func(hw, hw->mac.ops.notify_offset,
+			       (hw, offset), FM10K_NOT_IMPLEMENTED);
+}
diff --git a/drivers/net/fm10k/base/fm10k_api.h b/drivers/net/fm10k/base/fm10k_api.h
index 343d750..113aef5 100644
--- a/drivers/net/fm10k/base/fm10k_api.h
+++ b/drivers/net/fm10k/base/fm10k_api.h
@@ -58,4 +58,5 @@ s32 fm10k_update_uc_addr(struct fm10k_hw *hw, u16 lport,
 s32 fm10k_update_mc_addr(struct fm10k_hw *hw, u16 lport,
 			 const u8 *mac, u16 vid, bool add);
 s32 fm10k_adjust_systime(struct fm10k_hw *hw, s32 ppb);
+s32 fm10k_notify_offset(struct fm10k_hw *hw, u64 offset);
 #endif /* _FM10K_API_H_ */
diff --git a/drivers/net/fm10k/base/fm10k_pf.c b/drivers/net/fm10k/base/fm10k_pf.c
index 3148a90..6e6d71e 100644
--- a/drivers/net/fm10k/base/fm10k_pf.c
+++ b/drivers/net/fm10k/base/fm10k_pf.c
@@ -1858,6 +1858,33 @@ const struct fm10k_tlv_attr fm10k_1588_clock_owner_attr[] = {
 	FM10K_TLV_ATTR_LAST
 };
 
+const struct fm10k_tlv_attr fm10k_master_clk_offset_attr[] = {
+	FM10K_TLV_ATTR_U64(FM10K_PF_ATTR_ID_MASTER_CLK_OFFSET),
+	FM10K_TLV_ATTR_LAST
+};
+
+/**
+ *  fm10k_iov_notify_offset_pf - Notify VF of change in PTP offset
+ *  @hw: pointer to hardware structure
+ *  @vf_info: pointer to the vf info structure
+ *  @offset: 64bit unsigned offset from hardware SYSTIME
+ *
+ *  This function sends a message to a given VF to notify it of PTP offset
+ *  changes.
+ **/
+STATIC void fm10k_iov_notify_offset_pf(struct fm10k_hw *hw,
+				       struct fm10k_vf_info *vf_info,
+				       u64 offset)
+{
+	u32 msg[4];
+
+	fm10k_tlv_msg_init(msg, FM10K_VF_MSG_ID_1588);
+	fm10k_tlv_attr_put_u64(msg, FM10K_1588_MSG_CLK_OFFSET, offset);
+
+	if (vf_info->mbx.ops.enqueue_tx)
+		vf_info->mbx.ops.enqueue_tx(hw, &vf_info->mbx, msg);
+}
+
 /**
  *  fm10k_msg_1588_clock_owner_pf - Message handler for clock ownership from SM
  *  @hw: pointer to hardware structure
@@ -1951,6 +1978,33 @@ STATIC s32 fm10k_adjust_systime_pf(struct fm10k_hw *hw, s32 ppb)
 }
 
 /**
+ *  fm10k_notify_offset_pf - Notify switch of change in PTP offset
+ *  @hw: pointer to hardware structure
+ *  @offset: 64bit unsigned offset of SYSTIME
+ *
+ *  This function sends a message to the switch to indicate a change in the
+ *  offset of the hardware SYSTIME registers. The switch manager is
+ *  responsible for transmitting this message to other hosts.
+ */
+STATIC s32 fm10k_notify_offset_pf(struct fm10k_hw *hw, u64 offset)
+{
+	struct fm10k_mbx_info *mbx = &hw->mbx;
+	u32 msg[4];
+
+	DEBUGFUNC("fm10k_notify_offset_pf");
+
+	/* ensure that we control the clock */
+	if (!(hw->flags & FM10K_HW_FLAG_CLOCK_OWNER))
+		return FM10K_ERR_DEVICE_NOT_SUPPORTED;
+
+	fm10k_tlv_msg_init(msg, FM10K_PF_MSG_ID_MASTER_CLK_OFFSET);
+	fm10k_tlv_attr_put_u64(msg, FM10K_PF_ATTR_ID_MASTER_CLK_OFFSET, offset);
+
+	/* load onto outgoing mailbox */
+	return mbx->ops.enqueue_tx(hw, mbx, msg);
+}
+
+/**
  *  fm10k_read_systime_pf - Reads value of systime registers
  *  @hw: pointer to the hardware structure
  *
@@ -2021,6 +2075,7 @@ s32 fm10k_init_ops_pf(struct fm10k_hw *hw)
 	mac->ops.get_fault = &fm10k_get_fault_pf;
 	mac->ops.get_host_state = &fm10k_get_host_state_pf;
 	mac->ops.adjust_systime = &fm10k_adjust_systime_pf;
+	mac->ops.notify_offset = &fm10k_notify_offset_pf;
 	mac->ops.read_systime = &fm10k_read_systime_pf;
 
 	mac->max_msix_vectors = fm10k_get_pcie_msix_count_generic(hw);
@@ -2033,6 +2088,7 @@ s32 fm10k_init_ops_pf(struct fm10k_hw *hw)
 	iov->ops.set_lport = &fm10k_iov_set_lport_pf;
 	iov->ops.reset_lport = &fm10k_iov_reset_lport_pf;
 	iov->ops.update_stats = &fm10k_iov_update_stats_pf;
+	iov->ops.notify_offset = &fm10k_iov_notify_offset_pf;
 
 	return fm10k_sm_mbx_init(hw, &hw->mbx, fm10k_msg_data_pf);
 }
diff --git a/drivers/net/fm10k/base/fm10k_pf.h b/drivers/net/fm10k/base/fm10k_pf.h
index ae8a737..44bd193 100644
--- a/drivers/net/fm10k/base/fm10k_pf.h
+++ b/drivers/net/fm10k/base/fm10k_pf.h
@@ -58,6 +58,7 @@ enum fm10k_pf_tlv_msg_id_v1 {
 	FM10K_PF_MSG_ID_GET_1588_INFO		= 0x506,
 	FM10K_PF_MSG_ID_1588_TIMESTAMP		= 0x701,
 	FM10K_PF_MSG_ID_1588_CLOCK_OWNER	= 0x702,
+	FM10K_PF_MSG_ID_MASTER_CLK_OFFSET	= 0x703,
 };
 
 enum fm10k_pf_tlv_attr_id_v1 {
@@ -77,6 +78,7 @@ enum fm10k_pf_tlv_attr_id_v1 {
 	FM10K_PF_ATTR_ID_UPDATE_PVID		= 0x0D,
 	FM10K_PF_ATTR_ID_1588_TIMESTAMP		= 0x10,
 	FM10K_PF_ATTR_ID_1588_CLOCK_OWNER	= 0x12,
+	FM10K_PF_ATTR_ID_MASTER_CLK_OFFSET	= 0x14,
 };
 
 #define FM10K_MSG_LPORT_MAP_GLORT_SHIFT	0
@@ -171,6 +173,11 @@ extern const struct fm10k_tlv_attr fm10k_1588_clock_owner_attr[];
 	FM10K_MSG_HANDLER(FM10K_PF_MSG_ID_1588_CLOCK_OWNER, \
 			  fm10k_1588_clock_owner_attr, func)
 
+extern const struct fm10k_tlv_attr fm10k_master_clk_offset_attr[];
+#define FM10K_PF_MSG_MASTER_CLK_OFFSET_HANDLER(func) \
+	FM10K_MSG_HANDLER(FM10K_PF_MSG_ID_MASTER_CLK_OFFSET, \
+			  fm10k_master_clk_offset_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 e0fc08d..df1d276 100644
--- a/drivers/net/fm10k/base/fm10k_type.h
+++ b/drivers/net/fm10k/base/fm10k_type.h
@@ -681,6 +681,7 @@ struct fm10k_mac_ops {
 	s32 (*get_fault)(struct fm10k_hw *, int, struct fm10k_fault *);
 	void (*request_lport_map)(struct fm10k_hw *);
 	s32 (*adjust_systime)(struct fm10k_hw *, s32 ppb);
+	s32 (*notify_offset)(struct fm10k_hw *, u64 offset);
 	u64 (*read_systime)(struct fm10k_hw *);
 };
 
@@ -781,6 +782,7 @@ struct fm10k_iov_ops {
 	s32 (*set_lport)(struct fm10k_hw *, struct fm10k_vf_info *, u16, u8);
 	void (*reset_lport)(struct fm10k_hw *, struct fm10k_vf_info *);
 	void (*update_stats)(struct fm10k_hw *, struct fm10k_hw_stats_q *, u16);
+	void (*notify_offset)(struct fm10k_hw *, struct fm10k_vf_info*, u64);
 };
 
 struct fm10k_iov_info {
diff --git a/drivers/net/fm10k/base/fm10k_vf.c b/drivers/net/fm10k/base/fm10k_vf.c
index 295bae4..a46b488 100644
--- a/drivers/net/fm10k/base/fm10k_vf.c
+++ b/drivers/net/fm10k/base/fm10k_vf.c
@@ -414,6 +414,8 @@ const struct fm10k_tlv_attr fm10k_lport_state_msg_attr[] = {
 	FM10K_TLV_ATTR_LAST
 };
 
+extern const struct fm10k_tlv_attr fm10k_1588_msg_attr[];
+
 /**
  *  fm10k_msg_lport_state_vf - Message handler for lport_state message from PF
  *  @hw: Pointer to hardware structure
@@ -497,6 +499,7 @@ STATIC s32 fm10k_update_xcast_mode_vf(struct fm10k_hw *hw, u16 glort, u8 mode)
 }
 
 const struct fm10k_tlv_attr fm10k_1588_msg_attr[] = {
+	FM10K_TLV_ATTR_U64(FM10K_1588_MSG_CLK_OFFSET),
 	FM10K_TLV_ATTR_LAST
 };
 
diff --git a/drivers/net/fm10k/base/fm10k_vf.h b/drivers/net/fm10k/base/fm10k_vf.h
index 333b0d9..116c56f 100644
--- a/drivers/net/fm10k/base/fm10k_vf.h
+++ b/drivers/net/fm10k/base/fm10k_vf.h
@@ -64,6 +64,7 @@ enum fm10k_tlv_lport_state_attr_id {
 
 enum fm10k_tlv_1588_attr_id {
 	FM10K_1588_MSG_TIMESTAMP = 0, /* deprecated */
+	FM10K_1588_MSG_CLK_OFFSET,
 	FM10K_1588_MSG_MAX
 };
 
-- 
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 ` [dpdk-dev] [PATCH 26/28] fm10k: add 1588 clock owner message support Wang Xiao W
2015-09-10  4:38 ` [dpdk-dev] [PATCH 27/28] fm10k: TRIVIAL fix typo in DEBUGFUNC Wang Xiao W
2015-09-10  4:38 ` Wang Xiao W [this message]
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-29-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).