Use drm_format_width_bytes() to support non-byte aligned formats.

Signed-off-by: Hyun Kwon <hyun.k...@xilinx.com>
---
v3
- 2 patches are squashed
---
---
 drivers/gpu/drm/xlnx/zynqmp_disp.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xlnx/zynqmp_disp.c 
b/drivers/gpu/drm/xlnx/zynqmp_disp.c
index e47d77d..13053fc 100644
--- a/drivers/gpu/drm/xlnx/zynqmp_disp.c
+++ b/drivers/gpu/drm/xlnx/zynqmp_disp.c
@@ -968,6 +968,24 @@ static const struct zynqmp_disp_fmt av_buf_vid_fmts[] = {
                .sf[0]          = ZYNQMP_DISP_AV_BUF_8BIT_SF,
                .sf[1]          = ZYNQMP_DISP_AV_BUF_8BIT_SF,
                .sf[2]          = ZYNQMP_DISP_AV_BUF_8BIT_SF,
+       }, {
+               .drm_fmt        = DRM_FORMAT_XV15,
+               .disp_fmt       = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_YV16CI_420_10,
+               .rgb            = false,
+               .swap           = false,
+               .chroma_sub     = true,
+               .sf[0]          = ZYNQMP_DISP_AV_BUF_10BIT_SF,
+               .sf[1]          = ZYNQMP_DISP_AV_BUF_10BIT_SF,
+               .sf[2]          = ZYNQMP_DISP_AV_BUF_10BIT_SF,
+       }, {
+               .drm_fmt        = DRM_FORMAT_XV20,
+               .disp_fmt       = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_YV16CI_10,
+               .rgb            = false,
+               .swap           = false,
+               .chroma_sub     = true,
+               .sf[0]          = ZYNQMP_DISP_AV_BUF_10BIT_SF,
+               .sf[1]          = ZYNQMP_DISP_AV_BUF_10BIT_SF,
+               .sf[2]          = ZYNQMP_DISP_AV_BUF_10BIT_SF,
        }
 };
 
@@ -2133,6 +2151,7 @@ static int zynqmp_disp_plane_mode_set(struct drm_plane 
*plane,
        for (i = 0; i < info->num_planes; i++) {
                unsigned int width = src_w / (i ? info->hsub : 1);
                unsigned int height = src_h / (i ? info->vsub : 1);
+               int width_bytes;
 
                paddr = drm_fb_cma_get_gem_addr(fb, plane->state, i);
                if (!paddr) {
@@ -2141,7 +2160,8 @@ static int zynqmp_disp_plane_mode_set(struct drm_plane 
*plane,
                }
 
                layer->dma[i].xt.numf = height;
-               layer->dma[i].sgl[0].size = width * info->cpp[i];
+               width_bytes = drm_format_plane_width_bytes(info, i, width);
+               layer->dma[i].sgl[0].size = width_bytes;
                layer->dma[i].sgl[0].icg = fb->pitches[i] -
                                           layer->dma[i].sgl[0].size;
                layer->dma[i].xt.src_start = paddr;
-- 
2.7.4

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to