60c9c9b03f00622f6fa57b0a2276c6b181786fb3
[oweals/openwrt.git] /
1 From d6baa1bd90e7e68ac69d5378d70174ea67bf35dc Mon Sep 17 00:00:00 2001
2 From: James Hughes <james.hughes@raspberrypi.org>
3 Date: Mon, 29 Jul 2019 12:02:59 +0100
4 Subject: [PATCH] Fixup FKMS interrupt handing for non-existent display
5
6 If an errant interrupt flag was received from a non-existent display,
7 a NULL pointer access was made. Protect against this by checking if a
8 second display is present prior to checking the interrupt flags.
9 ---
10  drivers/gpu/drm/vc4/vc4_firmware_kms.c | 17 ++++++++++-------
11  1 file changed, 10 insertions(+), 7 deletions(-)
12
13 --- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c
14 +++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c
15 @@ -1087,14 +1087,17 @@ static irqreturn_t vc4_crtc_irq_handler(
16                                 vc4_crtc_handle_page_flip(crtc_list[0]);
17                         }
18  
19 -                       /* Check for the secondary display too */
20 -                       chan = readl(crtc_list[0]->regs + SMIDSW1);
21 +                       if (crtc_list[1]) {
22 +                               /* Check for the secondary display too */
23 +                               chan = readl(crtc_list[0]->regs + SMIDSW1);
24  
25 -                       if (chan & 1) {
26 -                               writel(SMI_NEW, crtc_list[0]->regs + SMIDSW1);
27 -                               if (crtc_list[1]->vblank_enabled)
28 -                                       drm_crtc_handle_vblank(&crtc_list[1]->base);
29 -                               vc4_crtc_handle_page_flip(crtc_list[1]);
30 +                               if (chan & 1) {
31 +                                       writel(SMI_NEW, crtc_list[0]->regs + SMIDSW1);
32 +
33 +                                       if (crtc_list[1]->vblank_enabled)
34 +                                               drm_crtc_handle_vblank(&crtc_list[1]->base);
35 +                                       vc4_crtc_handle_page_flip(crtc_list[1]);
36 +                               }
37                         }
38                 }
39