Merge tag 'imx-drm-fixes-2018-08-03' of git://git.pengutronix.de/git/pza/linux into...
authorDave Airlie <airlied@redhat.com>
Fri, 10 Aug 2018 01:37:30 +0000 (11:37 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 10 Aug 2018 01:37:35 +0000 (11:37 +1000)
drm/imx: ipu-v3 plane offset and IPU id fixes

- Fix U/V plane offsets for odd vertical offsets. Due to wrong operator
  order, the y offset was not rounded down properly for vertically
  chroma subsampled planar formats.
- Fix IPU id number for boards that don't have an OF alias for their
  single IPU in the device tree. This is necessary to support imx-media
  on i.MX51 and i.MX53 SoCs.

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Philipp Zabel <p.zabel@pengutronix.de>
Link: https://patchwork.freedesktop.org/patch/msgid/1533552680.4204.14.camel@pengutronix.de
drivers/gpu/ipu-v3/ipu-common.c
drivers/gpu/ipu-v3/ipu-cpmem.c

index 66e9405faedc7d1933456e3b1c20a85335c6f5e7..474b00e19697d90e7a60ee60fb8f8badd330f81e 100644 (file)
@@ -1405,6 +1405,8 @@ static int ipu_probe(struct platform_device *pdev)
                return -ENODEV;
 
        ipu->id = of_alias_get_id(np, "ipu");
+       if (ipu->id < 0)
+               ipu->id = 0;
 
        if (of_device_is_compatible(np, "fsl,imx6qp-ipu") &&
            IS_ENABLED(CONFIG_DRM)) {
index 0f1155ea0fbd2989542fddd76e16adff280e8093..a9d2501500a19750d0249b82d52ff67553507b74 100644 (file)
@@ -547,17 +547,17 @@ static const struct ipu_rgb def_bgra_16 = {
 
 #define Y_OFFSET(pix, x, y)    ((x) + pix->width * (y))
 #define U_OFFSET(pix, x, y)    ((pix->width * pix->height) +           \
-                                (pix->width * (y) / 4) + (x) / 2)
+                                (pix->width * ((y) / 2) / 2) + (x) / 2)
 #define V_OFFSET(pix, x, y)    ((pix->width * pix->height) +           \
                                 (pix->width * pix->height / 4) +       \
-                                (pix->width * (y) / 4) + (x) / 2)
+                                (pix->width * ((y) / 2) / 2) + (x) / 2)
 #define U2_OFFSET(pix, x, y)   ((pix->width * pix->height) +           \
                                 (pix->width * (y) / 2) + (x) / 2)
 #define V2_OFFSET(pix, x, y)   ((pix->width * pix->height) +           \
                                 (pix->width * pix->height / 2) +       \
                                 (pix->width * (y) / 2) + (x) / 2)
 #define UV_OFFSET(pix, x, y)   ((pix->width * pix->height) +   \
-                                (pix->width * (y) / 2) + (x))
+                                (pix->width * ((y) / 2)) + (x))
 #define UV2_OFFSET(pix, x, y)  ((pix->width * pix->height) +   \
                                 (pix->width * y) + (x))