From: Andrew Rybchenko <arybchenko@solarflare.com>
To: <dev@dpdk.org>
Subject: [dpdk-dev] [PATCH v2 14/60] common/sfc_efx/base: add Riverhead support to NIC module
Date: Tue, 22 Sep 2020 10:34:02 +0100 [thread overview]
Message-ID: <1600767288-12109-15-git-send-email-arybchenko@solarflare.com> (raw)
In-Reply-To: <1600767288-12109-1-git-send-email-arybchenko@solarflare.com>
Define basic NIC features and limitations.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
Reviewed-by: Vijay Kumar Srivastava <vsrivast@xilinx.com>
---
drivers/common/sfc_efx/base/ef10_impl.h | 25 ++
drivers/common/sfc_efx/base/ef10_nic.c | 52 ++-
drivers/common/sfc_efx/base/efx_impl.h | 8 +-
drivers/common/sfc_efx/base/efx_mcdi.c | 4 +-
drivers/common/sfc_efx/base/efx_nic.c | 34 ++
drivers/common/sfc_efx/base/meson.build | 3 +-
drivers/common/sfc_efx/base/rhead_impl.h | 105 +++++
drivers/common/sfc_efx/base/rhead_nic.c | 500 +++++++++++++++++++++++
8 files changed, 716 insertions(+), 15 deletions(-)
create mode 100644 drivers/common/sfc_efx/base/rhead_impl.h
create mode 100644 drivers/common/sfc_efx/base/rhead_nic.c
diff --git a/drivers/common/sfc_efx/base/ef10_impl.h b/drivers/common/sfc_efx/base/ef10_impl.h
index da0ec7fab5..e933d88135 100644
--- a/drivers/common/sfc_efx/base/ef10_impl.h
+++ b/drivers/common/sfc_efx/base/ef10_impl.h
@@ -1422,12 +1422,37 @@ efx_mcdi_get_vector_cfg(
__out_opt uint32_t *pf_nvecp,
__out_opt uint32_t *vf_nvecp);
+LIBEFX_INTERNAL
+extern __checkReturn efx_rc_t
+efx_mcdi_alloc_vis(
+ __in efx_nic_t *enp,
+ __in uint32_t min_vi_count,
+ __in uint32_t max_vi_count,
+ __out uint32_t *vi_basep,
+ __out uint32_t *vi_countp,
+ __out uint32_t *vi_shiftp);
+
+LIBEFX_INTERNAL
+extern __checkReturn efx_rc_t
+efx_mcdi_free_vis(
+ __in efx_nic_t *enp);
+
LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_get_privilege_mask(
__in efx_nic_t *enp,
__out uint32_t *maskp);
+LIBEFX_INTERNAL
+extern __checkReturn efx_rc_t
+efx_mcdi_nic_board_cfg(
+ __in efx_nic_t *enp);
+
+LIBEFX_INTERNAL
+extern __checkReturn efx_rc_t
+efx_mcdi_entity_reset(
+ __in efx_nic_t *enp);
+
#if EFSYS_OPT_FW_SUBVARIANT_AWARE
LIBEFX_INTERNAL
diff --git a/drivers/common/sfc_efx/base/ef10_nic.c b/drivers/common/sfc_efx/base/ef10_nic.c
index c5990f16cc..80dc99aed5 100644
--- a/drivers/common/sfc_efx/base/ef10_nic.c
+++ b/drivers/common/sfc_efx/base/ef10_nic.c
@@ -10,7 +10,7 @@
#include "mcdi_mon.h"
#endif
-#if EFX_OPTS_EF10()
+#if EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10()
#include "ef10_tlv_layout.h"
@@ -24,7 +24,7 @@ efx_mcdi_get_port_assignment(
MC_CMD_GET_PORT_ASSIGNMENT_OUT_LEN);
efx_rc_t rc;
- EFSYS_ASSERT(EFX_FAMILY_IS_EF10(enp));
+ EFSYS_ASSERT(EFX_FAMILY_IS_EF100(enp) || EFX_FAMILY_IS_EF10(enp));
req.emr_cmd = MC_CMD_GET_PORT_ASSIGNMENT;
req.emr_in_buf = payload;
@@ -68,7 +68,7 @@ efx_mcdi_get_port_modes(
MC_CMD_GET_PORT_MODES_OUT_LEN);
efx_rc_t rc;
- EFSYS_ASSERT(EFX_FAMILY_IS_EF10(enp));
+ EFSYS_ASSERT(EFX_FAMILY_IS_EF100(enp) || EFX_FAMILY_IS_EF10(enp));
req.emr_cmd = MC_CMD_GET_PORT_MODES;
req.emr_in_buf = payload;
@@ -223,6 +223,10 @@ ef10_nic_get_port_mode_bandwidth(
return (rc);
}
+#endif /* EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10() */
+
+#if EFX_OPTS_EF10()
+
__checkReturn efx_rc_t
efx_mcdi_vadaptor_alloc(
__in efx_nic_t *enp,
@@ -292,6 +296,10 @@ efx_mcdi_vadaptor_free(
return (rc);
}
+#endif /* EFX_OPTS_EF10() */
+
+#if EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10()
+
__checkReturn efx_rc_t
efx_mcdi_get_mac_address_pf(
__in efx_nic_t *enp,
@@ -302,7 +310,7 @@ efx_mcdi_get_mac_address_pf(
MC_CMD_GET_MAC_ADDRESSES_OUT_LEN);
efx_rc_t rc;
- EFSYS_ASSERT(EFX_FAMILY_IS_EF10(enp));
+ EFSYS_ASSERT(EFX_FAMILY_IS_EF100(enp) || EFX_FAMILY_IS_EF10(enp));
req.emr_cmd = MC_CMD_GET_MAC_ADDRESSES;
req.emr_in_buf = payload;
@@ -358,7 +366,7 @@ efx_mcdi_get_mac_address_vf(
MC_CMD_VPORT_GET_MAC_ADDRESSES_OUT_LENMAX);
efx_rc_t rc;
- EFSYS_ASSERT(EFX_FAMILY_IS_EF10(enp));
+ EFSYS_ASSERT(EFX_FAMILY_IS_EF100(enp) || EFX_FAMILY_IS_EF10(enp));
req.emr_cmd = MC_CMD_VPORT_GET_MAC_ADDRESSES;
req.emr_in_buf = payload;
@@ -420,7 +428,7 @@ efx_mcdi_get_clock(
MC_CMD_GET_CLOCK_OUT_LEN);
efx_rc_t rc;
- EFSYS_ASSERT(EFX_FAMILY_IS_EF10(enp));
+ EFSYS_ASSERT(EFX_FAMILY_IS_EF100(enp) || EFX_FAMILY_IS_EF10(enp));
req.emr_cmd = MC_CMD_GET_CLOCK;
req.emr_in_buf = payload;
@@ -569,7 +577,7 @@ efx_mcdi_get_vector_cfg(
return (rc);
}
-static __checkReturn efx_rc_t
+ __checkReturn efx_rc_t
efx_mcdi_alloc_vis(
__in efx_nic_t *enp,
__in uint32_t min_vi_count,
@@ -631,7 +639,7 @@ efx_mcdi_alloc_vis(
}
-static __checkReturn efx_rc_t
+ __checkReturn efx_rc_t
efx_mcdi_free_vis(
__in efx_nic_t *enp)
{
@@ -663,6 +671,9 @@ efx_mcdi_free_vis(
return (rc);
}
+#endif /* EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10() */
+
+#if EFX_OPTS_EF10()
static __checkReturn efx_rc_t
efx_mcdi_alloc_piobuf(
@@ -978,6 +989,10 @@ ef10_nic_pio_unlink(
return (efx_mcdi_unlink_piobuf(enp, vi_index));
}
+#endif /* EFX_OPTS_EF10() */
+
+#if EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10()
+
static __checkReturn efx_rc_t
ef10_mcdi_get_pf_count(
__in efx_nic_t *enp,
@@ -1667,6 +1682,19 @@ static struct ef10_external_port_map_s {
(1U << TLV_PORT_MODE_NA_2x2), /* mode 14 */
{ EFX_EXT_PORT_NA, 0, EFX_EXT_PORT_NA, EFX_EXT_PORT_NA }
},
+ /*
+ * Modes that on Riverhead allocate each port number to a separate
+ * cage.
+ * port 0 -> cage 1
+ * port 1 -> cage 2
+ */
+ {
+ EFX_FAMILY_RIVERHEAD,
+ (1U << TLV_PORT_MODE_1x1_NA) | /* mode 0 */
+ (1U << TLV_PORT_MODE_1x4_NA) | /* mode 1 */
+ (1U << TLV_PORT_MODE_1x1_1x1), /* mode 2 */
+ { 0, 1, EFX_EXT_PORT_NA, EFX_EXT_PORT_NA }
+ },
};
static __checkReturn efx_rc_t
@@ -1757,7 +1785,7 @@ ef10_external_port_mapping(
return (rc);
}
-static __checkReturn efx_rc_t
+ __checkReturn efx_rc_t
efx_mcdi_nic_board_cfg(
__in efx_nic_t *enp)
{
@@ -1921,7 +1949,7 @@ efx_mcdi_nic_board_cfg(
return (rc);
}
-static __checkReturn efx_rc_t
+ __checkReturn efx_rc_t
efx_mcdi_entity_reset(
__in efx_nic_t *enp)
{
@@ -1954,6 +1982,10 @@ efx_mcdi_entity_reset(
return (rc);
}
+#endif /* EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10() */
+
+#if EFX_OPTS_EF10()
+
static __checkReturn efx_rc_t
ef10_set_workaround_bug26807(
__in efx_nic_t *enp)
diff --git a/drivers/common/sfc_efx/base/efx_impl.h b/drivers/common/sfc_efx/base/efx_impl.h
index c7edeaa000..b41b0e5dea 100644
--- a/drivers/common/sfc_efx/base/efx_impl.h
+++ b/drivers/common/sfc_efx/base/efx_impl.h
@@ -41,6 +41,10 @@
#include "ef10_impl.h"
#endif /* EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10() */
+#if EFSYS_OPT_RIVERHEAD
+#include "rhead_impl.h"
+#endif /* EFSYS_OPT_RIVERHEAD */
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -835,7 +839,7 @@ struct efx_nic_s {
#endif /* EFSYS_OPT_SIENA */
int enu_unused;
} en_u;
-#if EFX_OPTS_EF10()
+#if EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10()
union en_arch {
struct {
int ena_vi_base;
@@ -856,7 +860,7 @@ struct efx_nic_s {
size_t ena_wc_mem_map_size;
} ef10;
} en_arch;
-#endif /* EFX_OPTS_EF10() */
+#endif /* EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10() */
#if EFSYS_OPT_EVB
const efx_evb_ops_t *en_eeop;
struct efx_vswitch_s *en_vswitchp;
diff --git a/drivers/common/sfc_efx/base/efx_mcdi.c b/drivers/common/sfc_efx/base/efx_mcdi.c
index dec3a170a7..ade7f7fed4 100644
--- a/drivers/common/sfc_efx/base/efx_mcdi.c
+++ b/drivers/common/sfc_efx/base/efx_mcdi.c
@@ -2032,7 +2032,7 @@ efx_mcdi_mac_stats_periodic(
#endif /* EFSYS_OPT_MAC_STATS */
-#if EFX_OPTS_EF10()
+#if EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10()
/*
* This function returns the pf and vf number of a function. If it is a pf the
@@ -2129,7 +2129,7 @@ efx_mcdi_privilege_mask(
return (rc);
}
-#endif /* EFX_OPTS_EF10() */
+#endif /* EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10() */
__checkReturn efx_rc_t
efx_mcdi_set_workaround(
diff --git a/drivers/common/sfc_efx/base/efx_nic.c b/drivers/common/sfc_efx/base/efx_nic.c
index 9d6961e2ff..465e2c7a36 100644
--- a/drivers/common/sfc_efx/base/efx_nic.c
+++ b/drivers/common/sfc_efx/base/efx_nic.c
@@ -188,6 +188,27 @@ static const efx_nic_ops_t __efx_nic_medford2_ops = {
#endif /* EFSYS_OPT_MEDFORD2 */
+#if EFSYS_OPT_RIVERHEAD
+
+static const efx_nic_ops_t __efx_nic_riverhead_ops = {
+ rhead_nic_probe, /* eno_probe */
+ rhead_board_cfg, /* eno_board_cfg */
+ rhead_nic_set_drv_limits, /* eno_set_drv_limits */
+ rhead_nic_reset, /* eno_reset */
+ rhead_nic_init, /* eno_init */
+ rhead_nic_get_vi_pool, /* eno_get_vi_pool */
+ rhead_nic_get_bar_region, /* eno_get_bar_region */
+ rhead_nic_hw_unavailable, /* eno_hw_unavailable */
+ rhead_nic_set_hw_unavailable, /* eno_set_hw_unavailable */
+#if EFSYS_OPT_DIAG
+ rhead_nic_register_test, /* eno_register_test */
+#endif /* EFSYS_OPT_DIAG */
+ rhead_nic_fini, /* eno_fini */
+ rhead_nic_unprobe, /* eno_unprobe */
+};
+
+#endif /* EFSYS_OPT_RIVERHEAD */
+
__checkReturn efx_rc_t
efx_nic_create(
@@ -285,6 +306,19 @@ efx_nic_create(
break;
#endif /* EFSYS_OPT_MEDFORD2 */
+#if EFSYS_OPT_RIVERHEAD
+ case EFX_FAMILY_RIVERHEAD:
+ enp->en_enop = &__efx_nic_riverhead_ops;
+ enp->en_features =
+ EFX_FEATURE_IPV6 |
+ EFX_FEATURE_LINK_EVENTS |
+ EFX_FEATURE_PERIODIC_MAC_STATS |
+ EFX_FEATURE_MCDI |
+ EFX_FEATURE_MAC_HEADER_FILTERS |
+ EFX_FEATURE_MCDI_DMA;
+ break;
+#endif /* EFSYS_OPT_RIVERHEAD */
+
default:
rc = ENOTSUP;
goto fail2;
diff --git a/drivers/common/sfc_efx/base/meson.build b/drivers/common/sfc_efx/base/meson.build
index 8909525c34..6ca5b57023 100644
--- a/drivers/common/sfc_efx/base/meson.build
+++ b/drivers/common/sfc_efx/base/meson.build
@@ -51,7 +51,8 @@ sources = [
'ef10_vpd.c',
'hunt_nic.c',
'medford_nic.c',
- 'medford2_nic.c'
+ 'medford2_nic.c',
+ 'rhead_nic.c',
]
extra_flags = [
diff --git a/drivers/common/sfc_efx/base/rhead_impl.h b/drivers/common/sfc_efx/base/rhead_impl.h
new file mode 100644
index 0000000000..e25a871cb3
--- /dev/null
+++ b/drivers/common/sfc_efx/base/rhead_impl.h
@@ -0,0 +1,105 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ *
+ * Copyright(c) 2019-2020 Xilinx, Inc.
+ * Copyright(c) 2018-2019 Solarflare Communications Inc.
+ */
+
+#ifndef _SYS_RHEAD_IMPL_H
+#define _SYS_RHEAD_IMPL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define RHEAD_EVQ_MAXNEVS 16384
+#define RHEAD_EVQ_MINNEVS 256
+
+#define RHEAD_RXQ_MAXNDESCS 16384
+#define RHEAD_RXQ_MINNDESCS 256
+
+#define RHEAD_TXQ_MAXNDESCS 16384
+#define RHEAD_TXQ_MINNDESCS 256
+
+#define RHEAD_EVQ_DESC_SIZE (sizeof (efx_qword_t))
+#define RHEAD_RXQ_DESC_SIZE (sizeof (efx_qword_t))
+#define RHEAD_TXQ_DESC_SIZE (sizeof (efx_oword_t))
+
+
+/* NIC */
+
+LIBEFX_INTERNAL
+extern __checkReturn efx_rc_t
+rhead_board_cfg(
+ __in efx_nic_t *enp);
+
+LIBEFX_INTERNAL
+extern __checkReturn efx_rc_t
+rhead_nic_probe(
+ __in efx_nic_t *enp);
+
+LIBEFX_INTERNAL
+extern __checkReturn efx_rc_t
+rhead_nic_set_drv_limits(
+ __inout efx_nic_t *enp,
+ __in efx_drv_limits_t *edlp);
+
+LIBEFX_INTERNAL
+extern __checkReturn efx_rc_t
+rhead_nic_get_vi_pool(
+ __in efx_nic_t *enp,
+ __out uint32_t *vi_countp);
+
+LIBEFX_INTERNAL
+extern __checkReturn efx_rc_t
+rhead_nic_get_bar_region(
+ __in efx_nic_t *enp,
+ __in efx_nic_region_t region,
+ __out uint32_t *offsetp,
+ __out size_t *sizep);
+
+LIBEFX_INTERNAL
+extern __checkReturn efx_rc_t
+rhead_nic_reset(
+ __in efx_nic_t *enp);
+
+LIBEFX_INTERNAL
+extern __checkReturn efx_rc_t
+rhead_nic_init(
+ __in efx_nic_t *enp);
+
+LIBEFX_INTERNAL
+extern __checkReturn boolean_t
+rhead_nic_hw_unavailable(
+ __in efx_nic_t *enp);
+
+LIBEFX_INTERNAL
+extern void
+rhead_nic_set_hw_unavailable(
+ __in efx_nic_t *enp);
+
+#if EFSYS_OPT_DIAG
+
+LIBEFX_INTERNAL
+extern __checkReturn efx_rc_t
+rhead_nic_register_test(
+ __in efx_nic_t *enp);
+
+#endif /* EFSYS_OPT_DIAG */
+
+LIBEFX_INTERNAL
+extern void
+rhead_nic_fini(
+ __in efx_nic_t *enp);
+
+LIBEFX_INTERNAL
+extern void
+rhead_nic_unprobe(
+ __in efx_nic_t *enp);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_RHEAD_IMPL_H */
diff --git a/drivers/common/sfc_efx/base/rhead_nic.c b/drivers/common/sfc_efx/base/rhead_nic.c
new file mode 100644
index 0000000000..c83d18e6ab
--- /dev/null
+++ b/drivers/common/sfc_efx/base/rhead_nic.c
@@ -0,0 +1,500 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ *
+ * Copyright(c) 2019-2020 Xilinx, Inc.
+ * Copyright(c) 2018-2019 Solarflare Communications Inc.
+ */
+
+#include "efx.h"
+#include "efx_impl.h"
+
+
+#if EFSYS_OPT_RIVERHEAD
+
+ __checkReturn efx_rc_t
+rhead_board_cfg(
+ __in efx_nic_t *enp)
+{
+ efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
+ uint32_t end_padding;
+ uint32_t bandwidth;
+ efx_rc_t rc;
+
+ if ((rc = efx_mcdi_nic_board_cfg(enp)) != 0)
+ goto fail1;
+
+ encp->enc_clk_mult = 1; /* not used for Riverhead */
+
+ /*
+ * FIXME There are TxSend and TxSeg descriptors on Riverhead.
+ * TxSeg is bigger than TxSend.
+ */
+ encp->enc_tx_dma_desc_size_max = EFX_MASK32(ESF_GZ_TX_SEND_LEN);
+ /* No boundary crossing limits */
+ encp->enc_tx_dma_desc_boundary = 0;
+
+ /*
+ * Maximum number of bytes into the frame the TCP header can start for
+ * firmware assisted TSO to work.
+ * FIXME Get from design parameter DP_TSO_MAX_HDR_LEN.
+ */
+ encp->enc_tx_tso_tcp_header_offset_limit = 0;
+
+ /*
+ * Set resource limits for MC_CMD_ALLOC_VIS. Note that we cannot use
+ * MC_CMD_GET_RESOURCE_LIMITS here as that reports the available
+ * resources (allocated to this PCIe function), which is zero until
+ * after we have allocated VIs.
+ */
+ encp->enc_evq_limit = 1024;
+ encp->enc_rxq_limit = EFX_RXQ_LIMIT_TARGET;
+ encp->enc_txq_limit = EFX_TXQ_LIMIT_TARGET;
+
+ encp->enc_buftbl_limit = UINT32_MAX;
+
+ /*
+ * Enable firmware workarounds for hardware errata.
+ * Expected responses are:
+ * - 0 (zero):
+ * Success: workaround enabled or disabled as requested.
+ * - MC_CMD_ERR_ENOSYS (reported as ENOTSUP):
+ * Firmware does not support the MC_CMD_WORKAROUND request.
+ * (assume that the workaround is not supported).
+ * - MC_CMD_ERR_ENOENT (reported as ENOENT):
+ * Firmware does not support the requested workaround.
+ * - MC_CMD_ERR_EPERM (reported as EACCES):
+ * Unprivileged function cannot enable/disable workarounds.
+ *
+ * See efx_mcdi_request_errcode() for MCDI error translations.
+ */
+
+ /*
+ * Replay engine on Riverhead should suppress duplicate packets
+ * (e.g. because of exact multicast and all-multicast filters
+ * match) to the same RxQ.
+ */
+ encp->enc_bug26807_workaround = B_FALSE;
+
+ /*
+ * Checksums for TSO sends should always be correct on Riverhead.
+ * FIXME: revisit when TSO support is implemented.
+ */
+ encp->enc_bug61297_workaround = B_FALSE;
+
+ encp->enc_evq_max_nevs = RHEAD_EVQ_MAXNEVS;
+ encp->enc_evq_min_nevs = RHEAD_EVQ_MINNEVS;
+ encp->enc_rxq_max_ndescs = RHEAD_RXQ_MAXNDESCS;
+ encp->enc_rxq_min_ndescs = RHEAD_RXQ_MINNDESCS;
+ encp->enc_txq_max_ndescs = RHEAD_TXQ_MAXNDESCS;
+ encp->enc_txq_min_ndescs = RHEAD_TXQ_MINNDESCS;
+
+ /* Riverhead FW does not support event queue timers yet. */
+ encp->enc_evq_timer_quantum_ns = 0;
+ encp->enc_evq_timer_max_us = 0;
+
+ encp->enc_ev_desc_size = RHEAD_EVQ_DESC_SIZE;
+ encp->enc_rx_desc_size = RHEAD_RXQ_DESC_SIZE;
+ encp->enc_tx_desc_size = RHEAD_TXQ_DESC_SIZE;
+
+ /* No required alignment for WPTR updates */
+ encp->enc_rx_push_align = 1;
+
+ /* Riverhead supports a single Rx prefix size. */
+ encp->enc_rx_prefix_size = ESE_GZ_RX_PKT_PREFIX_LEN;
+
+ /* Alignment for receive packet DMA buffers. */
+ encp->enc_rx_buf_align_start = 1;
+
+ /* Get the RX DMA end padding alignment configuration. */
+ if ((rc = efx_mcdi_get_rxdp_config(enp, &end_padding)) != 0) {
+ if (rc != EACCES)
+ goto fail2;
+
+ /* Assume largest tail padding size supported by hardware. */
+ end_padding = 128;
+ }
+ encp->enc_rx_buf_align_end = end_padding;
+
+ /*
+ * Riverhead stores a single global copy of VPD, not per-PF as on
+ * Huntington.
+ */
+ encp->enc_vpd_is_global = B_TRUE;
+
+ rc = ef10_nic_get_port_mode_bandwidth(enp, &bandwidth);
+ if (rc != 0)
+ goto fail3;
+ encp->enc_required_pcie_bandwidth_mbps = bandwidth;
+ encp->enc_max_pcie_link_gen = EFX_PCIE_LINK_SPEED_GEN3;
+
+ return (0);
+
+fail3:
+ EFSYS_PROBE(fail3);
+fail2:
+ EFSYS_PROBE(fail2);
+fail1:
+ EFSYS_PROBE1(fail1, efx_rc_t, rc);
+
+ return (rc);
+}
+
+ __checkReturn efx_rc_t
+rhead_nic_probe(
+ __in efx_nic_t *enp)
+{
+ const efx_nic_ops_t *enop = enp->en_enop;
+ efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
+ efx_drv_cfg_t *edcp = &(enp->en_drv_cfg);
+ efx_rc_t rc;
+
+ EFSYS_ASSERT(EFX_FAMILY_IS_EF100(enp));
+
+ /* Read and clear any assertion state */
+ if ((rc = efx_mcdi_read_assertion(enp)) != 0)
+ goto fail1;
+
+ /* Exit the assertion handler */
+ if ((rc = efx_mcdi_exit_assertion_handler(enp)) != 0)
+ if (rc != EACCES)
+ goto fail2;
+
+ if ((rc = efx_mcdi_drv_attach(enp, B_TRUE)) != 0)
+ goto fail3;
+
+ /* Get remaining controller-specific board config */
+ if ((rc = enop->eno_board_cfg(enp)) != 0)
+ goto fail4;
+
+ /*
+ * Set default driver config limits (based on board config).
+ *
+ * FIXME: For now allocate a fixed number of VIs which is likely to be
+ * sufficient and small enough to allow multiple functions on the same
+ * port.
+ */
+ edcp->edc_min_vi_count = edcp->edc_max_vi_count =
+ MIN(128, MAX(encp->enc_rxq_limit, encp->enc_txq_limit));
+
+ /*
+ * The client driver must configure and enable PIO buffer support,
+ * but there is no PIO support on Riverhead anyway.
+ */
+ edcp->edc_max_piobuf_count = 0;
+ edcp->edc_pio_alloc_size = 0;
+
+#if EFSYS_OPT_MAC_STATS
+ /* Wipe the MAC statistics */
+ if ((rc = efx_mcdi_mac_stats_clear(enp)) != 0)
+ goto fail5;
+#endif
+
+#if EFSYS_OPT_LOOPBACK
+ if ((rc = efx_mcdi_get_loopback_modes(enp)) != 0)
+ goto fail6;
+#endif
+
+ return (0);
+
+#if EFSYS_OPT_LOOPBACK
+fail6:
+ EFSYS_PROBE(fail6);
+#endif
+#if EFSYS_OPT_MAC_STATS
+fail5:
+ EFSYS_PROBE(fail5);
+#endif
+fail4:
+ EFSYS_PROBE(fail4);
+fail3:
+ EFSYS_PROBE(fail3);
+fail2:
+ EFSYS_PROBE(fail2);
+fail1:
+ EFSYS_PROBE1(fail1, efx_rc_t, rc);
+
+ return (rc);
+}
+
+ __checkReturn efx_rc_t
+rhead_nic_set_drv_limits(
+ __inout efx_nic_t *enp,
+ __in efx_drv_limits_t *edlp)
+{
+ const efx_nic_cfg_t *encp = efx_nic_cfg_get(enp);
+ efx_drv_cfg_t *edcp = &(enp->en_drv_cfg);
+ uint32_t min_evq_count, max_evq_count;
+ uint32_t min_rxq_count, max_rxq_count;
+ uint32_t min_txq_count, max_txq_count;
+ efx_rc_t rc;
+
+ if (edlp == NULL) {
+ rc = EINVAL;
+ goto fail1;
+ }
+
+ /* Get minimum required and maximum usable VI limits */
+ min_evq_count = MIN(edlp->edl_min_evq_count, encp->enc_evq_limit);
+ min_rxq_count = MIN(edlp->edl_min_rxq_count, encp->enc_rxq_limit);
+ min_txq_count = MIN(edlp->edl_min_txq_count, encp->enc_txq_limit);
+
+ edcp->edc_min_vi_count =
+ MAX(min_evq_count, MAX(min_rxq_count, min_txq_count));
+
+ max_evq_count = MIN(edlp->edl_max_evq_count, encp->enc_evq_limit);
+ max_rxq_count = MIN(edlp->edl_max_rxq_count, encp->enc_rxq_limit);
+ max_txq_count = MIN(edlp->edl_max_txq_count, encp->enc_txq_limit);
+
+ edcp->edc_max_vi_count =
+ MAX(max_evq_count, MAX(max_rxq_count, max_txq_count));
+
+ /* There is no PIO support on Riverhead */
+ edcp->edc_max_piobuf_count = 0;
+ edcp->edc_pio_alloc_size = 0;
+
+ return (0);
+
+fail1:
+ EFSYS_PROBE1(fail1, efx_rc_t, rc);
+
+ return (rc);
+}
+
+ __checkReturn efx_rc_t
+rhead_nic_reset(
+ __in efx_nic_t *enp)
+{
+ efx_rc_t rc;
+
+ /* ef10_nic_reset() is called to recover from BADASSERT failures. */
+ if ((rc = efx_mcdi_read_assertion(enp)) != 0)
+ goto fail1;
+ if ((rc = efx_mcdi_exit_assertion_handler(enp)) != 0)
+ goto fail2;
+
+ if ((rc = efx_mcdi_entity_reset(enp)) != 0)
+ goto fail3;
+
+ /* Clear RX/TX DMA queue errors */
+ enp->en_reset_flags &= ~(EFX_RESET_RXQ_ERR | EFX_RESET_TXQ_ERR);
+
+ return (0);
+
+fail3:
+ EFSYS_PROBE(fail3);
+fail2:
+ EFSYS_PROBE(fail2);
+fail1:
+ EFSYS_PROBE1(fail1, efx_rc_t, rc);
+
+ return (rc);
+}
+
+ __checkReturn efx_rc_t
+rhead_nic_init(
+ __in efx_nic_t *enp)
+{
+ const efx_drv_cfg_t *edcp = &(enp->en_drv_cfg);
+ uint32_t min_vi_count, max_vi_count;
+ uint32_t vi_count, vi_base, vi_shift;
+ uint32_t vi_window_size;
+ efx_rc_t rc;
+
+ EFSYS_ASSERT(EFX_FAMILY_IS_EF100(enp));
+ EFSYS_ASSERT3U(edcp->edc_max_piobuf_count, ==, 0);
+
+ /* Enable reporting of some events (e.g. link change) */
+ if ((rc = efx_mcdi_log_ctrl(enp)) != 0)
+ goto fail1;
+
+ min_vi_count = edcp->edc_min_vi_count;
+ max_vi_count = edcp->edc_max_vi_count;
+
+ /* Ensure that the previously attached driver's VIs are freed */
+ if ((rc = efx_mcdi_free_vis(enp)) != 0)
+ goto fail2;
+
+ /*
+ * Reserve VI resources (EVQ+RXQ+TXQ) for this PCIe function. If this
+ * fails then retrying the request for fewer VI resources may succeed.
+ */
+ vi_count = 0;
+ if ((rc = efx_mcdi_alloc_vis(enp, min_vi_count, max_vi_count,
+ &vi_base, &vi_count, &vi_shift)) != 0)
+ goto fail3;
+
+ EFSYS_PROBE2(vi_alloc, uint32_t, vi_base, uint32_t, vi_count);
+
+ if (vi_count < min_vi_count) {
+ rc = ENOMEM;
+ goto fail4;
+ }
+
+ enp->en_arch.ef10.ena_vi_base = vi_base;
+ enp->en_arch.ef10.ena_vi_count = vi_count;
+ enp->en_arch.ef10.ena_vi_shift = vi_shift;
+
+ EFSYS_ASSERT3U(enp->en_nic_cfg.enc_vi_window_shift, !=,
+ EFX_VI_WINDOW_SHIFT_INVALID);
+ EFSYS_ASSERT3U(enp->en_nic_cfg.enc_vi_window_shift, <=,
+ EFX_VI_WINDOW_SHIFT_64K);
+ vi_window_size = 1U << enp->en_nic_cfg.enc_vi_window_shift;
+
+ /* Save UC memory mapping details */
+ enp->en_arch.ef10.ena_uc_mem_map_offset = 0;
+ enp->en_arch.ef10.ena_uc_mem_map_size =
+ vi_window_size * enp->en_arch.ef10.ena_vi_count;
+
+ /* No WC memory mapping since PIO is not supported */
+ enp->en_arch.ef10.ena_pio_write_vi_base = 0;
+ enp->en_arch.ef10.ena_wc_mem_map_offset = 0;
+ enp->en_arch.ef10.ena_wc_mem_map_size = 0;
+
+ enp->en_vport_id = EVB_PORT_ID_NULL;
+
+ enp->en_nic_cfg.enc_mcdi_max_payload_length = MCDI_CTL_SDU_LEN_MAX_V2;
+
+ return (0);
+
+fail4:
+ EFSYS_PROBE(fail4);
+
+ (void) efx_mcdi_free_vis(enp);
+
+fail3:
+ EFSYS_PROBE(fail3);
+fail2:
+ EFSYS_PROBE(fail2);
+fail1:
+ EFSYS_PROBE1(fail1, efx_rc_t, rc);
+
+ return (rc);
+}
+
+ __checkReturn efx_rc_t
+rhead_nic_get_vi_pool(
+ __in efx_nic_t *enp,
+ __out uint32_t *vi_countp)
+{
+ /*
+ * Report VIs that the client driver can use.
+ * Do not include VIs used for PIO buffer writes.
+ */
+ *vi_countp = enp->en_arch.ef10.ena_vi_count;
+
+ return (0);
+}
+
+ __checkReturn efx_rc_t
+rhead_nic_get_bar_region(
+ __in efx_nic_t *enp,
+ __in efx_nic_region_t region,
+ __out uint32_t *offsetp,
+ __out size_t *sizep)
+{
+ efx_rc_t rc;
+
+ EFSYS_ASSERT(EFX_FAMILY_IS_EF100(enp));
+
+ /*
+ * TODO: Specify host memory mapping alignment and granularity
+ * in efx_drv_limits_t so that they can be taken into account
+ * when allocating extra VIs for PIO writes.
+ */
+ switch (region) {
+ case EFX_REGION_VI:
+ /* UC mapped memory BAR region for VI registers */
+ *offsetp = enp->en_arch.ef10.ena_uc_mem_map_offset;
+ *sizep = enp->en_arch.ef10.ena_uc_mem_map_size;
+ break;
+
+ case EFX_REGION_PIO_WRITE_VI:
+ /* WC mapped memory BAR region for piobuf writes */
+ *offsetp = enp->en_arch.ef10.ena_wc_mem_map_offset;
+ *sizep = enp->en_arch.ef10.ena_wc_mem_map_size;
+ break;
+
+ default:
+ rc = EINVAL;
+ goto fail1;
+ }
+
+ return (0);
+
+fail1:
+ EFSYS_PROBE1(fail1, efx_rc_t, rc);
+
+ return (rc);
+}
+
+ __checkReturn boolean_t
+rhead_nic_hw_unavailable(
+ __in efx_nic_t *enp)
+{
+ efx_dword_t dword;
+
+ if (enp->en_reset_flags & EFX_RESET_HW_UNAVAIL)
+ return (B_TRUE);
+
+ EFX_BAR_READD(enp, ER_GZ_MC_SFT_STATUS, &dword, B_FALSE);
+ if (EFX_DWORD_FIELD(dword, EFX_DWORD_0) == 0xffffffff)
+ goto unavail;
+
+ return (B_FALSE);
+
+unavail:
+ rhead_nic_set_hw_unavailable(enp);
+
+ return (B_TRUE);
+}
+
+ void
+rhead_nic_set_hw_unavailable(
+ __in efx_nic_t *enp)
+{
+ EFSYS_PROBE(hw_unavail);
+ enp->en_reset_flags |= EFX_RESET_HW_UNAVAIL;
+}
+
+ void
+rhead_nic_fini(
+ __in efx_nic_t *enp)
+{
+ (void) efx_mcdi_free_vis(enp);
+ enp->en_arch.ef10.ena_vi_count = 0;
+}
+
+ void
+rhead_nic_unprobe(
+ __in efx_nic_t *enp)
+{
+ (void) efx_mcdi_drv_attach(enp, B_FALSE);
+}
+
+#if EFSYS_OPT_DIAG
+
+ __checkReturn efx_rc_t
+rhead_nic_register_test(
+ __in efx_nic_t *enp)
+{
+ efx_rc_t rc;
+
+ /* FIXME */
+ _NOTE(ARGUNUSED(enp))
+ _NOTE(CONSTANTCONDITION)
+ if (B_FALSE) {
+ rc = ENOTSUP;
+ goto fail1;
+ }
+ /* FIXME */
+
+ return (0);
+
+fail1:
+ EFSYS_PROBE1(fail1, efx_rc_t, rc);
+
+ return (rc);
+}
+
+#endif /* EFSYS_OPT_DIAG */
+
+#endif /* EFSYS_OPT_RIVERHEAD */
--
2.17.1
next prev parent reply other threads:[~2020-09-22 9:37 UTC|newest]
Thread overview: 192+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-22 8:48 [dpdk-dev] [PATCH 00/60] common/sfc_efx: support Riverhead NIC family Andrew Rybchenko
2020-09-22 8:48 ` [dpdk-dev] [PATCH 01/60] common/sfc_efx/base: add EF100 registers definitions Andrew Rybchenko
2020-09-22 8:48 ` [dpdk-dev] [PATCH 02/60] common/sfc_efx/base: update MCDI headers Andrew Rybchenko
2020-09-22 8:48 ` [dpdk-dev] [PATCH 03/60] common/sfc_efx/base: add event queue operation to do polling Andrew Rybchenko
2020-09-22 8:48 ` [dpdk-dev] [PATCH 04/60] common/sfc_efx/base: add efsys option for Riverhead Andrew Rybchenko
2020-09-22 8:48 ` [dpdk-dev] [PATCH 05/60] common/sfc_efx/base: add Riverhead NIC family Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 06/60] common/sfc_efx/base: update registers check for Riverhead Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 07/60] common/sfc_efx/base: use EF10 MCDI methods " Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 08/60] common/sfc_efx/base: use EF10 PHY " Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 09/60] common/sfc_efx/base: move 14b prefix check out of caps get Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 10/60] common/sfc_efx/base: remove PF count get from " Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 11/60] common/sfc_efx/base: factor out helper to get board config Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 12/60] common/sfc_efx/base: set NIC features in generic place Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 13/60] common/sfc_efx/base: factor out MCDI entity reset helper Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 14/60] common/sfc_efx/base: add Riverhead support to NIC module Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 15/60] common/sfc_efx/base: use dummy tunnel ops for Riverhead Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 16/60] common/sfc_efx/base: use EF10 filter methods " Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 17/60] common/sfc_efx/base: use EF10 MAC " Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 18/60] common/sfc_efx/base: add interrupts module " Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 19/60] common/sfc_efx/base: move EvQ init/fini wrappers to generic Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 20/60] common/sfc_efx/base: move EvQ create generic checks Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 21/60] common/sfc_efx/base: prepare to merge EvQ init functions Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 22/60] common/sfc_efx/base: merge versions of init EvQ wrappers Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 23/60] common/sfc_efx/base: add event queue module for Riverhead Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 24/60] common/sfc_efx/base: complete EvQ creation on Riverhead Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 25/60] common/sfc_efx/base: handle MCDI events " Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 26/60] common/sfc_efx/base: move RxQ init/fini wrappers to generic Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 27/60] common/sfc_efx/base: move TxQ " Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 28/60] common/sfc_efx/base: switch TxQ init to extended version Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 29/60] common/sfc_efx/base: maintain RxQ counter in generic code Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 30/60] common/sfc_efx/base: free Rx queue structure " Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 31/60] common/sfc_efx/base: move Rx index check to " Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 32/60] common/sfc_efx/base: implement Rx control path for Riverhead Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 33/60] common/sfc_efx/base: implement Tx " Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 34/60] common/sfc_efx/base: fix Tx descriptor DMA sync on Riverhead Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 35/60] common/sfc_efx/base: handle Rx events for Riverhead Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 36/60] common/sfc_efx/base: handle Tx complete on Riverhead Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 37/60] common/sfc_efx/base: indicate support for TSO version 3 Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 38/60] common/sfc_efx/base: report restrictions " Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 39/60] common/sfc_efx: do not include libefx headers from efsys.h Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 40/60] common/sfc_efx/base: add API to get Rx prefix information Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 41/60] common/sfc_efx/base: group RxQ parameters into a structure Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 42/60] common/sfc_efx/base: choose smallest Rx prefix on Riverhead Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 43/60] common/sfc_efx/base: add function control window concept Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 44/60] common/sfc_efx/base: add function control window lookup API Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 45/60] common/sfc_efx/base: add efsys API to find a memory BAR Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 46/60] common/sfc_efx/base: add Xilinx capabilities table lookup Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 47/60] common/sfc_efx/base: add NIC magic check on BAR lookup Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 48/60] common/sfc_efx/base: introduce UDP tunnel destruct operation Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 49/60] common/sfc_efx/base: introduce states for UDP tunnel entries Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 50/60] common/sfc_efx/base: support UDP tunnel operations for EF100 Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 51/60] common/sfc_efx/base: replace PCI efsys macros with functions Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 52/60] common/sfc_efx/base: use EF10 EVB methods for Riverhead Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 53/60] common/sfc_efx/base: allocate vAdaptor on Riverhead Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 54/60] common/sfc_efx/base: add option for extended width events Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 55/60] common/sfc_efx/base: add 256bit type Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 56/60] common/sfc_efx/base: support creation of extended width EvQ Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 57/60] common/sfc_efx/base: poll extended width event queues Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 58/60] common/sfc_efx/base: handle normal events in extended width Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 59/60] common/sfc_efx/base: add option for descriptor proxy queues Andrew Rybchenko
2020-09-22 8:49 ` [dpdk-dev] [PATCH 60/60] common/sfc_efx/base: handle descriptor proxy queue events Andrew Rybchenko
2020-09-22 9:20 ` [dpdk-dev] [PATCH 00/60] common/sfc_efx: support Riverhead NIC family Andrew Rybchenko
2020-09-22 9:33 ` [dpdk-dev] [PATCH v2 " Andrew Rybchenko
2020-09-22 9:33 ` [dpdk-dev] [PATCH v2 01/60] common/sfc_efx/base: add EF100 registers definitions Andrew Rybchenko
2020-09-22 9:33 ` [dpdk-dev] [PATCH v2 02/60] common/sfc_efx/base: update MCDI headers Andrew Rybchenko
2020-09-23 17:20 ` Ferruh Yigit
2020-09-24 12:09 ` Andrew Rybchenko
2020-09-22 9:33 ` [dpdk-dev] [PATCH v2 03/60] common/sfc_efx/base: add event queue operation to do polling Andrew Rybchenko
2020-09-22 9:33 ` [dpdk-dev] [PATCH v2 04/60] common/sfc_efx/base: add efsys option for Riverhead Andrew Rybchenko
2020-09-22 9:33 ` [dpdk-dev] [PATCH v2 05/60] common/sfc_efx/base: add Riverhead NIC family Andrew Rybchenko
2020-09-22 9:33 ` [dpdk-dev] [PATCH v2 06/60] common/sfc_efx/base: update registers check for Riverhead Andrew Rybchenko
2020-09-22 9:33 ` [dpdk-dev] [PATCH v2 07/60] common/sfc_efx/base: use EF10 MCDI methods " Andrew Rybchenko
2020-09-22 9:33 ` [dpdk-dev] [PATCH v2 08/60] common/sfc_efx/base: use EF10 PHY " Andrew Rybchenko
2020-09-22 9:33 ` [dpdk-dev] [PATCH v2 09/60] common/sfc_efx/base: move 14b prefix check out of caps get Andrew Rybchenko
2020-09-22 9:33 ` [dpdk-dev] [PATCH v2 10/60] common/sfc_efx/base: remove PF count get from " Andrew Rybchenko
2020-09-22 9:33 ` [dpdk-dev] [PATCH v2 11/60] common/sfc_efx/base: factor out helper to get board config Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 12/60] common/sfc_efx/base: set NIC features in generic place Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 13/60] common/sfc_efx/base: factor out MCDI entity reset helper Andrew Rybchenko
2020-09-22 9:34 ` Andrew Rybchenko [this message]
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 15/60] common/sfc_efx/base: use dummy tunnel ops for Riverhead Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 16/60] common/sfc_efx/base: use EF10 filter methods " Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 17/60] common/sfc_efx/base: use EF10 MAC " Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 18/60] common/sfc_efx/base: add interrupts module " Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 19/60] common/sfc_efx/base: move EvQ init/fini wrappers to generic Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 20/60] common/sfc_efx/base: move EvQ create generic checks Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 21/60] common/sfc_efx/base: prepare to merge EvQ init functions Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 22/60] common/sfc_efx/base: merge versions of init EvQ wrappers Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 23/60] common/sfc_efx/base: add event queue module for Riverhead Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 24/60] common/sfc_efx/base: complete EvQ creation on Riverhead Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 25/60] common/sfc_efx/base: handle MCDI events " Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 26/60] common/sfc_efx/base: move RxQ init/fini wrappers to generic Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 27/60] common/sfc_efx/base: move TxQ " Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 28/60] common/sfc_efx/base: switch TxQ init to extended version Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 29/60] common/sfc_efx/base: maintain RxQ counter in generic code Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 30/60] common/sfc_efx/base: free Rx queue structure " Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 31/60] common/sfc_efx/base: move Rx index check to " Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 32/60] common/sfc_efx/base: implement Rx control path for Riverhead Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 33/60] common/sfc_efx/base: implement Tx " Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 34/60] common/sfc_efx/base: fix Tx descriptor DMA sync on Riverhead Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 35/60] common/sfc_efx/base: handle Rx events for Riverhead Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 36/60] common/sfc_efx/base: handle Tx complete on Riverhead Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 37/60] common/sfc_efx/base: indicate support for TSO version 3 Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 38/60] common/sfc_efx/base: report restrictions " Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 39/60] common/sfc_efx: do not include libefx headers from efsys.h Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 40/60] common/sfc_efx/base: add API to get Rx prefix information Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 41/60] common/sfc_efx/base: group RxQ parameters into a structure Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 42/60] common/sfc_efx/base: choose smallest Rx prefix on Riverhead Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 43/60] common/sfc_efx/base: add function control window concept Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 44/60] common/sfc_efx/base: add function control window lookup API Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 45/60] common/sfc_efx/base: add efsys API to find a memory BAR Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 46/60] common/sfc_efx/base: add Xilinx capabilities table lookup Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 47/60] common/sfc_efx/base: add NIC magic check on BAR lookup Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 48/60] common/sfc_efx/base: introduce UDP tunnel destruct operation Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 49/60] common/sfc_efx/base: introduce states for UDP tunnel entries Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 50/60] common/sfc_efx/base: support UDP tunnel operations for EF100 Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 51/60] common/sfc_efx/base: replace PCI efsys macros with functions Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 52/60] common/sfc_efx/base: use EF10 EVB methods for Riverhead Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 53/60] common/sfc_efx/base: allocate vAdaptor on Riverhead Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 54/60] common/sfc_efx/base: add option for extended width events Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 55/60] common/sfc_efx/base: add 256bit type Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 56/60] common/sfc_efx/base: support creation of extended width EvQ Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 57/60] common/sfc_efx/base: poll extended width event queues Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 58/60] common/sfc_efx/base: handle normal events in extended width Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 59/60] common/sfc_efx/base: add option for descriptor proxy queues Andrew Rybchenko
2020-09-22 9:34 ` [dpdk-dev] [PATCH v2 60/60] common/sfc_efx/base: handle descriptor proxy queue events Andrew Rybchenko
2020-09-23 17:45 ` [dpdk-dev] [PATCH v2 00/60] common/sfc_efx: support Riverhead NIC family Ferruh Yigit
2020-09-24 6:31 ` Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 " Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 01/60] common/sfc_efx/base: add EF100 registers definitions Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 02/60] common/sfc_efx/base: update MCDI headers Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 03/60] common/sfc_efx/base: add event queue operation to do polling Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 04/60] common/sfc_efx/base: add efsys option for Riverhead Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 05/60] common/sfc_efx/base: add Riverhead NIC family Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 06/60] common/sfc_efx/base: update registers check for Riverhead Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 07/60] common/sfc_efx/base: use EF10 MCDI methods " Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 08/60] common/sfc_efx/base: use EF10 PHY " Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 09/60] common/sfc_efx/base: move 14b prefix check out of caps get Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 10/60] common/sfc_efx/base: remove PF count get from " Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 11/60] common/sfc_efx/base: factor out helper to get board config Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 12/60] common/sfc_efx/base: set NIC features in generic place Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 13/60] common/sfc_efx/base: factor out MCDI entity reset helper Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 14/60] common/sfc_efx/base: add Riverhead support to NIC module Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 15/60] common/sfc_efx/base: use dummy tunnel ops for Riverhead Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 16/60] common/sfc_efx/base: use EF10 filter methods " Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 17/60] common/sfc_efx/base: use EF10 MAC " Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 18/60] common/sfc_efx/base: add interrupts module " Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 19/60] common/sfc_efx/base: move EvQ init/fini wrappers to generic Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 20/60] common/sfc_efx/base: move EvQ create generic checks Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 21/60] common/sfc_efx/base: prepare to merge EvQ init functions Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 22/60] common/sfc_efx/base: merge versions of init EvQ wrappers Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 23/60] common/sfc_efx/base: add event queue module for Riverhead Andrew Rybchenko
2020-09-24 12:11 ` [dpdk-dev] [PATCH v3 24/60] common/sfc_efx/base: complete EvQ creation on Riverhead Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 25/60] common/sfc_efx/base: handle MCDI events " Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 26/60] common/sfc_efx/base: move RxQ init/fini wrappers to generic Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 27/60] common/sfc_efx/base: move TxQ " Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 28/60] common/sfc_efx/base: switch TxQ init to extended version Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 29/60] common/sfc_efx/base: maintain RxQ counter in generic code Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 30/60] common/sfc_efx/base: free Rx queue structure " Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 31/60] common/sfc_efx/base: move Rx index check to " Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 32/60] common/sfc_efx/base: implement Rx control path for Riverhead Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 33/60] common/sfc_efx/base: implement Tx " Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 34/60] common/sfc_efx/base: fix Tx descriptor DMA sync on Riverhead Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 35/60] common/sfc_efx/base: handle Rx events for Riverhead Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 36/60] common/sfc_efx/base: handle Tx complete on Riverhead Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 37/60] common/sfc_efx/base: indicate support for TSO version 3 Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 38/60] common/sfc_efx/base: report restrictions " Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 39/60] common/sfc_efx: do not include libefx headers from efsys.h Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 40/60] common/sfc_efx/base: add API to get Rx prefix information Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 41/60] common/sfc_efx/base: group RxQ parameters into a structure Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 42/60] common/sfc_efx/base: choose smallest Rx prefix on Riverhead Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 43/60] common/sfc_efx/base: add function control window concept Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 44/60] common/sfc_efx/base: add function control window lookup API Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 45/60] common/sfc_efx/base: add efsys API to find a memory BAR Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 46/60] common/sfc_efx/base: add Xilinx capabilities table lookup Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 47/60] common/sfc_efx/base: add NIC magic check on BAR lookup Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 48/60] common/sfc_efx/base: introduce UDP tunnel destruct operation Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 49/60] common/sfc_efx/base: introduce states for UDP tunnel entries Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 50/60] common/sfc_efx/base: support UDP tunnel operations for EF100 Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 51/60] common/sfc_efx/base: replace PCI efsys macros with functions Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 52/60] common/sfc_efx/base: use EF10 EVB methods for Riverhead Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 53/60] common/sfc_efx/base: allocate vAdaptor on Riverhead Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 54/60] common/sfc_efx/base: add option for extended width events Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 55/60] common/sfc_efx/base: add 256bit type Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 56/60] common/sfc_efx/base: support creation of extended width EvQ Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 57/60] common/sfc_efx/base: poll extended width event queues Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 58/60] common/sfc_efx/base: handle normal events in extended width Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 59/60] common/sfc_efx/base: add option for descriptor proxy queues Andrew Rybchenko
2020-09-24 12:12 ` [dpdk-dev] [PATCH v3 60/60] common/sfc_efx/base: handle descriptor proxy queue events Andrew Rybchenko
2020-09-29 11:32 ` [dpdk-dev] [PATCH v3 00/60] common/sfc_efx: support Riverhead NIC family Ferruh Yigit
2020-09-29 11:41 ` Andrew Rybchenko
2020-09-29 11:52 ` Ferruh Yigit
2020-09-29 11:52 ` Ferruh Yigit
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=1600767288-12109-15-git-send-email-arybchenko@solarflare.com \
--to=arybchenko@solarflare.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).