void __iomem *ctrl_bar);
 
 struct nfp_net *
-nfp_net_alloc(struct pci_dev *pdev, bool needs_netdev,
+nfp_net_alloc(struct pci_dev *pdev, void __iomem *ctrl_bar, bool needs_netdev,
              unsigned int max_tx_rings, unsigned int max_rx_rings);
 void nfp_net_free(struct nfp_net *nn);
 
 
 /**
  * nfp_net_alloc() - Allocate netdev and related structure
  * @pdev:         PCI device
+ * @ctrl_bar:     PCI IOMEM with vNIC config memory
  * @needs_netdev: Whether to allocate a netdev for this vNIC
  * @max_tx_rings: Maximum number of TX rings supported by device
  * @max_rx_rings: Maximum number of RX rings supported by device
  *
  * Return: NFP Net device structure, or ERR_PTR on error.
  */
-struct nfp_net *nfp_net_alloc(struct pci_dev *pdev, bool needs_netdev,
-                             unsigned int max_tx_rings,
-                             unsigned int max_rx_rings)
+struct nfp_net *
+nfp_net_alloc(struct pci_dev *pdev, void __iomem *ctrl_bar, bool needs_netdev,
+             unsigned int max_tx_rings, unsigned int max_rx_rings)
 {
        struct nfp_net *nn;
 
        }
 
        nn->dp.dev = &pdev->dev;
+       nn->dp.ctrl_bar = ctrl_bar;
        nn->pdev = pdev;
 
        nn->max_tx_rings = max_tx_rings;
 
        n_rx_rings = readl(ctrl_bar + NFP_NET_CFG_MAX_RXRINGS);
 
        /* Allocate and initialise the vNIC */
-       nn = nfp_net_alloc(pf->pdev, needs_netdev, n_tx_rings, n_rx_rings);
+       nn = nfp_net_alloc(pf->pdev, ctrl_bar, needs_netdev,
+                          n_tx_rings, n_rx_rings);
        if (IS_ERR(nn))
                return nn;
 
        nn->app = pf->app;
        nfp_net_get_fw_version(&nn->fw_ver, ctrl_bar);
-       nn->dp.ctrl_bar = ctrl_bar;
        nn->tx_bar = qc_bar + tx_base * NFP_QCP_QUEUE_ADDR_SZ;
        nn->rx_bar = qc_bar + rx_base * NFP_QCP_QUEUE_ADDR_SZ;
        nn->dp.is_vf = 0;
 
        rx_bar_off = NFP_PCIE_QUEUE(startq);
 
        /* Allocate and initialise the netdev */
-       nn = nfp_net_alloc(pdev, true, max_tx_rings, max_rx_rings);
+       nn = nfp_net_alloc(pdev, ctrl_bar, true, max_tx_rings, max_rx_rings);
        if (IS_ERR(nn)) {
                err = PTR_ERR(nn);
                goto err_ctrl_unmap;
        vf->nn = nn;
 
        nn->fw_ver = fw_ver;
-       nn->dp.ctrl_bar = ctrl_bar;
        nn->dp.is_vf = 1;
        nn->stride_tx = stride;
        nn->stride_rx = stride;