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: Dirk van der Merwe <dirk.vandermerwe@netronome.com> Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: Fei Qin <fei.qin@corigine.com> Signed-off-by: Simon Horman <simon.horman@corigine.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
9423d24b7b
commit
f524b335c0
@ -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,
|
|||||||
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)
|
|||||||
|
|
||||||
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 @@
|
|||||||
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 @@
|
|||||||
#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 {
|
|||||||
|
|
||||||
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];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user