Commit f524b335 authored by Jakub Kicinski's avatar Jakub Kicinski Committed by Jakub Kicinski

nfp: use dev_info for PCIe config space BAR offsets

NFP3800 uses a different PCIe configuration to CPP expansion BAR offsets.
We don't need to differentiate between the NFP4000, NFP5000 and NFP6000
since they all use the same offsets.
Signed-off-by: default avatarDirk van der Merwe <dirk.vandermerwe@netronome.com>
Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: default avatarFei Qin <fei.qin@corigine.com>
Signed-off-by: default avatarSimon Horman <simon.horman@corigine.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 9423d24b
...@@ -101,11 +101,7 @@ ...@@ -101,11 +101,7 @@
#define NFP_PCIE_P2C_GENERAL_TOKEN_OFFSET(bar, x) ((x) << ((bar)->bitsize - 4)) #define NFP_PCIE_P2C_GENERAL_TOKEN_OFFSET(bar, x) ((x) << ((bar)->bitsize - 4))
#define NFP_PCIE_P2C_GENERAL_SIZE(bar) (1 << ((bar)->bitsize - 4)) #define NFP_PCIE_P2C_GENERAL_SIZE(bar) (1 << ((bar)->bitsize - 4))
#define NFP_PCIE_CFG_BAR_PCIETOCPPEXPANSIONBAR(bar, slot) \ #define NFP_PCIE_P2C_EXPBAR_OFFSET(bar_index) ((bar_index) * 4)
(0x400 + ((bar) * 8 + (slot)) * 4)
#define NFP_PCIE_CPP_BAR_PCIETOCPPEXPANSIONBAR(bar, slot) \
(((bar) * 8 + (slot)) * 4)
/* The number of explicit BARs to reserve. /* The number of explicit BARs to reserve.
* Minimum is 0, maximum is 4 on the NFP6000. * Minimum is 0, maximum is 4 on the NFP6000.
...@@ -271,19 +267,16 @@ compute_bar(const struct nfp6000_pcie *nfp, const struct nfp_bar *bar, ...@@ -271,19 +267,16 @@ compute_bar(const struct nfp6000_pcie *nfp, const struct nfp_bar *bar,
static int static int
nfp6000_bar_write(struct nfp6000_pcie *nfp, struct nfp_bar *bar, u32 newcfg) nfp6000_bar_write(struct nfp6000_pcie *nfp, struct nfp_bar *bar, u32 newcfg)
{ {
int base, slot; unsigned int xbar;
int xbar;
base = bar->index >> 3; xbar = NFP_PCIE_P2C_EXPBAR_OFFSET(bar->index);
slot = bar->index & 7;
if (nfp->iomem.csr) { if (nfp->iomem.csr) {
xbar = NFP_PCIE_CPP_BAR_PCIETOCPPEXPANSIONBAR(base, slot);
writel(newcfg, nfp->iomem.csr + xbar); writel(newcfg, nfp->iomem.csr + xbar);
/* Readback to ensure BAR is flushed */ /* Readback to ensure BAR is flushed */
readl(nfp->iomem.csr + xbar); readl(nfp->iomem.csr + xbar);
} else { } else {
xbar = NFP_PCIE_CFG_BAR_PCIETOCPPEXPANSIONBAR(base, slot); xbar += nfp->dev_info->pcie_cfg_expbar_offset;
pci_write_config_dword(nfp->pdev, xbar, newcfg); pci_write_config_dword(nfp->pdev, xbar, newcfg);
} }
...@@ -624,7 +617,8 @@ static int enable_bars(struct nfp6000_pcie *nfp, u16 interface) ...@@ -624,7 +617,8 @@ static int enable_bars(struct nfp6000_pcie *nfp, u16 interface)
nfp6000_bar_write(nfp, bar, barcfg_msix_general); nfp6000_bar_write(nfp, bar, barcfg_msix_general);
nfp->expl.data = bar->iomem + NFP_PCIE_SRAM + 0x1000; nfp->expl.data = bar->iomem + NFP_PCIE_SRAM +
nfp->dev_info->pcie_expl_offset;
switch (nfp->pdev->device) { switch (nfp->pdev->device) {
case PCI_DEVICE_ID_NETRONOME_NFP3800: case PCI_DEVICE_ID_NETRONOME_NFP3800:
......
...@@ -6,5 +6,7 @@ ...@@ -6,5 +6,7 @@
const struct nfp_dev_info nfp_dev_info[NFP_DEV_CNT] = { const struct nfp_dev_info nfp_dev_info[NFP_DEV_CNT] = {
[NFP_DEV_NFP6000] = { [NFP_DEV_NFP6000] = {
.chip_names = "NFP4000/NFP5000/NFP6000", .chip_names = "NFP4000/NFP5000/NFP6000",
.pcie_cfg_expbar_offset = 0x0400,
.pcie_expl_offset = 0x1000,
}, },
}; };
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#ifndef _NFP_DEV_H_ #ifndef _NFP_DEV_H_
#define _NFP_DEV_H_ #define _NFP_DEV_H_
#include <linux/types.h>
enum nfp_dev_id { enum nfp_dev_id {
NFP_DEV_NFP6000, NFP_DEV_NFP6000,
NFP_DEV_CNT, NFP_DEV_CNT,
...@@ -11,6 +13,8 @@ enum nfp_dev_id { ...@@ -11,6 +13,8 @@ enum nfp_dev_id {
struct nfp_dev_info { struct nfp_dev_info {
const char *chip_names; const char *chip_names;
u32 pcie_cfg_expbar_offset;
u32 pcie_expl_offset;
}; };
extern const struct nfp_dev_info nfp_dev_info[NFP_DEV_CNT]; extern const struct nfp_dev_info nfp_dev_info[NFP_DEV_CNT];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment