All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] bus: fsl-mc: scattered updates
@ 2020-07-17 15:47 Ioana Ciornei
  2020-07-17 15:47 ` [PATCH 1/3] bus: fsl-mc: add missing device types Ioana Ciornei
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Ioana Ciornei @ 2020-07-17 15:47 UTC (permalink / raw)
  To: gregkh, linux-kernel; +Cc: laurentiu.tudor, Ioana Ciornei

This patch set adds some scattered updates to the fsl-mc bus: first we
add some missing device types that can be found on the bus, then there
is a change needed for the PREEMPT_RT variant and the probe order for the
newly added objects on the fsl-mc bus is changed so that allocatable
objects are probed at first since they are being used by any other
driver.

Grigore Popescu (1):
  bus: fsl-mc: probe the allocatable objects first

Ioana Ciornei (1):
  bus: fsl-mc: add missing device types

Laurentiu Tudor (1):
  bus: fsl-mc: use raw spin lock to serialize mc cmds

 drivers/bus/fsl-mc/dprc-driver.c | 57 ++++++++++++++++++++++----------
 drivers/bus/fsl-mc/fsl-mc-bus.c  | 30 +++++++++++++++++
 drivers/bus/fsl-mc/mc-io.c       |  2 +-
 drivers/bus/fsl-mc/mc-sys.c      |  4 +--
 include/linux/fsl/mc.h           | 32 +++++++++++++++++-
 5 files changed, 104 insertions(+), 21 deletions(-)

-- 
2.25.1


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

* [PATCH 1/3] bus: fsl-mc: add missing device types
  2020-07-17 15:47 [PATCH 0/3] bus: fsl-mc: scattered updates Ioana Ciornei
@ 2020-07-17 15:47 ` Ioana Ciornei
  2020-07-17 15:47 ` [PATCH 2/3] bus: fsl-mc: use raw spin lock to serialize mc cmds Ioana Ciornei
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Ioana Ciornei @ 2020-07-17 15:47 UTC (permalink / raw)
  To: gregkh, linux-kernel; +Cc: laurentiu.tudor, Ioana Ciornei

The MC bus has different types of devices that can be discovered on the
bus. Add the missing device types.

Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
---
 drivers/bus/fsl-mc/fsl-mc-bus.c | 30 ++++++++++++++++++++++++++++++
 include/linux/fsl/mc.h          | 30 ++++++++++++++++++++++++++++++
 2 files changed, 60 insertions(+)

diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c
index 40526da5c6a6..ee1873438e97 100644
--- a/drivers/bus/fsl-mc/fsl-mc-bus.c
+++ b/drivers/bus/fsl-mc/fsl-mc-bus.c
@@ -201,6 +201,31 @@ struct device_type fsl_mc_bus_dpseci_type = {
 };
 EXPORT_SYMBOL_GPL(fsl_mc_bus_dpseci_type);
 
+struct device_type fsl_mc_bus_dpdmux_type = {
+	.name = "fsl_mc_bus_dpdmux"
+};
+EXPORT_SYMBOL_GPL(fsl_mc_bus_dpdmux_type);
+
+struct device_type fsl_mc_bus_dpdcei_type = {
+	.name = "fsl_mc_bus_dpdcei"
+};
+EXPORT_SYMBOL_GPL(fsl_mc_bus_dpdcei_type);
+
+struct device_type fsl_mc_bus_dpaiop_type = {
+	.name = "fsl_mc_bus_dpaiop"
+};
+EXPORT_SYMBOL_GPL(fsl_mc_bus_dpaiop_type);
+
+struct device_type fsl_mc_bus_dpci_type = {
+	.name = "fsl_mc_bus_dpci"
+};
+EXPORT_SYMBOL_GPL(fsl_mc_bus_dpci_type);
+
+struct device_type fsl_mc_bus_dpdmai_type = {
+	.name = "fsl_mc_bus_dpdmai"
+};
+EXPORT_SYMBOL_GPL(fsl_mc_bus_dpdmai_type);
+
 static struct device_type *fsl_mc_get_device_type(const char *type)
 {
 	static const struct {
@@ -217,6 +242,11 @@ static struct device_type *fsl_mc_get_device_type(const char *type)
 		{ &fsl_mc_bus_dpmac_type, "dpmac" },
 		{ &fsl_mc_bus_dprtc_type, "dprtc" },
 		{ &fsl_mc_bus_dpseci_type, "dpseci" },
+		{ &fsl_mc_bus_dpdmux_type, "dpdmux" },
+		{ &fsl_mc_bus_dpdcei_type, "dpdcei" },
+		{ &fsl_mc_bus_dpaiop_type, "dpaiop" },
+		{ &fsl_mc_bus_dpci_type, "dpci" },
+		{ &fsl_mc_bus_dpdmai_type, "dpdmai" },
 		{ NULL, NULL }
 	};
 	int i;
diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h
index 2b5f8366dbe1..cdb03aca2aef 100644
--- a/include/linux/fsl/mc.h
+++ b/include/linux/fsl/mc.h
@@ -433,6 +433,11 @@ extern struct device_type fsl_mc_bus_dpmcp_type;
 extern struct device_type fsl_mc_bus_dpmac_type;
 extern struct device_type fsl_mc_bus_dprtc_type;
 extern struct device_type fsl_mc_bus_dpseci_type;
+extern struct device_type fsl_mc_bus_dpdmux_type;
+extern struct device_type fsl_mc_bus_dpdcei_type;
+extern struct device_type fsl_mc_bus_dpaiop_type;
+extern struct device_type fsl_mc_bus_dpci_type;
+extern struct device_type fsl_mc_bus_dpdmai_type;
 
 static inline bool is_fsl_mc_bus_dprc(const struct fsl_mc_device *mc_dev)
 {
@@ -454,6 +459,11 @@ static inline bool is_fsl_mc_bus_dpsw(const struct fsl_mc_device *mc_dev)
 	return mc_dev->dev.type == &fsl_mc_bus_dpsw_type;
 }
 
+static inline bool is_fsl_mc_bus_dpdmux(const struct fsl_mc_device *mc_dev)
+{
+	return mc_dev->dev.type == &fsl_mc_bus_dpdmux_type;
+}
+
 static inline bool is_fsl_mc_bus_dpbp(const struct fsl_mc_device *mc_dev)
 {
 	return mc_dev->dev.type == &fsl_mc_bus_dpbp_type;
@@ -484,6 +494,26 @@ static inline bool is_fsl_mc_bus_dpseci(const struct fsl_mc_device *mc_dev)
 	return mc_dev->dev.type == &fsl_mc_bus_dpseci_type;
 }
 
+static inline bool is_fsl_mc_bus_dpdcei(const struct fsl_mc_device *mc_dev)
+{
+	return mc_dev->dev.type == &fsl_mc_bus_dpdcei_type;
+}
+
+static inline bool is_fsl_mc_bus_dpaiop(const struct fsl_mc_device *mc_dev)
+{
+	return mc_dev->dev.type == &fsl_mc_bus_dpaiop_type;
+}
+
+static inline bool is_fsl_mc_bus_dpci(const struct fsl_mc_device *mc_dev)
+{
+	return mc_dev->dev.type == &fsl_mc_bus_dpci_type;
+}
+
+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;
+}
+
 /*
  * Data Path Buffer Pool (DPBP) API
  * Contains initialization APIs and runtime control APIs for DPBP
-- 
2.25.1


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

* [PATCH 2/3] bus: fsl-mc: use raw spin lock to serialize mc cmds
  2020-07-17 15:47 [PATCH 0/3] bus: fsl-mc: scattered updates Ioana Ciornei
  2020-07-17 15:47 ` [PATCH 1/3] bus: fsl-mc: add missing device types Ioana Ciornei
