Message ID | 20191212072737.30116-1-james.qian.wang@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/komeda: Add event handling for EMPTY/FULL | expand |
Hi James, On Thursday, 12 December 2019 07:27:55 GMT james qian wang (Arm Technology China) wrote: > 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> > --- > drivers/gpu/drm/arm/display/komeda/d71/d71_dev.c | 13 ++++++++++++- > drivers/gpu/drm/arm/display/komeda/d71/d71_regs.h | 3 +++ > drivers/gpu/drm/arm/display/komeda/komeda_dev.h | 5 ++++- > drivers/gpu/drm/arm/display/komeda/komeda_event.c | 2 ++ > 4 files changed, 21 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/arm/display/komeda/d71/d71_dev.c b/drivers/gpu/drm/arm/display/komeda/d71/d71_dev.c > index dd1ecf4276d3..00fa56c29b3e 100644 > --- a/drivers/gpu/drm/arm/display/komeda/d71/d71_dev.c > +++ b/drivers/gpu/drm/arm/display/komeda/d71/d71_dev.c > @@ -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); > > diff --git a/drivers/gpu/drm/arm/display/komeda/d71/d71_regs.h b/drivers/gpu/drm/arm/display/komeda/d71/d71_regs.h > index 81de6a23e7f3..e80172a0b320 100644 > --- a/drivers/gpu/drm/arm/display/komeda/d71/d71_regs.h > +++ b/drivers/gpu/drm/arm/display/komeda/d71/d71_regs.h > @@ -175,6 +175,7 @@ > #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) > @@ -185,6 +186,8 @@ > #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) > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_dev.h b/drivers/gpu/drm/arm/display/komeda/komeda_dev.h > index 4a67a80d5fcf..ce27f2f27c24 100644 > --- a/drivers/gpu/drm/arm/display/komeda/komeda_dev.h > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_dev.h > @@ -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 \ > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_event.c b/drivers/gpu/drm/arm/display/komeda/komeda_event.c > index 977c38d516da..53f944e66dfc 100644 > --- a/drivers/gpu/drm/arm/display/komeda/komeda_event.c > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_event.c > @@ -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|"); > Thanks for the patch, Reviewed-by: Mihail Atanassov <mihail.atanassov@arm.com>
diff --git a/drivers/gpu/drm/arm/display/komeda/d71/d71_dev.c b/drivers/gpu/drm/arm/display/komeda/d71/d71_dev.c index dd1ecf4276d3..00fa56c29b3e 100644 --- a/drivers/gpu/drm/arm/display/komeda/d71/d71_dev.c +++ b/drivers/gpu/drm/arm/display/komeda/d71/d71_dev.c @@ -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); diff --git a/drivers/gpu/drm/arm/display/komeda/d71/d71_regs.h b/drivers/gpu/drm/arm/display/komeda/d71/d71_regs.h index 81de6a23e7f3..e80172a0b320 100644 --- a/drivers/gpu/drm/arm/display/komeda/d71/d71_regs.h +++ b/drivers/gpu/drm/arm/display/komeda/d71/d71_regs.h @@ -175,6 +175,7 @@ #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) @@ -185,6 +186,8 @@ #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) diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_dev.h b/drivers/gpu/drm/arm/display/komeda/komeda_dev.h index 4a67a80d5fcf..ce27f2f27c24 100644 --- a/drivers/gpu/drm/arm/display/komeda/komeda_dev.h +++ b/drivers/gpu/drm/arm/display/komeda/komeda_dev.h @@ -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 \ diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_event.c b/drivers/gpu/drm/arm/display/komeda/komeda_event.c index 977c38d516da..53f944e66dfc 100644 --- a/drivers/gpu/drm/arm/display/komeda/komeda_event.c +++ b/drivers/gpu/drm/arm/display/komeda/komeda_event.c @@ -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|");
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> --- drivers/gpu/drm/arm/display/komeda/d71/d71_dev.c | 13 ++++++++++++- drivers/gpu/drm/arm/display/komeda/d71/d71_regs.h | 3 +++ drivers/gpu/drm/arm/display/komeda/komeda_dev.h | 5 ++++- drivers/gpu/drm/arm/display/komeda/komeda_event.c | 2 ++ 4 files changed, 21 insertions(+), 2 deletions(-)