From: Xiaoyun Li <xiaoyun.li@intel.com> To: jingjing.wu@intel.com, keith.wiles@intel.com, cunming.liang@intel.com, omkar.maslekar@intel.com Cc: dev@dpdk.org, Xiaoyun Li <xiaoyun.li@intel.com> Subject: [dpdk-dev] [PATCH v3 2/6] raw/ntb: add intel ntb support Date: Tue, 11 Jun 2019 16:50:14 +0800 Message-ID: <20190611085018.56386-3-xiaoyun.li@intel.com> (raw) In-Reply-To: <20190611085018.56386-1-xiaoyun.li@intel.com> Add in the list of registers for the device. And enable ntb device ops for intel skylake platform. Signed-off-by: Xiaoyun Li <xiaoyun.li@intel.com> --- drivers/raw/ntb_rawdev/Makefile | 1 + drivers/raw/ntb_rawdev/meson.build | 3 +- drivers/raw/ntb_rawdev/ntb_hw_intel.c | 368 ++++++++++++++++++++++++++ drivers/raw/ntb_rawdev/ntb_hw_intel.h | 86 ++++++ drivers/raw/ntb_rawdev/ntb_rawdev.c | 5 + 5 files changed, 462 insertions(+), 1 deletion(-) create mode 100644 drivers/raw/ntb_rawdev/ntb_hw_intel.c create mode 100644 drivers/raw/ntb_rawdev/ntb_hw_intel.h diff --git a/drivers/raw/ntb_rawdev/Makefile b/drivers/raw/ntb_rawdev/Makefile index fb40204c1..337311ea4 100644 --- a/drivers/raw/ntb_rawdev/Makefile +++ b/drivers/raw/ntb_rawdev/Makefile @@ -23,5 +23,6 @@ LIBABIVER := 1 # all source are stored in SRCS-y # SRCS-$(CONFIG_RTE_LIBRTE_PMD_SKELETON_RAWDEV) += ntb_rawdev.c +SRCS-$(CONFIG_RTE_LIBRTE_PMD_SKELETON_RAWDEV) += ntb_hw_intel.c include $(RTE_SDK)/mk/rte.lib.mk diff --git a/drivers/raw/ntb_rawdev/meson.build b/drivers/raw/ntb_rawdev/meson.build index ca905049d..c696f60b3 100644 --- a/drivers/raw/ntb_rawdev/meson.build +++ b/drivers/raw/ntb_rawdev/meson.build @@ -3,5 +3,6 @@ deps += ['rawdev', 'mbuf', 'mempool', 'pci', 'bus_pci'] -sources = files('ntb_rawdev.c') +sources = files('ntb_rawdev.c', + 'ntb_hw_intel.c') allow_experimental_apis = true diff --git a/drivers/raw/ntb_rawdev/ntb_hw_intel.c b/drivers/raw/ntb_rawdev/ntb_hw_intel.c new file mode 100644 index 000000000..8a1e9be2a --- /dev/null +++ b/drivers/raw/ntb_rawdev/ntb_hw_intel.c @@ -0,0 +1,368 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2019 Intel Corporation. + */ +#include <stdint.h> +#include <stdio.h> +#include <errno.h> + +#include <rte_eal.h> +#include <rte_pci.h> +#include <rte_bus_pci.h> +#include <rte_rawdev.h> +#include <rte_rawdev_pmd.h> + +#include "ntb_rawdev.h" +#include "ntb_hw_intel.h" + +enum xeon_ntb_bar { + XEON_NTB_BAR23 = 2, + XEON_NTB_BAR45 = 4, +}; + +static enum xeon_ntb_bar intel_ntb_bar[] = { + XEON_NTB_BAR23, + XEON_NTB_BAR45, +}; + +static int +intel_ntb_dev_init(struct rte_rawdev *dev) +{ + struct ntb_hw *hw = dev->dev_private; + uint8_t reg_val, bar; + int ret, i; + + if (hw == NULL) { + NTB_LOG(ERR, "Invalid device."); + return -EINVAL; + } + + ret = rte_pci_read_config(hw->pci_dev, ®_val, + sizeof(reg_val), XEON_PPD_OFFSET); + if (ret < 0) { + NTB_LOG(ERR, "Cannot get NTB PPD (PCIe port definition)."); + return -EIO; + } + + /* Check connection topo type. Only support B2B. */ + switch (reg_val & XEON_PPD_CONN_MASK) { + case XEON_PPD_CONN_B2B: + NTB_LOG(INFO, "Topo B2B (back to back) is using."); + break; + case XEON_PPD_CONN_TRANSPARENT: + case XEON_PPD_CONN_RP: + NTB_LOG(ERR, "Not supported conn topo. Please use B2B."); + return -EINVAL; + } + + /* Check device type. */ + if (reg_val & XEON_PPD_DEV_DSD) { + NTB_LOG(INFO, "DSD, Downstream Device."); + hw->topo = NTB_TOPO_B2B_DSD; + } else { + NTB_LOG(INFO, "USD, Upstream device."); + hw->topo = NTB_TOPO_B2B_USD; + } + + /* Check if bar4 is split. Do not support split bar. */ + if (reg_val & XEON_PPD_SPLIT_BAR_MASK) { + NTB_LOG(ERR, "Do not support split bar."); + return -EINVAL; + } + + hw->mw_cnt = XEON_MW_COUNT; + hw->db_cnt = XEON_DB_COUNT; + hw->spad_cnt = XEON_SPAD_COUNT; + + hw->mw_size = rte_zmalloc("uint64_t", + hw->mw_cnt * sizeof(uint64_t), 0); + for (i = 0; i < hw->mw_cnt; i++) { + bar = intel_ntb_bar[i]; + hw->mw_size[i] = hw->pci_dev->mem_resource[bar].len; + } + + return 0; +} + +static void * +intel_ntb_get_peer_mw_addr(struct rte_rawdev *dev, int mw_idx) +{ + struct ntb_hw *hw = dev->dev_private; + uint8_t bar; + + if (hw == NULL) { + NTB_LOG(ERR, "Invalid device."); + return 0; + } + + if (mw_idx < 0 || mw_idx > hw->mw_cnt) { + NTB_LOG(ERR, "Invalid memory window index (0 - %u).", + hw->mw_cnt - 1); + return 0; + } + + bar = intel_ntb_bar[mw_idx]; + + return hw->pci_dev->mem_resource[bar].addr; +} + +static int +intel_ntb_mw_set_trans(struct rte_rawdev *dev, int mw_idx, + uint64_t addr, uint64_t size) +{ + struct ntb_hw *hw = dev->dev_private; + void *xlat_addr, *limit_addr; + uint64_t xlat_off, limit_off; + uint64_t base, limit; + uint8_t bar; + + if (hw == NULL) { + NTB_LOG(ERR, "Invalid device."); + return -EINVAL; + } + + if (mw_idx < 0 || mw_idx > hw->mw_cnt) { + NTB_LOG(ERR, "Invalid memory window index (0 - %u).", + hw->mw_cnt - 1); + return -EINVAL; + } + + bar = intel_ntb_bar[mw_idx]; + + xlat_off = XEON_IMBAR1XBASE_OFFSET + mw_idx * XEON_BAR_INTERVAL_OFFSET; + limit_off = XEON_IMBAR1XLMT_OFFSET + mw_idx * XEON_BAR_INTERVAL_OFFSET; + xlat_addr = (char *)hw->pci_dev->mem_resource[0].addr + xlat_off; + limit_addr = (char *)hw->pci_dev->mem_resource[0].addr + limit_off; + + /* Limit reg val should be EMBAR base address plus MW size. */ + base = addr; + limit = hw->pci_dev->mem_resource[bar].phys_addr + size; + *((volatile uint64_t *)xlat_addr) = base; + *((volatile uint64_t *)limit_addr) = limit; + + /* Setup the external point so that remote can access. */ + xlat_off = XEON_EMBAR1_OFFSET + 8 * mw_idx; + xlat_addr = (char *)hw->pci_dev->mem_resource[0].addr + xlat_off; + limit_off = XEON_EMBAR1XLMT_OFFSET + mw_idx * XEON_BAR_INTERVAL_OFFSET; + limit_addr = (char *)hw->pci_dev->mem_resource[0].addr + limit_off; + base = *((volatile uint64_t *)xlat_addr); + base &= ~0xf; + limit = base + size; + *((volatile uint64_t *)limit_addr) = limit; + + return 0; +} + +static int +intel_ntb_get_link_status(struct rte_rawdev *dev) +{ + struct ntb_hw *hw = dev->dev_private; + uint16_t reg_val; + int ret; + + if (hw == NULL) { + NTB_LOG(ERR, "Invalid device."); + return -EINVAL; + } + + ret = rte_pci_read_config(hw->pci_dev, ®_val, + sizeof(reg_val), XEON_LINK_STATUS_OFFSET); + if (ret < 0) { + NTB_LOG(ERR, "Unable to get link status."); + return -EIO; + } + + hw->link_status = NTB_LNK_STA_ACTIVE(reg_val); + + if (hw->link_status) { + hw->link_speed = NTB_LNK_STA_SPEED(reg_val); + hw->link_width = NTB_LNK_STA_WIDTH(reg_val); + } else { + hw->link_speed = NTB_SPEED_NONE; + hw->link_width = NTB_WIDTH_NONE; + } + + return 0; +} + +static int +intel_ntb_set_link(struct rte_rawdev *dev, bool up) +{ + struct ntb_hw *hw = dev->dev_private; + uint32_t ntb_ctrl, reg_off; + void *reg_addr; + + reg_off = XEON_NTBCNTL_OFFSET; + reg_addr = (char *)hw->pci_dev->mem_resource[0].addr + reg_off; + ntb_ctrl = *((volatile uint32_t *)reg_addr); + + if (up) { + ntb_ctrl &= ~(NTB_CTL_DISABLE | NTB_CTL_CFG_LOCK); + ntb_ctrl |= NTB_CTL_P2S_BAR2_SNOOP | NTB_CTL_S2P_BAR2_SNOOP; + ntb_ctrl |= NTB_CTL_P2S_BAR4_SNOOP | NTB_CTL_S2P_BAR4_SNOOP; + } else { + ntb_ctrl &= ~(NTB_CTL_P2S_BAR2_SNOOP | NTB_CTL_S2P_BAR2_SNOOP); + ntb_ctrl &= ~(NTB_CTL_P2S_BAR4_SNOOP | NTB_CTL_S2P_BAR4_SNOOP); + ntb_ctrl |= NTB_CTL_DISABLE | NTB_CTL_CFG_LOCK; + } + + *((volatile uint32_t *)reg_addr) = ntb_ctrl; + + return 0; +} + +static uint32_t +intel_ntb_spad_read(struct rte_rawdev *dev, int spad, bool peer) +{ + struct ntb_hw *hw = dev->dev_private; + uint32_t spad_v, reg_off; + void *reg_addr; + + if (spad < 0 || spad >= hw->spad_cnt) { + NTB_LOG(ERR, "Invalid spad reg index."); + return 0; + } + + /* When peer is true, read peer spad reg */ + if (peer) + reg_off = XEON_B2B_SPAD_OFFSET; + else + reg_off = XEON_IM_SPAD_OFFSET; + reg_addr = (char *)hw->pci_dev->mem_resource[0].addr + + reg_off + (spad << 2); + spad_v = *((volatile uint32_t *)reg_addr); + + return spad_v; +} + +static int +intel_ntb_spad_write(struct rte_rawdev *dev, int spad, + bool peer, uint32_t spad_v) +{ + struct ntb_hw *hw = dev->dev_private; + uint32_t reg_off; + void *reg_addr; + + if (spad < 0 || spad >= hw->spad_cnt) { + NTB_LOG(ERR, "Invalid spad reg index."); + return -EINVAL; + } + + /* When peer is true, write peer spad reg */ + if (peer) + reg_off = XEON_B2B_SPAD_OFFSET; + else + reg_off = XEON_IM_SPAD_OFFSET; + reg_addr = (char *)hw->pci_dev->mem_resource[0].addr + + reg_off + (spad << 2); + + *((volatile uint32_t *)reg_addr) = spad_v; + + return 0; +} + +static uint64_t +intel_ntb_db_read(struct rte_rawdev *dev) +{ + struct ntb_hw *hw = dev->dev_private; + uint64_t db_off, db_bits; + void *db_addr; + + db_off = XEON_IM_INT_STATUS_OFFSET; + db_addr = (char *)hw->pci_dev->mem_resource[0].addr + db_off; + + db_bits = *((volatile uint64_t *)db_addr); + + return db_bits; +} + +static int +intel_ntb_db_clear(struct rte_rawdev *dev, uint64_t db_bits) +{ + struct ntb_hw *hw = dev->dev_private; + uint64_t db_off; + void *db_addr; + + db_off = XEON_IM_INT_STATUS_OFFSET; + db_addr = (char *)hw->pci_dev->mem_resource[0].addr + db_off; + + *((volatile uint64_t *)db_addr) = db_bits; + + return 0; +} + +static int +intel_ntb_db_set_mask(struct rte_rawdev *dev, uint64_t db_mask) +{ + struct ntb_hw *hw = dev->dev_private; + uint64_t db_m_off; + void *db_m_addr; + + db_m_off = XEON_IM_INT_DISABLE_OFFSET; + db_m_addr = (char *)hw->pci_dev->mem_resource[0].addr + db_m_off; + + db_mask |= hw->db_mask; + + *((volatile uint64_t *)db_m_addr) = db_mask; + + hw->db_mask = db_mask; + + return 0; +} + +static int +intel_ntb_peer_db_set(struct rte_rawdev *dev, uint8_t db_idx) +{ + struct ntb_hw *hw = dev->dev_private; + uint32_t db_off; + void *db_addr; + + if (((uint64_t)1 << db_idx) & ~hw->db_valid_mask) { + NTB_LOG(ERR, "Invalid doorbell."); + return -EINVAL; + } + + db_off = XEON_IM_DOORBELL_OFFSET + db_idx * 4; + db_addr = (char *)hw->pci_dev->mem_resource[0].addr + db_off; + + *((volatile uint32_t *)db_addr) = 1; + + return 0; +} + +static int +intel_ntb_vector_bind(struct rte_rawdev *dev, uint8_t intr, uint8_t msix) +{ + struct ntb_hw *hw = dev->dev_private; + uint8_t reg_off; + void *reg_addr; + + if (intr >= hw->db_cnt) { + NTB_LOG(ERR, "Invalid intr source."); + return -EINVAL; + } + + /* Bind intr source to msix vector */ + reg_off = XEON_INTVEC_OFFSET; + reg_addr = (char *)hw->pci_dev->mem_resource[0].addr + + reg_off + intr; + + *((volatile uint8_t *)reg_addr) = msix; + + return 0; +} + +/* operations for primary side of local ntb */ +const struct ntb_dev_ops intel_ntb_ops = { + .ntb_dev_init = intel_ntb_dev_init, + .get_peer_mw_addr = intel_ntb_get_peer_mw_addr, + .mw_set_trans = intel_ntb_mw_set_trans, + .get_link_status = intel_ntb_get_link_status, + .set_link = intel_ntb_set_link, + .spad_read = intel_ntb_spad_read, + .spad_write = intel_ntb_spad_write, + .db_read = intel_ntb_db_read, + .db_clear = intel_ntb_db_clear, + .db_set_mask = intel_ntb_db_set_mask, + .peer_db_set = intel_ntb_peer_db_set, + .vector_bind = intel_ntb_vector_bind, +}; diff --git a/drivers/raw/ntb_rawdev/ntb_hw_intel.h b/drivers/raw/ntb_rawdev/ntb_hw_intel.h new file mode 100644 index 000000000..4d1e64504 --- /dev/null +++ b/drivers/raw/ntb_rawdev/ntb_hw_intel.h @@ -0,0 +1,86 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2019 Intel Corporation. + */ + +#ifndef _NTB_HW_INTEL_H_ +#define _NTB_HW_INTEL_H_ + +/* Ntb control and link status */ +#define NTB_CTL_CFG_LOCK 1 +#define NTB_CTL_DISABLE 2 +#define NTB_CTL_S2P_BAR2_SNOOP (1 << 2) +#define NTB_CTL_P2S_BAR2_SNOOP (1 << 4) +#define NTB_CTL_S2P_BAR4_SNOOP (1 << 6) +#define NTB_CTL_P2S_BAR4_SNOOP (1 << 8) +#define NTB_CTL_S2P_BAR5_SNOOP (1 << 12) +#define NTB_CTL_P2S_BAR5_SNOOP (1 << 14) + +#define NTB_LNK_STA_ACTIVE_BIT 0x2000 +#define NTB_LNK_STA_SPEED_MASK 0x000f +#define NTB_LNK_STA_WIDTH_MASK 0x03f0 +#define NTB_LNK_STA_ACTIVE(x) (!!((x) & NTB_LNK_STA_ACTIVE_BIT)) +#define NTB_LNK_STA_SPEED(x) ((x) & NTB_LNK_STA_SPEED_MASK) +#define NTB_LNK_STA_WIDTH(x) (((x) & NTB_LNK_STA_WIDTH_MASK) >> 4) + +/* Intel Skylake Xeon hardware */ +#define XEON_IMBAR1SZ_OFFSET 0x00d0 +#define XEON_IMBAR2SZ_OFFSET 0x00d1 +#define XEON_EMBAR1SZ_OFFSET 0x00d2 +#define XEON_EMBAR2SZ_OFFSET 0x00d3 +#define XEON_DEVCTRL_OFFSET 0x0098 +#define XEON_DEVSTS_OFFSET 0x009a +#define XEON_UNCERRSTS_OFFSET 0x014c +#define XEON_CORERRSTS_OFFSET 0x0158 +#define XEON_LINK_STATUS_OFFSET 0x01a2 + +#define XEON_NTBCNTL_OFFSET 0x0000 +#define XEON_BAR_INTERVAL_OFFSET 0x0010 +#define XEON_IMBAR1XBASE_OFFSET 0x0010 /* SBAR2XLAT */ +#define XEON_IMBAR1XLMT_OFFSET 0x0018 /* SBAR2LMT */ +#define XEON_IMBAR2XBASE_OFFSET 0x0020 /* SBAR4XLAT */ +#define XEON_IMBAR2XLMT_OFFSET 0x0028 /* SBAR4LMT */ +#define XEON_IM_INT_STATUS_OFFSET 0x0040 +#define XEON_IM_INT_DISABLE_OFFSET 0x0048 +#define XEON_IM_SPAD_OFFSET 0x0080 /* SPAD */ +#define XEON_USMEMMISS_OFFSET 0x0070 +#define XEON_INTVEC_OFFSET 0x00d0 +#define XEON_IM_DOORBELL_OFFSET 0x0100 /* SDOORBELL0 */ +#define XEON_B2B_SPAD_OFFSET 0x0180 /* B2B SPAD */ +#define XEON_EMBAR0XBASE_OFFSET 0x4008 /* B2B_XLAT */ +#define XEON_EMBAR1XBASE_OFFSET 0x4010 /* PBAR2XLAT */ +#define XEON_EMBAR1XLMT_OFFSET 0x4018 /* PBAR2LMT */ +#define XEON_EMBAR2XBASE_OFFSET 0x4020 /* PBAR4XLAT */ +#define XEON_EMBAR2XLMT_OFFSET 0x4028 /* PBAR4LMT */ +#define XEON_EM_INT_STATUS_OFFSET 0x4040 +#define XEON_EM_INT_DISABLE_OFFSET 0x4048 +#define XEON_EM_SPAD_OFFSET 0x4080 /* remote SPAD */ +#define XEON_EM_DOORBELL_OFFSET 0x4100 /* PDOORBELL0 */ +#define XEON_SPCICMD_OFFSET 0x4504 /* SPCICMD */ +#define XEON_EMBAR0_OFFSET 0x4510 /* SBAR0BASE */ +#define XEON_EMBAR1_OFFSET 0x4518 /* SBAR23BASE */ +#define XEON_EMBAR2_OFFSET 0x4520 /* SBAR45BASE */ + +#define XEON_PPD_OFFSET 0x00d4 +#define XEON_PPD_CONN_MASK 0x03 +#define XEON_PPD_CONN_TRANSPARENT 0x00 +#define XEON_PPD_CONN_B2B 0x01 +#define XEON_PPD_CONN_RP 0x02 +#define XEON_PPD_DEV_MASK 0x10 +#define XEON_PPD_DEV_USD 0x00 +#define XEON_PPD_DEV_DSD 0x10 +#define XEON_PPD_SPLIT_BAR_MASK 0x40 + + +#define XEON_MW_COUNT 2 + +#define XEON_DB_COUNT 32 +#define XEON_DB_LINK 32 +#define XEON_DB_LINK_BIT (1ULL << XEON_DB_LINK) +#define XEON_DB_MSIX_VECTOR_COUNT 33 +#define XEON_DB_MSIX_VECTOR_SHIFT 1 +#define XEON_DB_TOTAL_SHIFT 33 +#define XEON_SPAD_COUNT 16 + +extern const struct ntb_dev_ops intel_ntb_ops; + +#endif /* _NTB_HW_INTEL_H_ */ diff --git a/drivers/raw/ntb_rawdev/ntb_rawdev.c b/drivers/raw/ntb_rawdev/ntb_rawdev.c index 518373f8f..a03decd55 100644 --- a/drivers/raw/ntb_rawdev/ntb_rawdev.c +++ b/drivers/raw/ntb_rawdev/ntb_rawdev.c @@ -18,11 +18,13 @@ #include <rte_rawdev.h> #include <rte_rawdev_pmd.h> +#include "ntb_hw_intel.h" #include "ntb_rawdev.h" int ntb_logtype; static const struct rte_pci_id pci_id_ntb_map[] = { + { RTE_PCI_DEVICE(NTB_INTEL_VENDOR_ID, NTB_INTEL_DEV_ID_B2B_SKX) }, { .vendor_id = 0, /* sentinel */ }, }; @@ -363,6 +365,9 @@ ntb_init_hw(struct rte_rawdev *dev, struct rte_pci_device *pci_dev) hw->link_width = NTB_WIDTH_NONE; switch (pci_dev->id.device_id) { + case NTB_INTEL_DEV_ID_B2B_SKX: + hw->ntb_ops = &intel_ntb_ops; + break; default: NTB_LOG(ERR, "Not supported device."); return -EINVAL; -- 2.17.1
next prev parent reply index Thread overview: 127+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-06-03 8:46 [dpdk-dev] [PATCH 0/6] rawdev driver for ntb Xiaoyun Li 2019-06-03 8:46 ` [dpdk-dev] [PATCH 1/6] raw/ntb: introduce ntb rawdev driver Xiaoyun Li 2019-06-04 2:20 ` Ye Xiaolong 2019-06-03 8:46 ` [dpdk-dev] [PATCH 2/6] raw/ntb: add intel ntb support Xiaoyun Li 2019-06-04 3:01 ` Ye Xiaolong 2019-06-03 8:46 ` [dpdk-dev] [PATCH 3/6] raw/ntb: add handshake process Xiaoyun Li 2019-06-03 8:46 ` [dpdk-dev] [PATCH 4/6] examples/ntb: enable an example for ntb Xiaoyun Li 2019-06-04 6:48 ` Ye Xiaolong 2019-06-04 8:12 ` Li, Xiaoyun 2019-06-05 8:32 ` Li, Xiaoyun 2019-06-05 9:25 ` Ye Xiaolong 2019-06-05 13:36 ` Li, Xiaoyun 2019-06-06 2:07 ` Ye Xiaolong 2019-06-04 8:48 ` Ye Xiaolong 2019-06-05 3:11 ` Li, Xiaoyun 2019-06-03 8:46 ` [dpdk-dev] [PATCH 5/6] usertools/dpdk-devbind.py: add support " Xiaoyun Li 2019-06-04 7:53 ` Jerin Jacob Kollanukkaran 2019-06-04 8:16 ` Li, Xiaoyun 2019-06-03 8:46 ` [dpdk-dev] [PATCH 6/6] doc: update docs for ntb pmd Xiaoyun Li 2019-06-06 7:42 ` [dpdk-dev] [PATCH v2 0/6] rawdev driver for ntb Xiaoyun Li 2019-06-06 7:42 ` [dpdk-dev] [PATCH v2 1/6] raw/ntb: introduce ntb rawdev driver Xiaoyun Li 2019-06-06 7:42 ` [dpdk-dev] [PATCH v2 2/6] raw/ntb: add intel ntb support Xiaoyun Li 2019-06-06 7:43 ` [dpdk-dev] [PATCH v2 3/6] raw/ntb: add handshake process Xiaoyun Li 2019-06-06 7:43 ` [dpdk-dev] [PATCH v2 4/6] examples/ntb: enable an example for ntb Xiaoyun Li 2019-06-06 7:43 ` [dpdk-dev] [PATCH v2 5/6] usertools/dpdk-devbind.py: add support " Xiaoyun Li 2019-06-06 8:23 ` Bruce Richardson 2019-06-10 1:38 ` Li, Xiaoyun 2019-06-06 7:43 ` [dpdk-dev] [PATCH v2 6/6] doc: update docs for ntb driver Xiaoyun Li 2019-06-11 8:22 ` [dpdk-dev] [PATCH 0/6] rawdev driver for ntb Xiaoyun Li 2019-06-11 8:22 ` [dpdk-dev] [PATCH 1/6] raw/ntb: introduce ntb rawdev driver Xiaoyun Li 2019-06-11 8:22 ` [dpdk-dev] [PATCH 2/6] raw/ntb: add intel ntb support Xiaoyun Li 2019-06-11 8:22 ` [dpdk-dev] [PATCH 3/6] raw/ntb: add handshake process Xiaoyun Li 2019-06-11 8:22 ` [dpdk-dev] [PATCH 4/6] examples/ntb: enable an example for ntb Xiaoyun Li 2019-06-11 8:22 ` [dpdk-dev] [PATCH 5/6] usertools/dpdk-devbind.py: add support " Xiaoyun Li 2019-06-11 8:22 ` [dpdk-dev] [PATCH 6/6] doc: update docs for ntb driver Xiaoyun Li 2019-06-11 8:50 ` [dpdk-dev] [PATCH v3 0/6] rawdev driver for ntb Xiaoyun Li 2019-06-11 8:50 ` [dpdk-dev] [PATCH v3 1/6] raw/ntb: introduce ntb rawdev driver Xiaoyun Li 2019-06-11 8:50 ` Xiaoyun Li [this message] 2019-06-11 8:50 ` [dpdk-dev] [PATCH v3 3/6] raw/ntb: add handshake process Xiaoyun Li 2019-06-11 8:50 ` [dpdk-dev] [PATCH v3 4/6] examples/ntb: enable an example for ntb Xiaoyun Li 2019-06-11 8:50 ` [dpdk-dev] [PATCH v3 5/6] usertools/dpdk-devbind.py: add support " Xiaoyun Li 2019-06-11 8:50 ` [dpdk-dev] [PATCH v3 6/6] doc: update docs for ntb driver Xiaoyun Li 2019-06-13 7:56 ` [dpdk-dev] [PATCH v4 0/6] rawdev driver for ntb Xiaoyun Li 2019-06-13 7:56 ` [dpdk-dev] [PATCH v4 1/6] raw/ntb: introduce ntb rawdev driver Xiaoyun Li 2019-06-13 7:56 ` [dpdk-dev] [PATCH v4 2/6] raw/ntb: add intel ntb support Xiaoyun Li 2019-06-13 7:56 ` [dpdk-dev] [PATCH v4 3/6] raw/ntb: add handshake process Xiaoyun Li 2019-06-13 7:56 ` [dpdk-dev] [PATCH v4 4/6] examples/ntb: enable an example for ntb Xiaoyun Li 2019-06-13 7:56 ` [dpdk-dev] [PATCH v4 5/6] usertools/dpdk-devbind.py: add support " Xiaoyun Li 2019-06-13 7:56 ` [dpdk-dev] [PATCH v4 6/6] doc: update docs for ntb driver Xiaoyun Li 2019-06-14 2:19 ` [dpdk-dev] [PATCH v5 0/6] rawdev driver for ntb Xiaoyun Li 2019-06-14 2:19 ` [dpdk-dev] [PATCH v5 1/6] raw/ntb: introduce ntb rawdev driver Xiaoyun Li 2019-06-17 12:49 ` Wang, Xiao W 2019-06-18 1:28 ` Li, Xiaoyun 2019-06-14 2:19 ` [dpdk-dev] [PATCH v5 2/6] raw/ntb: add intel ntb support Xiaoyun Li 2019-06-14 2:19 ` [dpdk-dev] [PATCH v5 3/6] raw/ntb: add handshake process Xiaoyun Li 2019-06-14 2:19 ` [dpdk-dev] [PATCH v5 4/6] examples/ntb: enable an example for ntb Xiaoyun Li 2019-06-14 2:19 ` [dpdk-dev] [PATCH v5 5/6] usertools/dpdk-devbind.py: add support " Xiaoyun Li 2019-06-14 2:19 ` [dpdk-dev] [PATCH v5 6/6] doc: update docs for ntb driver Xiaoyun Li 2019-06-18 2:10 ` [dpdk-dev] [PATCH v6 0/6] rawdev driver for ntb Xiaoyun Li 2019-06-18 2:10 ` [dpdk-dev] [PATCH v6 1/6] raw/ntb: introduce ntb rawdev driver Xiaoyun Li 2019-06-18 16:07 ` Wu, Jingjing 2019-06-18 2:10 ` [dpdk-dev] [PATCH v6 2/6] raw/ntb: add intel ntb support Xiaoyun Li 2019-06-18 16:07 ` Wu, Jingjing 2019-06-18 2:10 ` [dpdk-dev] [PATCH v6 3/6] raw/ntb: add handshake process Xiaoyun Li 2019-06-18 16:07 ` Wu, Jingjing 2019-06-20 10:06 ` Li, Xiaoyun 2019-06-18 2:10 ` [dpdk-dev] [PATCH v6 4/6] examples/ntb: enable an example for ntb Xiaoyun Li 2019-06-18 2:10 ` [dpdk-dev] [PATCH v6 5/6] usertools/dpdk-devbind.py: add support " Xiaoyun Li 2019-06-18 2:10 ` [dpdk-dev] [PATCH v6 6/6] doc: update docs for ntb driver Xiaoyun Li 2019-06-20 10:21 ` [dpdk-dev] [PATCH v7 0/6] rawdev driver for ntb Xiaoyun Li 2019-06-20 10:21 ` [dpdk-dev] [PATCH v7 1/6] raw/ntb: introduce ntb rawdev driver Xiaoyun Li 2019-06-20 10:21 ` [dpdk-dev] [PATCH v7 2/6] raw/ntb: add intel ntb support Xiaoyun Li 2019-06-20 10:21 ` [dpdk-dev] [PATCH v7 3/6] raw/ntb: add handshake process Xiaoyun Li 2019-06-20 10:21 ` [dpdk-dev] [PATCH v7 4/6] examples/ntb: enable an example for ntb Xiaoyun Li 2019-06-20 10:21 ` [dpdk-dev] [PATCH v7 5/6] usertools/dpdk-devbind.py: add support " Xiaoyun Li 2019-06-20 10:21 ` [dpdk-dev] [PATCH v7 6/6] doc: update docs for ntb driver Xiaoyun Li 2019-06-26 7:12 ` [dpdk-dev] [PATCH v8 0/6] rawdev driver for ntb Xiaoyun Li 2019-06-26 7:12 ` [dpdk-dev] [PATCH v8 1/6] raw/ntb: introduce ntb rawdev driver Xiaoyun Li 2019-06-27 16:31 ` Wu, Jingjing 2019-06-26 7:12 ` [dpdk-dev] [PATCH v8 2/6] raw/ntb: add intel ntb support Xiaoyun Li 2019-06-27 17:06 ` Wu, Jingjing 2019-06-28 1:33 ` Li, Xiaoyun 2019-06-26 7:12 ` [dpdk-dev] [PATCH v8 3/6] raw/ntb: add handshake process Xiaoyun Li 2019-06-27 17:19 ` Wu, Jingjing 2019-06-28 1:33 ` Li, Xiaoyun 2019-06-26 7:12 ` [dpdk-dev] [PATCH v8 4/6] examples/ntb: enable an example for ntb Xiaoyun Li 2019-06-27 17:30 ` Wu, Jingjing 2019-06-28 1:36 ` Li, Xiaoyun 2019-06-26 7:12 ` [dpdk-dev] [PATCH v8 5/6] usertools/dpdk-devbind.py: add support " Xiaoyun Li 2019-06-27 17:34 ` Wu, Jingjing 2019-06-26 7:12 ` [dpdk-dev] [PATCH v8 6/6] doc: update docs for ntb driver Xiaoyun Li 2019-06-27 17:33 ` Wu, Jingjing 2019-06-28 2:53 ` [dpdk-dev] [PATCH v9 0/6] rawdev driver for ntb Xiaoyun Li 2019-06-28 2:53 ` [dpdk-dev] [PATCH v9 1/6] raw/ntb: introduce ntb rawdev driver Xiaoyun Li 2019-06-28 2:53 ` [dpdk-dev] [PATCH v9 2/6] raw/ntb: add intel ntb support Xiaoyun Li 2019-06-28 2:53 ` [dpdk-dev] [PATCH v9 3/6] raw/ntb: add handshake process Xiaoyun Li 2019-06-28 2:53 ` [dpdk-dev] [PATCH v9 4/6] examples/ntb: enable an example for ntb Xiaoyun Li 2019-06-28 2:53 ` [dpdk-dev] [PATCH v9 5/6] usertools/dpdk-devbind.py: add support " Xiaoyun Li 2019-06-28 2:53 ` [dpdk-dev] [PATCH v9 6/6] doc: update docs for ntb driver Xiaoyun Li 2019-07-01 14:24 ` Thomas Monjalon 2019-07-02 1:18 ` Li, Xiaoyun 2019-06-28 10:17 ` [dpdk-dev] [PATCH v9 0/6] rawdev driver for ntb Wu, Jingjing 2019-07-02 6:17 ` [dpdk-dev] [PATCH v10 0/5] " Xiaoyun Li 2019-07-02 6:17 ` [dpdk-dev] [PATCH v10 1/5] raw/ntb: introduce ntb rawdev driver Xiaoyun Li 2019-07-02 6:17 ` [dpdk-dev] [PATCH v10 2/5] usertools/dpdk-devbind.py: add support for ntb Xiaoyun Li 2019-07-02 6:17 ` [dpdk-dev] [PATCH v10 3/5] raw/ntb: add intel ntb support Xiaoyun Li 2019-07-02 6:17 ` [dpdk-dev] [PATCH v10 4/5] raw/ntb: add handshake process Xiaoyun Li 2019-07-02 6:17 ` [dpdk-dev] [PATCH v10 5/5] examples/ntb: enable an example for ntb Xiaoyun Li 2019-07-02 6:23 ` [dpdk-dev] [PATCH v10 1/5] raw/ntb: introduce ntb rawdev driver Xiaoyun Li 2019-07-02 6:25 ` [dpdk-dev] [PATCH v10 0/5] rawdev driver for ntb Xiaoyun Li 2019-07-02 6:25 ` [dpdk-dev] [PATCH v10 1/5] raw/ntb: introduce ntb rawdev driver Xiaoyun Li 2019-07-04 10:31 ` Thomas Monjalon 2019-07-04 10:37 ` Bruce Richardson 2019-07-05 1:21 ` Li, Xiaoyun 2019-07-05 1:28 ` Li, Xiaoyun 2019-07-02 6:25 ` [dpdk-dev] [PATCH v10 2/5] usertools/dpdk-devbind.py: add support for ntb Xiaoyun Li 2019-07-02 6:25 ` [dpdk-dev] [PATCH v10 3/5] raw/ntb: add intel ntb support Xiaoyun Li 2019-07-02 6:25 ` [dpdk-dev] [PATCH v10 4/5] raw/ntb: add handshake process Xiaoyun Li 2019-07-02 6:25 ` [dpdk-dev] [PATCH v10 5/5] examples/ntb: enable an example for ntb Xiaoyun Li 2019-07-02 14:10 ` [dpdk-dev] [PATCH v10 0/5] rawdev driver " Ye Xiaolong 2019-07-04 12:29 ` [dpdk-dev] [PATCH v11 0/4] " Thomas Monjalon 2019-07-04 12:29 ` [dpdk-dev] [PATCH v11 1/4] raw/ntb: introduce NTB raw device driver Thomas Monjalon 2019-07-04 12:29 ` [dpdk-dev] [PATCH v11 2/4] raw/ntb: support Intel NTB Thomas Monjalon 2019-07-04 12:29 ` [dpdk-dev] [PATCH v11 3/4] raw/ntb: add handshake process Thomas Monjalon 2019-07-04 12:29 ` [dpdk-dev] [PATCH v11 4/4] examples/ntb: add example for NTB Thomas Monjalon 2019-07-05 2:41 ` [dpdk-dev] [PATCH v11 0/4] rawdev driver for ntb Li, Xiaoyun 2019-07-05 10:52 ` 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=20190611085018.56386-3-xiaoyun.li@intel.com \ --to=xiaoyun.li@intel.com \ --cc=cunming.liang@intel.com \ --cc=dev@dpdk.org \ --cc=jingjing.wu@intel.com \ --cc=keith.wiles@intel.com \ --cc=omkar.maslekar@intel.com \ /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
DPDK-dev Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/dpdk-dev/0 dpdk-dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dpdk-dev dpdk-dev/ https://lore.kernel.org/dpdk-dev \ dev@dpdk.org public-inbox-index dpdk-dev Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git