From: Robin Zhang <robinx.zhang@intel.com>
To: dev@dpdk.org
Cc: qiming.yang@intel.com, qi.z.zhang@intel.com,
stevex.yang@intel.com, thomas@monjalon.net,
andrew.rybchenko@oktetlabs.ru, bruce.richardson@intel.com,
david.marchand@redhat.com, Robin Zhang <robinx.zhang@intel.com>
Subject: [PATCH v4 4/5] ethdev: format module EEPROM for SFF-8472
Date: Mon, 25 Apr 2022 05:34:45 +0000 [thread overview]
Message-ID: <20220425053446.921528-5-robinx.zhang@intel.com> (raw)
In-Reply-To: <20220425053446.921528-1-robinx.zhang@intel.com>
This patch implements format module EEPROM information for
SFF-8472 Rev 12.0
Signed-off-by: Robin Zhang <robinx.zhang@intel.com>
---
lib/ethdev/ethdev_sff_telemetry.c | 4 +
lib/ethdev/meson.build | 1 +
lib/ethdev/sff_8472.c | 287 ++++++++++++++++++++++++++++++
3 files changed, 292 insertions(+)
create mode 100644 lib/ethdev/sff_8472.c
diff --git a/lib/ethdev/ethdev_sff_telemetry.c b/lib/ethdev/ethdev_sff_telemetry.c
index aa1e859068..fa93b35275 100644
--- a/lib/ethdev/ethdev_sff_telemetry.c
+++ b/lib/ethdev/ethdev_sff_telemetry.c
@@ -67,6 +67,10 @@ sff_port_module_eeprom_display(uint16_t port_id, struct sff_item *items)
case RTE_ETH_MODULE_SFF_8079:
sff_8079_show_all(einfo.data, items);
break;
+ case RTE_ETH_MODULE_SFF_8472:
+ sff_8079_show_all(einfo.data, items);
+ sff_8472_show_all(einfo.data, items);
+ break;
default:
RTE_ETHDEV_LOG(NOTICE, "Unsupported module type: %u\n", minfo.type);
break;
diff --git a/lib/ethdev/meson.build b/lib/ethdev/meson.build
index d94860da0c..4d81a35c09 100644
--- a/lib/ethdev/meson.build
+++ b/lib/ethdev/meson.build
@@ -14,6 +14,7 @@ sources = files(
'ethdev_sff_telemetry.c',
'sff_common.c',
'sff_8079.c',
+ 'sff_8472.c',
)
headers = files(
diff --git a/lib/ethdev/sff_8472.c b/lib/ethdev/sff_8472.c
new file mode 100644
index 0000000000..b4869d69c0
--- /dev/null
+++ b/lib/ethdev/sff_8472.c
@@ -0,0 +1,287 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2022 Intel Corporation
+ *
+ * Implements SFF-8472 optics diagnostics.
+ *
+ */
+
+#include <stdio.h>
+#include <math.h>
+#include <arpa/inet.h>
+#include <rte_mbuf.h>
+#include <rte_ethdev.h>
+#include <rte_flow.h>
+#include "sff_common.h"
+#include "ethdev_sff_telemetry.h"
+
+/* Offsets in decimal, for direct comparison with the SFF specs */
+
+/* A0-based EEPROM offsets for DOM support checks */
+#define SFF_A0_DOM 92
+#define SFF_A0_OPTIONS 93
+#define SFF_A0_COMP 94
+
+/* EEPROM bit values for various registers */
+#define SFF_A0_DOM_EXTCAL (1 << 4)
+#define SFF_A0_DOM_INTCAL (1 << 5)
+#define SFF_A0_DOM_IMPL (1 << 6)
+#define SFF_A0_DOM_PWRT (1 << 3)
+
+#define SFF_A0_OPTIONS_AW (1 << 7)
+
+/*
+ * This is the offset at which the A2 page is in the EEPROM
+ * blob returned by the kernel.
+ */
+#define SFF_A2_BASE 0x100
+
+/* A2-based offsets for DOM */
+#define SFF_A2_TEMP 96
+#define SFF_A2_TEMP_HALRM 0
+#define SFF_A2_TEMP_LALRM 2
+#define SFF_A2_TEMP_HWARN 4
+#define SFF_A2_TEMP_LWARN 6
+
+#define SFF_A2_VCC 98
+#define SFF_A2_VCC_HALRM 8
+#define SFF_A2_VCC_LALRM 10
+#define SFF_A2_VCC_HWARN 12
+#define SFF_A2_VCC_LWARN 14
+
+#define SFF_A2_BIAS 100
+#define SFF_A2_BIAS_HALRM 16
+#define SFF_A2_BIAS_LALRM 18
+#define SFF_A2_BIAS_HWARN 20
+#define SFF_A2_BIAS_LWARN 22
+
+#define SFF_A2_TX_PWR 102
+#define SFF_A2_TX_PWR_HALRM 24
+#define SFF_A2_TX_PWR_LALRM 26
+#define SFF_A2_TX_PWR_HWARN 28
+#define SFF_A2_TX_PWR_LWARN 30
+
+#define SFF_A2_RX_PWR 104
+#define SFF_A2_RX_PWR_HALRM 32
+#define SFF_A2_RX_PWR_LALRM 34
+#define SFF_A2_RX_PWR_HWARN 36
+#define SFF_A2_RX_PWR_LWARN 38
+
+#define SFF_A2_ALRM_FLG 112
+#define SFF_A2_WARN_FLG 116
+
+/* 32-bit little-endian calibration constants */
+#define SFF_A2_CAL_RXPWR4 56
+#define SFF_A2_CAL_RXPWR3 60
+#define SFF_A2_CAL_RXPWR2 64
+#define SFF_A2_CAL_RXPWR1 68
+#define SFF_A2_CAL_RXPWR0 72
+
+/* 16-bit little endian calibration constants */
+#define SFF_A2_CAL_TXI_SLP 76
+#define SFF_A2_CAL_TXI_OFF 78
+#define SFF_A2_CAL_TXPWR_SLP 80
+#define SFF_A2_CAL_TXPWR_OFF 82
+#define SFF_A2_CAL_T_SLP 84
+#define SFF_A2_CAL_T_OFF 86
+#define SFF_A2_CAL_V_SLP 88
+#define SFF_A2_CAL_V_OFF 90
+
+static struct sff_8472_aw_flags {
+ const char *str; /* Human-readable string, null at the end */
+ int offset; /* A2-relative address offset */
+ uint8_t value; /* Alarm is on if (offset & value) != 0. */
+} sff_8472_aw_flags[] = {
+ { "Laser bias current high alarm", SFF_A2_ALRM_FLG, (1 << 3) },
+ { "Laser bias current low alarm", SFF_A2_ALRM_FLG, (1 << 2) },
+ { "Laser bias current high warning", SFF_A2_WARN_FLG, (1 << 3) },
+ { "Laser bias current low warning", SFF_A2_WARN_FLG, (1 << 2) },
+
+ { "Laser output power high alarm", SFF_A2_ALRM_FLG, (1 << 1) },
+ { "Laser output power low alarm", SFF_A2_ALRM_FLG, (1 << 0) },
+ { "Laser output power high warning", SFF_A2_WARN_FLG, (1 << 1) },
+ { "Laser output power low warning", SFF_A2_WARN_FLG, (1 << 0) },
+
+ { "Module temperature high alarm", SFF_A2_ALRM_FLG, (1 << 7) },
+ { "Module temperature low alarm", SFF_A2_ALRM_FLG, (1 << 6) },
+ { "Module temperature high warning", SFF_A2_WARN_FLG, (1 << 7) },
+ { "Module temperature low warning", SFF_A2_WARN_FLG, (1 << 6) },
+
+ { "Module voltage high alarm", SFF_A2_ALRM_FLG, (1 << 5) },
+ { "Module voltage low alarm", SFF_A2_ALRM_FLG, (1 << 4) },
+ { "Module voltage high warning", SFF_A2_WARN_FLG, (1 << 5) },
+ { "Module voltage low warning", SFF_A2_WARN_FLG, (1 << 4) },
+
+ { "Laser rx power high alarm", SFF_A2_ALRM_FLG + 1, (1 << 7) },
+ { "Laser rx power low alarm", SFF_A2_ALRM_FLG + 1, (1 << 6) },
+ { "Laser rx power high warning", SFF_A2_WARN_FLG + 1, (1 << 7) },
+ { "Laser rx power low warning", SFF_A2_WARN_FLG + 1, (1 << 6) },
+
+ { NULL, 0, 0 },
+};
+
+/* Most common case: 16-bit unsigned integer in a certain unit */
+#define A2_OFFSET_TO_U16(offset) \
+ (data[SFF_A2_BASE + (offset)] << 8 | data[SFF_A2_BASE + (offset) + 1])
+
+/* Calibration slope is a number between 0.0 included and 256.0 excluded. */
+#define A2_OFFSET_TO_SLP(offset) \
+ (data[SFF_A2_BASE + (offset)] + data[SFF_A2_BASE + (offset) + 1] / 256.)
+
+/* Calibration offset is an integer from -32768 to 32767 */
+#define A2_OFFSET_TO_OFF(offset) \
+ ((int16_t)A2_OFFSET_TO_U16(offset))
+
+/* RXPWR(x) are IEEE-754 floating point numbers in big-endian format */
+#define A2_OFFSET_TO_RXPWRx(offset) \
+ (befloattoh((const uint32_t *)(data + SFF_A2_BASE + (offset))))
+
+/*
+ * 2-byte internal temperature conversions:
+ * First byte is a signed 8-bit integer, which is the temp decimal part
+ * Second byte are 1/256th of degree, which are added to the dec part.
+ */
+#define A2_OFFSET_TO_TEMP(offset) ((int16_t)A2_OFFSET_TO_U16(offset))
+
+static void sff_8472_dom_parse(const uint8_t *data, struct sff_diags *sd)
+{
+ sd->bias_cur[MCURR] = A2_OFFSET_TO_U16(SFF_A2_BIAS);
+ sd->bias_cur[HALRM] = A2_OFFSET_TO_U16(SFF_A2_BIAS_HALRM);
+ sd->bias_cur[LALRM] = A2_OFFSET_TO_U16(SFF_A2_BIAS_LALRM);
+ sd->bias_cur[HWARN] = A2_OFFSET_TO_U16(SFF_A2_BIAS_HWARN);
+ sd->bias_cur[LWARN] = A2_OFFSET_TO_U16(SFF_A2_BIAS_LWARN);
+
+ sd->sfp_voltage[MCURR] = A2_OFFSET_TO_U16(SFF_A2_VCC);
+ sd->sfp_voltage[HALRM] = A2_OFFSET_TO_U16(SFF_A2_VCC_HALRM);
+ sd->sfp_voltage[LALRM] = A2_OFFSET_TO_U16(SFF_A2_VCC_LALRM);
+ sd->sfp_voltage[HWARN] = A2_OFFSET_TO_U16(SFF_A2_VCC_HWARN);
+ sd->sfp_voltage[LWARN] = A2_OFFSET_TO_U16(SFF_A2_VCC_LWARN);
+
+ sd->tx_power[MCURR] = A2_OFFSET_TO_U16(SFF_A2_TX_PWR);
+ sd->tx_power[HALRM] = A2_OFFSET_TO_U16(SFF_A2_TX_PWR_HALRM);
+ sd->tx_power[LALRM] = A2_OFFSET_TO_U16(SFF_A2_TX_PWR_LALRM);
+ sd->tx_power[HWARN] = A2_OFFSET_TO_U16(SFF_A2_TX_PWR_HWARN);
+ sd->tx_power[LWARN] = A2_OFFSET_TO_U16(SFF_A2_TX_PWR_LWARN);
+
+ sd->rx_power[MCURR] = A2_OFFSET_TO_U16(SFF_A2_RX_PWR);
+ sd->rx_power[HALRM] = A2_OFFSET_TO_U16(SFF_A2_RX_PWR_HALRM);
+ sd->rx_power[LALRM] = A2_OFFSET_TO_U16(SFF_A2_RX_PWR_LALRM);
+ sd->rx_power[HWARN] = A2_OFFSET_TO_U16(SFF_A2_RX_PWR_HWARN);
+ sd->rx_power[LWARN] = A2_OFFSET_TO_U16(SFF_A2_RX_PWR_LWARN);
+
+ sd->sfp_temp[MCURR] = A2_OFFSET_TO_TEMP(SFF_A2_TEMP);
+ sd->sfp_temp[HALRM] = A2_OFFSET_TO_TEMP(SFF_A2_TEMP_HALRM);
+ sd->sfp_temp[LALRM] = A2_OFFSET_TO_TEMP(SFF_A2_TEMP_LALRM);
+ sd->sfp_temp[HWARN] = A2_OFFSET_TO_TEMP(SFF_A2_TEMP_HWARN);
+ sd->sfp_temp[LWARN] = A2_OFFSET_TO_TEMP(SFF_A2_TEMP_LWARN);
+}
+
+/* Converts to a float from a big-endian 4-byte source buffer. */
+static float befloattoh(const uint32_t *source)
+{
+ union {
+ uint32_t src;
+ float dst;
+ } converter;
+
+ converter.src = ntohl(*source);
+ return converter.dst;
+}
+
+static void sff_8472_calibration(const uint8_t *data, struct sff_diags *sd)
+{
+ unsigned long i;
+ uint16_t rx_reading;
+
+ /* Calibration should occur for all values (threshold and current) */
+ for (i = 0; i < ARRAY_SIZE(sd->bias_cur); ++i) {
+ /*
+ * Apply calibration formula 1 (Temp., Voltage, Bias, Tx Power)
+ */
+ sd->bias_cur[i] *= A2_OFFSET_TO_SLP(SFF_A2_CAL_TXI_SLP);
+ sd->tx_power[i] *= A2_OFFSET_TO_SLP(SFF_A2_CAL_TXPWR_SLP);
+ sd->sfp_voltage[i] *= A2_OFFSET_TO_SLP(SFF_A2_CAL_V_SLP);
+ sd->sfp_temp[i] *= A2_OFFSET_TO_SLP(SFF_A2_CAL_T_SLP);
+
+ sd->bias_cur[i] += A2_OFFSET_TO_OFF(SFF_A2_CAL_TXI_OFF);
+ sd->tx_power[i] += A2_OFFSET_TO_OFF(SFF_A2_CAL_TXPWR_OFF);
+ sd->sfp_voltage[i] += A2_OFFSET_TO_OFF(SFF_A2_CAL_V_OFF);
+ sd->sfp_temp[i] += A2_OFFSET_TO_OFF(SFF_A2_CAL_T_OFF);
+
+ /*
+ * Apply calibration formula 2 (Rx Power only)
+ */
+ rx_reading = sd->rx_power[i];
+ sd->rx_power[i] = A2_OFFSET_TO_RXPWRx(SFF_A2_CAL_RXPWR0);
+ sd->rx_power[i] += rx_reading *
+ A2_OFFSET_TO_RXPWRx(SFF_A2_CAL_RXPWR1);
+ sd->rx_power[i] += rx_reading *
+ A2_OFFSET_TO_RXPWRx(SFF_A2_CAL_RXPWR2);
+ sd->rx_power[i] += rx_reading *
+ A2_OFFSET_TO_RXPWRx(SFF_A2_CAL_RXPWR3);
+ }
+}
+
+static void sff_8472_parse_eeprom(const uint8_t *data, struct sff_diags *sd)
+{
+ sd->supports_dom = data[SFF_A0_DOM] & SFF_A0_DOM_IMPL;
+ sd->supports_alarms = data[SFF_A0_OPTIONS] & SFF_A0_OPTIONS_AW;
+ sd->calibrated_ext = data[SFF_A0_DOM] & SFF_A0_DOM_EXTCAL;
+ sd->rx_power_type = data[SFF_A0_DOM] & SFF_A0_DOM_PWRT;
+
+ sff_8472_dom_parse(data, sd);
+
+ /*
+ * If the SFP is externally calibrated, we need to read calibration data
+ * and compensate the already stored readings.
+ */
+ if (sd->calibrated_ext)
+ sff_8472_calibration(data, sd);
+}
+
+void sff_8472_show_all(const uint8_t *data, struct sff_item *items)
+{
+ struct sff_diags sd = {0};
+ const char *rx_power_string = NULL;
+ char val_string[SFF_ITEM_VAL_COMPOSE_SIZE];
+ int i;
+
+ sff_8472_parse_eeprom(data, &sd);
+
+ if (!sd.supports_dom) {
+ add_item_string(items, "Optical diagnostics support", "No");
+ return;
+ }
+ add_item_string(items, "Optical diagnostics support", "Yes");
+
+ SPRINT_BIAS(val_string, sd.bias_cur[MCURR]);
+ add_item_string(items, "Laser bias current", val_string);
+
+ SPRINT_xX_PWR(val_string, sd.tx_power[MCURR]);
+ add_item_string(items, "Laser output power", val_string);
+
+ if (!sd.rx_power_type)
+ rx_power_string = "Receiver signal OMA";
+ else
+ rx_power_string = "Receiver signal average optical power";
+
+ SPRINT_xX_PWR(val_string, sd.rx_power[MCURR]);
+ add_item_string(items, rx_power_string, val_string);
+
+ SPRINT_TEMP(val_string, sd.sfp_temp[MCURR]);
+ add_item_string(items, "Module temperature", val_string);
+
+ SPRINT_VCC(val_string, sd.sfp_voltage[MCURR]);
+ add_item_string(items, "Module voltage", val_string);
+
+ add_item_string(items, "Alarm/warning flags implemented",
+ (sd.supports_alarms ? "Yes" : "No"));
+
+ if (sd.supports_alarms) {
+ for (i = 0; sff_8472_aw_flags[i].str; ++i) {
+ add_item_string(items, sff_8472_aw_flags[i].str,
+ data[SFF_A2_BASE + sff_8472_aw_flags[i].offset]
+ & sff_8472_aw_flags[i].value ? "On" : "Off");
+ }
+ sff_show_thresholds(sd, items);
+ }
+}
--
2.25.1
next prev parent reply other threads:[~2022-04-25 5:40 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-15 10:18 [PATCH] app/testpmd: format dump information of module EEPROM Robin Zhang
2022-02-15 13:28 ` Ferruh Yigit
2022-02-15 15:07 ` Thomas Monjalon
2022-02-16 2:26 ` Zhang, RobinX
2022-02-16 8:03 ` David Marchand
2022-02-16 8:45 ` Thomas Monjalon
2022-02-16 9:30 ` Bruce Richardson
2022-02-16 9:41 ` David Marchand
2022-02-16 10:02 ` Bruce Richardson
2022-02-16 10:15 ` David Marchand
2022-04-08 10:23 ` [PATCH v2] common/sff_module: add telemetry command to dump " Robin Zhang
2022-04-08 10:33 ` Bruce Richardson
2022-04-08 10:55 ` Zhang, RobinX
2022-04-08 11:00 ` Bruce Richardson
2022-04-08 11:20 ` Zhang, RobinX
2022-04-08 11:26 ` Bruce Richardson
2022-04-11 8:13 ` Zhang, RobinX
2022-04-11 9:13 ` Bruce Richardson
2022-04-13 12:13 ` Thomas Monjalon
2022-04-14 7:41 ` David Marchand
2022-04-20 7:00 ` [PATCH v3 0/5] add telemetry command for show " Robin Zhang
2022-04-20 7:00 ` [PATCH v3 1/5] ethdev: add telemetry command for " Robin Zhang
2022-04-20 9:16 ` Andrew Rybchenko
2022-04-20 7:00 ` [PATCH v3 2/5] ethdev: common utilities for different SFF specs Robin Zhang
2022-04-20 7:00 ` [PATCH v3 3/5] ethdev: format module EEPROM for SFF-8079 Robin Zhang
2022-04-20 7:00 ` [PATCH v3 4/5] ethdev: format module EEPROM for SFF-8472 Robin Zhang
2022-04-20 7:00 ` [PATCH v3 5/5] ethdev: format module EEPROM for SFF-8636 Robin Zhang
2022-04-20 8:49 ` [PATCH v3 0/5] add telemetry command for show module EEPROM Morten Brørup
2022-04-25 5:34 ` [PATCH v4 " Robin Zhang
2022-04-25 5:34 ` [PATCH v4 1/5] ethdev: add telemetry command for " Robin Zhang
2022-04-25 5:34 ` [PATCH v4 2/5] ethdev: common utilities for different SFF specs Robin Zhang
2022-04-25 5:34 ` [PATCH v4 3/5] ethdev: format module EEPROM for SFF-8079 Robin Zhang
2022-04-25 5:34 ` Robin Zhang [this message]
2022-04-25 5:34 ` [PATCH v4 5/5] ethdev: format module EEPROM for SFF-8636 Robin Zhang
2022-04-26 2:43 ` [PATCH v5 0/5] add telemetry command for show module EEPROM Robin Zhang
2022-04-26 2:43 ` [PATCH v5 1/5] ethdev: add telemetry command for " Robin Zhang
2022-05-04 10:16 ` Andrew Rybchenko
2022-04-26 2:43 ` [PATCH v5 2/5] ethdev: common utilities for different SFF specs Robin Zhang
2022-04-26 2:43 ` [PATCH v5 3/5] ethdev: format module EEPROM for SFF-8079 Robin Zhang
2022-04-26 2:43 ` [PATCH v5 4/5] ethdev: format module EEPROM for SFF-8472 Robin Zhang
2022-04-26 2:43 ` [PATCH v5 5/5] ethdev: format module EEPROM for SFF-8636 Robin Zhang
2022-05-04 8:13 ` [PATCH v5 0/5] add telemetry command for show module EEPROM Andrew Rybchenko
2022-05-11 2:14 ` [PATCH v6 " Robin Zhang
2022-05-11 2:14 ` [PATCH v6 1/5] ethdev: add telemetry command for " Robin Zhang
2022-05-11 2:14 ` [PATCH v6 2/5] ethdev: common utilities for different SFF specs Robin Zhang
2022-05-11 2:14 ` [PATCH v6 3/5] ethdev: format module EEPROM for SFF-8079 Robin Zhang
2022-05-11 2:14 ` [PATCH v6 4/5] ethdev: format module EEPROM for SFF-8472 Robin Zhang
2022-05-19 8:33 ` Andrew Rybchenko
2022-05-11 2:14 ` [PATCH v6 5/5] ethdev: format module EEPROM for SFF-8636 Robin Zhang
2022-05-24 6:24 ` [PATCH v7 0/5] add telemetry command for show module EEPROM Robin Zhang
2022-05-24 6:24 ` [PATCH v7 1/5] ethdev: add telemetry command for " Robin Zhang
2022-05-24 6:24 ` [PATCH v7 2/5] ethdev: common utilities for different SFF specs Robin Zhang
2022-05-24 6:24 ` [PATCH v7 3/5] ethdev: format module EEPROM for SFF-8079 Robin Zhang
2022-05-24 6:24 ` [PATCH v7 4/5] ethdev: format module EEPROM for SFF-8472 Robin Zhang
2022-05-24 6:24 ` [PATCH v7 5/5] ethdev: format module EEPROM for SFF-8636 Robin Zhang
2022-05-24 9:03 ` David Marchand
2022-05-25 2:43 ` Zhang, RobinX
2022-05-25 3:14 ` [PATCH v8 0/5] add telemetry command for show module EEPROM Robin Zhang
2022-05-25 3:14 ` [PATCH v8 1/5] ethdev: add telemetry command for " Robin Zhang
2022-05-25 9:24 ` Andrew Rybchenko
2022-05-25 3:14 ` [PATCH v8 2/5] ethdev: common utilities for different SFF specs Robin Zhang
2022-05-25 8:51 ` Andrew Rybchenko
2022-05-25 9:40 ` Andrew Rybchenko
2022-05-25 3:14 ` [PATCH v8 3/5] ethdev: format module EEPROM for SFF-8079 Robin Zhang
2022-05-25 9:55 ` Andrew Rybchenko
2022-05-25 3:14 ` [PATCH v8 4/5] ethdev: format module EEPROM for SFF-8472 Robin Zhang
2022-05-25 11:58 ` Andrew Rybchenko
2022-05-25 3:14 ` [PATCH v8 5/5] ethdev: format module EEPROM for SFF-8636 Robin Zhang
2022-05-25 9:01 ` Andrew Rybchenko
2022-05-25 12:01 ` Andrew Rybchenko
2022-05-26 7:32 ` [PATCH v9 0/5] add telemetry command for show module EEPROM Robin Zhang
2022-05-26 7:32 ` [PATCH v9 1/5] ethdev: add telemetry command for " Robin Zhang
2022-05-26 7:32 ` [PATCH v9 2/5] ethdev: add common code for different SFF specs Robin Zhang
2022-05-26 7:32 ` [PATCH v9 3/5] ethdev: support SFF-8079 module information telemetry Robin Zhang
2022-05-26 7:32 ` [PATCH v9 4/5] ethdev: support SFF-8472 " Robin Zhang
2022-05-26 7:32 ` [PATCH v9 5/5] ethdev: support SFF-8636 " Robin Zhang
2022-05-31 14:43 ` [PATCH v9 0/5] add telemetry command for show module EEPROM Andrew Rybchenko
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=20220425053446.921528-5-robinx.zhang@intel.com \
--to=robinx.zhang@intel.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=bruce.richardson@intel.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=qi.z.zhang@intel.com \
--cc=qiming.yang@intel.com \
--cc=stevex.yang@intel.com \
--cc=thomas@monjalon.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.