@ 2020-07-17 15:47 ` Ioana Ciornei
  2020-07-17 15:48 ` [PATCH 3/3] bus: fsl-mc: probe the allocatable objects first Ioana Ciornei
  2020-07-20  8:11 ` [PATCH 0/3] bus: fsl-mc: scattered updates Laurentiu Tudor
  3 siblings, 0 replies; 5+ messages in thread
From: Ioana Ciornei @ 2020-07-17 15:47 UTC (permalink / raw)
  To: gregkh, linux-kernel; +Cc: laurentiu.tudor, Ioana Ciornei

From: Laurentiu Tudor <laurentiu.tudor@nxp.com>

Replace the spinlock that serializes the MC commands with a raw
spinlock. This is needed for the RT kernel because there are MC
commands sent in interrupt context.

Signed-off-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
---
 drivers/bus/fsl-mc/mc-io.c  | 2 +-
 drivers/bus/fsl-mc/mc-sys.c | 4 ++--
 include/linux/fsl/mc.h      | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/bus/fsl-mc/mc-io.c b/drivers/bus/fsl-mc/mc-io.c
index 6ae48ad80409..a30b53f1d87d 100644
--- a/drivers/bus/fsl-mc/mc-io.c
+++ b/drivers/bus/fsl-mc/mc-io.c
@@ -82,7 +82,7 @@ int __must_check fsl_create_mc_io(struct device *dev,
 	mc_io->portal_phys_addr = mc_portal_phys_addr;
 	mc_io->portal_size = mc_portal_size;
 	if (flags & FSL_MC_IO_ATOMIC_CONTEXT_PORTAL)
-		spin_lock_init(&mc_io->spinlock);
+		raw_spin_lock_init(&mc_io->spinlock);
 	else
 		mutex_init(&mc_io->mutex);
 
diff --git a/drivers/bus/fsl-mc/mc-sys.c b/drivers/bus/fsl-mc/mc-sys.c
index 3221a7fbaf0a..85a0225db522 100644
--- a/drivers/bus/fsl-mc/mc-sys.c
+++ b/drivers/bus/fsl-mc/mc-sys.c
@@ -251,7 +251,7 @@ int mc_send_command(struct fsl_mc_io *mc_io, struct fsl_mc_command *cmd)
 		return -EINVAL;
 
 	if (mc_io->flags & FSL_MC_IO_ATOMIC_CONTEXT_PORTAL)
-		spin_lock_irqsave(&mc_io->spinlock, irq_flags);
+		raw_spin_lock_irqsave(&mc_io->spinlock, irq_flags);
 	else
 		mutex_lock(&mc_io->mutex);
 
@@ -287,7 +287,7 @@ int mc_send_command(struct fsl_mc_io *mc_io, struct fsl_mc_command *cmd)
 	error = 0;
 common_exit:
 	if (mc_io->flags & FSL_MC_IO_ATOMIC_CONTEXT_PORTAL)
-		spin_unlock_irqrestore(&mc_io->spinlock, irq_flags);
+		raw_spin_unlock_irqrestore(&mc_io->spinlock, irq_flags);
 	else
 		mutex_unlock(&mc_io->mutex);
 
diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h
index cdb03aca2aef..a428c61ead6e 100644
--- a/include/linux/fsl/mc.h
+++ b/include/linux/fsl/mc.h
@@ -339,7 +339,7 @@ struct fsl_mc_io {
 		 * This field is only meaningful if the
 		 * FSL_MC_IO_ATOMIC_CONTEXT_PORTAL flag is set
 		 */
-		spinlock_t spinlock;	/* serializes mc_send_command() */
+		raw_spinlock_t spinlock; /* serializes mc_send_command() */
 	};
 };
 
-- 
2.25.1


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

* [PATCH 3/3] bus: fsl-mc: probe the allocatable objects first
  2020-07-17 15:47 [PATCH 0/3] bus: fsl-mc: scattered updates Ioana Ciornei
  2020-07-17 15:47 ` [PATCH 1/3] bus: fsl-mc: add missing device types Ioana Ciornei
  2020-07-17 15:47 ` [PATCH 2/3] bus: fsl-mc: use raw spin lock to serialize mc cmds Ioana Ciornei
@ 2020-07-17 15:48 ` Ioana Ciornei
  2020-07-20  8:11 ` [PATCH 0/3] bus: fsl-mc: scattered updates Laurentiu Tudor
  3 siblings, 0 replies; 5+ messages in thread
From: Ioana Ciornei @ 2020-07-17 15:48 UTC (permalink / raw)
  To: gregkh, linux-kernel; +Cc: laurentiu.tudor, Grigore Popescu, Ioana Ciornei

From: Grigore Popescu <grigore.popescu@nxp.com>

Because the DPNIs are probed before DPMCPs and other objects that need
to be allocated, messages like "No more resources of type X left" are
printed by the fsl-mc bus driver. This patch resolves the issue by probing
the allocatable objects first and then any other object that may use
them.

Signed-off-by: Grigore Popescu <grigore.popescu@nxp.com>
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
---
 drivers/bus/fsl-mc/dprc-driver.c | 57 ++++++++++++++++++++++----------
 1 file changed, 40 insertions(+), 17 deletions(-)

diff --git a/drivers/bus/fsl-mc/dprc-driver.c b/drivers/bus/fsl-mc/dprc-driver.c
index c8b1c3842c1a..3512d1b95821 100644
--- a/drivers/bus/fsl-mc/dprc-driver.c
+++ b/drivers/bus/fsl-mc/dprc-driver.c
@@ -27,7 +27,16 @@ static bool fsl_mc_device_match(struct fsl_mc_device *mc_dev,
 {
 	return mc_dev->obj_desc.id == obj_desc->id &&
 	       strcmp(mc_dev->obj_desc.type, obj_desc->type) == 0;
+}
 
+static bool fsl_mc_obj_desc_is_allocatable(struct fsl_mc_obj_desc *obj)
+{
+	if (strcmp(obj->type, "dpmcp") == 0 ||
+	    strcmp(obj->type, "dpcon") == 0 ||
+	    strcmp(obj->type, "dpbp") == 0)
+		return true;
+	else
+		return false;
 }
 
 static int __fsl_mc_device_remove_if_not_in_mc(struct device *dev, void *data)
@@ -150,6 +159,27 @@ static void check_plugged_state_change(struct fsl_mc_device *mc_dev,
 	}
 }
 
+static void fsl_mc_obj_device_add(struct fsl_mc_device *mc_bus_dev,
+				  struct fsl_mc_obj_desc *obj_desc)
+{
+	int error;
+	struct fsl_mc_device *child_dev;
+
+	/*
+	 * Check if device is already known to Linux:
+	 */
+	child_dev = fsl_mc_device_lookup(obj_desc, mc_bus_dev);
+	if (child_dev) {
+		check_plugged_state_change(child_dev, obj_desc);
+		put_device(&child_dev->dev);
+	} else {
+		error = fsl_mc_device_add(obj_desc, NULL, &mc_bus_dev->dev,
+					  &child_dev);
+		if (error < 0)
+			return;
+	}
+}
+
 /**
  * dprc_add_new_devices - Adds devices to the logical bus for a DPRC
  *
@@ -166,30 +196,23 @@ static void dprc_add_new_devices(struct fsl_mc_device *mc_bus_dev,
 				 struct fsl_mc_obj_desc *obj_desc_array,
 				 int num_child_objects_in_mc)
 {
-	int error;
 	int i;
 
+	/* probe the allocable objects first */
 	for (i = 0; i < num_child_objects_in_mc; i++) {
-		struct fsl_mc_device *child_dev;
 		struct fsl_mc_obj_desc *obj_desc = &obj_desc_array[i];
 
-		if (strlen(obj_desc->type) == 0)
-			continue;
+		if (strlen(obj_desc->type) > 0 &&
+		    fsl_mc_obj_desc_is_allocatable(obj_desc))
+			fsl_mc_obj_device_add(mc_bus_dev, obj_desc);
+	}
 
-		/*
-		 * Check if device is already known to Linux:
-		 */
-		child_dev = fsl_mc_device_lookup(obj_desc, mc_bus_dev);
-		if (child_dev) {
-			check_plugged_state_change(child_dev, obj_desc);
-			put_device(&child_dev->dev);
-			continue;
-		}
+	for (i = 0; i < num_child_objects_in_mc; i++) {
+		struct fsl_mc_obj_desc *obj_desc = &obj_desc_array[i];
 
-		error = fsl_mc_device_add(obj_desc, NULL, &mc_bus_dev->dev,
-					  &child_dev);
-		if (error < 0)
-			continue;
+		if (strlen(obj_desc->type) > 0 &&
+		    !fsl_mc_obj_desc_is_allocatable(obj_desc))
+			fsl_mc_obj_device_add(mc_bus_dev, obj_desc);
 	}
 }
 
-- 
2.25.1


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

* Re: [PATCH 0/3] bus: fsl-mc: scattered updates
  2020-07-17 15:47 [PATCH 0/3] bus: fsl-mc: scattered updates Ioana Ciornei
                   ` (2 preceding siblings ...)
  2020-07-17 15:48 ` [PATCH 3/3] bus: fsl-mc: probe the allocatable objects first Ioana Ciornei
@ 2020-07-20  8:11 ` Laurentiu Tudor
  3 siblings, 0 replies; 5+ messages in thread
