From 7da17fb378511192d4fd63b5d00839466337da4f Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Thu, 18 Feb 2021 11:51:13 +0100 Subject: [PATCH] external_code/nvme: enable PCIe bus master and disable INTx irqs It allows the controller to issue memory read/writes (the bus master enable bit) and disables the ability to generate INTx interrupts which won't be serviced. Signed-off-by: Konrad Sztyber Change-Id: I3b041f1ea7c2bc275b609afcc3d1e4f655aee4c5 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6669 Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot Reviewed-by: Tomasz Zawadzki Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- test/external_code/nvme/nvme.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/external_code/nvme/nvme.c b/test/external_code/nvme/nvme.c index f13534883..cd38f9cd2 100644 --- a/test/external_code/nvme/nvme.c +++ b/test/external_code/nvme/nvme.c @@ -173,6 +173,7 @@ pcie_enum_cb(void *ctx, struct spdk_pci_device *pci_dev) TAILQ_HEAD(, nvme_ctrlr) *ctrlrs = ctx; char addr[32] = {}; uint64_t phys_addr, size; + uint16_t cmd_reg; void *reg_addr; spdk_pci_addr_fmt(addr, sizeof(addr), &pci_dev->addr); @@ -198,6 +199,12 @@ pcie_enum_cb(void *ctx, struct spdk_pci_device *pci_dev) ctrlr->pci_device = pci_dev; ctrlr->regs = (volatile struct spdk_nvme_registers *)reg_addr; + + /* Enable PCI busmaster and disable INTx */ + spdk_pci_device_cfg_read16(pci_dev, &cmd_reg, 4); + cmd_reg |= 0x404; + spdk_pci_device_cfg_write16(pci_dev, cmd_reg, 4); + TAILQ_INSERT_TAIL(ctrlrs, ctrlr, tailq); return 0;