> -----Original Message----- > From: Eddie James <eajames@xxxxxxxxxxxxx> > Sent: Wednesday, September 1, 2021 11:07 PM > To: Zev Weiss <zev@xxxxxxxxxxxxxxxxx> > Cc: Jae Hyun Yoo <jae.hyun.yoo@xxxxxxxxxxxxxxx>; Ryan Chen > <ryan_chen@xxxxxxxxxxxxxx>; linux-aspeed@xxxxxxxxxxxxxxxx; Andrew Jeffery > <andrew@xxxxxxxx>; openbmc@xxxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; > Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>; > linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; linux-media@xxxxxxxxxxxxxxx > 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@xxxxxxxxxxxxx> > Reviewed-by: Ryan Chen <ryan_chen@xxxxxxxxxxxxxx> > > > > Signed-off-by: Zev Weiss <zev@xxxxxxxxxxxxxxxxx> > > --- > > > > 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; } > >