From: Laurentiu Tudor @ 2020-07-20  8:11 UTC (permalink / raw)
  To: Ioana Ciornei, gregkh, linux-kernel



On 7/17/2020 6:47 PM, Ioana Ciornei wrote:
> This patch set adds some scattered updates to the fsl-mc bus: first we
> add some missing device types that can be found on the bus, then there
> is a change needed for the PREEMPT_RT variant and the probe order for the
> newly added objects on the fsl-mc bus is changed so that allocatable
> objects are probed at first since they are being used by any other
> driver.
> 
> Grigore Popescu (1):
>   bus: fsl-mc: probe the allocatable objects first
> 
> Ioana Ciornei (1):
>   bus: fsl-mc: add missing device types
> 
> Laurentiu Tudor (1):
>   bus: fsl-mc: use raw spin lock to serialize mc cmds
> 
>  drivers/bus/fsl-mc/dprc-driver.c | 57 ++++++++++++++++++++++----------
>  drivers/bus/fsl-mc/fsl-mc-bus.c  | 30 +++++++++++++++++
>  drivers/bus/fsl-mc/mc-io.c       |  2 +-
>  drivers/bus/fsl-mc/mc-sys.c      |  4 +--
>  include/linux/fsl/mc.h           | 32 +++++++++++++++++-
>  5 files changed, 104 insertions(+), 21 deletions(-)
> 

For the series:

Reviewed-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>

---
Best Regards, Laurentiu

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

end of thread, other threads:[~2020-07-20  8:11 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-17 15:47 [PATCH 0/3] bus: fsl-mc: scattered updates Ioana Ciornei
2020-07-17 15:47 ` [PATCH 1/3] bus: fsl-mc: add missing device types Ioana Ciornei
2020-07-17 15:47 ` [PATCH 2/3] bus: fsl-mc: use raw spin lock to serialize mc cmds Ioana Ciornei
2020-07-17 15:48 ` [PATCH 3/3] bus: fsl-mc: probe the allocatable objects first Ioana Ciornei
2020-07-20  8:11 ` [PATCH 0/3] bus: fsl-mc: scattered updates Laurentiu Tudor

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.