diff mbox series

[v3] media: aspeed-video: ignore interrupts that aren't enabled

Message ID 20210617220229.7352-1-zev@bewilderbeest.net
State New
Headers show
Series [v3] media: aspeed-video: ignore interrupts that aren't enabled | expand

Commit Message

Zev Weiss June 17, 2021, 10:02 p.m. UTC
As partially addressed in commit 65d270acb2d6 ("media: aspeed: clear
garbage interrupts"), the ASpeed video engine sometimes asserts
interrupts that the driver hasn't enabled.  In addition to the
CAPTURE_COMPLETE and FRAME_COMPLETE interrupts dealt with in that
patch, COMP_READY has also been observed.  Instead of playing
whack-a-mole with each one individually, we can instead just blanket
ignore everything we haven't explicitly enabled.

Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
---

Changes since v2 [1]:
 - minor commit message improvements

Changes since v1 [0]:
 - dropped error message
 - switched to a blanket-ignore approach as suggested by Ryan

[0] https://lore.kernel.org/linux-arm-kernel/20201215024542.18888-1-zev@bewilderbeest.net/
[1] https://lore.kernel.org/openbmc/20210506234048.3214-1-zev@bewilderbeest.net/

 drivers/media/platform/aspeed-video.c | 16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)

Comments

Lei Yu Aug. 25, 2021, 2:14 a.m. UTC | #1
On Fri, Jun 18, 2021 at 6:02 AM Zev Weiss <zev@bewilderbeest.net> wrote:
>
> As partially addressed in commit 65d270acb2d6 ("media: aspeed: clear
> garbage interrupts"), the ASpeed video engine sometimes asserts
> interrupts that the driver hasn't enabled.  In addition to the
> CAPTURE_COMPLETE and FRAME_COMPLETE interrupts dealt with in that
> patch, COMP_READY has also been observed.  Instead of playing
> whack-a-mole with each one individually, we can instead just blanket
> ignore everything we haven't explicitly enabled.
>
> Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
> ---
>
> Changes since v2 [1]:
>  - minor commit message improvements
>
> Changes since v1 [0]:
>  - dropped error message
>  - switched to a blanket-ignore approach as suggested by Ryan
>
> [0] https://lore.kernel.org/linux-arm-kernel/20201215024542.18888-1-zev@bewilderbeest.net/
> [1] https://lore.kernel.org/openbmc/20210506234048.3214-1-zev@bewilderbeest.net/
>
>  drivers/media/platform/aspeed-video.c | 16 ++++++----------
>  1 file changed, 6 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/media/platform/aspeed-video.c b/drivers/media/platform/aspeed-video.c
> index 7bb6babdcade..77611c296a25 100644
> --- a/drivers/media/platform/aspeed-video.c
> +++ b/drivers/media/platform/aspeed-video.c
> @@ -563,6 +563,12 @@ static irqreturn_t aspeed_video_irq(int irq, void *arg)
>         struct aspeed_video *video = arg;
>         u32 sts = aspeed_video_read(video, VE_INTERRUPT_STATUS);
>
> +       /*
> +        * Hardware sometimes asserts interrupts that we haven't actually
> +        * enabled; ignore them if so.
> +        */
> +       sts &= aspeed_video_read(video, VE_INTERRUPT_CTRL);
> +

Without the patch, the driver gets an unhandled IRQ in a few hours
after the KVM page is opened.
This patch is tested on Bytedance's OpenBMC system and the issue has
not been reproduced anymore.

Tested-by: Lei YU <yulei.sh@bytedance.com>
Eddie James Sept. 1, 2021, 3:07 p.m. UTC | #2
On Thu, 2021-06-17 at 17:02 -0500, Zev Weiss wrote:
> As partially addressed in commit 65d270acb2d6 ("media: aspeed: clear
> garbage interrupts"), the ASpeed video engine sometimes asserts
> interrupts that the driver hasn't enabled.  In addition to the
> CAPTURE_COMPLETE and FRAME_COMPLETE interrupts dealt with in that
> patch, COMP_READY has also been observed.  Instead of playing
> whack-a-mole with each one individually, we can instead just blanket
> ignore everything we haven't explicitly enabled.

Suspect this will fix an intermittent problem on AST2500 with
screensaver. Change looks good, thanks!

Reviewed-by: Eddie James <eajames@linux.ibm.com>

> 
> Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
> ---
> 
> Changes since v2 [1]:
>  - minor commit message improvements
> 
> Changes since v1 [0]:
>  - dropped error message
>  - switched to a blanket-ignore approach as suggested by Ryan
> 
> [0] 
> https://lore.kernel.org/linux-arm-kernel/20201215024542.18888-1-zev@bewilderbeest.net/
> [1] 
> https://lore.kernel.org/openbmc/20210506234048.3214-1-zev@bewilderbeest.net/
> 
>  drivers/media/platform/aspeed-video.c | 16 ++++++----------
>  1 file changed, 6 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/media/platform/aspeed-video.c
> b/drivers/media/platform/aspeed-video.c
> index 7bb6babdcade..77611c296a25 100644
> --- a/drivers/media/platform/aspeed-video.c
> +++ b/drivers/media/platform/aspeed-video.c
> @@ -563,6 +563,12 @@ static irqreturn_t aspeed_video_irq(int irq,
> void *arg)
>  	struct aspeed_video *video = arg;
>  	u32 sts = aspeed_video_read(video, VE_INTERRUPT_STATUS);
>  
> +	/*
> +	 * Hardware sometimes asserts interrupts that we haven't
> actually
> +	 * enabled; ignore them if so.
> +	 */
> +	sts &= aspeed_video_read(video, VE_INTERRUPT_CTRL);
> +
>  	/*
>  	 * Resolution changed or signal was lost; reset the engine and
>  	 * re-initialize
> @@ -629,16 +635,6 @@ static irqreturn_t aspeed_video_irq(int irq,
> void *arg)
>  			aspeed_video_start_frame(video);
>  	}
>  
> -	/*
> -	 * CAPTURE_COMPLETE and FRAME_COMPLETE interrupts come even
> when these
> -	 * are disabled in the VE_INTERRUPT_CTRL register so clear them
> to
> -	 * prevent unnecessary interrupt calls.
> -	 */
> -	if (sts & VE_INTERRUPT_CAPTURE_COMPLETE)
> -		sts &= ~VE_INTERRUPT_CAPTURE_COMPLETE;
> -	if (sts & VE_INTERRUPT_FRAME_COMPLETE)
> -		sts &= ~VE_INTERRUPT_FRAME_COMPLETE;
> -
>  	return sts ? IRQ_NONE : IRQ_HANDLED;
>  }
>
Ryan Chen Sept. 6, 2021, 10:10 a.m. UTC | #3
> -----Original Message-----
> From: Eddie James <eajames@linux.ibm.com>
> Sent: Wednesday, September 1, 2021 11:07 PM
> To: Zev Weiss <zev@bewilderbeest.net>
> Cc: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>; Ryan Chen
> <ryan_chen@aspeedtech.com>; linux-aspeed@lists.ozlabs.org; Andrew Jeffery
> <andrew@aj.id.au>; openbmc@lists.ozlabs.org; linux-kernel@vger.kernel.org;
> Mauro Carvalho Chehab <mchehab@kernel.org>;
> linux-arm-kernel@lists.infradead.org; linux-media@vger.kernel.org
> Subject: Re: [PATCH v3] media: aspeed-video: ignore interrupts that aren't
> enabled
> 
> On Thu, 2021-06-17 at 17:02 -0500, Zev Weiss wrote:
> > As partially addressed in commit 65d270acb2d6 ("media: aspeed: clear
> > garbage interrupts"), the ASpeed video engine sometimes asserts
> > interrupts that the driver hasn't enabled.  In addition to the
> > CAPTURE_COMPLETE and FRAME_COMPLETE interrupts dealt with in that
> > patch, COMP_READY has also been observed.  Instead of playing
> > whack-a-mole with each one individually, we can instead just blanket
> > ignore everything we haven't explicitly enabled.
> 
> Suspect this will fix an intermittent problem on AST2500 with screensaver.
> Change looks good, thanks!
> 
> Reviewed-by: Eddie James <eajames@linux.ibm.com>
> 
Reviewed-by: Ryan Chen <ryan_chen@aspeedtech.com>
> >
> > Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
> > ---
> >
> > Changes since v2 [1]:
> >  - minor commit message improvements
> >
> > Changes since v1 [0]:
> >  - dropped error message
> >  - switched to a blanket-ignore approach as suggested by Ryan
> >
> > [0]
> > https://lore.kernel.org/linux-arm-kernel/20201215024542.18888-1-zev@be
> > wilderbeest.net/
> > [1]
> >
> https://lore.kernel.org/openbmc/20210506234048.3214-1-zev@bewilderbees
> > t.net/
> >
> >  drivers/media/platform/aspeed-video.c | 16 ++++++----------
> >  1 file changed, 6 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/media/platform/aspeed-video.c
> > b/drivers/media/platform/aspeed-video.c
> > index 7bb6babdcade..77611c296a25 100644
> > --- a/drivers/media/platform/aspeed-video.c
> > +++ b/drivers/media/platform/aspeed-video.c
> > @@ -563,6 +563,12 @@ static irqreturn_t aspeed_video_irq(int irq, void
> > *arg)
> >  	struct aspeed_video *video = arg;
> >  	u32 sts = aspeed_video_read(video, VE_INTERRUPT_STATUS);
> >
> > +	/*
> > +	 * Hardware sometimes asserts interrupts that we haven't
> > actually
> > +	 * enabled; ignore them if so.
> > +	 */
> > +	sts &= aspeed_video_read(video, VE_INTERRUPT_CTRL);
> > +
> >  	/*
> >  	 * Resolution changed or signal was lost; reset the engine and
> >  	 * re-initialize
> > @@ -629,16 +635,6 @@ static irqreturn_t aspeed_video_irq(int irq, void
> > *arg)
> >  			aspeed_video_start_frame(video);
> >  	}
> >
> > -	/*
> > -	 * CAPTURE_COMPLETE and FRAME_COMPLETE interrupts come even
> > when these
> > -	 * are disabled in the VE_INTERRUPT_CTRL register so clear them
> > to
> > -	 * prevent unnecessary interrupt calls.
> > -	 */
> > -	if (sts & VE_INTERRUPT_CAPTURE_COMPLETE)
> > -		sts &= ~VE_INTERRUPT_CAPTURE_COMPLETE;
> > -	if (sts & VE_INTERRUPT_FRAME_COMPLETE)
> > -		sts &= ~VE_INTERRUPT_FRAME_COMPLETE;
> > -
> >  	return sts ? IRQ_NONE : IRQ_HANDLED;  }
> >
Joel Stanley Sept. 6, 2021, 11:47 a.m. UTC | #4
Hi Mauro,

On Mon, 6 Sept 2021 at 10:10, Ryan Chen <ryan_chen@aspeedtech.com> wrote:
> > Subject: Re: [PATCH v3] media: aspeed-video: ignore interrupts that aren't
> > enabled
> >
> > On Thu, 2021-06-17 at 17:02 -0500, Zev Weiss wrote:
> > > As partially addressed in commit 65d270acb2d6 ("media: aspeed: clear
> > > garbage interrupts"), the ASpeed video engine sometimes asserts
> > > interrupts that the driver hasn't enabled.  In addition to the
> > > CAPTURE_COMPLETE and FRAME_COMPLETE interrupts dealt with in that
> > > patch, COMP_READY has also been observed.  Instead of playing
> > > whack-a-mole with each one individually, we can instead just blanket
> > > ignore everything we haven't explicitly enabled.
> >
> > Suspect this will fix an intermittent problem on AST2500 with screensaver.
> > Change looks good, thanks!
> >
> > Reviewed-by: Eddie James <eajames@linux.ibm.com>
> >
> Reviewed-by: Ryan Chen <ryan_chen@aspeedtech.com>
> > >
> > > Signed-off-by: Zev Weiss <zev@bewilderbeest.net>

I notice this wasn't merged in the pull request you sent for v5.15.
Would you be able to ensure it makes it in the next pull request you
send?

It can have some fixes tags too:

Fixes: 65d270acb2d6 ("media: aspeed: clear garbage interrupts")
Fixes: d2b4387f3bdf ("media: platform: Add Aspeed Video Engine driver")
Acked-by: Joel Stanley <joel@jms.id.au>

Cheers,

Joel

> > > ---
> > >
> > > Changes since v2 [1]:
> > >  - minor commit message improvements
> > >
> > > Changes since v1 [0]:
> > >  - dropped error message
> > >  - switched to a blanket-ignore approach as suggested by Ryan
> > >
> > > [0]
> > > https://lore.kernel.org/linux-arm-kernel/20201215024542.18888-1-zev@be
> > > wilderbeest.net/
> > > [1]
> > >
> > https://lore.kernel.org/openbmc/20210506234048.3214-1-zev@bewilderbees
> > > t.net/
> > >
> > >  drivers/media/platform/aspeed-video.c | 16 ++++++----------
> > >  1 file changed, 6 insertions(+), 10 deletions(-)
> > >
> > > diff --git a/drivers/media/platform/aspeed-video.c
> > > b/drivers/media/platform/aspeed-video.c
> > > index 7bb6babdcade..77611c296a25 100644
> > > --- a/drivers/media/platform/aspeed-video.c
> > > +++ b/drivers/media/platform/aspeed-video.c
> > > @@ -563,6 +563,12 @@ static irqreturn_t aspeed_video_irq(int irq, void
> > > *arg)
> > >     struct aspeed_video *video = arg;
> > >     u32 sts = aspeed_video_read(video, VE_INTERRUPT_STATUS);
> > >
> > > +   /*
> > > +    * Hardware sometimes asserts interrupts that we haven't
> > > actually
> > > +    * enabled; ignore them if so.
> > > +    */
> > > +   sts &= aspeed_video_read(video, VE_INTERRUPT_CTRL);
> > > +
> > >     /*
> > >      * Resolution changed or signal was lost; reset the engine and
> > >      * re-initialize
> > > @@ -629,16 +635,6 @@ static irqreturn_t aspeed_video_irq(int irq, void
> > > *arg)
> > >                     aspeed_video_start_frame(video);
> > >     }
> > >
> > > -   /*
> > > -    * CAPTURE_COMPLETE and FRAME_COMPLETE interrupts come even
> > > when these
> > > -    * are disabled in the VE_INTERRUPT_CTRL register so clear them
> > > to
> > > -    * prevent unnecessary interrupt calls.
> > > -    */
> > > -   if (sts & VE_INTERRUPT_CAPTURE_COMPLETE)
> > > -           sts &= ~VE_INTERRUPT_CAPTURE_COMPLETE;
> > > -   if (sts & VE_INTERRUPT_FRAME_COMPLETE)
> > > -           sts &= ~VE_INTERRUPT_FRAME_COMPLETE;
> > > -
> > >     return sts ? IRQ_NONE : IRQ_HANDLED;  }
> > >
>
Zev Weiss Sept. 28, 2021, 6:57 p.m. UTC | #5
On Mon, Sep 06, 2021 at 04:47:14AM PDT, Joel Stanley wrote:
>Hi Mauro,
>
>On Mon, 6 Sept 2021 at 10:10, Ryan Chen <ryan_chen@aspeedtech.com> wrote:
>> > Subject: Re: [PATCH v3] media: aspeed-video: ignore interrupts that aren't
>> > enabled
>> >
>> > On Thu, 2021-06-17 at 17:02 -0500, Zev Weiss wrote:
>> > > As partially addressed in commit 65d270acb2d6 ("media: aspeed: clear
>> > > garbage interrupts"), the ASpeed video engine sometimes asserts
>> > > interrupts that the driver hasn't enabled.  In addition to the
>> > > CAPTURE_COMPLETE and FRAME_COMPLETE interrupts dealt with in that
>> > > patch, COMP_READY has also been observed.  Instead of playing
>> > > whack-a-mole with each one individually, we can instead just blanket
>> > > ignore everything we haven't explicitly enabled.
>> >
>> > Suspect this will fix an intermittent problem on AST2500 with screensaver.
>> > Change looks good, thanks!
>> >
>> > Reviewed-by: Eddie James <eajames@linux.ibm.com>
>> >
>> Reviewed-by: Ryan Chen <ryan_chen@aspeedtech.com>
>> > >
>> > > Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
>
>I notice this wasn't merged in the pull request you sent for v5.15.
>Would you be able to ensure it makes it in the next pull request you
>send?
>
>It can have some fixes tags too:
>
>Fixes: 65d270acb2d6 ("media: aspeed: clear garbage interrupts")
>Fixes: d2b4387f3bdf ("media: platform: Add Aspeed Video Engine driver")
>Acked-by: Joel Stanley <joel@jms.id.au>
>
>Cheers,
>
>Joel
>

Also not in the recent merge of the media/v5.15-2 tag it looks like -- ping?


Thanks,
Zev
Joel Stanley Oct. 8, 2021, 4:43 a.m. UTC | #6
Hi Greg,

On Tue, 28 Sept 2021 at 18:57, Zev Weiss <zev@bewilderbeest.net> wrote:
>
> On Mon, Sep 06, 2021 at 04:47:14AM PDT, Joel Stanley wrote:
> >Hi Mauro,
> >
> >On Mon, 6 Sept 2021 at 10:10, Ryan Chen <ryan_chen@aspeedtech.com> wrote:
> >> > Subject: Re: [PATCH v3] media: aspeed-video: ignore interrupts that aren't
> >> > enabled
> >> >
> >> > On Thu, 2021-06-17 at 17:02 -0500, Zev Weiss wrote:
> >> > > As partially addressed in commit 65d270acb2d6 ("media: aspeed: clear
> >> > > garbage interrupts"), the ASpeed video engine sometimes asserts
> >> > > interrupts that the driver hasn't enabled.  In addition to the
> >> > > CAPTURE_COMPLETE and FRAME_COMPLETE interrupts dealt with in that
> >> > > patch, COMP_READY has also been observed.  Instead of playing
> >> > > whack-a-mole with each one individually, we can instead just blanket
> >> > > ignore everything we haven't explicitly enabled.
> >> >
> >> > Suspect this will fix an intermittent problem on AST2500 with screensaver.
> >> > Change looks good, thanks!
> >> >
> >> > Reviewed-by: Eddie James <eajames@linux.ibm.com>
> >> >
> >> Reviewed-by: Ryan Chen <ryan_chen@aspeedtech.com>
> >> > >
> >> > > Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
> >
> >I notice this wasn't merged in the pull request you sent for v5.15.
> >Would you be able to ensure it makes it in the next pull request you
> >send?
> >
> >It can have some fixes tags too:
> >
> >Fixes: 65d270acb2d6 ("media: aspeed: clear garbage interrupts")
> >Fixes: d2b4387f3bdf ("media: platform: Add Aspeed Video Engine driver")
> >Acked-by: Joel Stanley <joel@jms.id.au>
> >
> >Cheers,
> >
> >Joel
> >
>
> Also not in the recent merge of the media/v5.15-2 tag it looks like -- ping?

We're struggling to get a hold of the media maintainers to merge this
fix. Have you heard from them recently?

Cheers,

Joel
Greg KH Oct. 8, 2021, 5:45 a.m. UTC | #7
On Fri, Oct 08, 2021 at 04:43:24AM +0000, Joel Stanley wrote:
> Hi Greg,
> 
> On Tue, 28 Sept 2021 at 18:57, Zev Weiss <zev@bewilderbeest.net> wrote:
> >
> > On Mon, Sep 06, 2021 at 04:47:14AM PDT, Joel Stanley wrote:
> > >Hi Mauro,
> > >
> > >On Mon, 6 Sept 2021 at 10:10, Ryan Chen <ryan_chen@aspeedtech.com> wrote:
> > >> > Subject: Re: [PATCH v3] media: aspeed-video: ignore interrupts that aren't
> > >> > enabled
> > >> >
> > >> > On Thu, 2021-06-17 at 17:02 -0500, Zev Weiss wrote:
> > >> > > As partially addressed in commit 65d270acb2d6 ("media: aspeed: clear
> > >> > > garbage interrupts"), the ASpeed video engine sometimes asserts
> > >> > > interrupts that the driver hasn't enabled.  In addition to the
> > >> > > CAPTURE_COMPLETE and FRAME_COMPLETE interrupts dealt with in that
> > >> > > patch, COMP_READY has also been observed.  Instead of playing
> > >> > > whack-a-mole with each one individually, we can instead just blanket
> > >> > > ignore everything we haven't explicitly enabled.
> > >> >
> > >> > Suspect this will fix an intermittent problem on AST2500 with screensaver.
> > >> > Change looks good, thanks!
> > >> >
> > >> > Reviewed-by: Eddie James <eajames@linux.ibm.com>
> > >> >
> > >> Reviewed-by: Ryan Chen <ryan_chen@aspeedtech.com>
> > >> > >
> > >> > > Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
> > >
> > >I notice this wasn't merged in the pull request you sent for v5.15.
> > >Would you be able to ensure it makes it in the next pull request you
> > >send?
> > >
> > >It can have some fixes tags too:
> > >
> > >Fixes: 65d270acb2d6 ("media: aspeed: clear garbage interrupts")
> > >Fixes: d2b4387f3bdf ("media: platform: Add Aspeed Video Engine driver")
> > >Acked-by: Joel Stanley <joel@jms.id.au>
> > >
> > >Cheers,
> > >
> > >Joel
> > >
> >
> > Also not in the recent merge of the media/v5.15-2 tag it looks like -- ping?
> 
> We're struggling to get a hold of the media maintainers to merge this
> fix. Have you heard from them recently?

I have seen them on the mailing list, yes.

good luck!

greg k-h
diff mbox series

Patch

diff --git a/drivers/media/platform/aspeed-video.c b/drivers/media/platform/aspeed-video.c
index 7bb6babdcade..77611c296a25 100644
--- a/drivers/media/platform/aspeed-video.c
+++ b/drivers/media/platform/aspeed-video.c
@@ -563,6 +563,12 @@  static irqreturn_t aspeed_video_irq(int irq, void *arg)
 	struct aspeed_video *video = arg;
 	u32 sts = aspeed_video_read(video, VE_INTERRUPT_STATUS);
 
+	/*
+	 * Hardware sometimes asserts interrupts that we haven't actually
+	 * enabled; ignore them if so.
+	 */
+	sts &= aspeed_video_read(video, VE_INTERRUPT_CTRL);
+
 	/*
 	 * Resolution changed or signal was lost; reset the engine and
 	 * re-initialize
@@ -629,16 +635,6 @@  static irqreturn_t aspeed_video_irq(int irq, void *arg)
 			aspeed_video_start_frame(video);
 	}
 
-	/*
-	 * CAPTURE_COMPLETE and FRAME_COMPLETE interrupts come even when these
-	 * are disabled in the VE_INTERRUPT_CTRL register so clear them to
-	 * prevent unnecessary interrupt calls.
-	 */
-	if (sts & VE_INTERRUPT_CAPTURE_COMPLETE)
-		sts &= ~VE_INTERRUPT_CAPTURE_COMPLETE;
-	if (sts & VE_INTERRUPT_FRAME_COMPLETE)
-		sts &= ~VE_INTERRUPT_FRAME_COMPLETE;
-
 	return sts ? IRQ_NONE : IRQ_HANDLED;
 }