2019-02-04 19:22:11

by Ray Jui

[permalink] [raw]
Subject: [PATCH] mailbox: bcm-flexrm-mailbox: Fix FlexRM ring flush timeout issue

From: Rayagonda Kokatanur <[email protected]>

RING_CONTROL reg was not written due to wrong address, hence all
the subsequent ring flush was timing out.

Fixes: a371c10ea4b3 ("mailbox: bcm-flexrm-mailbox: Fix FlexRM ring flush sequence")

Signed-off-by: Rayagonda Kokatanur <[email protected]>
Signed-off-by: Ray Jui <[email protected]>
---
drivers/mailbox/bcm-flexrm-mailbox.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/mailbox/bcm-flexrm-mailbox.c b/drivers/mailbox/bcm-flexrm-mailbox.c
index d713271ebf7c..a64116586b4c 100644
--- a/drivers/mailbox/bcm-flexrm-mailbox.c
+++ b/drivers/mailbox/bcm-flexrm-mailbox.c
@@ -1396,9 +1396,9 @@ static void flexrm_shutdown(struct mbox_chan *chan)

/* Clear ring flush state */
timeout = 1000; /* timeout of 1s */
- writel_relaxed(0x0, ring + RING_CONTROL);
+ writel_relaxed(0x0, ring->regs + RING_CONTROL);
do {
- if (!(readl_relaxed(ring + RING_FLUSH_DONE) &
+ if (!(readl_relaxed(ring->regs + RING_FLUSH_DONE) &
FLUSH_DONE_MASK))
break;
mdelay(1);
--
2.17.1



2019-02-04 19:24:36

by Scott Branden

[permalink] [raw]
Subject: Re: [PATCH] mailbox: bcm-flexrm-mailbox: Fix FlexRM ring flush timeout issue

Fix looks good.

On 2019-02-04 11:21 a.m., Ray Jui wrote:
> From: Rayagonda Kokatanur <[email protected]>
>
> RING_CONTROL reg was not written due to wrong address, hence all
> the subsequent ring flush was timing out.
>
> Fixes: a371c10ea4b3 ("mailbox: bcm-flexrm-mailbox: Fix FlexRM ring flush sequence")
>
> Signed-off-by: Rayagonda Kokatanur <[email protected]>
> Signed-off-by: Ray Jui <[email protected]>
Reviewed-by: Scott Branden <[email protected]>
> ---
> drivers/mailbox/bcm-flexrm-mailbox.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mailbox/bcm-flexrm-mailbox.c b/drivers/mailbox/bcm-flexrm-mailbox.c
> index d713271ebf7c..a64116586b4c 100644
> --- a/drivers/mailbox/bcm-flexrm-mailbox.c
> +++ b/drivers/mailbox/bcm-flexrm-mailbox.c
> @@ -1396,9 +1396,9 @@ static void flexrm_shutdown(struct mbox_chan *chan)
>
> /* Clear ring flush state */
> timeout = 1000; /* timeout of 1s */
> - writel_relaxed(0x0, ring + RING_CONTROL);
> + writel_relaxed(0x0, ring->regs + RING_CONTROL);
> do {
> - if (!(readl_relaxed(ring + RING_FLUSH_DONE) &
> + if (!(readl_relaxed(ring->regs + RING_FLUSH_DONE) &
> FLUSH_DONE_MASK))
> break;
> mdelay(1);

2019-02-15 01:27:14

by Ray Jui

[permalink] [raw]
Subject: Re: [PATCH] mailbox: bcm-flexrm-mailbox: Fix FlexRM ring flush timeout issue

Hi Jassi,

Have you had a chance to review this fix? This is a critical fix for a
crash during driver shutdown.

Regards,

Ray

On 2/4/2019 11:22 AM, Scott Branden wrote:
> Fix looks good.
>
> On 2019-02-04 11:21 a.m., Ray Jui wrote:
>> From: Rayagonda Kokatanur <[email protected]>
>>
>> RING_CONTROL reg was not written due to wrong address, hence all
>> the subsequent ring flush was timing out.
>>
>> Fixes: a371c10ea4b3 ("mailbox: bcm-flexrm-mailbox: Fix FlexRM ring
>> flush sequence")
>>
>> Signed-off-by: Rayagonda Kokatanur <[email protected]>
>> Signed-off-by: Ray Jui <[email protected]>
> Reviewed-by: Scott Branden <[email protected]>
>> ---
>>   drivers/mailbox/bcm-flexrm-mailbox.c | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/mailbox/bcm-flexrm-mailbox.c
>> b/drivers/mailbox/bcm-flexrm-mailbox.c
>> index d713271ebf7c..a64116586b4c 100644
>> --- a/drivers/mailbox/bcm-flexrm-mailbox.c
>> +++ b/drivers/mailbox/bcm-flexrm-mailbox.c
>> @@ -1396,9 +1396,9 @@ static void flexrm_shutdown(struct mbox_chan *chan)
>>         /* Clear ring flush state */
>>       timeout = 1000; /* timeout of 1s */
>> -    writel_relaxed(0x0, ring + RING_CONTROL);
>> +    writel_relaxed(0x0, ring->regs + RING_CONTROL);
>>       do {
>> -        if (!(readl_relaxed(ring + RING_FLUSH_DONE) &
>> +        if (!(readl_relaxed(ring->regs + RING_FLUSH_DONE) &
>>                 FLUSH_DONE_MASK))
>>               break;
>>           mdelay(1);