]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/komeda: Add event handling for EMPTY/FULL
authorjames qian wang (Arm Technology China) <james.qian.wang@arm.com>
Thu, 12 Dec 2019 07:27:55 +0000 (07:27 +0000)
committerjames qian wang (Arm Technology China) <james.qian.wang@arm.com>
Fri, 27 Dec 2019 03:38:44 +0000 (11:38 +0800)
EMPTY/FULL are HW input/output FIFO condition identifer, which are
useful information for addressing the problem, so expose them.

Signed-off-by: james qian wang (Arm Technology China) <james.qian.wang@arm.com>
Reviewed-by: Mihail Atanassov <mihail.atanassov@arm.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191212072737.30116-1-james.qian.wang@arm.com
drivers/gpu/drm/arm/display/komeda/d71/d71_dev.c
drivers/gpu/drm/arm/display/komeda/d71/d71_regs.h
drivers/gpu/drm/arm/display/komeda/komeda_dev.h
drivers/gpu/drm/arm/display/komeda/komeda_event.c

index dd1ecf4276d39fd19240477f421b0356c8b77884..00fa56c29b3eb3c167e75929318118f225f30cc3 100644 (file)
@@ -20,8 +20,10 @@ static u64 get_lpu_event(struct d71_pipeline *d71_pipeline)
                evts |= KOMEDA_EVENT_IBSY;
        if (raw_status & LPU_IRQ_EOW)
                evts |= KOMEDA_EVENT_EOW;
+       if (raw_status & LPU_IRQ_OVR)
+               evts |= KOMEDA_EVENT_OVR;
 
-       if (raw_status & (LPU_IRQ_ERR | LPU_IRQ_IBSY)) {
+       if (raw_status & (LPU_IRQ_ERR | LPU_IRQ_IBSY | LPU_IRQ_OVR)) {
                u32 restore = 0, tbu_status;
                /* Check error of LPU status */
                status = malidp_read32(reg, BLK_STATUS);
@@ -45,6 +47,15 @@ static u64 get_lpu_event(struct d71_pipeline *d71_pipeline)
                        restore |= LPU_STATUS_ACE3;
                        evts |= KOMEDA_ERR_ACE3;
                }
+               if (status & LPU_STATUS_FEMPTY) {
+                       restore |= LPU_STATUS_FEMPTY;
+                       evts |= KOMEDA_EVENT_EMPTY;
+               }
+               if (status & LPU_STATUS_FFULL) {
+                       restore |= LPU_STATUS_FFULL;
+                       evts |= KOMEDA_EVENT_FULL;
+               }
+
                if (restore != 0)
                        malidp_write32_mask(reg, BLK_STATUS, restore, 0);
 
index 81de6a23e7f316a5109f5da64ad066b90a66a9a5..e80172a0b320c95c14e87c49c19a2f73ccad9429 100644 (file)
 #define TBU_DOUTSTDCAPB_MASK   0x3F
 
 /* LPU_IRQ_BITS */
+#define LPU_IRQ_OVR            BIT(9)
 #define LPU_IRQ_IBSY           BIT(10)
 #define LPU_IRQ_ERR            BIT(11)
 #define LPU_IRQ_EOW            BIT(12)
 #define LPU_STATUS_AXIE                BIT(4)
 #define LPU_STATUS_AXIRP       BIT(5)
 #define LPU_STATUS_AXIWP       BIT(6)
+#define LPU_STATUS_FEMPTY      BIT(11)
+#define LPU_STATUS_FFULL       BIT(14)
 #define LPU_STATUS_ACE0                BIT(16)
 #define LPU_STATUS_ACE1                BIT(17)
 #define LPU_STATUS_ACE2                BIT(18)
index 4a67a80d5fcf9cebf0de565a62cb80d6b62605ef..ce27f2f27c240afcdcf836f43deed58fbffbea9f 100644 (file)
@@ -20,6 +20,8 @@
 #define KOMEDA_EVENT_OVR               BIT_ULL(4)
 #define KOMEDA_EVENT_EOW               BIT_ULL(5)
 #define KOMEDA_EVENT_MODE              BIT_ULL(6)
+#define KOMEDA_EVENT_FULL              BIT_ULL(7)
+#define KOMEDA_EVENT_EMPTY             BIT_ULL(8)
 
 #define KOMEDA_ERR_TETO                        BIT_ULL(14)
 #define KOMEDA_ERR_TEMR                        BIT_ULL(15)
@@ -49,7 +51,8 @@
        KOMEDA_ERR_ZME          | KOMEDA_ERR_MERR       | KOMEDA_ERR_TCF |\
        KOMEDA_ERR_TTNG         | KOMEDA_ERR_TTF)
 
-#define KOMEDA_WARN_EVENTS     KOMEDA_ERR_CSCE
+#define KOMEDA_WARN_EVENTS     \
+       (KOMEDA_ERR_CSCE | KOMEDA_EVENT_FULL | KOMEDA_EVENT_EMPTY)
 
 #define KOMEDA_INFO_EVENTS (0 \
                            | KOMEDA_EVENT_VSYNC \
index 977c38d516da3454cf239bd4667514d47d57a95f..53f944e66dfc75f5c53456d1629fea8288f35afb 100644 (file)
@@ -78,6 +78,8 @@ static void evt_str(struct komeda_str *str, u64 events)
 
        /* LPU errors or events */
        evt_sprintf(str, events & KOMEDA_EVENT_IBSY, "IBSY|");
+       evt_sprintf(str, events & KOMEDA_EVENT_EMPTY, "EMPTY|");
+       evt_sprintf(str, events & KOMEDA_EVENT_FULL, "FULL|");
        evt_sprintf(str, events & KOMEDA_ERR_AXIE, "AXIE|");
        evt_sprintf(str, events & KOMEDA_ERR_ACE0, "ACE0|");
        evt_sprintf(str, events & KOMEDA_ERR_ACE1, "ACE1|");