Re: [PATCH v4] v4l: vsp1: Fix video output on R8A77970
On 02/22/2018 09:46 PM, Laurent Pinchart wrote: >>> From: Sergei Shtylyov >>> >>> Commit d455b45f8393 ("v4l: vsp1: Add support for new VSP2-BS, VSP2-DL, >>> and VSP2-D instances") added support for the VSP2-D found in the R-Car >>> V3M (R8A77970) but the video output that VSP2-D sends to DU has a greenish >>> garbage-like line repeated every 8 screen rows. It turns out that R-Car >>> V3M has the LIF0 buffer attribute register that you need to set to a non- >>> default value in order to get rid of the output artifacts. >>> >>> Based on the original (and large) patch by Daisuke Matsushita >>> . >>> >>> Fixes: d455b45f8393 ("v4l: vsp1: Add support for new VSP2-BS, VSP2-DL and >>> VSP2-D instances") Signed-off-by: Sergei Shtylyov >>> Reviewed-by: Laurent Pinchart >>> [Removed braces, added >>> VI6_IP_VERSION_MASK to improve readabiliy] >>> Signed-off-by: Laurent Pinchart >>> >> >> [...] >> >>> diff --git a/drivers/media/platform/vsp1/vsp1_regs.h >>> b/drivers/media/platform/vsp1/vsp1_regs.h index >>> b1912c83a1da..dae0c1901297 100644 >>> --- a/drivers/media/platform/vsp1/vsp1_regs.h >>> +++ b/drivers/media/platform/vsp1/vsp1_regs.h >> >> [...] >> >>> @@ -705,6 +710,7 @@ >>> */ >>> >>> #define VI6_IP_VERSION 0x3f00 >>> >>> +#define VI6_IP_VERSION_MASK(0x << 0) >> >> Perhaps (VI6_IP_VERSION_MODEL_MASK | VI6_IP_VERSION_SOC_MASK) would be >> clearer? > > I thought about it and the line length went over 80 characters so I went for > an easy solution. I can change it if you want. OK, let's be leave it as is. MBR, Sergei
Re: [PATCH v4] v4l: vsp1: Fix video output on R8A77970
Hi Sergei, On Thursday, 22 February 2018 20:34:37 EET Sergei Shtylyov wrote: > On 02/22/2018 07:32 PM, Laurent Pinchart wrote: > > From: Sergei Shtylyov > > > > Commit d455b45f8393 ("v4l: vsp1: Add support for new VSP2-BS, VSP2-DL, > > and VSP2-D instances") added support for the VSP2-D found in the R-Car > > V3M (R8A77970) but the video output that VSP2-D sends to DU has a greenish > > garbage-like line repeated every 8 screen rows. It turns out that R-Car > > V3M has the LIF0 buffer attribute register that you need to set to a non- > > default value in order to get rid of the output artifacts. > > > > Based on the original (and large) patch by Daisuke Matsushita > > . > > > > Fixes: d455b45f8393 ("v4l: vsp1: Add support for new VSP2-BS, VSP2-DL and > > VSP2-D instances") Signed-off-by: Sergei Shtylyov > > Reviewed-by: Laurent Pinchart > > [Removed braces, added > > VI6_IP_VERSION_MASK to improve readabiliy] > > Signed-off-by: Laurent Pinchart > > > > [...] > > > diff --git a/drivers/media/platform/vsp1/vsp1_regs.h > > b/drivers/media/platform/vsp1/vsp1_regs.h index > > b1912c83a1da..dae0c1901297 100644 > > --- a/drivers/media/platform/vsp1/vsp1_regs.h > > +++ b/drivers/media/platform/vsp1/vsp1_regs.h > > [...] > > > @@ -705,6 +710,7 @@ > > */ > > > > #define VI6_IP_VERSION 0x3f00 > > > > +#define VI6_IP_VERSION_MASK(0x << 0) > > Perhaps (VI6_IP_VERSION_MODEL_MASK | VI6_IP_VERSION_SOC_MASK) would be > clearer? I thought about it and the line length went over 80 characters so I went for an easy solution. I can change it if you want. -- Regards, Laurent Pinchart
Re: [PATCH v4] v4l: vsp1: Fix video output on R8A77970
On 02/22/2018 07:32 PM, Laurent Pinchart wrote: > From: Sergei Shtylyov > > Commit d455b45f8393 ("v4l: vsp1: Add support for new VSP2-BS, VSP2-DL, > and VSP2-D instances") added support for the VSP2-D found in the R-Car > V3M (R8A77970) but the video output that VSP2-D sends to DU has a greenish > garbage-like line repeated every 8 screen rows. It turns out that R-Car > V3M has the LIF0 buffer attribute register that you need to set to a non- > default value in order to get rid of the output artifacts. > > Based on the original (and large) patch by Daisuke Matsushita > . > > Fixes: d455b45f8393 ("v4l: vsp1: Add support for new VSP2-BS, VSP2-DL and > VSP2-D instances") > Signed-off-by: Sergei Shtylyov > Reviewed-by: Laurent Pinchart > [Removed braces, added VI6_IP_VERSION_MASK to improve readabiliy] > Signed-off-by: Laurent Pinchart [...] > diff --git a/drivers/media/platform/vsp1/vsp1_regs.h > b/drivers/media/platform/vsp1/vsp1_regs.h > index b1912c83a1da..dae0c1901297 100644 > --- a/drivers/media/platform/vsp1/vsp1_regs.h > +++ b/drivers/media/platform/vsp1/vsp1_regs.h [...] > @@ -705,6 +710,7 @@ > */ > > #define VI6_IP_VERSION 0x3f00 > +#define VI6_IP_VERSION_MASK (0x << 0) Perhaps (VI6_IP_VERSION_MODEL_MASK | VI6_IP_VERSION_SOC_MASK) would be clearer? MBR, Sergei
[PATCH v4] v4l: vsp1: Fix video output on R8A77970
From: Sergei Shtylyov Commit d455b45f8393 ("v4l: vsp1: Add support for new VSP2-BS, VSP2-DL, and VSP2-D instances") added support for the VSP2-D found in the R-Car V3M (R8A77970) but the video output that VSP2-D sends to DU has a greenish garbage-like line repeated every 8 screen rows. It turns out that R-Car V3M has the LIF0 buffer attribute register that you need to set to a non- default value in order to get rid of the output artifacts. Based on the original (and large) patch by Daisuke Matsushita . Fixes: d455b45f8393 ("v4l: vsp1: Add support for new VSP2-BS, VSP2-DL and VSP2-D instances") Signed-off-by: Sergei Shtylyov Reviewed-by: Laurent Pinchart [Removed braces, added VI6_IP_VERSION_MASK to improve readabiliy] Signed-off-by: Laurent Pinchart --- drivers/media/platform/vsp1/vsp1_lif.c | 12 drivers/media/platform/vsp1/vsp1_regs.h | 6 ++ 2 files changed, 18 insertions(+) diff --git a/drivers/media/platform/vsp1/vsp1_lif.c b/drivers/media/platform/vsp1/vsp1_lif.c index e6fa16d7fda8..704920753998 100644 --- a/drivers/media/platform/vsp1/vsp1_lif.c +++ b/drivers/media/platform/vsp1/vsp1_lif.c @@ -155,6 +155,18 @@ static void lif_configure(struct vsp1_entity *entity, (obth << VI6_LIF_CTRL_OBTH_SHIFT) | (format->code == 0 ? VI6_LIF_CTRL_CFMT : 0) | VI6_LIF_CTRL_REQSEL | VI6_LIF_CTRL_LIF_EN); + + /* +* On R-Car V3M the LIF0 buffer attribute register has to be set to a +* non-default value to guarantee proper operation (otherwise artifacts +* may appear on the output). The value required by the manual is not +* explained but is likely a buffer size or threshold. +*/ + if ((entity->vsp1->version & VI6_IP_VERSION_MASK) == + (VI6_IP_VERSION_MODEL_VSPD_V3 | VI6_IP_VERSION_SOC_V3M)) + vsp1_lif_write(lif, dl, VI6_LIF_LBA, + VI6_LIF_LBA_LBA0 | + (1536 << VI6_LIF_LBA_LBA1_SHIFT)); } static const struct vsp1_entity_operations lif_entity_ops = { diff --git a/drivers/media/platform/vsp1/vsp1_regs.h b/drivers/media/platform/vsp1/vsp1_regs.h index b1912c83a1da..dae0c1901297 100644 --- a/drivers/media/platform/vsp1/vsp1_regs.h +++ b/drivers/media/platform/vsp1/vsp1_regs.h @@ -693,6 +693,11 @@ #define VI6_LIF_CSBTH_LBTH_MASK(0x7ff << 0) #define VI6_LIF_CSBTH_LBTH_SHIFT 0 +#define VI6_LIF_LBA0x3b0c +#define VI6_LIF_LBA_LBA0 (1 << 31) +#define VI6_LIF_LBA_LBA1_MASK (0xfff << 16) +#define VI6_LIF_LBA_LBA1_SHIFT 16 + /* - * Security Control Registers */ @@ -705,6 +710,7 @@ */ #define VI6_IP_VERSION 0x3f00 +#define VI6_IP_VERSION_MASK(0x << 0) #define VI6_IP_VERSION_MODEL_MASK (0xff << 8) #define VI6_IP_VERSION_MODEL_VSPS_H2 (0x09 << 8) #define VI6_IP_VERSION_MODEL_VSPR_H2 (0x0a << 8) -- Regards, Laurent Pinchart