From: Haiyue Wang <haiyue.wang@intel.com> To: dev@dpdk.org Cc: qi.z.zhang@intel.com, liang-min.wang@intel.com, david.marchand@redhat.com, Haiyue Wang <haiyue.wang@intel.com>, Ray Kinsella <mdr@ashroe.eu>, Neil Horman <nhorman@tuxdriver.com>, Gaetan Rivet <grive@u256.net> Subject: [dpdk-dev] [PATCH v5 1/3] bus/pci: set PCI master in command register Date: Thu, 6 May 2021 11:49:55 +0800 Message-ID: <20210506034957.46458-2-haiyue.wang@intel.com> (raw) In-Reply-To: <20210506034957.46458-1-haiyue.wang@intel.com> Add the API to set 'Bus Master Enable' bit to be enabled or disabled in the PCI command register. Signed-off-by: Haiyue Wang <haiyue.wang@intel.com> Acked-by: Ray Kinsella <mdr@ashroe.eu> --- drivers/bus/pci/pci_common.c | 28 ++++++++++++++++++++++++++++ drivers/bus/pci/rte_bus_pci.h | 14 ++++++++++++++ drivers/bus/pci/version.map | 3 +++ lib/pci/rte_pci.h | 4 ++++ 4 files changed, 49 insertions(+) diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c index ee7f96635..35d7d092d 100644 --- a/drivers/bus/pci/pci_common.c +++ b/drivers/bus/pci/pci_common.c @@ -746,6 +746,34 @@ rte_pci_find_ext_capability(struct rte_pci_device *dev, uint32_t cap) return 0; } +int +rte_pci_set_bus_master(struct rte_pci_device *dev, bool enable) +{ + uint16_t old_cmd, cmd; + + if (rte_pci_read_config(dev, &old_cmd, sizeof(old_cmd), + RTE_PCI_COMMAND) < 0) { + RTE_LOG(ERR, EAL, "error in reading PCI command register\n"); + return -1; + } + + if (enable) + cmd = old_cmd | RTE_PCI_COMMAND_MASTER; + else + cmd = old_cmd & ~RTE_PCI_COMMAND_MASTER; + + if (cmd == old_cmd) + return 0; + + if (rte_pci_write_config(dev, &cmd, sizeof(cmd), + RTE_PCI_COMMAND) < 0) { + RTE_LOG(ERR, EAL, "error in writing PCI command register\n"); + return -1; + } + + return 0; +} + struct rte_pci_bus rte_pci_bus = { .bus = { .scan = rte_pci_scan, diff --git a/drivers/bus/pci/rte_bus_pci.h b/drivers/bus/pci/rte_bus_pci.h index 64886b473..976c33c92 100644 --- a/drivers/bus/pci/rte_bus_pci.h +++ b/drivers/bus/pci/rte_bus_pci.h @@ -249,6 +249,20 @@ void rte_pci_dump(FILE *f); __rte_experimental off_t rte_pci_find_ext_capability(struct rte_pci_device *dev, uint32_t cap); +/** + * Enables/Disables Bus Master for device's PCI command register. + * + * @param dev + * A pointer to rte_pci_device structure. + * @param enable + * Enable or disable Bus Master. + * + * @return + * 0 on success, -1 on error in PCI config space read/write. + */ +__rte_experimental +int rte_pci_set_bus_master(struct rte_pci_device *dev, bool enable); + /** * Register a PCI driver. * diff --git a/drivers/bus/pci/version.map b/drivers/bus/pci/version.map index f33ed0abd..c6e5f797c 100644 --- a/drivers/bus/pci/version.map +++ b/drivers/bus/pci/version.map @@ -21,4 +21,7 @@ EXPERIMENTAL { global: rte_pci_find_ext_capability; + + # added in 21.05 + rte_pci_set_bus_master; }; diff --git a/lib/pci/rte_pci.h b/lib/pci/rte_pci.h index a8f8e404a..1f33d687f 100644 --- a/lib/pci/rte_pci.h +++ b/lib/pci/rte_pci.h @@ -32,6 +32,10 @@ extern "C" { #define RTE_PCI_VENDOR_ID 0x00 /* 16 bits */ #define RTE_PCI_DEVICE_ID 0x02 /* 16 bits */ +#define RTE_PCI_COMMAND 0x04 /* 16 bits */ + +/* PCI Command Register */ +#define RTE_PCI_COMMAND_MASTER 0x4 /* Bus Master Enable */ /* PCI Express capability registers */ #define RTE_PCI_EXP_DEVCTL 8 /* Device Control */ -- 2.31.1
next prev parent reply other threads:[~2021-05-06 4:10 UTC|newest] Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-04-21 5:02 [dpdk-dev] [PATCH v1 0/3] Fix PF reset causes VF memory request failure Haiyue Wang 2021-04-21 5:02 ` [dpdk-dev] [PATCH v1 1/3] bus/pci: enable PCI master in command register Haiyue Wang 2021-04-21 5:02 ` [dpdk-dev] [PATCH v1 2/3] net/iavf: enable PCI bus master after reset Haiyue Wang 2021-04-21 5:02 ` [dpdk-dev] [PATCH v1 3/3] net/i40e: " Haiyue Wang 2021-04-21 11:59 ` [dpdk-dev] [PATCH v1 0/3] Fix PF reset causes VF memory request failure Zhang, Qi Z 2021-04-22 1:18 ` [dpdk-dev] [PATCH v2 0/3] fix " Haiyue Wang 2021-04-22 1:18 ` [dpdk-dev] [PATCH v2 1/3] bus/pci: enable PCI master in command register Haiyue Wang 2021-04-23 10:43 ` Kinsella, Ray 2021-04-23 12:07 ` Wang, Haiyue 2021-04-22 1:18 ` [dpdk-dev] [PATCH v2 2/3] net/iavf: enable PCI bus master after reset Haiyue Wang 2021-04-22 1:18 ` [dpdk-dev] [PATCH v2 3/3] net/i40e: " Haiyue Wang 2021-04-23 11:39 ` [dpdk-dev] [PATCH v3 0/3] fix PF reset causes VF memory request failure Haiyue Wang 2021-04-23 11:39 ` [dpdk-dev] [PATCH v3 1/3] bus/pci: enable PCI master in command register Haiyue Wang 2021-04-23 12:32 ` Kinsella, Ray 2021-04-27 9:28 ` David Marchand 2021-04-27 13:34 ` Wang, Haiyue 2021-04-27 13:40 ` David Marchand 2021-04-23 11:40 ` [dpdk-dev] [PATCH v3 2/3] net/iavf: enable PCI bus master after reset Haiyue Wang 2021-04-23 11:40 ` [dpdk-dev] [PATCH v3 3/3] net/i40e: " Haiyue Wang 2021-04-27 13:39 ` [dpdk-dev] [PATCH v4 0/3] fix PF reset causes VF memory request failure Haiyue Wang 2021-04-27 13:39 ` [dpdk-dev] [PATCH v4 1/3] bus/pci: set PCI master in command register Haiyue Wang 2021-04-27 15:07 ` Kinsella, Ray 2021-04-27 13:39 ` [dpdk-dev] [PATCH v4 2/3] net/iavf: enable PCI bus master after reset Haiyue Wang 2021-04-28 3:34 ` Zhang, Qi Z 2021-05-04 11:32 ` David Marchand 2021-05-04 15:07 ` Wang, Haiyue 2021-05-05 2:56 ` Wang, Haiyue 2021-05-05 8:39 ` David Marchand 2021-05-06 3:02 ` Wang, Haiyue 2021-04-27 13:39 ` [dpdk-dev] [PATCH v4 3/3] net/i40e: " Haiyue Wang 2021-04-28 3:35 ` Zhang, Qi Z 2021-05-06 3:49 ` [dpdk-dev] [PATCH v5 0/3] fix PF reset causes VF memory request failure Haiyue Wang 2021-05-06 3:49 ` Haiyue Wang [this message] 2021-05-06 3:49 ` [dpdk-dev] [PATCH v5 2/3] net/iavf: enable PCI bus master after reset Haiyue Wang 2021-05-06 3:49 ` [dpdk-dev] [PATCH v5 3/3] net/i40e: " Haiyue Wang 2021-05-23 11:46 ` [dpdk-dev] [PATCH v6 0/3] fix PF reset causes VF memory request failure Haiyue Wang 2021-05-23 11:46 ` [dpdk-dev] [PATCH v6 1/3] bus/pci: set PCI master in command register Haiyue Wang 2021-05-23 11:46 ` [dpdk-dev] [PATCH v6 2/3] net/iavf: enable PCI bus master after reset Haiyue Wang 2021-05-23 11:46 ` [dpdk-dev] [PATCH v6 3/3] net/i40e: " Haiyue Wang 2021-05-24 1:23 ` [dpdk-dev] [PATCH v7 0/3] fix PF reset causes VF memory request failure Haiyue Wang 2021-05-24 1:23 ` [dpdk-dev] [PATCH v7 1/3] bus/pci: set PCI master in command register Haiyue Wang 2021-05-24 1:23 ` [dpdk-dev] [PATCH v7 2/3] net/iavf: enable PCI bus master after reset Haiyue Wang 2021-06-04 2:07 ` Xing, Beilei 2021-05-24 1:23 ` [dpdk-dev] [PATCH v7 3/3] net/i40e: " Haiyue Wang 2021-06-04 1:58 ` Xing, Beilei 2021-06-08 8:31 ` [dpdk-dev] [PATCH v7 0/3] fix PF reset causes VF memory request failure David Marchand
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=20210506034957.46458-2-haiyue.wang@intel.com \ --to=haiyue.wang@intel.com \ --cc=david.marchand@redhat.com \ --cc=dev@dpdk.org \ --cc=grive@u256.net \ --cc=liang-min.wang@intel.com \ --cc=mdr@ashroe.eu \ --cc=nhorman@tuxdriver.com \ --cc=qi.z.zhang@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 patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 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 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git