All of lore.kernel.org
 help / color / mirror / Atom feed
From: Beleswar Prasad Padhi <b-padhi@ti.com>
To: Andrew Davis <afd@ti.com>, <andersson@kernel.org>,
	<mathieu.poirier@linaro.org>
Cc: <hnagalla@ti.com>, <u-kumar1@ti.com>, <jm@ti.com>,
	<jan.kiszka@siemens.com>, <christophe.jaillet@wanadoo.fr>,
	<jkangas@redhat.com>, <eballetbo@redhat.com>,
	<linux-remoteproc@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v10 15/33] remoteproc: k3: Refactor rproc_reset() implementation into common driver
Date: Wed, 23 Apr 2025 13:54:44 +0530	[thread overview]
Message-ID: <69eb8bc7-a0ef-4f33-afbc-a5ff52e6f4f5@ti.com> (raw)
In-Reply-To: <5a64069d-f586-4894-b81d-b7b131fceafc@ti.com>


On 22/04/25 19:51, Andrew Davis wrote:
> On 4/22/25 12:53 AM, Beleswar Prasad Padhi wrote:
>> Hi Andrew,
>>
>> On 21/04/25 20:12, Andrew Davis wrote:
>>> On 4/17/25 1:19 PM, Beleswar Padhi wrote:
>>>> The rproc_reset() implementations in TI K3 DSP and M4 remoteproc drivers
>>>> assert reset in the same way. Refactor the above function into the
>>>> ti_k3_common.c driver as k3_rproc_reset() and use it throughout DSP and
>>>> M4 drivers for resetting the remote processor.
>>>>
>>>> Signed-off-by: Beleswar Padhi <b-padhi@ti.com>
>>>> ---
>>>> v10: Changelog:
>>>> 1. Split [v9 12/26] into [v10 14/33] and [v10 15/33] patches.
>>>>
>>>> Link to v9:
>>>> https://lore.kernel.org/all/20250317120622.1746415-13-b-padhi@ti.com/
>>>>
>>>>    drivers/remoteproc/ti_k3_common.c         | 25 ++++++++++++++++++++
>>>>    drivers/remoteproc/ti_k3_common.h         |  1 +
>>>>    drivers/remoteproc/ti_k3_dsp_remoteproc.c | 28 ++---------------------
>>>>    drivers/remoteproc/ti_k3_m4_remoteproc.c  | 16 +++----------
>>>>    4 files changed, 31 insertions(+), 39 deletions(-)
>>>>
>>>> diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_common.c
>>>> index aace308b49b0e..19bb6c337af77 100644
>>>> --- a/drivers/remoteproc/ti_k3_common.c
>>>> +++ b/drivers/remoteproc/ti_k3_common.c
>>>> @@ -105,5 +105,30 @@ void k3_rproc_kick(struct rproc *rproc, int vqid)
>>>>    }
>>>>    EXPORT_SYMBOL_GPL(k3_rproc_kick);
>>>>    +/* Put the remote processor into reset */
>>>> +int k3_rproc_reset(struct k3_rproc *kproc)
>>>> +{
>>>> +    struct device *dev = kproc->dev;
>>>> +    int ret;
>>>> +
>>>> +    if (kproc->data->uses_lreset) {
>>>> +        ret = reset_control_assert(kproc->reset);
>>>> +        if (ret)
>>>> +            dev_err(dev, "local-reset assert failed (%pe)\n", ERR_PTR(ret));
>>>> +        return ret;
>>>> +    }
>>>> +
>>>> +    ret = kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci,
>>>> +                            kproc->ti_sci_id);
>>>> +    if (ret) {
>>>> +        dev_err(dev, "module-reset assert failed (%pe)\n", ERR_PTR(ret));
>>>> +        if (reset_control_deassert(kproc->reset))
>>>> +            dev_warn(dev, "local-reset deassert back failed\n");
>>>> +    }
>>>> +
>>>> +    return ret;
>>>> +}
>>>> +EXPORT_SYMBOL_GPL(k3_rproc_reset);
>>>> +
>>>>    MODULE_LICENSE("GPL");
>>>>    MODULE_DESCRIPTION("TI K3 common Remoteproc code");
>>>> diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_common.h
>>>> index 6ae7ac4ec5696..f3400fc774766 100644
>>>> --- a/drivers/remoteproc/ti_k3_common.h
>>>> +++ b/drivers/remoteproc/ti_k3_common.h
>>>> @@ -90,4 +90,5 @@ struct k3_rproc {
>>>>      void k3_rproc_mbox_callback(struct mbox_client *client, void *data);
>>>>    void k3_rproc_kick(struct rproc *rproc, int vqid);
>>>> +int k3_rproc_reset(struct k3_rproc *kproc);
>>>>    #endif /* REMOTEPROC_TI_K3_COMMON_H */
>>>> diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc/ti_k3_dsp_remoteproc.c
>>>> index 0a8c9e61393d2..f8a5282df5b71 100644
>>>> --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c
>>>> +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c
>>>> @@ -24,30 +24,6 @@
>>>>      #define KEYSTONE_RPROC_LOCAL_ADDRESS_MASK    (SZ_16M - 1)
>>>>    -/* Put the DSP processor into reset */
>>>> -static int k3_dsp_rproc_reset(struct k3_rproc *kproc)
>>>> -{
>>>> -    struct device *dev = kproc->dev;
>>>> -    int ret;
>>>> -
>>>> -    if (kproc->data->uses_lreset) {
>>>> -        ret = reset_control_assert(kproc->reset);
>>>> -        if (ret)
>>>> -            dev_err(dev, "local-reset assert failed (%pe)\n", ERR_PTR(ret));
>>>> -        return ret;
>>>> -    }
>>>> -
>>>> -    ret = kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci,
>>>> -                            kproc->ti_sci_id);
>>>> -    if (ret) {
>>>> -        dev_err(dev, "module-reset assert failed (%pe)\n", ERR_PTR(ret));
>>>> -        if (reset_control_deassert(kproc->reset))
>>>> -            dev_warn(dev, "local-reset deassert back failed\n");
>>>> -    }
>>>> -
>>>> -    return ret;
>>>> -}
>>>> -
>>>>    /* Release the DSP processor from reset */
>>>>    static int k3_dsp_rproc_release(struct k3_rproc *kproc)
>>>>    {
>>>> @@ -201,7 +177,7 @@ static int k3_dsp_rproc_stop(struct rproc *rproc)
>>>>    {
>>>>        struct k3_rproc *kproc = rproc->priv;
>>>>    -    k3_dsp_rproc_reset(kproc);
>>>> +    k3_rproc_reset(kproc);
>>>>          return 0;
>>>>    }
>>>> @@ -565,7 +541,7 @@ static int k3_dsp_rproc_probe(struct platform_device *pdev)
>>>>                    return dev_err_probe(dev, ret, "failed to get reset status\n");
>>>>                } else if (ret == 0) {
>>>>                    dev_warn(dev, "local reset is deasserted for device\n");
>>>> -                k3_dsp_rproc_reset(kproc);
>>>> +                k3_rproc_reset(kproc);
>>>>                }
>>>>            }
>>>>        }
>>>> diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/ti_k3_m4_remoteproc.c
>>>> index 8a6917259ce60..7d5b75be2e4f8 100644
>>>> --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c
>>>> +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c
>>>> @@ -65,11 +65,9 @@ static int k3_m4_rproc_prepare(struct rproc *rproc)
>>>>         * Ensure the local reset is asserted so the core doesn't
>>>>         * execute bogus code when the module reset is released.
>>>>         */
>>>> -    ret = reset_control_assert(kproc->reset);
>>>> -    if (ret) {
>>>> -        dev_err(dev, "could not assert local reset\n");
>>>> +    ret = k3_rproc_reset(kproc);
>>>> +    if (ret)
>>>>            return ret;
>>>> -    }
>>>>          ret = reset_control_status(kproc->reset);
>>>>        if (ret <= 0) {
>>>> @@ -374,16 +372,8 @@ static int k3_m4_rproc_start(struct rproc *rproc)
>>>>    static int k3_m4_rproc_stop(struct rproc *rproc)
>>>>    {
>>>>        struct k3_rproc *kproc = rproc->priv;
>>>> -    struct device *dev = kproc->dev;
>>>> -    int ret;
>>>>    -    ret = reset_control_assert(kproc->reset);
>>>> -    if (ret) {
>>>> -        dev_err(dev, "local-reset assert failed, ret = %d\n", ret);
>>>> -        return ret;
>>>> -    }
>>>> -
>>>> -    return 0;
>>>> +    return k3_rproc_reset(kproc);
>>>
>>> This doesn't feel right. The new common k3_rproc_reset() function
>>> matches what ti_k3_dsp_remoteproc.c did for reset, you made it that
>>> way in the previous patch [14/33]. But it doesn't match what this
>>> M4 version does (yes I know logically they are the same as `uses_lreset`
>>> will be always true for M4). Maybe you want to do the same as you
>>> did for DSP to the M4 driver first, before you make this change so
>>> it is 100% clear the code is the same (and so bisect lands on the
>>> right patch should someday this be an issue).
>>
>>
>> Sure, I can make that change in next revision...
>>
>>>
>>> Also, the common k3_rproc_reset() calls put_device() unconditionally.
>>> Something that wasn't done at all here in the M4 prepare() and stop()
>>> functions.
>>
>>
>> There is a 'return ret' in the 'if (kproc->data->uses_lreset)' condition flow in k3_rproc_reset().
>>
>> put_device() should not be unconditional...
>>
>
> Ah, I must have looked right past the return statement. So it is one or
> the other, but not both? Might be good to put the put_device() side into
> an `else` block.


Sure I will do that in revision.

>
> Then it seems in the !uses_lreset path you still undo the reset_control_assert()
> by calling reset_control_deassert() if put_device() fails. Think you messed
> this one up in back in [14/33].


My bad. Will address in revision.. Do you have any other review comments for the series before I re-spin?

Thanks,
Beleswar

>
> Andrew
>
>>>
>>> These two changes make this patch not strictly a pure "refactor"
>>> patch, which IMHO should in no way change the calls being made nor
>>> the logical flow, only the code structure.
>>
>>
>> Got it. Will address in revision. Will wait for more reviews (if any) before re-spinning.
>>
>> Thanks,
>> Beleswar
>>
>>>
>>> Andrew
>>>
>>>>    }
>>>>      /*

  reply	other threads:[~2025-04-23  8:24 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-17 18:19 [PATCH v10 00/33] Refactor TI K3 R5, DSP and M4 Remoteproc Drivers Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 01/33] remoteproc: k3-r5: Drop check performed in k3_r5_rproc_{mbox_callback/kick} Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 02/33] remoteproc: k3-dsp: Drop check performed in k3_dsp_rproc_{mbox_callback/kick} Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 03/33] remoteproc: k3-r5: Refactor sequential core power up/down operations Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 04/33] remoteproc: k3-r5: Re-order internal memory initialization functions Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 05/33] remoteproc: k3-r5: Re-order k3_r5_release_tsp() function Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 06/33] remoteproc: k3-r5: Refactor Data Structures to Align with DSP and M4 Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 07/33] remoteproc: k3-r5: Use k3_r5_rproc_mem_data structure for memory info Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 08/33] remoteproc: k3-{m4/dsp}: Add a void ptr member in rproc internal struct Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 09/33] remoteproc: k3-m4: Add pointer to rproc struct within k3_m4_rproc Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 10/33] remoteproc: k3-m4: Use k3_rproc_mem_data structure for memory info Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 11/33] remoteproc: k3: Refactor shared data structures Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 12/33] remoteproc: k3: Refactor mailbox rx_callback functions into common driver Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 13/33] remoteproc: k3: Refactor .kick rproc ops " Beleswar Padhi
2025-04-21 14:58   ` Andrew Davis
2025-04-22  5:55     ` Beleswar Prasad Padhi
2025-04-17 18:19 ` [PATCH v10 14/33] remoteproc: k3-dsp: Correct Reset logic for devices without lresets Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 15/33] remoteproc: k3: Refactor rproc_reset() implementation into common driver Beleswar Padhi
2025-04-21 14:42   ` Andrew Davis
2025-04-22  5:53     ` Beleswar Prasad Padhi
2025-04-22 14:21       ` Andrew Davis
2025-04-23  8:24         ` Beleswar Prasad Padhi [this message]
2025-04-17 18:19 ` [PATCH v10 16/33] remoteproc: k3-dsp: Correct Reset deassert logic for devices w/o lresets Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 17/33] remoteproc: k3: Refactor rproc_release() implementation into common driver Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 18/33] remoteproc: k3-m4: Ping the mbox while acquiring the channel Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 19/33] remoteproc: k3: Refactor rproc_request_mbox() implementations into common driver Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 20/33] remoteproc: k3-dsp: Don't override rproc ops in IPC-only mode Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 21/33] remoteproc: k3-dsp: Assert local reset during .prepare callback Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 22/33] remoteproc: k3: Refactor .prepare rproc ops into common driver Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 23/33] remoteproc: k3: Refactor .unprepare " Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 24/33] remoteproc: k3: Refactor .start " Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 25/33] remoteproc: k3: Refactor .stop " Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 26/33] remoteproc: k3: Refactor .attach " Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 27/33] remoteproc: k3: Refactor .detach " Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 28/33] remoteproc: k3: Refactor .get_loaded_rsc_table " Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 29/33] remoteproc: k3: Refactor .da_to_va rproc " Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 30/33] remoteproc: k3: Refactor of_get_memories() functions " Beleswar Padhi
2025-04-17 18:19 ` [PATCH v10 31/33] remoteproc: k3: Refactor mem_release() " Beleswar Padhi
2025-04-17 18:20 ` [PATCH v10 32/33] remoteproc: k3: Refactor reserved_mem_init() " Beleswar Padhi
2025-04-17 18:20 ` [PATCH v10 33/33] remoteproc: k3: Refactor release_tsp() " Beleswar Padhi
2025-04-23 21:06 ` [PATCH v10 00/33] Refactor TI K3 R5, DSP and M4 Remoteproc Drivers Judith Mendez
2025-04-24  3:48   ` Beleswar Prasad Padhi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=69eb8bc7-a0ef-4f33-afbc-a5ff52e6f4f5@ti.com \
    --to=b-padhi@ti.com \
    --cc=afd@ti.com \
    --cc=andersson@kernel.org \
    --cc=christophe.jaillet@wanadoo.fr \
    --cc=eballetbo@redhat.com \
    --cc=hnagalla@ti.com \
    --cc=jan.kiszka@siemens.com \
    --cc=jkangas@redhat.com \
    --cc=jm@ti.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-remoteproc@vger.kernel.org \
    --cc=mathieu.poirier@linaro.org \
    --cc=u-kumar1@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.