Files
kernel/kernel-modules/intel-i40e-cvl-2.54/debian/deb_folder/patches/i40e-Enable-getting-link-status-from-VF.patch
Jiping Ma db0c0bcfec Make driver package release a command line param
Instead of hard-coding driver versions in the initramfs init script,
this commit makes the driver package release (e.g., "cvl-2.54") a kernel
command line parameter. As an example, if a driver package release is
specified with the command line argument multi-drivers-switch=<release>,
then the initramfs init script will look for the drivers in
"/lib/modules/$(uname -r)/{ice,iavf,i40e}-<release>/". This way, the
initramfs will not need further modifications for new/different driver
package releases that are integrated into StarlingX in the future.

It also changes the legacy driver deb package names from
	ice-1.5.8.1-legacy
	iavf-4.0.1-legacy
	i40e-2.14.13-legacy
to
	ice-cvl-2.54
	iavf-cvl-2.54
	i40e-cvl-2.54

Legacy drivers location folder:
ls /lib/modules/$(uname -r)/extra/
i40e-cvl-2.54  iavf-cvl-2.54  ice-cvl-2.54

Latest driverslocation folder:
/lib/modules/$(uname -r)/updates/
i40e-cvl-4.0.1  iavf-cvl-4.0.1  ice-cvl-4.0.1

Testing:
- An ISO image can be built successfully.
- PXE boot-based installation onto an All-in-One Duplex lab was
  successful with rt and std kernels.
- Latest driver versions are loaded by default and the DDP
  firmware version is correct. It is 1.3.30.0.
- It is possible to switch to the legacy drivers manually with
  command line parameter multi-drivers-switch=cvl-2.54, and the DDP
  firmware version is 1.3.26.0.
- It is also possible to switch back to the latest drivers manually
  with command line parameter multi-drivers-switch=cvl-4.0.1.

Story: 2010326
Task: 46705

Signed-off-by: Jiping Ma <jiping.ma2@windriver.com>
Change-Id: Ic20922dacee0807b908354189ec185ace2737810
2022-11-03 22:47:31 -04:00

134 lines
4.4 KiB
Diff

