summaryrefslogtreecommitdiff
path: root/drivers/bus/fslmc
diff options
context:
space:
mode:
authorAnatoly Burakov <anatoly.burakov@intel.com>2018-04-11 13:30:40 +0100
committerThomas Monjalon <thomas@monjalon.net>2018-04-11 21:45:56 +0200
commita6cdf375bc0864df1bf6595ed6d82643bf67d20c (patch)
tree8ba5d43e20b0ed7062f0ea962f31c0189fac867f /drivers/bus/fslmc
parent43e463137154cd0061bab67ad288b3f653456bee (diff)
downloaddpdk-a6cdf375bc0864df1bf6595ed6d82643bf67d20c.zip
dpdk-a6cdf375bc0864df1bf6595ed6d82643bf67d20c.tar.gz
dpdk-a6cdf375bc0864df1bf6595ed6d82643bf67d20c.tar.xz
bus/fslmc: move VFIO DMA map into bus probe
fslmc bus needs to map all allocated memory for VFIO before device probe. This bus doesn't support hotplug, so at the time of this call, all possible device that could be present, are present. This will also be the place where we install VFIO callback, although this change will come in the next patch. Since rte_fslmc_vfio_dmamap() is now only called at bus probe, there is no longer any need to check if DMA mappings have been already done. Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Tested-by: Santosh Shukla <santosh.shukla@caviumnetworks.com> Tested-by: Hemant Agrawal <hemant.agrawal@nxp.com> Tested-by: Gowrishankar Muthukrishnan <gowrishankar.m@linux.vnet.ibm.com>
Diffstat (limited to 'drivers/bus/fslmc')
-rw-r--r--drivers/bus/fslmc/fslmc_bus.c11
-rw-r--r--drivers/bus/fslmc/fslmc_vfio.c6
2 files changed, 11 insertions, 6 deletions
diff --git a/drivers/bus/fslmc/fslmc_bus.c b/drivers/bus/fslmc/fslmc_bus.c
index d6806df..d0b3261 100644
--- a/drivers/bus/fslmc/fslmc_bus.c
+++ b/drivers/bus/fslmc/fslmc_bus.c
@@ -286,6 +286,17 @@ rte_fslmc_probe(void)
return 0;
}
+ /* Map existing segments as well as, in case of hotpluggable memory,
+ * install callback handler.
+ */
+ ret = rte_fslmc_vfio_dmamap();
+ if (ret) {
+ DPAA2_BUS_ERR("Unable to DMA map existing VAs: (%d)", ret);
+ /* Not continuing ahead */
+ DPAA2_BUS_ERR("FSLMC VFIO Mapping failed");
+ return 0;
+ }
+
ret = fslmc_vfio_process_group();
if (ret) {
DPAA2_BUS_ERR("Unable to setup devices %d", ret);
diff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c
index 8b15312..db3eb61 100644
--- a/drivers/bus/fslmc/fslmc_vfio.c
+++ b/drivers/bus/fslmc/fslmc_vfio.c
@@ -51,7 +51,6 @@ static int container_device_fd;
static char *g_container;
static uint32_t *msi_intr_vaddr;
void *(*rte_mcp_ptr_list);
-static int is_dma_done;
static struct rte_dpaa2_object_list dpaa2_obj_list =
TAILQ_HEAD_INITIALIZER(dpaa2_obj_list);
@@ -235,9 +234,6 @@ int rte_fslmc_vfio_dmamap(void)
{
int i = 0;
- if (is_dma_done)
- return 0;
-
if (rte_memseg_walk(fslmc_vfio_map, &i) < 0)
return -1;
@@ -254,8 +250,6 @@ int rte_fslmc_vfio_dmamap(void)
*/
vfio_map_irq_region(&vfio_group);
- is_dma_done = 1;
-
return 0;
}