Commit d2b84397 authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller

nfp: move control BAR pointer into data path structure

Control BAR pointer is used to unmask interrupts so it should be
in the first cacheline of adapter structure.
Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 79c12a75
...@@ -447,6 +447,7 @@ struct nfp_stat_pair { ...@@ -447,6 +447,7 @@ struct nfp_stat_pair {
* @xdp_prog: Installed XDP program * @xdp_prog: Installed XDP program
* @tx_rings: Array of pre-allocated TX ring structures * @tx_rings: Array of pre-allocated TX ring structures
* @rx_rings: Array of pre-allocated RX ring structures * @rx_rings: Array of pre-allocated RX ring structures
* @ctrl_bar: Pointer to mapped control BAR
* *
* @txd_cnt: Size of the TX ring in number of descriptors * @txd_cnt: Size of the TX ring in number of descriptors
* @rxd_cnt: Size of the RX ring in number of descriptors * @rxd_cnt: Size of the RX ring in number of descriptors
...@@ -474,6 +475,8 @@ struct nfp_net_dp { ...@@ -474,6 +475,8 @@ struct nfp_net_dp {
struct nfp_net_tx_ring *tx_rings; struct nfp_net_tx_ring *tx_rings;
struct nfp_net_rx_ring *rx_rings; struct nfp_net_rx_ring *rx_rings;
u8 __iomem *ctrl_bar;
/* Cold data follows */ /* Cold data follows */
unsigned int txd_cnt; unsigned int txd_cnt;
...@@ -527,7 +530,6 @@ struct nfp_net_dp { ...@@ -527,7 +530,6 @@ struct nfp_net_dp {
* @vxlan_ports: VXLAN ports for RX inner csum offload communicated to HW * @vxlan_ports: VXLAN ports for RX inner csum offload communicated to HW
* @vxlan_usecnt: IPv4/IPv6 VXLAN port use counts * @vxlan_usecnt: IPv4/IPv6 VXLAN port use counts
* @qcp_cfg: Pointer to QCP queue used for configuration notification * @qcp_cfg: Pointer to QCP queue used for configuration notification
* @ctrl_bar: Pointer to mapped control BAR
* @tx_bar: Pointer to mapped TX queues * @tx_bar: Pointer to mapped TX queues
* @rx_bar: Pointer to mapped FL/RX queues * @rx_bar: Pointer to mapped FL/RX queues
* @debugfs_dir: Device directory in debugfs * @debugfs_dir: Device directory in debugfs
...@@ -595,7 +597,6 @@ struct nfp_net { ...@@ -595,7 +597,6 @@ struct nfp_net {
u8 __iomem *qcp_cfg; u8 __iomem *qcp_cfg;
u8 __iomem *ctrl_bar;
u8 __iomem *tx_bar; u8 __iomem *tx_bar;
u8 __iomem *rx_bar; u8 __iomem *rx_bar;
...@@ -622,42 +623,42 @@ struct nfp_net_ring_set { ...@@ -622,42 +623,42 @@ struct nfp_net_ring_set {
*/ */
static inline u16 nn_readb(struct nfp_net *nn, int off) static inline u16 nn_readb(struct nfp_net *nn, int off)
{ {
return readb(nn->ctrl_bar + off); return readb(nn->dp.ctrl_bar + off);
} }
static inline void nn_writeb(struct nfp_net *nn, int off, u8 val) static inline void nn_writeb(struct nfp_net *nn, int off, u8 val)
{ {
writeb(val, nn->ctrl_bar + off); writeb(val, nn->dp.ctrl_bar + off);
} }
static inline u16 nn_readw(struct nfp_net *nn, int off) static inline u16 nn_readw(struct nfp_net *nn, int off)
{ {
return readw(nn->ctrl_bar + off); return readw(nn->dp.ctrl_bar + off);
} }
static inline void nn_writew(struct nfp_net *nn, int off, u16 val) static inline void nn_writew(struct nfp_net *nn, int off, u16 val)
{ {
writew(val, nn->ctrl_bar + off); writew(val, nn->dp.ctrl_bar + off);
} }
static inline u32 nn_readl(struct nfp_net *nn, int off) static inline u32 nn_readl(struct nfp_net *nn, int off)
{ {
return readl(nn->ctrl_bar + off); return readl(nn->dp.ctrl_bar + off);
} }
static inline void nn_writel(struct nfp_net *nn, int off, u32 val) static inline void nn_writel(struct nfp_net *nn, int off, u32 val)
{ {
writel(val, nn->ctrl_bar + off); writel(val, nn->dp.ctrl_bar + off);
} }
static inline u64 nn_readq(struct nfp_net *nn, int off) static inline u64 nn_readq(struct nfp_net *nn, int off)
{ {
return readq(nn->ctrl_bar + off); return readq(nn->dp.ctrl_bar + off);
} }
static inline void nn_writeq(struct nfp_net *nn, int off, u64 val) static inline void nn_writeq(struct nfp_net *nn, int off, u64 val)
{ {
writeq(val, nn->ctrl_bar + off); writeq(val, nn->dp.ctrl_bar + off);
} }
/* Flush posted PCI writes by reading something without side effects */ /* Flush posted PCI writes by reading something without side effects */
......
...@@ -307,7 +307,7 @@ static void nfp_net_get_stats(struct net_device *netdev, ...@@ -307,7 +307,7 @@ static void nfp_net_get_stats(struct net_device *netdev,
break; break;
case NFP_NET_DEV_ET_STATS: case NFP_NET_DEV_ET_STATS:
io_p = nn->ctrl_bar + nfp_net_et_stats[i].off; io_p = nn->dp.ctrl_bar + nfp_net_et_stats[i].off;
data[i] = readq(io_p); data[i] = readq(io_p);
break; break;
} }
...@@ -339,15 +339,15 @@ static void nfp_net_get_stats(struct net_device *netdev, ...@@ -339,15 +339,15 @@ static void nfp_net_get_stats(struct net_device *netdev,
for (j = 0; j < NN_ET_RVEC_GATHER_STATS; j++) for (j = 0; j < NN_ET_RVEC_GATHER_STATS; j++)
data[i++] = gathered_stats[j]; data[i++] = gathered_stats[j];
for (j = 0; j < nn->dp.num_tx_rings; j++) { for (j = 0; j < nn->dp.num_tx_rings; j++) {
io_p = nn->ctrl_bar + NFP_NET_CFG_TXR_STATS(j); io_p = nn->dp.ctrl_bar + NFP_NET_CFG_TXR_STATS(j);
data[i++] = readq(io_p); data[i++] = readq(io_p);
io_p = nn->ctrl_bar + NFP_NET_CFG_TXR_STATS(j) + 8; io_p = nn->dp.ctrl_bar + NFP_NET_CFG_TXR_STATS(j) + 8;
data[i++] = readq(io_p); data[i++] = readq(io_p);
} }
for (j = 0; j < nn->dp.num_rx_rings; j++) { for (j = 0; j < nn->dp.num_rx_rings; j++) {
io_p = nn->ctrl_bar + NFP_NET_CFG_RXR_STATS(j); io_p = nn->dp.ctrl_bar + NFP_NET_CFG_RXR_STATS(j);
data[i++] = readq(io_p); data[i++] = readq(io_p);
io_p = nn->ctrl_bar + NFP_NET_CFG_RXR_STATS(j) + 8; io_p = nn->dp.ctrl_bar + NFP_NET_CFG_RXR_STATS(j) + 8;
data[i++] = readq(io_p); data[i++] = readq(io_p);
} }
} }
...@@ -461,7 +461,7 @@ static int nfp_net_set_rss_hash_opt(struct nfp_net *nn, ...@@ -461,7 +461,7 @@ static int nfp_net_set_rss_hash_opt(struct nfp_net *nn,
if (new_rss_cfg == nn->rss_cfg) if (new_rss_cfg == nn->rss_cfg)
return 0; return 0;
writel(new_rss_cfg, nn->ctrl_bar + NFP_NET_CFG_RSS_CTRL); writel(new_rss_cfg, nn->dp.ctrl_bar + NFP_NET_CFG_RSS_CTRL);
err = nfp_net_reconfig(nn, NFP_NET_CFG_UPDATE_RSS); err = nfp_net_reconfig(nn, NFP_NET_CFG_UPDATE_RSS);
if (err) if (err)
return err; return err;
...@@ -573,7 +573,7 @@ static void nfp_net_get_regs(struct net_device *netdev, ...@@ -573,7 +573,7 @@ static void nfp_net_get_regs(struct net_device *netdev,
regs->version = nn_readl(nn, NFP_NET_CFG_VERSION); regs->version = nn_readl(nn, NFP_NET_CFG_VERSION);
for (i = 0; i < NFP_NET_CFG_BAR_SZ / sizeof(u32); i++) for (i = 0; i < NFP_NET_CFG_BAR_SZ / sizeof(u32); i++)
regs_buf[i] = readl(nn->ctrl_bar + (i * sizeof(u32))); regs_buf[i] = readl(nn->dp.ctrl_bar + (i * sizeof(u32)));
} }
static int nfp_net_get_coalesce(struct net_device *netdev, static int nfp_net_get_coalesce(struct net_device *netdev,
......
...@@ -306,7 +306,7 @@ nfp_net_pf_alloc_port_netdev(struct nfp_pf *pf, void __iomem *ctrl_bar, ...@@ -306,7 +306,7 @@ nfp_net_pf_alloc_port_netdev(struct nfp_pf *pf, void __iomem *ctrl_bar,
nn->cpp = pf->cpp; nn->cpp = pf->cpp;
nn->fw_ver = *fw_ver; nn->fw_ver = *fw_ver;
nn->ctrl_bar = ctrl_bar; nn->dp.ctrl_bar = ctrl_bar;
nn->tx_bar = tx_bar; nn->tx_bar = tx_bar;
nn->rx_bar = rx_bar; nn->rx_bar = rx_bar;
nn->dp.is_vf = 0; nn->dp.is_vf = 0;
......
...@@ -210,7 +210,7 @@ static int nfp_netvf_pci_probe(struct pci_dev *pdev, ...@@ -210,7 +210,7 @@ static int nfp_netvf_pci_probe(struct pci_dev *pdev,
vf->nn = nn; vf->nn = nn;
nn->fw_ver = fw_ver; nn->fw_ver = fw_ver;
nn->ctrl_bar = ctrl_bar; nn->dp.ctrl_bar = ctrl_bar;
nn->dp.is_vf = 1; nn->dp.is_vf = 1;
nn->stride_tx = stride; nn->stride_tx = stride;
nn->stride_rx = stride; nn->stride_rx = stride;
...@@ -338,7 +338,7 @@ static void nfp_netvf_pci_remove(struct pci_dev *pdev) ...@@ -338,7 +338,7 @@ static void nfp_netvf_pci_remove(struct pci_dev *pdev)
} else { } else {
iounmap(vf->q_bar); iounmap(vf->q_bar);
} }
iounmap(nn->ctrl_bar); iounmap(nn->dp.ctrl_bar);
nfp_net_netdev_free(nn); nfp_net_netdev_free(nn);
......
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