lkml.org 
[lkml]   [2019]   [Dec]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.4 152/350] media: aspeed: clear garbage interrupts
    Date
    From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>

    [ Upstream commit 65d270acb2d662c3346793663ac3a759eb4491b8 ]

    CAPTURE_COMPLETE and FRAME_COMPLETE interrupts come even when these
    are disabled in the VE_INTERRUPT_CTRL register and eventually this
    behavior causes disabling irq itself like below:

    [10055.108784] irq 23: nobody cared (try booting with the "irqpoll" option)
    [10055.115525] CPU: 0 PID: 331 Comm: swampd Tainted: G W 5.3.0-4fde000-dirty-d683e2e #1
    [10055.124565] Hardware name: Generic DT based system
    [10055.129355] Backtrace:
    [10055.131854] [<80107d7c>] (dump_backtrace) from [<80107fb0>] (show_stack+0x20/0x24)
    [10055.139431] r7:00000017 r6:00000001 r5:00000000 r4:9d51dc00
    [10055.145120] [<80107f90>] (show_stack) from [<8074bf50>] (dump_stack+0x20/0x28)
    [10055.152361] [<8074bf30>] (dump_stack) from [<80150ffc>] (__report_bad_irq+0x40/0xc0)
    [10055.160109] [<80150fbc>] (__report_bad_irq) from [<80150f2c>] (note_interrupt+0x23c/0x294)
    [10055.168374] r9:015b6e60 r8:00000000 r7:00000017 r6:00000001 r5:00000000 r4:9d51dc00
    [10055.176136] [<80150cf0>] (note_interrupt) from [<8014df1c>] (handle_irq_event_percpu+0x88/0x98)
    [10055.184835] r10:7eff7910 r9:015b6e60 r8:00000000 r7:9d417600 r6:00000001 r5:00000002
    [10055.192657] r4:9d51dc00 r3:00000000
    [10055.196248] [<8014de94>] (handle_irq_event_percpu) from [<8014df64>] (handle_irq_event+0x38/0x4c)
    [10055.205113] r5:80b56d50 r4:9d51dc00
    [10055.208697] [<8014df2c>] (handle_irq_event) from [<80151f1c>] (handle_level_irq+0xbc/0x12c)
    [10055.217037] r5:80b56d50 r4:9d51dc00
    [10055.220623] [<80151e60>] (handle_level_irq) from [<8014d4b8>] (generic_handle_irq+0x30/0x44)
    [10055.229052] r5:80b56d50 r4:00000017
    [10055.232648] [<8014d488>] (generic_handle_irq) from [<8014d524>] (__handle_domain_irq+0x58/0xb4)
    [10055.241356] [<8014d4cc>] (__handle_domain_irq) from [<801021e4>] (avic_handle_irq+0x68/0x70)
    [10055.249797] r9:015b6e60 r8:00c5387d r7:00c5387d r6:ffffffff r5:9dd33fb0 r4:9d402380
    [10055.257539] [<8010217c>] (avic_handle_irq) from [<80101e34>] (__irq_usr+0x54/0x80)
    [10055.265105] Exception stack(0x9dd33fb0 to 0x9dd33ff8)
    [10055.270152] 3fa0: 015d0530 00000000 00000000 015d0538
    [10055.278328] 3fc0: 015d0530 015b6e60 00000000 00000000 0052c5d0 015b6e60 7eff7910 7eff7918
    [10055.286496] 3fe0: 76ce5614 7eff7908 0050e2f4 76a3a08c 20000010 ffffffff
    [10055.293104] r5:20000010 r4:76a3a08c
    [10055.296673] handlers:
    [10055.298967] [<79f218a5>] irq_default_primary_handler threaded [<1de88514>] aspeed_video_irq
    [10055.307344] Disabling IRQ #23

    To fix this issue, this commit makes the interrupt handler clear
    these garbage interrupts. This driver enables and uses only
    COMP_COMPLETE interrupt instead for frame handling.

    Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
    Reviewed-by: Eddie James <eajames@linux.ibm.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/media/platform/aspeed-video.c | 10 ++++++++++
    1 file changed, 10 insertions(+)

    diff --git a/drivers/media/platform/aspeed-video.c b/drivers/media/platform/aspeed-video.c
    index 84e0650106f51..096a7c9a8963b 100644
    --- a/drivers/media/platform/aspeed-video.c
    +++ b/drivers/media/platform/aspeed-video.c
    @@ -606,6 +606,16 @@ 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;
    }

    --
    2.20.1
    \
     
     \ /
      Last update: 2019-12-10 22:30    [W:4.019 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site