All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] add and use reset_get_bulk_optional()
@ 2022-02-15 19:54 Nikita Yushchenko
  2022-02-15 19:54 ` [PATCH 1/2] reset: introduce reset_get_bulk_optional() Nikita Yushchenko
  2022-02-15 19:54 ` [PATCH 2/2] spi: cadence_qspi: use reset_get_bulk_optional() Nikita Yushchenko
  0 siblings, 2 replies; 5+ messages in thread
From: Nikita Yushchenko @ 2022-02-15 19:54 UTC (permalink / raw)
  To: Jagan Teki; +Cc: u-boot, Nikita Yushchenko

Nikita Yushchenko (2):
  reset: introduce reset_get_bulk_optional()
  spi: cadence_qspi: use reset_get_bulk_optional()

 drivers/reset/reset-uclass.c | 10 ++++++++++
 drivers/spi/cadence_qspi.c   | 11 ++++++-----
 include/reset.h              | 21 +++++++++++++++++++++
 3 files changed, 37 insertions(+), 5 deletions(-)

-- 
2.30.2


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

* [PATCH 1/2] reset: introduce reset_get_bulk_optional()
  2022-02-15 19:54 [PATCH 0/2] add and use reset_get_bulk_optional() Nikita Yushchenko
@ 2022-02-15 19:54 ` Nikita Yushchenko
  2022-03-10 12:09   ` Jagan Teki
  2022-02-15 19:54 ` [PATCH 2/2] spi: cadence_qspi: use reset_get_bulk_optional() Nikita Yushchenko
  1 sibling, 1 reply; 5+ messages in thread
From: Nikita Yushchenko @ 2022-02-15 19:54 UTC (permalink / raw)
  To: Jagan Teki; +Cc: u-boot, Nikita Yushchenko

This is a version of reset_get_bulk() that does not treat no resets
definition as an error.

Signed-off-by: Nikita Yushchenko <nikita.yoush@cogentembedded.com>
---
 drivers/reset/reset-uclass.c | 10 ++++++++++
 include/reset.h              | 21 +++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c
index ca9f00a8f2..5a66fe5aef 100644
--- a/drivers/reset/reset-uclass.c
+++ b/drivers/reset/reset-uclass.c
@@ -144,6 +144,16 @@ int reset_get_bulk(struct udevice *dev, struct reset_ctl_bulk *bulk)
 	return __reset_get_bulk(dev, dev_ofnode(dev), bulk);
 }
 
+int reset_get_bulk_optional(struct udevice *dev, struct reset_ctl_bulk *bulk)
+{
+	int ret = reset_get_bulk(dev, bulk);
+
+	if (ret == -ENODEV)
+		ret = 0;
+
+	return ret;
+}
+
 int reset_get_by_name(struct udevice *dev, const char *name,
 		     struct reset_ctl *reset_ctl)
 {
diff --git a/include/reset.h b/include/reset.h
index 965f02e0ce..b61a2a765f 100644
--- a/include/reset.h
+++ b/include/reset.h
@@ -226,6 +226,21 @@ int reset_get_by_index_nodev(ofnode node, int index,
  */
 int reset_get_bulk(struct udevice *dev, struct reset_ctl_bulk *bulk);
 
+/**
+ * reset_get_bulk_optional - Get/request all reset signals of a device, do not
+ * fail if resets are not defined.
+ *
+ * This is similar to reset_get_bulk(), but does not return error code when
+ * no resets are defined. Instead, bulk->count is set to zero; this turns
+ * reset_assert_bulk() / reset_deassert_bulk() / reset_release_bulk() into
+ * no-ops.
+ *
+ * @dev:	The client device.
+ * @bulk	A pointer to a reset control bulk struct to initialize.
+ * Return: 0 if OK, or a negative error code.
+ */
+int reset_get_bulk_optional(struct udevice *dev, struct reset_ctl_bulk *bulk);
+
 /**
  * reset_get_by_name - Get/request a reset signal by name.
  *
@@ -411,6 +426,12 @@ static inline int reset_get_bulk(struct udevice *dev,
 	return -ENOTSUPP;
 }
 
+static inline int reset_get_bulk_optional(struct udevice *dev,
+					  struct reset_ctl_bulk *bulk)
+{
+	return -ENOTSUPP;
+}
+
 static inline int reset_get_by_name(struct udevice *dev, const char *name,
 				    struct reset_ctl *reset_ctl)
 {
-- 
2.30.2


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

* [PATCH 2/2] spi: cadence_qspi: use reset_get_bulk_optional()
  2022-02-15 19:54 [PATCH 0/2] add and use reset_get_bulk_optional() Nikita Yushchenko
  2022-02-15 19:54 ` [PATCH 1/2] reset: introduce reset_get_bulk_optional() Nikita Yushchenko
