From: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
To: dri-devel@lists.freedesktop.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Cc: Maxime Ripard <maxime.ripard@bootlin.com>,
David Airlie <airlied@linux.ie>, Chen-Yu Tsai <wens@csie.org>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Sean Paul <sean@poorly.run>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
linux-sunxi@googlegroups.com, Daniel Vetter <daniel@ffwll.ch>,
Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Subject: [PATCH v3 08/21] drm/sun4i: frontend: Add support for semi-planar YUV input formats
Date: Tue, 4 Dec 2018 15:22:05 +0100 [thread overview]
Message-ID: <20181204142218.16284-9-paul.kocialkowski@bootlin.com> (raw)
In-Reply-To: <20181204142218.16284-1-paul.kocialkowski@bootlin.com>
Semi-planar YUV formats use two distinct planes, one for luminance and
one for chrominance. To add support for them, we need to configure the
second line stride and buffer address registers to setup the second YUV
plane.
New definitions are introduced to configure the input format register
for the YUV420 and YUV422 semi-planar formats.
Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
drivers/gpu/drm/sun4i/sun4i_frontend.c | 50 +++++++++++++++++++++++---
drivers/gpu/drm/sun4i/sun4i_frontend.h | 6 ++++
drivers/gpu/drm/sun4i/sun4i_layer.c | 4 +++
3 files changed, 55 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/sun4i/sun4i_frontend.c b/drivers/gpu/drm/sun4i/sun4i_frontend.c
index ff34ac9bcf05..d5b8c1a20835 100644
--- a/drivers/gpu/drm/sun4i/sun4i_frontend.c
+++ b/drivers/gpu/drm/sun4i/sun4i_frontend.c
@@ -118,11 +118,23 @@ void sun4i_frontend_update_buffer(struct sun4i_frontend *frontend,
regmap_write(frontend->regs, SUN4I_FRONTEND_LINESTRD0_REG,
fb->pitches[0]);
+ if (fb->format->num_planes > 1)
+ regmap_write(frontend->regs, SUN4I_FRONTEND_LINESTRD1_REG,
+ fb->pitches[1]);
+
/* Set the physical address of the buffer in memory */
paddr = drm_fb_cma_get_gem_addr(fb, state, 0);
paddr -= PHYS_OFFSET;
- DRM_DEBUG_DRIVER("Setting buffer address to %pad\n", &paddr);
+ DRM_DEBUG_DRIVER("Setting buffer #0 address to %pad\n", &paddr);
regmap_write(frontend->regs, SUN4I_FRONTEND_BUF_ADDR0_REG, paddr);
+
+ if (fb->format->num_planes > 1) {
+ paddr = drm_fb_cma_get_gem_addr(fb, state, 1);
+ paddr -= PHYS_OFFSET;
+ DRM_DEBUG_DRIVER("Setting buffer #1 address to %pad\n", &paddr);
+ regmap_write(frontend->regs, SUN4I_FRONTEND_BUF_ADDR1_REG,
+ paddr);
+ }
}
EXPORT_SYMBOL(sun4i_frontend_update_buffer);
@@ -132,6 +144,8 @@ sun4i_frontend_drm_format_to_input_fmt(const struct drm_format_info *format,
{
if (!format->is_yuv)
*val = SUN4I_FRONTEND_INPUT_FMT_DATA_FMT_RGB;
+ else if (drm_format_info_is_yuv_sampling_420(format))
+ *val = SUN4I_FRONTEND_INPUT_FMT_DATA_FMT_YUV420;
else if (drm_format_info_is_yuv_sampling_422(format))
*val = SUN4I_FRONTEND_INPUT_FMT_DATA_FMT_YUV422;
else
@@ -144,12 +158,18 @@ static int
sun4i_frontend_drm_format_to_input_mode(const struct drm_format_info *format,
u32 *val)
{
- if (format->num_planes == 1)
+ switch (format->num_planes) {
+ case 1:
*val = SUN4I_FRONTEND_INPUT_FMT_DATA_MOD_PACKED;
- else
- return -EINVAL;
+ return 0;
- return 0;
+ case 2:
+ *val = SUN4I_FRONTEND_INPUT_FMT_DATA_MOD_SEMIPLANAR;
+ return 0;
+
+ default:
+ return -EINVAL;
+ }
}
static int sun4i_frontend_drm_format_to_input_sequence(uint32_t fmt, u32 *val)
@@ -159,6 +179,22 @@ static int sun4i_frontend_drm_format_to_input_sequence(uint32_t fmt, u32 *val)
*val = SUN4I_FRONTEND_INPUT_FMT_DATA_PS_BGRX;
return 0;
+ case DRM_FORMAT_NV12:
+ *val = SUN4I_FRONTEND_INPUT_FMT_DATA_PS_UV;
+ return 0;
+
+ case DRM_FORMAT_NV16:
+ *val = SUN4I_FRONTEND_INPUT_FMT_DATA_PS_UV;
+ return 0;
+
+ case DRM_FORMAT_NV21:
+ *val = SUN4I_FRONTEND_INPUT_FMT_DATA_PS_VU;
+ return 0;
+
+ case DRM_FORMAT_NV61:
+ *val = SUN4I_FRONTEND_INPUT_FMT_DATA_PS_VU;
+ return 0;
+
case DRM_FORMAT_UYVY:
*val = SUN4I_FRONTEND_INPUT_FMT_DATA_PS_UYVY;
return 0;
@@ -202,6 +238,10 @@ static int sun4i_frontend_drm_format_to_output_fmt(uint32_t fmt, u32 *val)
static const uint32_t sun4i_frontend_formats[] = {
DRM_FORMAT_BGRX8888,
+ DRM_FORMAT_NV12,
+ DRM_FORMAT_NV16,
+ DRM_FORMAT_NV21,
+ DRM_FORMAT_NV61,
DRM_FORMAT_UYVY,
DRM_FORMAT_VYUY,
DRM_FORMAT_XRGB8888,
diff --git a/drivers/gpu/drm/sun4i/sun4i_frontend.h b/drivers/gpu/drm/sun4i/sun4i_frontend.h
index 750dda9352fc..021d4404d35d 100644
--- a/drivers/gpu/drm/sun4i/sun4i_frontend.h
+++ b/drivers/gpu/drm/sun4i/sun4i_frontend.h
@@ -22,17 +22,23 @@
#define SUN4I_FRONTEND_BYPASS_CSC_EN BIT(1)
#define SUN4I_FRONTEND_BUF_ADDR0_REG 0x020
+#define SUN4I_FRONTEND_BUF_ADDR1_REG 0x024
#define SUN4I_FRONTEND_LINESTRD0_REG 0x040
+#define SUN4I_FRONTEND_LINESTRD1_REG 0x044
#define SUN4I_FRONTEND_INPUT_FMT_REG 0x04c
#define SUN4I_FRONTEND_INPUT_FMT_DATA_MOD_PACKED (1 << 8)
+#define SUN4I_FRONTEND_INPUT_FMT_DATA_MOD_SEMIPLANAR (2 << 8)
#define SUN4I_FRONTEND_INPUT_FMT_DATA_FMT_YUV422 (1 << 4)
+#define SUN4I_FRONTEND_INPUT_FMT_DATA_FMT_YUV420 (2 << 4)
#define SUN4I_FRONTEND_INPUT_FMT_DATA_FMT_RGB (5 << 4)
#define SUN4I_FRONTEND_INPUT_FMT_DATA_PS_UYVY 0
#define SUN4I_FRONTEND_INPUT_FMT_DATA_PS_YUYV 1
#define SUN4I_FRONTEND_INPUT_FMT_DATA_PS_VYUY 2
#define SUN4I_FRONTEND_INPUT_FMT_DATA_PS_YVYU 3
+#define SUN4I_FRONTEND_INPUT_FMT_DATA_PS_UV 0
+#define SUN4I_FRONTEND_INPUT_FMT_DATA_PS_VU 1
#define SUN4I_FRONTEND_INPUT_FMT_DATA_PS_BGRX 0
#define SUN4I_FRONTEND_INPUT_FMT_DATA_PS_XRGB 1
diff --git a/drivers/gpu/drm/sun4i/sun4i_layer.c b/drivers/gpu/drm/sun4i/sun4i_layer.c
index 29631e0efde3..185ef38649aa 100644
--- a/drivers/gpu/drm/sun4i/sun4i_layer.c
+++ b/drivers/gpu/drm/sun4i/sun4i_layer.c
@@ -138,6 +138,10 @@ static const uint32_t sun4i_layer_formats[] = {
DRM_FORMAT_RGBA4444,
DRM_FORMAT_RGB888,
DRM_FORMAT_RGB565,
+ DRM_FORMAT_NV12,
+ DRM_FORMAT_NV16,
+ DRM_FORMAT_NV21,
+ DRM_FORMAT_NV61,
DRM_FORMAT_UYVY,
DRM_FORMAT_VYUY,
DRM_FORMAT_XRGB8888,
--
2.19.2
next prev parent reply other threads:[~2018-12-04 14:24 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-04 14:21 [PATCH v3 00/21] drm/sun4i: Support for linear and tiled YUV formats with the frontend Paul Kocialkowski
2018-12-04 14:21 ` [PATCH v3 01/21] drm/fourcc: Add format info helpers for checking YUV planes disposition Paul Kocialkowski
2018-12-04 14:21 ` [PATCH v3 02/21] drm/fourcc: Add format info helpers for checking YUV sub-sampling Paul Kocialkowski
2018-12-04 14:22 ` [PATCH v3 03/21] drm/sun4i: backend: Use explicit fourcc helpers for packed YUV422 check Paul Kocialkowski
2018-12-04 14:22 ` [PATCH v3 04/21] drm/sun4i: frontend: Pass DRM format info to input mode helper Paul Kocialkowski
2018-12-04 15:21 ` Maxime Ripard
2018-12-04 14:22 ` [PATCH v3 05/21] drm/sun4i: frontend: Determine input format based on colorspace Paul Kocialkowski
2018-12-04 14:22 ` [PATCH v3 06/21] drm/sun4i: frontend: Configure and enable YUV to RGB CSC when needed Paul Kocialkowski
2018-12-04 15:29 ` Maxime Ripard
2018-12-04 14:22 ` [PATCH v3 07/21] drm/sun4i: frontend: Add support for packed YUV422 input formats Paul Kocialkowski
2018-12-04 15:29 ` Maxime Ripard
2018-12-04 14:22 ` Paul Kocialkowski [this message]
2018-12-04 15:30 ` [PATCH v3 08/21] drm/sun4i: frontend: Add support for semi-planar YUV " Maxime Ripard
2018-12-04 14:22 ` [PATCH v3 09/21] drm/sun4i: frontend: Add support for planar " Paul Kocialkowski
2018-12-04 15:30 ` Maxime Ripard
2018-12-04 14:22 ` [PATCH v3 10/21] drm/fourcc: Add definitions for Allwinner vendor and VPU tiled format Paul Kocialkowski
2018-12-04 14:22 ` [PATCH v3 11/21] drm/sun4i: frontend: Add support for tiled YUV input mode configuration Paul Kocialkowski
2018-12-04 15:31 ` Maxime Ripard
2018-12-04 14:22 ` [PATCH v3 12/21] drm/sun4i: Add buffer stride and offset configuration for tiling mode Paul Kocialkowski
2018-12-04 15:34 ` Maxime Ripard
2018-12-04 14:22 ` [PATCH v3 13/21] drm/sun4i: frontend: Add and use helper for checking tiling support Paul Kocialkowski
2018-12-04 15:34 ` Maxime Ripard
2018-12-04 14:22 ` [PATCH v3 14/21] drm/sun4i: layer: Add tiled modifier support and helper Paul Kocialkowski
2018-12-04 15:34 ` Maxime Ripard
2018-12-04 14:22 ` [PATCH v3 15/21] drm/sun4i: drv: Allow framebuffer modifiers in mode config Paul Kocialkowski
2018-12-04 15:34 ` Maxime Ripard
2018-12-04 14:22 ` [PATCH v3 16/21] drm/sun4i: Move access control before setting the register as documented Paul Kocialkowski
2018-12-04 14:22 ` [PATCH v3 17/21] drm/sun4i: frontend: Add a quirk structure Paul Kocialkowski
2018-12-04 14:22 ` [PATCH v3 18/21] drm/sun4i: Set the coef_rdy bit right after the coef have been set Paul Kocialkowski
2018-12-04 14:22 ` [PATCH v3 19/21] drm/sun4i: Make COEF_RDY conditional Paul Kocialkowski
2018-12-04 14:22 ` [PATCH v3 20/21] drm/sun4i: frontend: Move the FIR filter phases to our quirks Paul Kocialkowski
2018-12-04 14:22 ` [PATCH v3 21/21] drm/sun4i: frontend: Add A20-specific device-tree compatible and quirks Paul Kocialkowski
2018-12-04 15:35 ` Maxime Ripard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181204142218.16284-9-paul.kocialkowski@bootlin.com \
--to=paul.kocialkowski@bootlin.com \
--cc=airlied@linux.ie \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sunxi@googlegroups.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=maxime.ripard@bootlin.com \
--cc=sean@poorly.run \
--cc=thomas.petazzoni@bootlin.com \
--cc=wens@csie.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®