From f332fb984e95cabf4e47d0d9cebb96d148fae37e Mon Sep 17 00:00:00 2001
From: Vadim Suraev <vsuraev@northforgeinc.com>
Date: Mon, 8 Feb 2016 15:57:30 -0500
Subject: [PATCH] i40e: Enable getting link status from VF
Add handling of custom OP code sent from the PMD VF to get link status via the
virtual channel interface.
Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
Signed-off-by: eric zhang <eric.zhang@windriver.com>
Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com>
Signed-off-by: Steven Webster <Steven.Webster@windriver.com>
Signed-off-by: Babak Sarashki <babak.sarashki@windriver.com>
[mvb: Refresh patch for i40e v2.6.11]
Signed-off-by: M. Vefa Bicakci <vefa.bicakci@windriver.com>
(jpm: Refresh patch for i40e v2.14.13)
Signed-off-by: Jiping Ma <jiping.ma2@windriver.com>
---
src/i40e_virtchnl_pf.c | 78 ++++++++++++++++++++++++++++++++++++++++++
src/virtchnl.h | 1 +
2 files changed, 79 insertions(+)
diff --git a/src/i40e_virtchnl_pf.c b/src/i40e_virtchnl_pf.c
index b7325d0..0542c92 100644
--- a/src/i40e_virtchnl_pf.c
+++ b/src/i40e_virtchnl_pf.c
@@ -3198,6 +3198,81 @@ err_out:
aq_ret);
}
+struct i40e_eth_link {
+ uint16_t link_speed; /**< ETH_LINK_SPEED_[10, 100, 1000, 10000] */
+ uint16_t link_duplex; /**< ETH_LINK_[HALF_DUPLEX, FULL_DUPLEX] */
+ uint8_t link_status : 1; /**< 1 -> link up, 0 -> link down */
+}__attribute__((aligned(8)));
+
+#define ETH_LINK_SPEED_AUTONEG 0 /**< Auto-negotiate link speed. */
+#define ETH_LINK_SPEED_10 10 /**< 10 megabits/second. */
+#define ETH_LINK_SPEED_100 100 /**< 100 megabits/second. */
+#define ETH_LINK_SPEED_1000 1000 /**< 1 gigabits/second. */
+#define ETH_LINK_SPEED_10000 10000 /**< 10 gigabits/second. */
+#define ETH_LINK_SPEED_10G 10000 /**< alias of 10 gigabits/second. */
+#define ETH_LINK_SPEED_20G 20000 /**< 20 gigabits/second. */
+#define ETH_LINK_SPEED_40G 40000 /**< 40 gigabits/second. */
+
+#define ETH_LINK_AUTONEG_DUPLEX 0 /**< Auto-negotiate duplex. */
+#define ETH_LINK_HALF_DUPLEX 1 /**< Half-duplex connection. */
+#define ETH_LINK_FULL_DUPLEX 2 /**< Full-duplex connection. */
+
+static void
+i40e_vc_get_link_status(struct i40e_vf *vf)
+{
+ struct i40e_pf *pf = vf->pf;
+ struct i40e_hw *hw;
+ i40e_status aq_ret = I40E_SUCCESS;
+ i40e_status status;
+ struct i40e_eth_link eth_link;
+ bool new_link;
+
+ if (!test_bit(I40E_VF_STATE_ACTIVE, &vf->vf_states) ||
+ !test_bit(I40E_VIRTCHNL_VF_CAP_PRIVILEGE, &vf->vf_caps)) {
+ aq_ret = I40E_ERR_PARAM;
+ goto error_param;
+ }
+ hw = &pf->hw;
+
+ /* set this to force the get_link_status call to refresh state */
+ pf->hw.phy.get_link_info = true;
+
+ status = i40e_get_link_status(&pf->hw, &new_link);
+ if (status != I40E_SUCCESS) {
+ dev_dbg(&pf->pdev->dev, "couldn't get link state, status: %d\n",
+ status);
+ aq_ret = I40E_ERR_INVALID_LINK_SETTINGS;
+ goto error_param;
+ }
+
+ /* Update link status first to acquire latest link change */
+ eth_link.link_status = new_link ? 1 : 0;
+
+ switch(hw->phy.link_info.link_speed) {
+ case I40E_LINK_SPEED_40GB:
+ eth_link.link_speed = ETH_LINK_SPEED_40G;
+ break;
+ case I40E_LINK_SPEED_10GB:
+ eth_link.link_speed = ETH_LINK_SPEED_10G;
+ break;
+ case I40E_LINK_SPEED_1GB:
+ eth_link.link_speed = ETH_LINK_SPEED_1000;
+ break;
+ case I40E_LINK_SPEED_100MB:
+ eth_link.link_speed = ETH_LINK_SPEED_100;
+ break;
+ default:
+ eth_link.link_speed = ETH_LINK_SPEED_AUTONEG;
+ break;
+ }
+ eth_link.link_duplex = ETH_LINK_FULL_DUPLEX;/* always */
+
+error_param:
+ i40e_vc_send_msg_to_vf(vf, VIRTCHNL_OP_GET_LINK_STAT,
+ aq_ret, (uint8_t *)&eth_link,
+ sizeof(eth_link));
+}
+
/**
* i40e_vc_config_queues_msg
* @vf: pointer to the VF info
@@ -5065,6 +5140,9 @@ int i40e_vc_process_vf_msg(struct i40e_pf *pf, s16 vf_id, u32 v_opcode,
case VIRTCHNL_OP_REQUEST_QUEUES:
ret = i40e_vc_request_queues_msg(vf, msg);
break;
+ case VIRTCHNL_OP_GET_LINK_STAT:
+ i40e_vc_get_link_status(vf);
+ break;
#ifdef __TC_MQPRIO_MODE_MAX
case VIRTCHNL_OP_ENABLE_CHANNELS:
ret = i40e_vc_add_qch_msg(vf, msg);
diff --git a/src/virtchnl.h b/src/virtchnl.h
index 4db8bf4..b72f679 100644
--- a/src/virtchnl.h
+++ b/src/virtchnl.h
@@ -132,6 +132,7 @@ enum virtchnl_ops {
/* opcodes 39, 40, 41, 42 and 43 are reserved */
/* opcode 44 is reserved */
/* opcode 45, 46, 47, 48 and 49 are reserved */
+ VIRTCHNL_OP_GET_LINK_STAT = 0x101,
VIRTCHNL_OP_MAX,
};
--
2.29.2