linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support
@ 2020-09-29  8:54 Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 01/13] bus/fsl-mc: Do no longer export the total number of irqs outside dprc_scan_objects Diana Craciun
                   ` (13 more replies)
  0 siblings, 14 replies; 20+ messages in thread
From: Diana Craciun @ 2020-09-29  8:54 UTC (permalink / raw)
  To: linux-kernel, laurentiu.tudor
  Cc: gregkh, Diana Craciun, linux-arm-kernel, stuyoder, leoyang.li

The vfio-mc bus driver needs some additional services to be exported by the
mc-bus driver like:
- a way to reset the DPRC container
- driver_override support
- functions to setup/tear down a DPRC
- functions for allocating the pool of interrupts. In case of VFIO the
interrupts are not configured at probe time, but later by userspace
request

v4 -> v5
- dprc_celanup should not fail

v3 -> v4
- Rebased on the latest kernel.
- Exported a dprc_remove function

v2 -> v3
- Add a new version for dprc_get_obj_region
- Export the cacheability bus specific bits defines

v1 -> v2
- Remove driver_override propagation through various functions
- Cache the DPRC API version

The patches are related with "vfio/fsl-mc: VFIO support for FSL-MC
devices" patches, but the series were split because they are targeting
different subsystems. However, the mc-bus patches may suffer changes
when addressing the VFIO review comments.

The patches do not address the comment regarding moving driver_override
in the core code. I prefer not to tie these patches on that change and
address that separately.

Bharat Bhushan (3):
  bus/fsl-mc: add support for 'driver_override' in the mc-bus
  bus/fsl-mc: Add dprc-reset-container support
  bus/fsl-mc: Extend ICID size from 16bit to 32bit

Diana Craciun (10):
  bus/fsl-mc: Do no longer export the total number of irqs outside
    dprc_scan_objects
  bus/fsl-mc: Add a new parameter to dprc_scan_objects function
  bus/fsl-mc: Set the QMAN/BMAN region flags
  bus/fsl-mc: Cache the DPRC API version
  bus/fsl-mc: Export dprc_scan/dprc_remove functions to be used by
    multiple entities
  bus/fsl-mc: Export a cleanup function for DPRC
  bus/fsl-mc: Add a container setup function
  bus/fsl_mc: Do not rely on caller to provide non NULL mc_io
  bus/fsl-mc: Export IRQ pool handling functions to be used by VFIO
  bus/fsl-mc: Add a new version for dprc_get_obj_region command

 drivers/bus/fsl-mc/dprc-driver.c      | 190 ++++++++++++++++----------
 drivers/bus/fsl-mc/dprc.c             | 141 +++++++++++++++----
 drivers/bus/fsl-mc/fsl-mc-allocator.c |  12 +-
 drivers/bus/fsl-mc/fsl-mc-bus.c       |  64 ++++++++-
 drivers/bus/fsl-mc/fsl-mc-private.h   |  31 ++---
 drivers/bus/fsl-mc/mc-io.c            |   7 +-
 include/linux/fsl/mc.h                |  41 +++++-
 7 files changed, 359 insertions(+), 127 deletions(-)

-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v5 01/13] bus/fsl-mc: Do no longer export the total number of irqs outside dprc_scan_objects
  2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
@ 2020-09-29  8:54 ` Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 02/13] bus/fsl-mc: Add a new parameter to dprc_scan_objects function Diana Craciun
                   ` (12 subsequent siblings)
  13 siblings, 0 replies; 20+ messages in thread
From: Diana Craciun @ 2020-09-29  8:54 UTC (permalink / raw)
  To: linux-kernel, laurentiu.tudor
  Cc: gregkh, Diana Craciun, linux-arm-kernel, stuyoder, leoyang.li

The total number of interrupts is only used for some checks
outside the dprc_scan_objects function. Furthermore, in some
situations the check is made twice. Move the bounds check inside
the function for all situations.

Signed-off-by: Diana Craciun <diana.craciun@oss.nxp.com>
---
 drivers/bus/fsl-mc/dprc-driver.c | 30 ++++++++++--------------------
 1 file changed, 10 insertions(+), 20 deletions(-)

diff --git a/drivers/bus/fsl-mc/dprc-driver.c b/drivers/bus/fsl-mc/dprc-driver.c
index 2a473c09bc33..54c576d68122 100644
--- a/drivers/bus/fsl-mc/dprc-driver.c
+++ b/drivers/bus/fsl-mc/dprc-driver.c
@@ -3,6 +3,7 @@
  * Freescale data path resource container (DPRC) driver
  *
  * Copyright (C) 2014-2016 Freescale Semiconductor, Inc.
+ * Copyright 2019-2020 NXP
  * Author: German Rivera <German.Rivera@freescale.com>
  *
  */
@@ -220,8 +221,6 @@ static void dprc_add_new_devices(struct fsl_mc_device *mc_bus_dev,
  * dprc_scan_objects - Discover objects in a DPRC
  *
  * @mc_bus_dev: pointer to the fsl-mc device that represents a DPRC object
- * @total_irq_count: If argument is provided the function populates the
- * total number of IRQs created by objects in the DPRC.
  *
  * Detects objects added and removed from a DPRC and synchronizes the
  * state of the Linux bus driver, MC by adding and removing
@@ -235,8 +234,7 @@ static void dprc_add_new_devices(struct fsl_mc_device *mc_bus_dev,
  * populated before they can get allocation requests from probe callbacks
  * of the device drivers for the non-allocatable devices.
  */
-static int dprc_scan_objects(struct fsl_mc_device *mc_bus_dev,
-			     unsigned int *total_irq_count)
+static int dprc_scan_objects(struct fsl_mc_device *mc_bus_dev)
 {
 	int num_child_objects;
 	int dprc_get_obj_failures;
@@ -317,22 +315,21 @@ static int dprc_scan_objects(struct fsl_mc_device *mc_bus_dev,
 	 * Allocate IRQ's before binding the scanned devices with their
 	 * respective drivers.
 	 */
-	if (dev_get_msi_domain(&mc_bus_dev->dev) && !mc_bus->irq_resources) {
+	if (dev_get_msi_domain(&mc_bus_dev->dev)) {
 		if (irq_count > FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS) {
 			dev_warn(&mc_bus_dev->dev,
 				 "IRQs needed (%u) exceed IRQs preallocated (%u)\n",
 				 irq_count, FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS);
 		}
 
-		error = fsl_mc_populate_irq_pool(mc_bus,
+		if (!mc_bus->irq_resources) {
+			error = fsl_mc_populate_irq_pool(mc_bus,
 				FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS);
-		if (error < 0)
-			return error;
+			if (error < 0)
+				return error;
+		}
 	}
 
-	if (total_irq_count)
-		*total_irq_count = irq_count;
-
 	dprc_remove_devices(mc_bus_dev, child_obj_desc_array,
 			    num_child_objects);
 
@@ -365,7 +362,7 @@ static int dprc_scan_container(struct fsl_mc_device *mc_bus_dev)
 	 * Discover objects in the DPRC:
 	 */
 	mutex_lock(&mc_bus->scan_mutex);
-	error = dprc_scan_objects(mc_bus_dev, NULL);
+	error = dprc_scan_objects(mc_bus_dev);
 	mutex_unlock(&mc_bus->scan_mutex);
 	if (error < 0) {
 		fsl_mc_cleanup_all_resource_pools(mc_bus_dev);
@@ -434,9 +431,8 @@ static irqreturn_t dprc_irq0_handler_thread(int irq_num, void *arg)
 		      DPRC_IRQ_EVENT_CONTAINER_DESTROYED |
 		      DPRC_IRQ_EVENT_OBJ_DESTROYED |
 		      DPRC_IRQ_EVENT_OBJ_CREATED)) {
-		unsigned int irq_count;
 
-		error = dprc_scan_objects(mc_dev, &irq_count);
+		error = dprc_scan_objects(mc_dev);
 		if (error < 0) {
 			/*
 			 * If the error is -ENXIO, we ignore it, as it indicates
@@ -451,12 +447,6 @@ static irqreturn_t dprc_irq0_handler_thread(int irq_num, void *arg)
 
 			goto out;
 		}
-
-		if (irq_count > FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS) {
-			dev_warn(dev,
-				 "IRQs needed (%u) exceed IRQs preallocated (%u)\n",
-				 irq_count, FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS);
-		}
 	}
 
 out:
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v5 02/13] bus/fsl-mc: Add a new parameter to dprc_scan_objects function
  2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 01/13] bus/fsl-mc: Do no longer export the total number of irqs outside dprc_scan_objects Diana Craciun
@ 2020-09-29  8:54 ` Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 03/13] bus/fsl-mc: add support for 'driver_override' in the mc-bus Diana Craciun
                   ` (11 subsequent siblings)
  13 siblings, 0 replies; 20+ messages in thread
From: Diana Craciun @ 2020-09-29  8:54 UTC (permalink / raw)
  To: linux-kernel, laurentiu.tudor
  Cc: gregkh, Diana Craciun, linux-arm-kernel, stuyoder, leoyang.li

Prepare the dprc_scan_objects function to be used by
the VFIO mc driver code. The function is used to scan the mc
objects by the bus driver. The same functionality is
needed by the VFIO mc driver, but in this case the
interrupt configuration is delayed until the userspace
configures the interrupts. In order to use the same function
in both drivers add a new parameter.

Signed-off-by: Diana Craciun <diana.craciun@oss.nxp.com>
---
 drivers/bus/fsl-mc/dprc-driver.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/bus/fsl-mc/dprc-driver.c b/drivers/bus/fsl-mc/dprc-driver.c
index 54c576d68122..3d850515e3e5 100644
--- a/drivers/bus/fsl-mc/dprc-driver.c
+++ b/drivers/bus/fsl-mc/dprc-driver.c
@@ -221,6 +221,8 @@ static void dprc_add_new_devices(struct fsl_mc_device *mc_bus_dev,
  * dprc_scan_objects - Discover objects in a DPRC
  *
  * @mc_bus_dev: pointer to the fsl-mc device that represents a DPRC object
+ * @alloc_interrupts: if true the function allocates the interrupt pool,
+ * otherwise the interrupt allocation is delayed
  *
  * Detects objects added and removed from a DPRC and synchronizes the
  * state of the Linux bus driver, MC by adding and removing
@@ -234,7 +236,8 @@ static void dprc_add_new_devices(struct fsl_mc_device *mc_bus_dev,
  * populated before they can get allocation requests from probe callbacks
  * of the device drivers for the non-allocatable devices.
  */
-static int dprc_scan_objects(struct fsl_mc_device *mc_bus_dev)
+static int dprc_scan_objects(struct fsl_mc_device *mc_bus_dev,
+			    bool alloc_interrupts)
 {
 	int num_child_objects;
 	int dprc_get_obj_failures;
@@ -322,7 +325,7 @@ static int dprc_scan_objects(struct fsl_mc_device *mc_bus_dev)
 				 irq_count, FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS);
 		}
 
-		if (!mc_bus->irq_resources) {
+		if (alloc_interrupts && !mc_bus->irq_resources) {
 			error = fsl_mc_populate_irq_pool(mc_bus,
 				FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS);
 			if (error < 0)
@@ -362,7 +365,7 @@ static int dprc_scan_container(struct fsl_mc_device *mc_bus_dev)
 	 * Discover objects in the DPRC:
 	 */
 	mutex_lock(&mc_bus->scan_mutex);
-	error = dprc_scan_objects(mc_bus_dev);
+	error = dprc_scan_objects(mc_bus_dev, true);
 	mutex_unlock(&mc_bus->scan_mutex);
 	if (error < 0) {
 		fsl_mc_cleanup_all_resource_pools(mc_bus_dev);
@@ -432,7 +435,7 @@ static irqreturn_t dprc_irq0_handler_thread(int irq_num, void *arg)
 		      DPRC_IRQ_EVENT_OBJ_DESTROYED |
 		      DPRC_IRQ_EVENT_OBJ_CREATED)) {
 
-		error = dprc_scan_objects(mc_dev);
+		error = dprc_scan_objects(mc_dev, true);
 		if (error < 0) {
 			/*
 			 * If the error is -ENXIO, we ignore it, as it indicates
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v5 03/13] bus/fsl-mc: add support for 'driver_override' in the mc-bus
  2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 01/13] bus/fsl-mc: Do no longer export the total number of irqs outside dprc_scan_objects Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 02/13] bus/fsl-mc: Add a new parameter to dprc_scan_objects function Diana Craciun
@ 2020-09-29  8:54 ` Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 04/13] bus/fsl-mc: Set the QMAN/BMAN region flags Diana Craciun
                   ` (10 subsequent siblings)
  13 siblings, 0 replies; 20+ messages in thread
From: Diana Craciun @ 2020-09-29  8:54 UTC (permalink / raw)
  To: linux-kernel, laurentiu.tudor
  Cc: stuyoder, gregkh, leoyang.li, Diana Craciun, Bharat Bhushan,
	linux-arm-kernel

From: Bharat Bhushan <Bharat.Bhushan@nxp.com>

This patch is required for vfio-fsl-mc meta driver to successfully bind
layerscape container devices for device passthrough. This patch adds
a mechanism to allow a layerscape device to specify a driver rather than
a layerscape driver provide a device match.

Example to allow a device (dprc.1) to specifically bind
with driver (vfio-fsl-mc):-
 - echo vfio-fsl-mc > /sys/bus/fsl-mc/devices/dprc.1/driver_override
 - echo dprc.1 > /sys/bus/fsl-mc/drivers/fsl_mc_dprc/unbind
 - echo dprc.1 > /sys/bus/fsl-mc/drivers/vfio-fsl-mc/bind

Signed-off-by: Bharat Bhushan <Bharat.Bhushan@nxp.com>
Signed-off-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
Signed-off-by: Diana Craciun <diana.craciun@oss.nxp.com>
---

The patch does not address the comment regarding moving driver_override
in the core code. I prefer not to tie these patches on that change and
address that separately.

 drivers/bus/fsl-mc/fsl-mc-bus.c | 54 +++++++++++++++++++++++++++++++++
 include/linux/fsl/mc.h          |  2 ++
 2 files changed, 56 insertions(+)

diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c
index b69794e7364d..9a884936e53e 100644
--- a/drivers/bus/fsl-mc/fsl-mc-bus.c
+++ b/drivers/bus/fsl-mc/fsl-mc-bus.c
@@ -3,6 +3,7 @@
  * Freescale Management Complex (MC) bus driver
  *
  * Copyright (C) 2014-2016 Freescale Semiconductor, Inc.
+ * Copyright 2019-2020 NXP
  * Author: German Rivera <German.Rivera@freescale.com>
  *
  */
@@ -78,6 +79,12 @@ static int fsl_mc_bus_match(struct device *dev, struct device_driver *drv)
 	struct fsl_mc_driver *mc_drv = to_fsl_mc_driver(drv);
 	bool found = false;
 
+	/* When driver_override is set, only bind to the matching driver */
+	if (mc_dev->driver_override) {
+		found = !strcmp(mc_dev->driver_override, mc_drv->driver.name);
+		goto out;
+	}
+
 	if (!mc_drv->match_id_table)
 		goto out;
 
@@ -147,8 +154,52 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
 }
 static DEVICE_ATTR_RO(modalias);
 
+static ssize_t driver_override_store(struct device *dev,
+				     struct device_attribute *attr,
+				     const char *buf, size_t count)
+{
+	struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
+	char *driver_override, *old = mc_dev->driver_override;
+	char *cp;
+
+	if (WARN_ON(dev->bus != &fsl_mc_bus_type))
+		return -EINVAL;
+
+	if (count >= (PAGE_SIZE - 1))
+		return -EINVAL;
+
+	driver_override = kstrndup(buf, count, GFP_KERNEL);
+	if (!driver_override)
+		return -ENOMEM;
+
+	cp = strchr(driver_override, '\n');
+	if (cp)
+		*cp = '\0';
+
+	if (strlen(driver_override)) {
+		mc_dev->driver_override = driver_override;
+	} else {
+		kfree(driver_override);
+		mc_dev->driver_override = NULL;
+	}
+
+	kfree(old);
+
+	return count;
+}
+
+static ssize_t driver_override_show(struct device *dev,
+				    struct device_attribute *attr, char *buf)
+{
+	struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
+
+	return snprintf(buf, PAGE_SIZE, "%s\n", mc_dev->driver_override);
+}
+static DEVICE_ATTR_RW(driver_override);
+
 static struct attribute *fsl_mc_dev_attrs[] = {
 	&dev_attr_modalias.attr,
+	&dev_attr_driver_override.attr,
 	NULL,
 };
 
@@ -748,6 +799,9 @@ EXPORT_SYMBOL_GPL(fsl_mc_device_add);
  */
 void fsl_mc_device_remove(struct fsl_mc_device *mc_dev)
 {
+	kfree(mc_dev->driver_override);
+	mc_dev->driver_override = NULL;
+
 	/*
 	 * The device-specific remove callback will get invoked by device_del()
 	 */
diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h
index a428c61ead6e..3b5f0c98636d 100644
--- a/include/linux/fsl/mc.h
+++ b/include/linux/fsl/mc.h
@@ -161,6 +161,7 @@ struct fsl_mc_obj_desc {
  * @regions: pointer to array of MMIO region entries
  * @irqs: pointer to array of pointers to interrupts allocated to this device
  * @resource: generic resource associated with this MC object device, if any.
+ * @driver_override: driver name to force a match
  *
  * Generic device object for MC object devices that are "attached" to a
  * MC bus.
@@ -194,6 +195,7 @@ struct fsl_mc_device {
 	struct fsl_mc_device_irq **irqs;
 	struct fsl_mc_resource *resource;
 	struct device_link *consumer_link;
+	char   *driver_override;
 };
 
 #define to_fsl_mc_device(_dev) \
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v5 04/13] bus/fsl-mc: Set the QMAN/BMAN region flags
  2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
                   ` (2 preceding siblings ...)
  2020-09-29  8:54 ` [PATCH v5 03/13] bus/fsl-mc: add support for 'driver_override' in the mc-bus Diana Craciun
@ 2020-09-29  8:54 ` Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 05/13] bus/fsl-mc: Cache the DPRC API version Diana Craciun
                   ` (9 subsequent siblings)
  13 siblings, 0 replies; 20+ messages in thread
From: Diana Craciun @ 2020-09-29  8:54 UTC (permalink / raw)
  To: linux-kernel, laurentiu.tudor
  Cc: gregkh, Diana Craciun, linux-arm-kernel, stuyoder, leoyang.li

The QMAN region is memory mapped, so it should be of type
IORESOURCE_MEM. The region flags bits were wrongly used to
pass additional information. Use the bus specific bits for
this purpose.

Signed-off-by: Diana Craciun <diana.craciun@oss.nxp.com>
---
 drivers/bus/fsl-mc/fsl-mc-bus.c     | 7 ++-----
 drivers/bus/fsl-mc/fsl-mc-private.h | 6 ------
 include/linux/fsl/mc.h              | 8 ++++++++
 3 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c
index 9a884936e53e..1bb70a92167e 100644
--- a/drivers/bus/fsl-mc/fsl-mc-bus.c
+++ b/drivers/bus/fsl-mc/fsl-mc-bus.c
@@ -615,11 +615,8 @@ static int fsl_mc_device_get_mmio_regions(struct fsl_mc_device *mc_dev,
 
 		regions[i].end = regions[i].start + region_desc.size - 1;
 		regions[i].name = "fsl-mc object MMIO region";
-		regions[i].flags = IORESOURCE_IO;
-		if (region_desc.flags & DPRC_REGION_CACHEABLE)
-			regions[i].flags |= IORESOURCE_CACHEABLE;
-		if (region_desc.flags & DPRC_REGION_SHAREABLE)
-			regions[i].flags |= IORESOURCE_MEM;
+		regions[i].flags = region_desc.flags & IORESOURCE_BITS;
+		regions[i].flags |= IORESOURCE_MEM;
 	}
 
 	mc_dev->regions = regions;
diff --git a/drivers/bus/fsl-mc/fsl-mc-private.h b/drivers/bus/fsl-mc/fsl-mc-private.h
index 7a46a12eb747..9f200731b274 100644
--- a/drivers/bus/fsl-mc/fsl-mc-private.h
+++ b/drivers/bus/fsl-mc/fsl-mc-private.h
@@ -358,12 +358,6 @@ int dprc_set_obj_irq(struct fsl_mc_io *mc_io,
 		     int obj_id,
 		     u8 irq_index,
 		     struct dprc_irq_cfg *irq_cfg);
-
-/* Region flags */
-/* Cacheable - Indicates that region should be mapped as cacheable */
-#define DPRC_REGION_CACHEABLE	0x00000001
-#define DPRC_REGION_SHAREABLE	0x00000002
-
 /**
  * enum dprc_region_type - Region type
  * @DPRC_REGION_TYPE_MC_PORTAL: MC portal region
diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h
index 3b5f0c98636d..03a5d16dde73 100644
--- a/include/linux/fsl/mc.h
+++ b/include/linux/fsl/mc.h
@@ -3,6 +3,7 @@
  * Freescale Management Complex (MC) bus public interface
  *
  * Copyright (C) 2014-2016 Freescale Semiconductor, Inc.
+ * Copyright 2019-2020 NXP
  * Author: German Rivera <German.Rivera@freescale.com>
  *
  */
@@ -148,6 +149,13 @@ struct fsl_mc_obj_desc {
  */
 #define FSL_MC_IS_DPRC	0x0001
 
+/* Region flags */
+/* Indicates that region can be mapped as cacheable */
+#define FSL_MC_REGION_CACHEABLE	0x00000001
+
+/* Indicates that region can be mapped as shareable */
+#define FSL_MC_REGION_SHAREABLE	0x00000002
+
 /**
  * struct fsl_mc_device - MC object device object
  * @dev: Linux driver model device object
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v5 05/13] bus/fsl-mc: Cache the DPRC API version
  2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
                   ` (3 preceding siblings ...)
  2020-09-29  8:54 ` [PATCH v5 04/13] bus/fsl-mc: Set the QMAN/BMAN region flags Diana Craciun
@ 2020-09-29  8:54 ` Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 06/13] bus/fsl-mc: Add dprc-reset-container support Diana Craciun
                   ` (8 subsequent siblings)
  13 siblings, 0 replies; 20+ messages in thread
From: Diana Craciun @ 2020-09-29  8:54 UTC (permalink / raw)
  To: linux-kernel, laurentiu.tudor
  Cc: gregkh, Diana Craciun, linux-arm-kernel, stuyoder, leoyang.li

There are already firmware API commands that have multiple
versions. For each multiple version command, another command
to retrieve the API version is issued. This may introduce an important
overhead. The version does not change while the system is running,
so the DPRC API version can be safely cached.

Signed-off-by: Diana Craciun <diana.craciun@oss.nxp.com>
---
 drivers/bus/fsl-mc/dprc.c | 30 +++++++++++++++++++++---------
 1 file changed, 21 insertions(+), 9 deletions(-)

diff --git a/drivers/bus/fsl-mc/dprc.c b/drivers/bus/fsl-mc/dprc.c
index 602f030d84eb..e76f2c76f4c8 100644
--- a/drivers/bus/fsl-mc/dprc.c
+++ b/drivers/bus/fsl-mc/dprc.c
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
 /*
  * Copyright 2013-2016 Freescale Semiconductor Inc.
+ * Copyright 2020 NXP
  *
  */
 #include <linux/kernel.h>
@@ -8,6 +9,13 @@
 
 #include "fsl-mc-private.h"
 
+/*
+ * cache the DPRC version to reduce the number of commands
+ * towards the mc firmware
+ */
+static u16 dprc_major_ver;
+static u16 dprc_minor_ver;
+
 /**
  * dprc_open() - Open DPRC object for use
  * @mc_io:	Pointer to MC portal's I/O object
@@ -443,15 +451,19 @@ int dprc_get_obj_region(struct fsl_mc_io *mc_io,
 	struct fsl_mc_command cmd = { 0 };
 	struct dprc_cmd_get_obj_region *cmd_params;
 	struct dprc_rsp_get_obj_region *rsp_params;
-	u16 major_ver, minor_ver;
 	int err;
 
-	/* prepare command */
-	err = dprc_get_api_version(mc_io, 0,
-				     &major_ver,
-				     &minor_ver);
-	if (err)
-		return err;
+    /*
+     * If the DPRC object version was not yet cached, cache it now.
+     * Otherwise use the already cached value.
+     */
+	if (!dprc_major_ver && !dprc_minor_ver) {
+		err = dprc_get_api_version(mc_io, 0,
+				      &dprc_major_ver,
+				      &dprc_minor_ver);
+		if (err)
+			return err;
+	}
 
 	/**
 	 * MC API version 6.3 introduced a new field to the region
@@ -459,7 +471,7 @@ int dprc_get_obj_region(struct fsl_mc_io *mc_io,
 	 * address is set to zero to indicate it needs to be obtained elsewhere
 	 * (typically the device tree).
 	 */
-	if (major_ver > 6 || (major_ver == 6 && minor_ver >= 3))
+	if (dprc_major_ver > 6 || (dprc_major_ver == 6 && dprc_minor_ver >= 3))
 		cmd.header =
 			mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG_V2,
 					     cmd_flags, token);
@@ -483,7 +495,7 @@ int dprc_get_obj_region(struct fsl_mc_io *mc_io,
 	rsp_params = (struct dprc_rsp_get_obj_region *)cmd.params;
 	region_desc->base_offset = le64_to_cpu(rsp_params->base_offset);
 	region_desc->size = le32_to_cpu(rsp_params->size);
-	if (major_ver > 6 || (major_ver == 6 && minor_ver >= 3))
+	if (dprc_major_ver > 6 || (dprc_major_ver == 6 && dprc_minor_ver >= 3))
 		region_desc->base_address = le64_to_cpu(rsp_params->base_addr);
 	else
 		region_desc->base_address = 0;
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v5 06/13] bus/fsl-mc: Add dprc-reset-container support
  2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
                   ` (4 preceding siblings ...)
  2020-09-29  8:54 ` [PATCH v5 05/13] bus/fsl-mc: Cache the DPRC API version Diana Craciun
@ 2020-09-29  8:54 ` Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 07/13] bus/fsl-mc: Export dprc_scan/dprc_remove functions to be used by multiple entities Diana Craciun
                   ` (7 subsequent siblings)
  13 siblings, 0 replies; 20+ messages in thread
From: Diana Craciun @ 2020-09-29  8:54 UTC (permalink / raw)
  To: linux-kernel, laurentiu.tudor
  Cc: stuyoder, gregkh, leoyang.li, Diana Craciun, Bharat Bhushan,
	linux-arm-kernel

From: Bharat Bhushan <Bharat.Bhushan@nxp.com>

DPRC reset is required by VFIO-mc in order to stop a device
to further generate DMA transactions.

Signed-off-by: Bharat Bhushan <Bharat.Bhushan@nxp.com>
Signed-off-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
Signed-off-by: Diana Craciun <diana.craciun@oss.nxp.com>
---
 drivers/bus/fsl-mc/dprc.c           | 71 +++++++++++++++++++++++++++++
 drivers/bus/fsl-mc/fsl-mc-private.h |  7 +++
 include/linux/fsl/mc.h              |  7 +++
 3 files changed, 85 insertions(+)

diff --git a/drivers/bus/fsl-mc/dprc.c b/drivers/bus/fsl-mc/dprc.c
index e76f2c76f4c8..2448a723eb28 100644
--- a/drivers/bus/fsl-mc/dprc.c
+++ b/drivers/bus/fsl-mc/dprc.c
@@ -80,6 +80,77 @@ int dprc_close(struct fsl_mc_io *mc_io,
 }
 EXPORT_SYMBOL_GPL(dprc_close);
 
+/**
+ * dprc_reset_container - Reset child container.
+ * @mc_io:	Pointer to MC portal's I/O object
+ * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
+ * @token:	Token of DPRC object
+ * @child_container_id:	ID of the container to reset
+ * @options: 32 bit options:
+ *   - 0 (no bits set) - all the objects inside the container are
+ *     reset. The child containers are entered recursively and the
+ *     objects reset. All the objects (including the child containers)
+ *     are closed.
+ *   - bit 0 set - all the objects inside the container are reset.
+ *     However the child containers are not entered recursively.
+ *     This option is supported for API versions >= 6.5
+ * In case a software context crashes or becomes non-responsive, the parent
+ * may wish to reset its resources container before the software context is
+ * restarted.
+ *
+ * This routine informs all objects assigned to the child container that the
+ * container is being reset, so they may perform any cleanup operations that are
+ * needed. All objects handles that were owned by the child container shall be
+ * closed.
+ *
+ * Note that such request may be submitted even if the child software context
+ * has not crashed, but the resulting object cleanup operations will not be
+ * aware of that.
+ *
+ * Return:	'0' on Success; Error code otherwise.
+ */
+int dprc_reset_container(struct fsl_mc_io *mc_io,
+			 u32 cmd_flags,
+			 u16 token,
+			 int child_container_id,
+			 u32 options)
+{
+	struct fsl_mc_command cmd = { 0 };
+	struct dprc_cmd_reset_container *cmd_params;
+	u32 cmdid = DPRC_CMDID_RESET_CONT;
+	int err;
+
+	/*
+	 * If the DPRC object version was not yet cached, cache it now.
+	 * Otherwise use the already cached value.
+	 */
+	if (!dprc_major_ver && !dprc_minor_ver) {
+		err = dprc_get_api_version(mc_io, 0,
+				&dprc_major_ver,
+				&dprc_minor_ver);
+		if (err)
+			return err;
+	}
+
+	/*
+	 * MC API 6.5 introduced a new field in the command used to pass
+	 * some flags.
+	 * Bit 0 indicates that the child containers are not recursively reset.
+	 */
+	if (dprc_major_ver > 6 || (dprc_major_ver == 6 && dprc_minor_ver >= 5))
+		cmdid = DPRC_CMDID_RESET_CONT_V2;
+
+	/* prepare command */
+	cmd.header = mc_encode_cmd_header(cmdid, cmd_flags, token);
+	cmd_params = (struct dprc_cmd_reset_container *)cmd.params;
+	cmd_params->child_container_id = cpu_to_le32(child_container_id);
+	cmd_params->options = cpu_to_le32(options);
+
+	/* send command to mc*/
+	return mc_send_command(mc_io, &cmd);
+}
+EXPORT_SYMBOL_GPL(dprc_reset_container);
+
 /**
  * dprc_set_irq() - Set IRQ information for the DPRC to trigger an interrupt.
  * @mc_io:	Pointer to MC portal's I/O object
diff --git a/drivers/bus/fsl-mc/fsl-mc-private.h b/drivers/bus/fsl-mc/fsl-mc-private.h
index 9f200731b274..5f7e762d517c 100644
--- a/drivers/bus/fsl-mc/fsl-mc-private.h
+++ b/drivers/bus/fsl-mc/fsl-mc-private.h
@@ -91,6 +91,8 @@ int dpmcp_reset(struct fsl_mc_io *mc_io,
 #define DPRC_CMDID_GET_API_VERSION              DPRC_CMD(0xa05)
 
 #define DPRC_CMDID_GET_ATTR                     DPRC_CMD(0x004)
+#define DPRC_CMDID_RESET_CONT                   DPRC_CMD(0x005)
+#define DPRC_CMDID_RESET_CONT_V2                DPRC_CMD_V2(0x005)
 
 #define DPRC_CMDID_SET_IRQ                      DPRC_CMD(0x010)
 #define DPRC_CMDID_SET_IRQ_ENABLE               DPRC_CMD(0x012)
@@ -111,6 +113,11 @@ struct dprc_cmd_open {
 	__le32 container_id;
 };
 
+struct dprc_cmd_reset_container {
+	__le32 child_container_id;
+	__le32 options;
+};
+
 struct dprc_cmd_set_irq {
 	/* cmd word 0 */
 	__le32 irq_val;
diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h
index 03a5d16dde73..1d8800acf21f 100644
--- a/include/linux/fsl/mc.h
+++ b/include/linux/fsl/mc.h
@@ -524,6 +524,13 @@ static inline bool is_fsl_mc_bus_dpdmai(const struct fsl_mc_device *mc_dev)
 	return mc_dev->dev.type == &fsl_mc_bus_dpdmai_type;
 }
 
+#define DPRC_RESET_OPTION_NON_RECURSIVE                0x00000001
+int dprc_reset_container(struct fsl_mc_io *mc_io,
+			 u32 cmd_flags,
+			 u16 token,
+			 int child_container_id,
+			 u32 options);
+
 /*
  * Data Path Buffer Pool (DPBP) API
  * Contains initialization APIs and runtime control APIs for DPBP
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v5 07/13] bus/fsl-mc: Export dprc_scan/dprc_remove functions to be used by multiple entities
  2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
                   ` (5 preceding siblings ...)
  2020-09-29  8:54 ` [PATCH v5 06/13] bus/fsl-mc: Add dprc-reset-container support Diana Craciun
@ 2020-09-29  8:54 ` Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 08/13] bus/fsl-mc: Export a cleanup function for DPRC Diana Craciun
                   ` (6 subsequent siblings)
  13 siblings, 0 replies; 20+ messages in thread
From: Diana Craciun @ 2020-09-29  8:54 UTC (permalink / raw)
  To: linux-kernel, laurentiu.tudor
  Cc: gregkh, Diana Craciun, linux-arm-kernel, stuyoder, leoyang.li

Currently the DPRC scan function is used only by the bus driver.
But the same functionality will be needed by the VFIO driver.
To support this, the dprc scan function was exported and a little
bit adjusted to fit both scenarios. Also the scan mutex initialization
is done when the bus object is created, not in dprc_probe in order
to be used by both VFIO and bus driver.
Similarily dprc_remove_devices is exported to be used by VFIO.

Signed-off-by: Diana Craciun <diana.craciun@oss.nxp.com>
---
 drivers/bus/fsl-mc/dprc-driver.c | 26 +++++++++++---------------
 drivers/bus/fsl-mc/fsl-mc-bus.c  |  1 +
 include/linux/fsl/mc.h           |  7 +++++++
 3 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/drivers/bus/fsl-mc/dprc-driver.c b/drivers/bus/fsl-mc/dprc-driver.c
index 3d850515e3e5..dde8fe965e30 100644
--- a/drivers/bus/fsl-mc/dprc-driver.c
+++ b/drivers/bus/fsl-mc/dprc-driver.c
@@ -81,9 +81,9 @@ static int __fsl_mc_device_remove(struct device *dev, void *data)
  * the MC by removing devices that represent MC objects that have
  * been dynamically removed in the physical DPRC.
  */
-static void dprc_remove_devices(struct fsl_mc_device *mc_bus_dev,
-				struct fsl_mc_obj_desc *obj_desc_array,
-				int num_child_objects_in_mc)
+void dprc_remove_devices(struct fsl_mc_device *mc_bus_dev,
+			 struct fsl_mc_obj_desc *obj_desc_array,
+			 int num_child_objects_in_mc)
 {
 	if (num_child_objects_in_mc != 0) {
 		/*
@@ -105,6 +105,7 @@ static void dprc_remove_devices(struct fsl_mc_device *mc_bus_dev,
 				      __fsl_mc_device_remove);
 	}
 }
+EXPORT_SYMBOL_GPL(dprc_remove_devices);
 
 static int __fsl_mc_device_match(struct device *dev, void *data)
 {
@@ -354,9 +355,10 @@ static int dprc_scan_objects(struct fsl_mc_device *mc_bus_dev,
  * bus driver with the actual state of the MC by adding and removing
  * devices as appropriate.
  */
-static int dprc_scan_container(struct fsl_mc_device *mc_bus_dev)
+int dprc_scan_container(struct fsl_mc_device *mc_bus_dev,
+			bool alloc_interrupts)
 {
-	int error;
+	int error = 0;
 	struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_bus_dev);
 
 	fsl_mc_init_all_resource_pools(mc_bus_dev);
@@ -365,16 +367,12 @@ static int dprc_scan_container(struct fsl_mc_device *mc_bus_dev)
 	 * Discover objects in the DPRC:
 	 */
 	mutex_lock(&mc_bus->scan_mutex);
-	error = dprc_scan_objects(mc_bus_dev, true);
+	error = dprc_scan_objects(mc_bus_dev, alloc_interrupts);
 	mutex_unlock(&mc_bus->scan_mutex);
-	if (error < 0) {
-		fsl_mc_cleanup_all_resource_pools(mc_bus_dev);
-		return error;
-	}
 
-	return 0;
+	return error;
 }
-
+EXPORT_SYMBOL_GPL(dprc_scan_container);
 /**
  * dprc_irq0_handler - Regular ISR for DPRC interrupt 0
  *
@@ -683,12 +681,10 @@ static int dprc_probe(struct fsl_mc_device *mc_dev)
 		goto error_cleanup_open;
 	}
 
-	mutex_init(&mc_bus->scan_mutex);
-
 	/*
 	 * Discover MC objects in DPRC object:
 	 */
-	error = dprc_scan_container(mc_dev);
+	error = dprc_scan_container(mc_dev, true);
 	if (error < 0)
 		goto error_cleanup_open;
 
diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c
index 1bb70a92167e..32f194814b08 100644
--- a/drivers/bus/fsl-mc/fsl-mc-bus.c
+++ b/drivers/bus/fsl-mc/fsl-mc-bus.c
@@ -678,6 +678,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc,
 		if (!mc_bus)
 			return -ENOMEM;
 
+		mutex_init(&mc_bus->scan_mutex);
 		mc_dev = &mc_bus->mc_dev;
 	} else {
 		/*
diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h
index 1d8800acf21f..da11171bc38f 100644
--- a/include/linux/fsl/mc.h
+++ b/include/linux/fsl/mc.h
@@ -531,6 +531,13 @@ int dprc_reset_container(struct fsl_mc_io *mc_io,
 			 int child_container_id,
 			 u32 options);
 
+int dprc_scan_container(struct fsl_mc_device *mc_bus_dev,
+			bool alloc_interrupts);
+
+void dprc_remove_devices(struct fsl_mc_device *mc_bus_dev,
+			 struct fsl_mc_obj_desc *obj_desc_array,
+			 int num_child_objects_in_mc);
+
 /*
  * Data Path Buffer Pool (DPBP) API
  * Contains initialization APIs and runtime control APIs for DPBP
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v5 08/13] bus/fsl-mc: Export a cleanup function for DPRC
  2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
                   ` (6 preceding siblings ...)
  2020-09-29  8:54 ` [PATCH v5 07/13] bus/fsl-mc: Export dprc_scan/dprc_remove functions to be used by multiple entities Diana Craciun
@ 2020-09-29  8:54 ` Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 09/13] bus/fsl-mc: Add a container setup function Diana Craciun
                   ` (5 subsequent siblings)
  13 siblings, 0 replies; 20+ messages in thread
From: Diana Craciun @ 2020-09-29  8:54 UTC (permalink / raw)
  To: linux-kernel, laurentiu.tudor
  Cc: gregkh, Diana Craciun, linux-arm-kernel, stuyoder, leoyang.li

Create and export a cleanup function for DPRC. The function
is used by the DPRC driver, but it will be used by the VFIO
driver as well.

Signed-off-by: Diana Craciun <diana.craciun@oss.nxp.com>
---
 drivers/bus/fsl-mc/dprc-driver.c | 62 ++++++++++++++++++++++++--------
 include/linux/fsl/mc.h           |  2 ++
 2 files changed, 49 insertions(+), 15 deletions(-)

diff --git a/drivers/bus/fsl-mc/dprc-driver.c b/drivers/bus/fsl-mc/dprc-driver.c
index dde8fe965e30..516119c8121a 100644
--- a/drivers/bus/fsl-mc/dprc-driver.c
+++ b/drivers/bus/fsl-mc/dprc-driver.c
@@ -728,33 +728,26 @@ static void dprc_teardown_irq(struct fsl_mc_device *mc_dev)
 }
 
 /**
- * dprc_remove - callback invoked when a DPRC is being unbound from this driver
+ * dprc_cleanup - function that cleanups a DPRC
  *
  * @mc_dev: Pointer to fsl-mc device representing the DPRC
  *
- * It removes the DPRC's child objects from Linux (not from the MC) and
- * closes the DPRC device in the MC.
- * It tears down the interrupts that were configured for the DPRC device.
+ * It closes the DPRC device in the MC.
  * It destroys the interrupt pool associated with this MC bus.
  */
-static int dprc_remove(struct fsl_mc_device *mc_dev)
+
+int dprc_cleanup(struct fsl_mc_device *mc_dev)
 {
 	int error;
 	struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_dev);
 
-	if (!is_fsl_mc_bus_dprc(mc_dev))
-		return -EINVAL;
-	if (!mc_dev->mc_io)
-		return -EINVAL;
 
-	if (!mc_bus->irq_resources)
+	/* this function should be called only for DPRCs, it
+	 * is an error to call it for regular objects
+	 */
+	if (!is_fsl_mc_bus_dprc(mc_dev))
 		return -EINVAL;
 
-	if (dev_get_msi_domain(&mc_dev->dev))
-		dprc_teardown_irq(mc_dev);
-
-	device_for_each_child(&mc_dev->dev, NULL, __fsl_mc_device_remove);
-
 	if (dev_get_msi_domain(&mc_dev->dev)) {
 		fsl_mc_cleanup_irq_pool(mc_bus);
 		dev_set_msi_domain(&mc_dev->dev, NULL);
@@ -762,6 +755,14 @@ static int dprc_remove(struct fsl_mc_device *mc_dev)
 
 	fsl_mc_cleanup_all_resource_pools(mc_dev);
 
+	/* if this step fails we cannot go further with cleanup as there is no way of
+	 * communicating with the firmware
+	 */
+	if (!mc_dev->mc_io) {
+		dev_err(&mc_dev->dev, "mc_io is NULL, tear down cannot be performed in firmware\n");
+		return -EINVAL;
+	}
+
 	error = dprc_close(mc_dev->mc_io, 0, mc_dev->mc_handle);
 	if (error < 0)
 		dev_err(&mc_dev->dev, "dprc_close() failed: %d\n", error);
@@ -771,6 +772,37 @@ static int dprc_remove(struct fsl_mc_device *mc_dev)
 		mc_dev->mc_io = NULL;
 	}
 
+	return 0;
+}
+EXPORT_SYMBOL_GPL(dprc_cleanup);
+
+/**
+ * dprc_remove - callback invoked when a DPRC is being unbound from this driver
+ *
+ * @mc_dev: Pointer to fsl-mc device representing the DPRC
+ *
+ * It removes the DPRC's child objects from Linux (not from the MC) and
+ * closes the DPRC device in the MC.
+ * It tears down the interrupts that were configured for the DPRC device.
+ * It destroys the interrupt pool associated with this MC bus.
+ */
+static int dprc_remove(struct fsl_mc_device *mc_dev)
+{
+	struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_dev);
+
+	if (!is_fsl_mc_bus_dprc(mc_dev))
+		return -EINVAL;
+
+	if (!mc_bus->irq_resources)
+		return -EINVAL;
+
+	if (dev_get_msi_domain(&mc_dev->dev))
+		dprc_teardown_irq(mc_dev);
+
+	device_for_each_child(&mc_dev->dev, NULL, __fsl_mc_device_remove);
+
+	dprc_cleanup(mc_dev);
+
 	dev_info(&mc_dev->dev, "DPRC device unbound from driver");
 	return 0;
 }
diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h
index da11171bc38f..5519a510b8c9 100644
--- a/include/linux/fsl/mc.h
+++ b/include/linux/fsl/mc.h
@@ -538,6 +538,8 @@ void dprc_remove_devices(struct fsl_mc_device *mc_bus_dev,
 			 struct fsl_mc_obj_desc *obj_desc_array,
 			 int num_child_objects_in_mc);
 
+int dprc_cleanup(struct fsl_mc_device *mc_dev);
+
 /*
  * Data Path Buffer Pool (DPBP) API
  * Contains initialization APIs and runtime control APIs for DPBP
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v5 09/13] bus/fsl-mc: Add a container setup function
  2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
                   ` (7 preceding siblings ...)
  2020-09-29  8:54 ` [PATCH v5 08/13] bus/fsl-mc: Export a cleanup function for DPRC Diana Craciun
@ 2020-09-29  8:54 ` Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 10/13] bus/fsl_mc: Do not rely on caller to provide non NULL mc_io Diana Craciun
                   ` (4 subsequent siblings)
  13 siblings, 0 replies; 20+ messages in thread
From: Diana Craciun @ 2020-09-29  8:54 UTC (permalink / raw)
  To: linux-kernel, laurentiu.tudor
  Cc: gregkh, Diana Craciun, linux-arm-kernel, stuyoder, leoyang.li

Both DPRC driver and VFIO driver use the same initialization code
for the DPRC. Introduced a new function which groups this
initialization code. The function is exported and may be
used by VFIO as well.

Signed-off-by: Diana Craciun <diana.craciun@oss.nxp.com>
---
 drivers/bus/fsl-mc/dprc-driver.c | 71 ++++++++++++++++++++++----------
 include/linux/fsl/mc.h           |  2 +
 2 files changed, 51 insertions(+), 22 deletions(-)

diff --git a/drivers/bus/fsl-mc/dprc-driver.c b/drivers/bus/fsl-mc/dprc-driver.c
index 516119c8121a..9e4088209cfe 100644
--- a/drivers/bus/fsl-mc/dprc-driver.c
+++ b/drivers/bus/fsl-mc/dprc-driver.c
@@ -588,25 +588,24 @@ static int dprc_setup_irq(struct fsl_mc_device *mc_dev)
 }
 
 /**
- * dprc_probe - callback invoked when a DPRC is being bound to this driver
+ * dprc_setup - opens and creates a mc_io for DPRC
  *
  * @mc_dev: Pointer to fsl-mc device representing a DPRC
  *
  * It opens the physical DPRC in the MC.
- * It scans the DPRC to discover the MC objects contained in it.
- * It creates the interrupt pool for the MC bus associated with the DPRC.
- * It configures the interrupts for the DPRC device itself.
+ * It configures the DPRC portal used to communicate with MC
  */
-static int dprc_probe(struct fsl_mc_device *mc_dev)
+
+int dprc_setup(struct fsl_mc_device *mc_dev)
 {
-	int error;
-	size_t region_size;
 	struct device *parent_dev = mc_dev->dev.parent;
 	struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_dev);
+	struct irq_domain *mc_msi_domain;
 	bool mc_io_created = false;
 	bool msi_domain_set = false;
 	u16 major_ver, minor_ver;
-	struct irq_domain *mc_msi_domain;
+	size_t region_size;
+	int error;
 
 	if (!is_fsl_mc_bus_dprc(mc_dev))
 		return -EINVAL;
@@ -681,35 +680,63 @@ static int dprc_probe(struct fsl_mc_device *mc_dev)
 		goto error_cleanup_open;
 	}
 
+	return 0;
+
+error_cleanup_open:
+	(void)dprc_close(mc_dev->mc_io, 0, mc_dev->mc_handle);
+
+error_cleanup_msi_domain:
+	if (msi_domain_set)
+		dev_set_msi_domain(&mc_dev->dev, NULL);
+
+	if (mc_io_created) {
+		fsl_destroy_mc_io(mc_dev->mc_io);
+		mc_dev->mc_io = NULL;
+	}
+
+	return error;
+}
+EXPORT_SYMBOL_GPL(dprc_setup);
+
+/**
+ * dprc_probe - callback invoked when a DPRC is being bound to this driver
+ *
+ * @mc_dev: Pointer to fsl-mc device representing a DPRC
+ *
+ * It opens the physical DPRC in the MC.
+ * It scans the DPRC to discover the MC objects contained in it.
+ * It creates the interrupt pool for the MC bus associated with the DPRC.
+ * It configures the interrupts for the DPRC device itself.
+ */
+static int dprc_probe(struct fsl_mc_device *mc_dev)
+{
+	int error;
+
+	error = dprc_setup(mc_dev);
+	if (error < 0)
+		return error;
+
 	/*
 	 * Discover MC objects in DPRC object:
 	 */
 	error = dprc_scan_container(mc_dev, true);
 	if (error < 0)
-		goto error_cleanup_open;
+		goto dprc_cleanup;
 
 	/*
 	 * Configure interrupt for the DPRC object associated with this MC bus:
 	 */
 	error = dprc_setup_irq(mc_dev);
 	if (error < 0)
-		goto error_cleanup_open;
+		goto scan_cleanup;
 
 	dev_info(&mc_dev->dev, "DPRC device bound to driver");
 	return 0;
 
-error_cleanup_open:
-	(void)dprc_close(mc_dev->mc_io, 0, mc_dev->mc_handle);
-
-error_cleanup_msi_domain:
-	if (msi_domain_set)
-		dev_set_msi_domain(&mc_dev->dev, NULL);
-
-	if (mc_io_created) {
-		fsl_destroy_mc_io(mc_dev->mc_io);
-		mc_dev->mc_io = NULL;
-	}
-
+scan_cleanup:
+	device_for_each_child(&mc_dev->dev, NULL, __fsl_mc_device_remove);
+dprc_cleanup:
+	dprc_cleanup(mc_dev);
 	return error;
 }
 
diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h
index 5519a510b8c9..e99d181ee4cd 100644
--- a/include/linux/fsl/mc.h
+++ b/include/linux/fsl/mc.h
@@ -540,6 +540,8 @@ void dprc_remove_devices(struct fsl_mc_device *mc_bus_dev,
 
 int dprc_cleanup(struct fsl_mc_device *mc_dev);
 
+int dprc_setup(struct fsl_mc_device *mc_dev);
+
 /*
  * Data Path Buffer Pool (DPBP) API
  * Contains initialization APIs and runtime control APIs for DPBP
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v5 10/13] bus/fsl_mc: Do not rely on caller to provide non NULL mc_io
  2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
                   ` (8 preceding siblings ...)
  2020-09-29  8:54 ` [PATCH v5 09/13] bus/fsl-mc: Add a container setup function Diana Craciun
@ 2020-09-29  8:54 ` Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 11/13] bus/fsl-mc: Export IRQ pool handling functions to be used by VFIO Diana Craciun
                   ` (3 subsequent siblings)
  13 siblings, 0 replies; 20+ messages in thread
From: Diana Craciun @ 2020-09-29  8:54 UTC (permalink / raw)
  To: linux-kernel, laurentiu.tudor
  Cc: gregkh, Diana Craciun, linux-arm-kernel, stuyoder, leoyang.li

Before destroying the mc_io, check first that it was
allocated.

Signed-off-by: Diana Craciun <diana.craciun@oss.nxp.com>
---
 drivers/bus/fsl-mc/mc-io.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/bus/fsl-mc/mc-io.c b/drivers/bus/fsl-mc/mc-io.c
index a30b53f1d87d..305015486b91 100644
--- a/drivers/bus/fsl-mc/mc-io.c
+++ b/drivers/bus/fsl-mc/mc-io.c
@@ -129,7 +129,12 @@ int __must_check fsl_create_mc_io(struct device *dev,
  */
 void fsl_destroy_mc_io(struct fsl_mc_io *mc_io)
 {
-	struct fsl_mc_device *dpmcp_dev = mc_io->dpmcp_dev;
+	struct fsl_mc_device *dpmcp_dev;
+
+	if (!mc_io)
+		return;
+
+	dpmcp_dev = mc_io->dpmcp_dev;
 
 	if (dpmcp_dev)
 		fsl_mc_io_unset_dpmcp(mc_io);
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v5 11/13] bus/fsl-mc: Export IRQ pool handling functions to be used by VFIO
  2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
                   ` (9 preceding siblings ...)
  2020-09-29  8:54 ` [PATCH v5 10/13] bus/fsl_mc: Do not rely on caller to provide non NULL mc_io Diana Craciun
@ 2020-09-29  8:54 ` Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 12/13] bus/fsl-mc: Extend ICID size from 16bit to 32bit Diana Craciun
                   ` (2 subsequent siblings)
  13 siblings, 0 replies; 20+ messages in thread
From: Diana Craciun @ 2020-09-29  8:54 UTC (permalink / raw)
  To: linux-kernel, laurentiu.tudor
  Cc: gregkh, Diana Craciun, linux-arm-kernel, stuyoder, leoyang.li

The IRQ pool handling functions can be used by both DPRC
driver and VFIO. Adapt and export those functions.

Signed-off-by: Diana Craciun <diana.craciun@oss.nxp.com>
---
 drivers/bus/fsl-mc/dprc-driver.c      |  8 +++-----
 drivers/bus/fsl-mc/fsl-mc-allocator.c | 12 ++++++++----
 drivers/bus/fsl-mc/fsl-mc-private.h   | 10 ----------
 include/linux/fsl/mc.h                | 11 +++++++++++
 4 files changed, 22 insertions(+), 19 deletions(-)

diff --git a/drivers/bus/fsl-mc/dprc-driver.c b/drivers/bus/fsl-mc/dprc-driver.c
index 9e4088209cfe..91dc015963a8 100644
--- a/drivers/bus/fsl-mc/dprc-driver.c
+++ b/drivers/bus/fsl-mc/dprc-driver.c
@@ -327,8 +327,8 @@ static int dprc_scan_objects(struct fsl_mc_device *mc_bus_dev,
 		}
 
 		if (alloc_interrupts && !mc_bus->irq_resources) {
-			error = fsl_mc_populate_irq_pool(mc_bus,
-				FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS);
+			error = fsl_mc_populate_irq_pool(mc_bus_dev,
+					 FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS);
 			if (error < 0)
 				return error;
 		}
@@ -766,8 +766,6 @@ static void dprc_teardown_irq(struct fsl_mc_device *mc_dev)
 int dprc_cleanup(struct fsl_mc_device *mc_dev)
 {
 	int error;
-	struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_dev);
-
 
 	/* this function should be called only for DPRCs, it
 	 * is an error to call it for regular objects
@@ -776,7 +774,7 @@ int dprc_cleanup(struct fsl_mc_device *mc_dev)
 		return -EINVAL;
 
 	if (dev_get_msi_domain(&mc_dev->dev)) {
-		fsl_mc_cleanup_irq_pool(mc_bus);
+		fsl_mc_cleanup_irq_pool(mc_dev);
 		dev_set_msi_domain(&mc_dev->dev, NULL);
 	}
 
diff --git a/drivers/bus/fsl-mc/fsl-mc-allocator.c b/drivers/bus/fsl-mc/fsl-mc-allocator.c
index cc7bb900f524..e71a6f52ea0c 100644
--- a/drivers/bus/fsl-mc/fsl-mc-allocator.c
+++ b/drivers/bus/fsl-mc/fsl-mc-allocator.c
@@ -344,7 +344,7 @@ EXPORT_SYMBOL_GPL(fsl_mc_object_free);
  * Initialize the interrupt pool associated with an fsl-mc bus.
  * It allocates a block of IRQs from the GIC-ITS.
  */
-int fsl_mc_populate_irq_pool(struct fsl_mc_bus *mc_bus,
+int fsl_mc_populate_irq_pool(struct fsl_mc_device *mc_bus_dev,
 			     unsigned int irq_count)
 {
 	unsigned int i;
@@ -352,10 +352,14 @@ int fsl_mc_populate_irq_pool(struct fsl_mc_bus *mc_bus,
 	struct fsl_mc_device_irq *irq_resources;
 	struct fsl_mc_device_irq *mc_dev_irq;
 	int error;
-	struct fsl_mc_device *mc_bus_dev = &mc_bus->mc_dev;
+	struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_bus_dev);
 	struct fsl_mc_resource_pool *res_pool =
 			&mc_bus->resource_pools[FSL_MC_POOL_IRQ];
 
+	/* do nothing if the IRQ pool is already populated */
+	if (mc_bus->irq_resources)
+		return 0;
+
 	if (irq_count == 0 ||
 	    irq_count > FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS)
 		return -EINVAL;
@@ -407,9 +411,9 @@ EXPORT_SYMBOL_GPL(fsl_mc_populate_irq_pool);
  * Teardown the interrupt pool associated with an fsl-mc bus.
  * It frees the IRQs that were allocated to the pool, back to the GIC-ITS.
  */
-void fsl_mc_cleanup_irq_pool(struct fsl_mc_bus *mc_bus)
+void fsl_mc_cleanup_irq_pool(struct fsl_mc_device *mc_bus_dev)
 {
-	struct fsl_mc_device *mc_bus_dev = &mc_bus->mc_dev;
+	struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_bus_dev);
 	struct fsl_mc_resource_pool *res_pool =
 			&mc_bus->resource_pools[FSL_MC_POOL_IRQ];
 
diff --git a/drivers/bus/fsl-mc/fsl-mc-private.h b/drivers/bus/fsl-mc/fsl-mc-private.h
index 5f7e762d517c..ffe709a3f0f8 100644
--- a/drivers/bus/fsl-mc/fsl-mc-private.h
+++ b/drivers/bus/fsl-mc/fsl-mc-private.h
@@ -519,11 +519,6 @@ struct dpcon_cmd_set_notification {
 	__le64 user_ctx;
 };
 
-/**
- * Maximum number of total IRQs that can be pre-allocated for an MC bus'
- * IRQ pool
- */
-#define FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS	256
 
 /**
  * struct fsl_mc_resource_pool - Pool of MC resources of a given
@@ -598,11 +593,6 @@ void fsl_mc_msi_domain_free_irqs(struct device *dev);
 
 struct irq_domain *fsl_mc_find_msi_domain(struct device *dev);
 
-int fsl_mc_populate_irq_pool(struct fsl_mc_bus *mc_bus,
-			     unsigned int irq_count);
-
-void fsl_mc_cleanup_irq_pool(struct fsl_mc_bus *mc_bus);
-
 int __must_check fsl_create_mc_io(struct device *dev,
 				  phys_addr_t mc_portal_phys_addr,
 				  u32 mc_portal_size,
diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h
index e99d181ee4cd..f791fe38c251 100644
--- a/include/linux/fsl/mc.h
+++ b/include/linux/fsl/mc.h
@@ -542,6 +542,17 @@ int dprc_cleanup(struct fsl_mc_device *mc_dev);
 
 int dprc_setup(struct fsl_mc_device *mc_dev);
 
+/**
+ * Maximum number of total IRQs that can be pre-allocated for an MC bus'
+ * IRQ pool
+ */
+#define FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS	256
+
+int fsl_mc_populate_irq_pool(struct fsl_mc_device *mc_bus_dev,
+			     unsigned int irq_count);
+
+void fsl_mc_cleanup_irq_pool(struct fsl_mc_device *mc_bus_dev);
+
 /*
  * Data Path Buffer Pool (DPBP) API
  * Contains initialization APIs and runtime control APIs for DPBP
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v5 12/13] bus/fsl-mc: Extend ICID size from 16bit to 32bit
  2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
                   ` (10 preceding siblings ...)
  2020-09-29  8:54 ` [PATCH v5 11/13] bus/fsl-mc: Export IRQ pool handling functions to be used by VFIO Diana Craciun
@ 2020-09-29  8:54 ` Diana Craciun
  2020-09-29  8:54 ` [PATCH v5 13/13] bus/fsl-mc: Add a new version for dprc_get_obj_region command Diana Craciun
  2020-09-29 11:06 ` [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Laurentiu Tudor
  13 siblings, 0 replies; 20+ messages in thread
From: Diana Craciun @ 2020-09-29  8:54 UTC (permalink / raw)
  To: linux-kernel, laurentiu.tudor
  Cc: stuyoder, gregkh, leoyang.li, Diana Craciun, Bharat Bhushan,
	linux-arm-kernel

From: Bharat Bhushan <Bharat.Bhushan@nxp.com>

In virtual machines the device-id range is defined
between 0x10000-0x20000. The reason for using such a
large range is to avoid overlapping with the PCI range.

Signed-off-by: Bharat Bhushan <Bharat.Bhushan@nxp.com>
Signed-off-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
Signed-off-by: Diana Craciun <diana.craciun@oss.nxp.com>
---
 drivers/bus/fsl-mc/dprc.c           | 2 +-
 drivers/bus/fsl-mc/fsl-mc-bus.c     | 2 +-
 drivers/bus/fsl-mc/fsl-mc-private.h | 5 ++---
 include/linux/fsl/mc.h              | 2 +-
 4 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/bus/fsl-mc/dprc.c b/drivers/bus/fsl-mc/dprc.c
index 2448a723eb28..650808799a29 100644
--- a/drivers/bus/fsl-mc/dprc.c
+++ b/drivers/bus/fsl-mc/dprc.c
@@ -360,7 +360,7 @@ int dprc_get_attributes(struct fsl_mc_io *mc_io,
 	/* retrieve response parameters */
 	rsp_params = (struct dprc_rsp_get_attributes *)cmd.params;
 	attr->container_id = le32_to_cpu(rsp_params->container_id);
-	attr->icid = le16_to_cpu(rsp_params->icid);
+	attr->icid = le32_to_cpu(rsp_params->icid);
 	attr->options = le32_to_cpu(rsp_params->options);
 	attr->portal_id = le32_to_cpu(rsp_params->portal_id);
 
diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c
index 32f194814b08..d375bb585749 100644
--- a/drivers/bus/fsl-mc/fsl-mc-bus.c
+++ b/drivers/bus/fsl-mc/fsl-mc-bus.c
@@ -503,7 +503,7 @@ static int get_dprc_attr(struct fsl_mc_io *mc_io,
 }
 
 static int get_dprc_icid(struct fsl_mc_io *mc_io,
-			 int container_id, u16 *icid)
+			 int container_id, u32 *icid)
 {
 	struct dprc_attributes attr;
 	int error;
diff --git a/drivers/bus/fsl-mc/fsl-mc-private.h b/drivers/bus/fsl-mc/fsl-mc-private.h
index ffe709a3f0f8..3e9f9c778631 100644
--- a/drivers/bus/fsl-mc/fsl-mc-private.h
+++ b/drivers/bus/fsl-mc/fsl-mc-private.h
@@ -159,8 +159,7 @@ struct dprc_cmd_clear_irq_status {
 struct dprc_rsp_get_attributes {
 	/* response word 0 */
 	__le32 container_id;
-	__le16 icid;
-	__le16 pad;
+	__le32 icid;
 	/* response word 1 */
 	__le32 options;
 	__le32 portal_id;
@@ -337,7 +336,7 @@ int dprc_clear_irq_status(struct fsl_mc_io *mc_io,
  */
 struct dprc_attributes {
 	int container_id;
-	u16 icid;
+	u32 icid;
 	int portal_id;
 	u64 options;
 };
diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h
index f791fe38c251..db244874e834 100644
--- a/include/linux/fsl/mc.h
+++ b/include/linux/fsl/mc.h
@@ -195,7 +195,7 @@ struct fsl_mc_device {
 	struct device dev;
 	u64 dma_mask;
 	u16 flags;
-	u16 icid;
+	u32 icid;
 	u16 mc_handle;
 	struct fsl_mc_io *mc_io;
 	struct fsl_mc_obj_desc obj_desc;
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v5 13/13] bus/fsl-mc: Add a new version for dprc_get_obj_region command
  2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
                   ` (11 preceding siblings ...)
  2020-09-29  8:54 ` [PATCH v5 12/13] bus/fsl-mc: Extend ICID size from 16bit to 32bit Diana Craciun
@ 2020-09-29  8:54 ` Diana Craciun
  2020-09-29 11:06 ` [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Laurentiu Tudor
  13 siblings, 0 replies; 20+ messages in thread
From: Diana Craciun @ 2020-09-29  8:54 UTC (permalink / raw)
  To: linux-kernel, laurentiu.tudor
  Cc: gregkh, Diana Craciun, linux-arm-kernel, stuyoder, leoyang.li

The region size reported by the firmware for mc and software
portals was less than allocated by the hardware. This may be
problematic when mmapping the region in user space because the
region size is less than page size. However the size as reserved
by the hardware is 64K.

Signed-off-by: Diana Craciun <diana.craciun@oss.nxp.com>
---
 drivers/bus/fsl-mc/dprc.c           | 38 ++++++++++++++++++-----------
 drivers/bus/fsl-mc/fsl-mc-private.h |  3 +++
 2 files changed, 27 insertions(+), 14 deletions(-)

diff --git a/drivers/bus/fsl-mc/dprc.c b/drivers/bus/fsl-mc/dprc.c
index 650808799a29..57b097caf255 100644
--- a/drivers/bus/fsl-mc/dprc.c
+++ b/drivers/bus/fsl-mc/dprc.c
@@ -536,20 +536,30 @@ int dprc_get_obj_region(struct fsl_mc_io *mc_io,
 			return err;
 	}
 
-	/**
-	 * MC API version 6.3 introduced a new field to the region
-	 * descriptor: base_address. If the older API is in use then the base
-	 * address is set to zero to indicate it needs to be obtained elsewhere
-	 * (typically the device tree).
-	 */
-	if (dprc_major_ver > 6 || (dprc_major_ver == 6 && dprc_minor_ver >= 3))
-		cmd.header =
-			mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG_V2,
-					     cmd_flags, token);
-	else
-		cmd.header =
-			mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG,
-					     cmd_flags, token);
+	if (dprc_major_ver > 6 || (dprc_major_ver == 6 && dprc_minor_ver >= 6)) {
+		/*
+		 * MC API version 6.6 changed the size of the MC portals and software
+		 * portals to 64K (as implemented by hardware). If older API is in use the
+		 * size reported is less (64 bytes for mc portals and 4K for software
+		 * portals).
+		 */
+
+		cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG_V3,
+						  cmd_flags, token);
+
+	} else if (dprc_major_ver == 6 && dprc_minor_ver >= 3) {
+		/*
+		 * MC API version 6.3 introduced a new field to the region
+		 * descriptor: base_address. If the older API is in use then the base
+		 * address is set to zero to indicate it needs to be obtained elsewhere
+		 * (typically the device tree).
+		 */
+		cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG_V2,
+						  cmd_flags, token);
+	} else {
+		cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG,
+						  cmd_flags, token);
+	}
 
 	cmd_params = (struct dprc_cmd_get_obj_region *)cmd.params;
 	cmd_params->obj_id = cpu_to_le32(obj_id);
diff --git a/drivers/bus/fsl-mc/fsl-mc-private.h b/drivers/bus/fsl-mc/fsl-mc-private.h
index 3e9f9c778631..85ca5fdee581 100644
--- a/drivers/bus/fsl-mc/fsl-mc-private.h
+++ b/drivers/bus/fsl-mc/fsl-mc-private.h
@@ -80,10 +80,12 @@ int dpmcp_reset(struct fsl_mc_io *mc_io,
 /* DPRC command versioning */
 #define DPRC_CMD_BASE_VERSION			1
 #define DPRC_CMD_2ND_VERSION			2
+#define DPRC_CMD_3RD_VERSION			3
 #define DPRC_CMD_ID_OFFSET			4
 
 #define DPRC_CMD(id)	(((id) << DPRC_CMD_ID_OFFSET) | DPRC_CMD_BASE_VERSION)
 #define DPRC_CMD_V2(id)	(((id) << DPRC_CMD_ID_OFFSET) | DPRC_CMD_2ND_VERSION)
+#define DPRC_CMD_V3(id)	(((id) << DPRC_CMD_ID_OFFSET) | DPRC_CMD_3RD_VERSION)
 
 /* DPRC command IDs */
 #define DPRC_CMDID_CLOSE                        DPRC_CMD(0x800)
@@ -105,6 +107,7 @@ int dpmcp_reset(struct fsl_mc_io *mc_io,
 #define DPRC_CMDID_GET_OBJ                      DPRC_CMD(0x15A)
 #define DPRC_CMDID_GET_OBJ_REG                  DPRC_CMD(0x15E)
 #define DPRC_CMDID_GET_OBJ_REG_V2               DPRC_CMD_V2(0x15E)
+#define DPRC_CMDID_GET_OBJ_REG_V3               DPRC_CMD_V3(0x15E)
 #define DPRC_CMDID_SET_OBJ_IRQ                  DPRC_CMD(0x15F)
 
 #define DPRC_CMDID_GET_CONNECTION               DPRC_CMD(0x16C)
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support
  2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
                   ` (12 preceding siblings ...)
  2020-09-29  8:54 ` [PATCH v5 13/13] bus/fsl-mc: Add a new version for dprc_get_obj_region command Diana Craciun
@ 2020-09-29 11:06 ` Laurentiu Tudor
  2020-10-02 13:55   ` Greg KH
  13 siblings, 1 reply; 20+ messages in thread
From: Laurentiu Tudor @ 2020-09-29 11:06 UTC (permalink / raw)
  To: Diana Craciun, linux-kernel
  Cc: gregkh, linux-arm-kernel, stuyoder, leoyang.li



On 9/29/2020 11:54 AM, Diana Craciun wrote:
> The vfio-mc bus driver needs some additional services to be exported by the
> mc-bus driver like:
> - a way to reset the DPRC container
> - driver_override support
> - functions to setup/tear down a DPRC
> - functions for allocating the pool of interrupts. In case of VFIO the
> interrupts are not configured at probe time, but later by userspace
> request
> 
> v4 -> v5
> - dprc_celanup should not fail
> 
> v3 -> v4
> - Rebased on the latest kernel.
> - Exported a dprc_remove function
> 
> v2 -> v3
> - Add a new version for dprc_get_obj_region
> - Export the cacheability bus specific bits defines
> 
> v1 -> v2
> - Remove driver_override propagation through various functions
> - Cache the DPRC API version
> 
> The patches are related with "vfio/fsl-mc: VFIO support for FSL-MC
> devices" patches, but the series were split because they are targeting
> different subsystems. However, the mc-bus patches may suffer changes
> when addressing the VFIO review comments.
> 
> The patches do not address the comment regarding moving driver_override
> in the core code. I prefer not to tie these patches on that change and
> address that separately.
> 
> Bharat Bhushan (3):
>   bus/fsl-mc: add support for 'driver_override' in the mc-bus
>   bus/fsl-mc: Add dprc-reset-container support
>   bus/fsl-mc: Extend ICID size from 16bit to 32bit
> 
> Diana Craciun (10):
>   bus/fsl-mc: Do no longer export the total number of irqs outside
>     dprc_scan_objects
>   bus/fsl-mc: Add a new parameter to dprc_scan_objects function
>   bus/fsl-mc: Set the QMAN/BMAN region flags
>   bus/fsl-mc: Cache the DPRC API version
>   bus/fsl-mc: Export dprc_scan/dprc_remove functions to be used by
>     multiple entities
>   bus/fsl-mc: Export a cleanup function for DPRC
>   bus/fsl-mc: Add a container setup function
>   bus/fsl_mc: Do not rely on caller to provide non NULL mc_io
>   bus/fsl-mc: Export IRQ pool handling functions to be used by VFIO
>   bus/fsl-mc: Add a new version for dprc_get_obj_region command
> 
>  drivers/bus/fsl-mc/dprc-driver.c      | 190 ++++++++++++++++----------
>  drivers/bus/fsl-mc/dprc.c             | 141 +++++++++++++++----
>  drivers/bus/fsl-mc/fsl-mc-allocator.c |  12 +-
>  drivers/bus/fsl-mc/fsl-mc-bus.c       |  64 ++++++++-
>  drivers/bus/fsl-mc/fsl-mc-private.h   |  31 ++---
>  drivers/bus/fsl-mc/mc-io.c            |   7 +-
>  include/linux/fsl/mc.h                |  41 +++++-
>  7 files changed, 359 insertions(+), 127 deletions(-)
> 

For the series:
Reviewed-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
Acked-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>

---
Best Regards, Laurentiu

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support
  2020-09-29 11:06 ` [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Laurentiu Tudor
@ 2020-10-02 13:55   ` Greg KH
  2020-10-02 13:56     ` Laurentiu Tudor
  0 siblings, 1 reply; 20+ messages in thread
From: Greg KH @ 2020-10-02 13:55 UTC (permalink / raw)
  To: Laurentiu Tudor
  Cc: linux-arm-kernel, leoyang.li, linux-kernel, stuyoder, Diana Craciun

On Tue, Sep 29, 2020 at 02:06:41PM +0300, Laurentiu Tudor wrote:
> 
> 
> On 9/29/2020 11:54 AM, Diana Craciun wrote:
> > The vfio-mc bus driver needs some additional services to be exported by the
> > mc-bus driver like:
> > - a way to reset the DPRC container
> > - driver_override support
> > - functions to setup/tear down a DPRC
> > - functions for allocating the pool of interrupts. In case of VFIO the
> > interrupts are not configured at probe time, but later by userspace
> > request
> > 
> > v4 -> v5
> > - dprc_celanup should not fail
> > 
> > v3 -> v4
> > - Rebased on the latest kernel.
> > - Exported a dprc_remove function
> > 
> > v2 -> v3
> > - Add a new version for dprc_get_obj_region
> > - Export the cacheability bus specific bits defines
> > 
> > v1 -> v2
> > - Remove driver_override propagation through various functions
> > - Cache the DPRC API version
> > 
> > The patches are related with "vfio/fsl-mc: VFIO support for FSL-MC
> > devices" patches, but the series were split because they are targeting
> > different subsystems. However, the mc-bus patches may suffer changes
> > when addressing the VFIO review comments.
> > 
> > The patches do not address the comment regarding moving driver_override
> > in the core code. I prefer not to tie these patches on that change and
> > address that separately.
> > 
> > Bharat Bhushan (3):
> >   bus/fsl-mc: add support for 'driver_override' in the mc-bus
> >   bus/fsl-mc: Add dprc-reset-container support
> >   bus/fsl-mc: Extend ICID size from 16bit to 32bit
> > 
> > Diana Craciun (10):
> >   bus/fsl-mc: Do no longer export the total number of irqs outside
> >     dprc_scan_objects
> >   bus/fsl-mc: Add a new parameter to dprc_scan_objects function
> >   bus/fsl-mc: Set the QMAN/BMAN region flags
> >   bus/fsl-mc: Cache the DPRC API version
> >   bus/fsl-mc: Export dprc_scan/dprc_remove functions to be used by
> >     multiple entities
> >   bus/fsl-mc: Export a cleanup function for DPRC
> >   bus/fsl-mc: Add a container setup function
> >   bus/fsl_mc: Do not rely on caller to provide non NULL mc_io
> >   bus/fsl-mc: Export IRQ pool handling functions to be used by VFIO
> >   bus/fsl-mc: Add a new version for dprc_get_obj_region command
> > 
> >  drivers/bus/fsl-mc/dprc-driver.c      | 190 ++++++++++++++++----------
> >  drivers/bus/fsl-mc/dprc.c             | 141 +++++++++++++++----
> >  drivers/bus/fsl-mc/fsl-mc-allocator.c |  12 +-
> >  drivers/bus/fsl-mc/fsl-mc-bus.c       |  64 ++++++++-
> >  drivers/bus/fsl-mc/fsl-mc-private.h   |  31 ++---
> >  drivers/bus/fsl-mc/mc-io.c            |   7 +-
> >  include/linux/fsl/mc.h                |  41 +++++-
> >  7 files changed, 359 insertions(+), 127 deletions(-)
> > 
> 
> For the series:
> Reviewed-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
> Acked-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>

Do you want me to take these patches in my tree, or are they going to
Linus some other way?

thanks,

greg k-h

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support
  2020-10-02 13:55   ` Greg KH
@ 2020-10-02 13:56     ` Laurentiu Tudor
  2020-10-02 14:05       ` Greg KH
  0 siblings, 1 reply; 20+ messages in thread
From: Laurentiu Tudor @ 2020-10-02 13:56 UTC (permalink / raw)
  To: Greg KH
  Cc: linux-arm-kernel, leoyang.li, linux-kernel, stuyoder, Diana Craciun

Hi Greg,

On 10/2/2020 4:55 PM, Greg KH wrote:
> On Tue, Sep 29, 2020 at 02:06:41PM +0300, Laurentiu Tudor wrote:
>>
>>
>> On 9/29/2020 11:54 AM, Diana Craciun wrote:
>>> The vfio-mc bus driver needs some additional services to be exported by the
>>> mc-bus driver like:
>>> - a way to reset the DPRC container
>>> - driver_override support
>>> - functions to setup/tear down a DPRC
>>> - functions for allocating the pool of interrupts. In case of VFIO the
>>> interrupts are not configured at probe time, but later by userspace
>>> request
>>>
>>> v4 -> v5
>>> - dprc_celanup should not fail
>>>
>>> v3 -> v4
>>> - Rebased on the latest kernel.
>>> - Exported a dprc_remove function
>>>
>>> v2 -> v3
>>> - Add a new version for dprc_get_obj_region
>>> - Export the cacheability bus specific bits defines
>>>
>>> v1 -> v2
>>> - Remove driver_override propagation through various functions
>>> - Cache the DPRC API version
>>>
>>> The patches are related with "vfio/fsl-mc: VFIO support for FSL-MC
>>> devices" patches, but the series were split because they are targeting
>>> different subsystems. However, the mc-bus patches may suffer changes
>>> when addressing the VFIO review comments.
>>>
>>> The patches do not address the comment regarding moving driver_override
>>> in the core code. I prefer not to tie these patches on that change and
>>> address that separately.
>>>
>>> Bharat Bhushan (3):
>>>   bus/fsl-mc: add support for 'driver_override' in the mc-bus
>>>   bus/fsl-mc: Add dprc-reset-container support
>>>   bus/fsl-mc: Extend ICID size from 16bit to 32bit
>>>
>>> Diana Craciun (10):
>>>   bus/fsl-mc: Do no longer export the total number of irqs outside
>>>     dprc_scan_objects
>>>   bus/fsl-mc: Add a new parameter to dprc_scan_objects function
>>>   bus/fsl-mc: Set the QMAN/BMAN region flags
>>>   bus/fsl-mc: Cache the DPRC API version
>>>   bus/fsl-mc: Export dprc_scan/dprc_remove functions to be used by
>>>     multiple entities
>>>   bus/fsl-mc: Export a cleanup function for DPRC
>>>   bus/fsl-mc: Add a container setup function
>>>   bus/fsl_mc: Do not rely on caller to provide non NULL mc_io
>>>   bus/fsl-mc: Export IRQ pool handling functions to be used by VFIO
>>>   bus/fsl-mc: Add a new version for dprc_get_obj_region command
>>>
>>>  drivers/bus/fsl-mc/dprc-driver.c      | 190 ++++++++++++++++----------
>>>  drivers/bus/fsl-mc/dprc.c             | 141 +++++++++++++++----
>>>  drivers/bus/fsl-mc/fsl-mc-allocator.c |  12 +-
>>>  drivers/bus/fsl-mc/fsl-mc-bus.c       |  64 ++++++++-
>>>  drivers/bus/fsl-mc/fsl-mc-private.h   |  31 ++---
>>>  drivers/bus/fsl-mc/mc-io.c            |   7 +-
>>>  include/linux/fsl/mc.h                |  41 +++++-
>>>  7 files changed, 359 insertions(+), 127 deletions(-)
>>>
>>
>> For the series:
>> Reviewed-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
>> Acked-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
> 
> Do you want me to take these patches in my tree, or are they going to
> Linus some other way?

I'm prefectly fine with you picking up the patches through your tree.

---
Thanks & Best Regards, Laurentiu

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support
  2020-10-02 13:56     ` Laurentiu Tudor
@ 2020-10-02 14:05       ` Greg KH
  2020-10-15  2:27         ` Alex Williamson
  0 siblings, 1 reply; 20+ messages in thread
From: Greg KH @ 2020-10-02 14:05 UTC (permalink / raw)
  To: Laurentiu Tudor
  Cc: linux-arm-kernel, leoyang.li, linux-kernel, stuyoder, Diana Craciun

On Fri, Oct 02, 2020 at 04:56:52PM +0300, Laurentiu Tudor wrote:
> Hi Greg,
> 
> On 10/2/2020 4:55 PM, Greg KH wrote:
> > On Tue, Sep 29, 2020 at 02:06:41PM +0300, Laurentiu Tudor wrote:
> >>
> >>
> >> On 9/29/2020 11:54 AM, Diana Craciun wrote:
> >>> The vfio-mc bus driver needs some additional services to be exported by the
> >>> mc-bus driver like:
> >>> - a way to reset the DPRC container
> >>> - driver_override support
> >>> - functions to setup/tear down a DPRC
> >>> - functions for allocating the pool of interrupts. In case of VFIO the
> >>> interrupts are not configured at probe time, but later by userspace
> >>> request
> >>>
> >>> v4 -> v5
> >>> - dprc_celanup should not fail
> >>>
> >>> v3 -> v4
> >>> - Rebased on the latest kernel.
> >>> - Exported a dprc_remove function
> >>>
> >>> v2 -> v3
> >>> - Add a new version for dprc_get_obj_region
> >>> - Export the cacheability bus specific bits defines
> >>>
> >>> v1 -> v2
> >>> - Remove driver_override propagation through various functions
> >>> - Cache the DPRC API version
> >>>
> >>> The patches are related with "vfio/fsl-mc: VFIO support for FSL-MC
> >>> devices" patches, but the series were split because they are targeting
> >>> different subsystems. However, the mc-bus patches may suffer changes
> >>> when addressing the VFIO review comments.
> >>>
> >>> The patches do not address the comment regarding moving driver_override
> >>> in the core code. I prefer not to tie these patches on that change and
> >>> address that separately.
> >>>
> >>> Bharat Bhushan (3):
> >>>   bus/fsl-mc: add support for 'driver_override' in the mc-bus
> >>>   bus/fsl-mc: Add dprc-reset-container support
> >>>   bus/fsl-mc: Extend ICID size from 16bit to 32bit
> >>>
> >>> Diana Craciun (10):
> >>>   bus/fsl-mc: Do no longer export the total number of irqs outside
> >>>     dprc_scan_objects
> >>>   bus/fsl-mc: Add a new parameter to dprc_scan_objects function
> >>>   bus/fsl-mc: Set the QMAN/BMAN region flags
> >>>   bus/fsl-mc: Cache the DPRC API version
> >>>   bus/fsl-mc: Export dprc_scan/dprc_remove functions to be used by
> >>>     multiple entities
> >>>   bus/fsl-mc: Export a cleanup function for DPRC
> >>>   bus/fsl-mc: Add a container setup function
> >>>   bus/fsl_mc: Do not rely on caller to provide non NULL mc_io
> >>>   bus/fsl-mc: Export IRQ pool handling functions to be used by VFIO
> >>>   bus/fsl-mc: Add a new version for dprc_get_obj_region command
> >>>
> >>>  drivers/bus/fsl-mc/dprc-driver.c      | 190 ++++++++++++++++----------
> >>>  drivers/bus/fsl-mc/dprc.c             | 141 +++++++++++++++----
> >>>  drivers/bus/fsl-mc/fsl-mc-allocator.c |  12 +-
> >>>  drivers/bus/fsl-mc/fsl-mc-bus.c       |  64 ++++++++-
> >>>  drivers/bus/fsl-mc/fsl-mc-private.h   |  31 ++---
> >>>  drivers/bus/fsl-mc/mc-io.c            |   7 +-
> >>>  include/linux/fsl/mc.h                |  41 +++++-
> >>>  7 files changed, 359 insertions(+), 127 deletions(-)
> >>>
> >>
> >> For the series:
> >> Reviewed-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
> >> Acked-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
> > 
> > Do you want me to take these patches in my tree, or are they going to
> > Linus some other way?
> 
> I'm prefectly fine with you picking up the patches through your tree.

Great, now queued up.

greg k-h

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support
  2020-10-02 14:05       ` Greg KH
@ 2020-10-15  2:27         ` Alex Williamson
  2020-10-15 17:27           ` Greg KH
  0 siblings, 1 reply; 20+ messages in thread
From: Alex Williamson @ 2020-10-15  2:27 UTC (permalink / raw)
  To: Greg KH
  Cc: stuyoder, linux-kernel, leoyang.li, Diana Craciun,
	linux-arm-kernel, Laurentiu Tudor

On Fri, 2 Oct 2020 16:05:49 +0200
Greg KH <gregkh@linuxfoundation.org> wrote:

> On Fri, Oct 02, 2020 at 04:56:52PM +0300, Laurentiu Tudor wrote:
> > Hi Greg,
> > 
> > On 10/2/2020 4:55 PM, Greg KH wrote:  
> > > On Tue, Sep 29, 2020 at 02:06:41PM +0300, Laurentiu Tudor wrote:  
> > >>
> > >>
> > >> On 9/29/2020 11:54 AM, Diana Craciun wrote:  
> > >>> The vfio-mc bus driver needs some additional services to be exported by the
> > >>> mc-bus driver like:
> > >>> - a way to reset the DPRC container
> > >>> - driver_override support
> > >>> - functions to setup/tear down a DPRC
> > >>> - functions for allocating the pool of interrupts. In case of VFIO the
> > >>> interrupts are not configured at probe time, but later by userspace
> > >>> request
> > >>>
> > >>> v4 -> v5
> > >>> - dprc_celanup should not fail
> > >>>
> > >>> v3 -> v4
> > >>> - Rebased on the latest kernel.
> > >>> - Exported a dprc_remove function
> > >>>
> > >>> v2 -> v3
> > >>> - Add a new version for dprc_get_obj_region
> > >>> - Export the cacheability bus specific bits defines
> > >>>
> > >>> v1 -> v2
> > >>> - Remove driver_override propagation through various functions
> > >>> - Cache the DPRC API version
> > >>>
> > >>> The patches are related with "vfio/fsl-mc: VFIO support for FSL-MC
> > >>> devices" patches, but the series were split because they are targeting
> > >>> different subsystems. However, the mc-bus patches may suffer changes
> > >>> when addressing the VFIO review comments.
> > >>>
> > >>> The patches do not address the comment regarding moving driver_override
> > >>> in the core code. I prefer not to tie these patches on that change and
> > >>> address that separately.
> > >>>
> > >>> Bharat Bhushan (3):
> > >>>   bus/fsl-mc: add support for 'driver_override' in the mc-bus
> > >>>   bus/fsl-mc: Add dprc-reset-container support
> > >>>   bus/fsl-mc: Extend ICID size from 16bit to 32bit
> > >>>
> > >>> Diana Craciun (10):
> > >>>   bus/fsl-mc: Do no longer export the total number of irqs outside
> > >>>     dprc_scan_objects
> > >>>   bus/fsl-mc: Add a new parameter to dprc_scan_objects function
> > >>>   bus/fsl-mc: Set the QMAN/BMAN region flags
> > >>>   bus/fsl-mc: Cache the DPRC API version
> > >>>   bus/fsl-mc: Export dprc_scan/dprc_remove functions to be used by
> > >>>     multiple entities
> > >>>   bus/fsl-mc: Export a cleanup function for DPRC
> > >>>   bus/fsl-mc: Add a container setup function
> > >>>   bus/fsl_mc: Do not rely on caller to provide non NULL mc_io
> > >>>   bus/fsl-mc: Export IRQ pool handling functions to be used by VFIO
> > >>>   bus/fsl-mc: Add a new version for dprc_get_obj_region command
> > >>>
> > >>>  drivers/bus/fsl-mc/dprc-driver.c      | 190 ++++++++++++++++----------
> > >>>  drivers/bus/fsl-mc/dprc.c             | 141 +++++++++++++++----
> > >>>  drivers/bus/fsl-mc/fsl-mc-allocator.c |  12 +-
> > >>>  drivers/bus/fsl-mc/fsl-mc-bus.c       |  64 ++++++++-
> > >>>  drivers/bus/fsl-mc/fsl-mc-private.h   |  31 ++---
> > >>>  drivers/bus/fsl-mc/mc-io.c            |   7 +-
> > >>>  include/linux/fsl/mc.h                |  41 +++++-
> > >>>  7 files changed, 359 insertions(+), 127 deletions(-)
> > >>>  
> > >>
> > >> For the series:
> > >> Reviewed-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
> > >> Acked-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>  
> > > 
> > > Do you want me to take these patches in my tree, or are they going to
> > > Linus some other way?  
> > 
> > I'm prefectly fine with you picking up the patches through your tree.  
> 
> Great, now queued up.

Hi Greg,

Diana has a vfio bus driver for fsl-mc devices queued up in my tree as
well.  After a linux-next build failure due to our branches being
applied in the wrong order, Stephen advised that the proper way to
handle this is to merge a shared branch with this series.  Do you have
a pull request imminent with this series or if not, would you mind
pushing such a branch?  Thanks,

Alex


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support
  2020-10-15  2:27         ` Alex Williamson
@ 2020-10-15 17:27           ` Greg KH
  0 siblings, 0 replies; 20+ messages in thread
From: Greg KH @ 2020-10-15 17:27 UTC (permalink / raw)
  To: Alex Williamson
  Cc: stuyoder, linux-kernel, leoyang.li, Diana Craciun,
	linux-arm-kernel, Laurentiu Tudor

On Wed, Oct 14, 2020 at 08:27:42PM -0600, Alex Williamson wrote:
> On Fri, 2 Oct 2020 16:05:49 +0200
> Greg KH <gregkh@linuxfoundation.org> wrote:
> 
> > On Fri, Oct 02, 2020 at 04:56:52PM +0300, Laurentiu Tudor wrote:
> > > Hi Greg,
> > > 
> > > On 10/2/2020 4:55 PM, Greg KH wrote:  
> > > > On Tue, Sep 29, 2020 at 02:06:41PM +0300, Laurentiu Tudor wrote:  
> > > >>
> > > >>
> > > >> On 9/29/2020 11:54 AM, Diana Craciun wrote:  
> > > >>> The vfio-mc bus driver needs some additional services to be exported by the
> > > >>> mc-bus driver like:
> > > >>> - a way to reset the DPRC container
> > > >>> - driver_override support
> > > >>> - functions to setup/tear down a DPRC
> > > >>> - functions for allocating the pool of interrupts. In case of VFIO the
> > > >>> interrupts are not configured at probe time, but later by userspace
> > > >>> request
> > > >>>
> > > >>> v4 -> v5
> > > >>> - dprc_celanup should not fail
> > > >>>
> > > >>> v3 -> v4
> > > >>> - Rebased on the latest kernel.
> > > >>> - Exported a dprc_remove function
> > > >>>
> > > >>> v2 -> v3
> > > >>> - Add a new version for dprc_get_obj_region
> > > >>> - Export the cacheability bus specific bits defines
> > > >>>
> > > >>> v1 -> v2
> > > >>> - Remove driver_override propagation through various functions
> > > >>> - Cache the DPRC API version
> > > >>>
> > > >>> The patches are related with "vfio/fsl-mc: VFIO support for FSL-MC
> > > >>> devices" patches, but the series were split because they are targeting
> > > >>> different subsystems. However, the mc-bus patches may suffer changes
> > > >>> when addressing the VFIO review comments.
> > > >>>
> > > >>> The patches do not address the comment regarding moving driver_override
> > > >>> in the core code. I prefer not to tie these patches on that change and
> > > >>> address that separately.
> > > >>>
> > > >>> Bharat Bhushan (3):
> > > >>>   bus/fsl-mc: add support for 'driver_override' in the mc-bus
> > > >>>   bus/fsl-mc: Add dprc-reset-container support
> > > >>>   bus/fsl-mc: Extend ICID size from 16bit to 32bit
> > > >>>
> > > >>> Diana Craciun (10):
> > > >>>   bus/fsl-mc: Do no longer export the total number of irqs outside
> > > >>>     dprc_scan_objects
> > > >>>   bus/fsl-mc: Add a new parameter to dprc_scan_objects function
> > > >>>   bus/fsl-mc: Set the QMAN/BMAN region flags
> > > >>>   bus/fsl-mc: Cache the DPRC API version
> > > >>>   bus/fsl-mc: Export dprc_scan/dprc_remove functions to be used by
> > > >>>     multiple entities
> > > >>>   bus/fsl-mc: Export a cleanup function for DPRC
> > > >>>   bus/fsl-mc: Add a container setup function
> > > >>>   bus/fsl_mc: Do not rely on caller to provide non NULL mc_io
> > > >>>   bus/fsl-mc: Export IRQ pool handling functions to be used by VFIO
> > > >>>   bus/fsl-mc: Add a new version for dprc_get_obj_region command
> > > >>>
> > > >>>  drivers/bus/fsl-mc/dprc-driver.c      | 190 ++++++++++++++++----------
> > > >>>  drivers/bus/fsl-mc/dprc.c             | 141 +++++++++++++++----
> > > >>>  drivers/bus/fsl-mc/fsl-mc-allocator.c |  12 +-
> > > >>>  drivers/bus/fsl-mc/fsl-mc-bus.c       |  64 ++++++++-
> > > >>>  drivers/bus/fsl-mc/fsl-mc-private.h   |  31 ++---
> > > >>>  drivers/bus/fsl-mc/mc-io.c            |   7 +-
> > > >>>  include/linux/fsl/mc.h                |  41 +++++-
> > > >>>  7 files changed, 359 insertions(+), 127 deletions(-)
> > > >>>  
> > > >>
> > > >> For the series:
> > > >> Reviewed-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
> > > >> Acked-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>  
> > > > 
> > > > Do you want me to take these patches in my tree, or are they going to
> > > > Linus some other way?  
> > > 
> > > I'm prefectly fine with you picking up the patches through your tree.  
> > 
> > Great, now queued up.
> 
> Hi Greg,
> 
> Diana has a vfio bus driver for fsl-mc devices queued up in my tree as
> well.  After a linux-next build failure due to our branches being
> applied in the wrong order, Stephen advised that the proper way to
> handle this is to merge a shared branch with this series.  Do you have
> a pull request imminent with this series or if not, would you mind
> pushing such a branch?  Thanks,

This should all now be in Linus's tree, so I don't think you need any
shared branch anymore :)

thanks,

greg k-h

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2020-10-15 17:28 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-29  8:54 [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Diana Craciun
2020-09-29  8:54 ` [PATCH v5 01/13] bus/fsl-mc: Do no longer export the total number of irqs outside dprc_scan_objects Diana Craciun
2020-09-29  8:54 ` [PATCH v5 02/13] bus/fsl-mc: Add a new parameter to dprc_scan_objects function Diana Craciun
2020-09-29  8:54 ` [PATCH v5 03/13] bus/fsl-mc: add support for 'driver_override' in the mc-bus Diana Craciun
2020-09-29  8:54 ` [PATCH v5 04/13] bus/fsl-mc: Set the QMAN/BMAN region flags Diana Craciun
2020-09-29  8:54 ` [PATCH v5 05/13] bus/fsl-mc: Cache the DPRC API version Diana Craciun
2020-09-29  8:54 ` [PATCH v5 06/13] bus/fsl-mc: Add dprc-reset-container support Diana Craciun
2020-09-29  8:54 ` [PATCH v5 07/13] bus/fsl-mc: Export dprc_scan/dprc_remove functions to be used by multiple entities Diana Craciun
2020-09-29  8:54 ` [PATCH v5 08/13] bus/fsl-mc: Export a cleanup function for DPRC Diana Craciun
2020-09-29  8:54 ` [PATCH v5 09/13] bus/fsl-mc: Add a container setup function Diana Craciun
2020-09-29  8:54 ` [PATCH v5 10/13] bus/fsl_mc: Do not rely on caller to provide non NULL mc_io Diana Craciun
2020-09-29  8:54 ` [PATCH v5 11/13] bus/fsl-mc: Export IRQ pool handling functions to be used by VFIO Diana Craciun
2020-09-29  8:54 ` [PATCH v5 12/13] bus/fsl-mc: Extend ICID size from 16bit to 32bit Diana Craciun
2020-09-29  8:54 ` [PATCH v5 13/13] bus/fsl-mc: Add a new version for dprc_get_obj_region command Diana Craciun
2020-09-29 11:06 ` [PATCH v5 00/13] bus/fsl-mc: Extend mc-bus driver functionalities in preparation for mc-bus VFIO support Laurentiu Tudor
2020-10-02 13:55   ` Greg KH
2020-10-02 13:56     ` Laurentiu Tudor
2020-10-02 14:05       ` Greg KH
2020-10-15  2:27         ` Alex Williamson
2020-10-15 17:27           ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).