@ 2022-02-15 19:54 ` Nikita Yushchenko
  1 sibling, 0 replies; 5+ messages in thread
From: Nikita Yushchenko @ 2022-02-15 19:54 UTC (permalink / raw)
  To: Jagan Teki; +Cc: u-boot, Nikita Yushchenko

It is a valid setup to have no resets, e.g. TI J721E uses such setup.
Accept it without error messages.

And, error out if there is a real issue with getting resets.

Signed-off-by: Nikita Yushchenko <nikita.yoush@cogentembedded.com>
---
 drivers/spi/cadence_qspi.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/spi/cadence_qspi.c b/drivers/spi/cadence_qspi.c
index d1b3808c4d..76adee49bd 100644
--- a/drivers/spi/cadence_qspi.c
+++ b/drivers/spi/cadence_qspi.c
@@ -201,11 +201,12 @@ static int cadence_spi_probe(struct udevice *bus)
 		}
 	}
 
-	ret = reset_get_bulk(bus, &priv->resets);
-	if (ret)
-		dev_warn(bus, "Can't get reset: %d\n", ret);
-	else
-		reset_deassert_bulk(&priv->resets);
+	ret = reset_get_bulk_optional(bus, &priv->resets);
+	if (ret) {
+		dev_err(bus, "Can't get reset: %d\n", ret);
+		return ret;
+	}
+	reset_deassert_bulk(&priv->resets);
 
 	if (!priv->qspi_is_init) {
 		cadence_qspi_apb_controller_init(plat);
-- 
2.30.2


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

* Re: [PATCH 1/2] reset: introduce reset_get_bulk_optional()
  2022-02-15 19:54 ` [PATCH 1/2] reset: introduce reset_get_bulk_optional() Nikita Yushchenko
@ 2022-03-10 12:09   ` Jagan Teki
  2022-03-10 12:27     ` Nikita Yushchenko
  0 siblings, 1 reply; 5+ messages in thread
From: Jagan Teki @ 2022-03-10 12:09 UTC (permalink / raw)
  To: Nikita Yushchenko; +Cc: u-boot

On Wed, Feb 16, 2022 at 1:24 AM Nikita Yushchenko
<nikita.yoush@cogentembedded.com> wrote:
>
> This is a version of reset_get_bulk() that does not treat no resets
> definition as an error.
>
> Signed-off-by: Nikita Yushchenko <nikita.yoush@cogentembedded.com>
> ---
>  drivers/reset/reset-uclass.c | 10 ++++++++++
>  include/reset.h              | 21 +++++++++++++++++++++
>  2 files changed, 31 insertions(+)
>
> diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c
> index ca9f00a8f2..5a66fe5aef 100644
> --- a/drivers/reset/reset-uclass.c
> +++ b/drivers/reset/reset-uclass.c
> @@ -144,6 +144,16 @@ int reset_get_bulk(struct udevice *dev, struct reset_ctl_bulk *bulk)
>         return __reset_get_bulk(dev, dev_ofnode(dev), bulk);
>  }
>
> +int reset_get_bulk_optional(struct udevice *dev, struct reset_ctl_bulk *bulk)
> +{
> +       int ret = reset_get_bulk(dev, bulk);
> +
> +       if (ret == -ENODEV)

Are you sure about this return type? I think it would be -ENODATA if
I'm not wrong.

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

* Re: [PATCH 1/2] reset: introduce reset_get_bulk_optional()
  2022-03-10 12:09   ` Jagan Teki
@ 2022-03-10 12:27     ` Nikita Yushchenko
  0 siblings, 0 replies; 5+ messages in thread
From: Nikita Yushchenko @ 2022-03-10 12:27 UTC (permalink / raw)
  To: Jagan Teki; +Cc: u-boot

>> +int reset_get_bulk_optional(struct udevice *dev, struct reset_ctl_bulk *bulk)
>> +{
>> +       int ret = reset_get_bulk(dev, bulk);
>> +
>> +       if (ret == -ENODEV)
> 
> Are you sure about this return type? I think it would be -ENODATA if
> I'm not wrong.

It shall be -ENOENT on master. Oops.

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

end of thread, other threads:[~2022-03-10 12:27 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-15 19:54 [PATCH 0/2] add and use reset_get_bulk_optional() Nikita Yushchenko
2022-02-15 19:54 ` [PATCH 1/2] reset: introduce reset_get_bulk_optional() Nikita Yushchenko
2022-03-10 12:09   ` Jagan Teki
2022-03-10 12:27     ` Nikita Yushchenko
2022-02-15 19:54 ` [PATCH 2/2] spi: cadence_qspi: use reset_get_bulk_optional() Nikita Yushchenko

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.