From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C66FDA034C for ; Mon, 30 May 2022 11:22:26 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B8A6442B9F; Mon, 30 May 2022 11:22:26 +0200 (CEST) Received: from smtpbgeu2.qq.com (smtpbgeu2.qq.com [18.194.254.142]) by mails.dpdk.org (Postfix) with ESMTP id 914AE42B95 for ; Mon, 30 May 2022 11:22:22 +0200 (CEST) X-QQ-mid: bizesmtp87t1653902539tvxdz67k Received: from wxdbg.localdomain.com ( [183.129.236.74]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 30 May 2022 17:22:18 +0800 (CST) X-QQ-SSF: 01400000000000F0P000000A0000000 X-QQ-FEAT: HoyAXBWgsknSbWi/J30140PJJQdSGgNDs/7no5TVjvEhAVZXi5SN+5BxKVAUi /vL9Aso1kML/Cx0HJHSJ56NyMi7/9INExpmOtDvOvU7v6cbVNnv6o8Gm6vuz7lkmHJPJk7Q 1K5UpINX1LW8Rrg0oE9vrD19Gw3vpdJkZn1lqIIwue4n16XmhEWjfi5pFSLsKPchxX3msBR mNf0fWB3ETKoO9K18FDzwlhPOE/Tla0f4rNp5hOXfZNkLqtAysnkA1xgcjAz8h+JhPgZdgj H4TRanxq1ZphDuEdauncejJCPZbvXbZcVqfR7SqNkueLgOK1mzlnhYB87LgfESiIwWNRxxA ldlH/FhnMVOCBVWjrRvcvCQdTlbWVE5UvBV2WpkcK7f4FPdXTg= X-QQ-GoodBg: 2 From: Jiawen Wu To: dev@dpdk.org Cc: Jiawen Wu , stable@dpdk.org Subject: [PATCH 6/9] net/ngbe: change PCIe related operations to use rte API Date: Mon, 30 May 2022 17:30:13 +0800 Message-Id: <20220530093016.16326-7-jiawenwu@trustnetic.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220530093016.16326-1-jiawenwu@trustnetic.com> References: <20220530093016.16326-1-jiawenwu@trustnetic.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:trustnetic.com:qybgforeign:qybgforeign4 X-QQ-Bgrelay: 1 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org When using mailbox to request firmware to enable or disable PCIe bus master, there is a small probability that mailbox cannot respond. Change to use rte_pci_read_config() and rte_pci_write_config(), to avoid this problem. Fixes: ac6c5e9af56a ("net/ngbe: fix Tx hang on queue disable") Cc: stable@dpdk.org Signed-off-by: Jiawen Wu --- drivers/net/ngbe/base/ngbe_hw.c | 25 +++++++++++++++++++------ drivers/net/ngbe/base/ngbe_osdep.h | 4 ++++ drivers/net/ngbe/ngbe_ethdev.c | 1 + 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/drivers/net/ngbe/base/ngbe_hw.c b/drivers/net/ngbe/base/ngbe_hw.c index 050649e0a6..facc1d9e82 100644 --- a/drivers/net/ngbe/base/ngbe_hw.c +++ b/drivers/net/ngbe/base/ngbe_hw.c @@ -1058,17 +1058,30 @@ void ngbe_fc_autoneg(struct ngbe_hw *hw) **/ s32 ngbe_set_pcie_master(struct ngbe_hw *hw, bool enable) { + struct rte_pci_device *pci_dev = (struct rte_pci_device *)hw->back; s32 status = 0; - u16 addr = 0x04; - u32 data, i; + s32 ret = 0; + u32 i; + u16 reg; + + ret = rte_pci_read_config(pci_dev, ®, + sizeof(reg), PCI_COMMAND); + if (ret != sizeof(reg)) { + DEBUGOUT("Cannot read command from PCI config space!\n"); + return -1; + } - ngbe_hic_pcie_read(hw, addr, &data, 4); if (enable) - data |= 0x04; + reg |= PCI_COMMAND_MASTER; else - data &= ~0x04; + reg &= ~PCI_COMMAND_MASTER; - ngbe_hic_pcie_write(hw, addr, &data, 4); + ret = rte_pci_write_config(pci_dev, ®, + sizeof(reg), PCI_COMMAND); + if (ret != sizeof(reg)) { + DEBUGOUT("Cannot write command to PCI config space!\n"); + return -1; + } if (enable) goto out; diff --git a/drivers/net/ngbe/base/ngbe_osdep.h b/drivers/net/ngbe/base/ngbe_osdep.h index b62d793191..bf1fa30312 100644 --- a/drivers/net/ngbe/base/ngbe_osdep.h +++ b/drivers/net/ngbe/base/ngbe_osdep.h @@ -19,6 +19,7 @@ #include #include #include +#include #include "../ngbe_logs.h" @@ -180,4 +181,7 @@ static inline u64 REVERT_BIT_MASK64(u64 mask) #define ETH_P_8021Q 0x8100 #define ETH_P_8021AD 0x88A8 +#define PCI_COMMAND 0x04 +#define PCI_COMMAND_MASTER 0x4 + #endif /* _NGBE_OS_H_ */ diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c index 9df9f824a1..5ac1c27a58 100644 --- a/drivers/net/ngbe/ngbe_ethdev.c +++ b/drivers/net/ngbe/ngbe_ethdev.c @@ -356,6 +356,7 @@ eth_ngbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused) eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS; /* Vendor and Device ID need to be set before init of shared code */ + hw->back = pci_dev; hw->device_id = pci_dev->id.device_id; hw->vendor_id = pci_dev->id.vendor_id; hw->sub_system_id = pci_dev->id.subsystem_device_id; -- 2.27.0