media: vsp1: Add underrun debug print
Print underrun interrupts with ratelimited print. Note that we don't enable the underrun interrupt. If we have underruns, we don't want to get flooded with interrupts about them. It's enough to see that an underrun happened at the end of a frame. Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
parent
52d8caca3d
commit
1dc30075fb
|
@ -710,6 +710,9 @@ int vsp1_du_setup_lif(struct device *dev, unsigned int pipe_index,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Reset the underrun counter */
|
||||
pipe->underrun_count = 0;
|
||||
|
||||
drm_pipe->width = cfg->width;
|
||||
drm_pipe->height = cfg->height;
|
||||
pipe->interlaced = cfg->interlaced;
|
||||
|
|
|
@ -45,7 +45,8 @@
|
|||
|
||||
static irqreturn_t vsp1_irq_handler(int irq, void *data)
|
||||
{
|
||||
u32 mask = VI6_WPF_IRQ_STA_DFE | VI6_WPF_IRQ_STA_FRE;
|
||||
u32 mask = VI6_WPF_IRQ_STA_DFE | VI6_WPF_IRQ_STA_FRE |
|
||||
VI6_WPF_IRQ_STA_UND;
|
||||
struct vsp1_device *vsp1 = data;
|
||||
irqreturn_t ret = IRQ_NONE;
|
||||
unsigned int i;
|
||||
|
@ -60,6 +61,14 @@ static irqreturn_t vsp1_irq_handler(int irq, void *data)
|
|||
status = vsp1_read(vsp1, VI6_WPF_IRQ_STA(i));
|
||||
vsp1_write(vsp1, VI6_WPF_IRQ_STA(i), ~status & mask);
|
||||
|
||||
if ((status & VI6_WPF_IRQ_STA_UND) && wpf->entity.pipe) {
|
||||
wpf->entity.pipe->underrun_count++;
|
||||
|
||||
dev_warn_ratelimited(vsp1->dev,
|
||||
"Underrun occurred at WPF%u (total underruns %u)\n",
|
||||
i, wpf->entity.pipe->underrun_count);
|
||||
}
|
||||
|
||||
if (status & VI6_WPF_IRQ_STA_DFE) {
|
||||
vsp1_pipeline_frame_end(wpf->entity.pipe);
|
||||
ret = IRQ_HANDLED;
|
||||
|
|
|
@ -148,6 +148,8 @@ struct vsp1_pipeline {
|
|||
unsigned int partitions;
|
||||
struct vsp1_partition *partition;
|
||||
struct vsp1_partition *part_table;
|
||||
|
||||
u32 underrun_count;
|
||||
};
|
||||
|
||||
void vsp1_pipeline_reset(struct vsp1_pipeline *pipe);
|
||||
|
|
|
@ -32,10 +32,12 @@
|
|||
#define VI6_STATUS_SYS_ACT(n) BIT((n) + 8)
|
||||
|
||||
#define VI6_WPF_IRQ_ENB(n) (0x0048 + (n) * 12)
|
||||
#define VI6_WPF_IRQ_ENB_UNDE BIT(16)
|
||||
#define VI6_WPF_IRQ_ENB_DFEE BIT(1)
|
||||
#define VI6_WPF_IRQ_ENB_FREE BIT(0)
|
||||
|
||||
#define VI6_WPF_IRQ_STA(n) (0x004c + (n) * 12)
|
||||
#define VI6_WPF_IRQ_STA_UND BIT(16)
|
||||
#define VI6_WPF_IRQ_STA_DFE BIT(1)
|
||||
#define VI6_WPF_IRQ_STA_FRE BIT(0)
|
||||
|
||||
|
|
Loading…
Reference in New Issue