* [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.