[{"id":1761493,"web_url":"http://patchwork.ozlabs.org/comment/1761493/","msgid":"<CAJKOXPf=PBQaSd=m7NDbznHqPCSWR=6EYpJnn4AYTZe-3gtTkg@mail.gmail.com>","list_archive_url":null,"date":"2017-09-01T07:11:51","subject":"Re: [PATCH 3/3] drm/exynos/gsc: Add rotation hardware limits of\n\tgscaler","submitter":{"id":68952,"url":"http://patchwork.ozlabs.org/api/people/68952/","name":"Krzysztof Kozlowski","email":"krzk@kernel.org"},"content":"On Fri, Sep 1, 2017 at 3:47 AM, Hoegeun Kwon <hoegeun.kwon@samsung.com> wrote:\n> The gscaler has hardware rotation limits that need to be imported from\n> dts. Parse them and add them to the property list.\n>\n> The rotation hardware limits are related to the cropped source size.\n> When swap occurs, use rot_max size instead of crop_max size.\n>\n> Also the scaling limits are related to post size, use pos size to\n> check the limits.\n>\n> Signed-off-by: Hoegeun Kwon <hoegeun.kwon@samsung.com>\n> ---\n>  drivers/gpu/drm/exynos/exynos_drm_gsc.c | 63 +++++++++++++++++++++------------\n>  include/uapi/drm/exynos_drm.h           |  2 ++\n>  2 files changed, 42 insertions(+), 23 deletions(-)\n>\n> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gsc.c b/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n> index 0506b2b..dd9b057 100644\n> --- a/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n> +++ b/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n> @@ -1401,6 +1401,23 @@ static int gsc_ippdrv_check_property(struct device *dev,\n>         bool swap;\n>         int i;\n>\n> +       config = &property->config[EXYNOS_DRM_OPS_DST];\n> +\n> +       /* check for degree */\n> +       switch (config->degree) {\n> +       case EXYNOS_DRM_DEGREE_90:\n> +       case EXYNOS_DRM_DEGREE_270:\n> +               swap = true;\n> +               break;\n> +       case EXYNOS_DRM_DEGREE_0:\n> +       case EXYNOS_DRM_DEGREE_180:\n> +               swap = false;\n> +               break;\n> +       default:\n> +               DRM_ERROR(\"invalid degree.\\n\");\n> +               goto err_property;\n> +       }\n> +\n>         for_each_ipp_ops(i) {\n>                 if ((i == EXYNOS_DRM_OPS_SRC) &&\n>                         (property->cmd == IPP_CMD_WB))\n> @@ -1416,21 +1433,6 @@ static int gsc_ippdrv_check_property(struct device *dev,\n>                         goto err_property;\n>                 }\n>\n> -               /* check for degree */\n> -               switch (config->degree) {\n> -               case EXYNOS_DRM_DEGREE_90:\n> -               case EXYNOS_DRM_DEGREE_270:\n> -                       swap = true;\n> -                       break;\n> -               case EXYNOS_DRM_DEGREE_0:\n> -               case EXYNOS_DRM_DEGREE_180:\n> -                       swap = false;\n> -                       break;\n> -               default:\n> -                       DRM_ERROR(\"invalid degree.\\n\");\n> -                       goto err_property;\n> -               }\n> -\n>                 /* check for buffer bound */\n>                 if ((pos->x + pos->w > sz->hsize) ||\n>                         (pos->y + pos->h > sz->vsize)) {\n> @@ -1438,21 +1440,27 @@ static int gsc_ippdrv_check_property(struct device *dev,\n>                         goto err_property;\n>                 }\n>\n> +               /*\n> +                * The rotation hardware limits are related to the cropped\n> +                * source size. So use rot_max size to check the limits when\n> +                * swap happens. And also the scaling limits are related to pos\n> +                * size, use pos size to check the limits.\n> +                */\n>                 /* check for crop */\n>                 if ((i == EXYNOS_DRM_OPS_SRC) && (pp->crop)) {\n>                         if (swap) {\n>                                 if ((pos->h < pp->crop_min.hsize) ||\n> -                                       (sz->vsize > pp->crop_max.hsize) ||\n> +                                       (pos->h > pp->rot_max.hsize) ||\n>                                         (pos->w < pp->crop_min.vsize) ||\n> -                                       (sz->hsize > pp->crop_max.vsize)) {\n> +                                       (pos->w > pp->rot_max.vsize)) {\n>                                         DRM_ERROR(\"out of crop size.\\n\");\n>                                         goto err_property;\n>                                 }\n>                         } else {\n>                                 if ((pos->w < pp->crop_min.hsize) ||\n> -                                       (sz->hsize > pp->crop_max.hsize) ||\n> +                                       (pos->w > pp->crop_max.hsize) ||\n>                                         (pos->h < pp->crop_min.vsize) ||\n> -                                       (sz->vsize > pp->crop_max.vsize)) {\n> +                                       (pos->h > pp->crop_max.vsize)) {\n>                                         DRM_ERROR(\"out of crop size.\\n\");\n>                                         goto err_property;\n>                                 }\n> @@ -1463,17 +1471,17 @@ static int gsc_ippdrv_check_property(struct device *dev,\n>                 if ((i == EXYNOS_DRM_OPS_DST) && (pp->scale)) {\n>                         if (swap) {\n>                                 if ((pos->h < pp->scale_min.hsize) ||\n> -                                       (sz->vsize > pp->scale_max.hsize) ||\n> +                                       (pos->h > pp->scale_max.hsize) ||\n>                                         (pos->w < pp->scale_min.vsize) ||\n> -                                       (sz->hsize > pp->scale_max.vsize)) {\n> +                                       (pos->w > pp->scale_max.vsize)) {\n>                                         DRM_ERROR(\"out of scale size.\\n\");\n>                                         goto err_property;\n>                                 }\n>                         } else {\n>                                 if ((pos->w < pp->scale_min.hsize) ||\n> -                                       (sz->hsize > pp->scale_max.hsize) ||\n> +                                       (pos->w > pp->scale_max.hsize) ||\n>                                         (pos->h < pp->scale_min.vsize) ||\n> -                                       (sz->vsize > pp->scale_max.vsize)) {\n> +                                       (pos->h > pp->scale_max.vsize)) {\n>                                         DRM_ERROR(\"out of scale size.\\n\");\n>                                         goto err_property;\n>                                 }\n> @@ -1676,6 +1684,15 @@ static int gsc_probe(struct platform_device *pdev)\n>                         dev_warn(dev, \"failed to get system register.\\n\");\n>                         ctx->sysreg = NULL;\n>                 }\n> +\n> +               ret = of_property_read_u32(dev->of_node, \"rot-max-hsize\",\n> +                               &ctx->ippdrv.prop_list.rot_max.hsize);\n> +               ret |= of_property_read_u32(dev->of_node, \"rot-max-vsize\",\n> +                               &ctx->ippdrv.prop_list.rot_max.vsize);\n> +               if (ret) {\n> +                       dev_err(dev, \"rot-max property should be provided by device tree.\\n\");\n> +                       return -EINVAL;\n> +               }\n\nYou're adding a required property thus breaking the ABI without\nexplicit reason. Also the bindings have to be updated.\n\nBest regards,\nKrzysztof\n--\nTo unsubscribe from this list: send the line \"unsubscribe devicetree\" in\nthe body of a message to majordomo@vger.kernel.org\nMore majordomo info at  http://vger.kernel.org/majordomo-info.html","headers":{"Return-Path":"<devicetree-owner@vger.kernel.org>","X-Original-To":"incoming-dt@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming-dt@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=devicetree-owner@vger.kernel.org; receiver=<UNKNOWN>)","mail.kernel.org;\n\tdmarc=none (p=none dis=none) header.from=kernel.org","mail.kernel.org;\n\tspf=none smtp.mailfrom=krzk@kernel.org"],"Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xk9R043w8z9s7C\n\tfor <incoming-dt@patchwork.ozlabs.org>;\n\tFri,  1 Sep 2017 17:11:56 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751330AbdIAHLy (ORCPT\n\t<rfc822;incoming-dt@patchwork.ozlabs.org>);\n\tFri, 1 Sep 2017 03:11:54 -0400","from mail.kernel.org ([198.145.29.99]:37846 \"EHLO mail.kernel.org\"\n\trhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP\n\tid S1751040AbdIAHLy (ORCPT <rfc822;devicetree@vger.kernel.org>);\n\tFri, 1 Sep 2017 03:11:54 -0400","from mail-io0-f172.google.com (mail-io0-f172.google.com\n\t[209.85.223.172])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128\n\tbits)) (No client certificate requested)\n\tby mail.kernel.org (Postfix) with ESMTPSA id 5680D21B66;\n\tFri,  1 Sep 2017 07:11:53 +0000 (UTC)","by mail-io0-f172.google.com with SMTP id f99so11608361ioi.3;\n\tFri, 01 Sep 2017 00:11:53 -0700 (PDT)","by 10.107.40.2 with HTTP; Fri, 1 Sep 2017 00:11:51 -0700 (PDT)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mail.kernel.org 5680D21B66","X-Gm-Message-State":"AHPjjUhMBfB8a8F6RjmD7kB5p66ZObU2Jm6SmD5aUZt0RsZNh5Nykcex\n\tzcYM9v8/qTtTM9KHcZcsKMh4w6YS9w==","X-Google-Smtp-Source":"ADKCNb7D64OuJ5O3KAdx0ImsvjexgjXEJlJG61gtncm88eWmExgytClaCieWmWn0KlzVOhXhGmHZF727EdhO7TbYcxQ=","X-Received":"by 10.36.110.73 with SMTP id w70mr681242itc.18.1504249912609;\n\tFri, 01 Sep 2017 00:11:52 -0700 (PDT)","MIME-Version":"1.0","In-Reply-To":"<1504230476-1878-4-git-send-email-hoegeun.kwon@samsung.com>","References":"<CGME20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d@epcas2p1.samsung.com>\n\t<1504230476-1878-1-git-send-email-hoegeun.kwon@samsung.com>\n\t<1504230476-1878-4-git-send-email-hoegeun.kwon@samsung.com>","From":"Krzysztof Kozlowski <krzk@kernel.org>","Date":"Fri, 1 Sep 2017 09:11:51 +0200","X-Gmail-Original-Message-ID":"<CAJKOXPf=PBQaSd=m7NDbznHqPCSWR=6EYpJnn4AYTZe-3gtTkg@mail.gmail.com>","Message-ID":"<CAJKOXPf=PBQaSd=m7NDbznHqPCSWR=6EYpJnn4AYTZe-3gtTkg@mail.gmail.com>","Subject":"Re: [PATCH 3/3] drm/exynos/gsc: Add rotation hardware limits of\n\tgscaler","To":"Hoegeun Kwon <hoegeun.kwon@samsung.com>","Cc":"Inki Dae <inki.dae@samsung.com>, jy0922.shim@samsung.com,\n\tSeung Woo Kim <sw0312.kim@samsung.com>, airlied@linux.ie,\n\tkgene@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com,\n\tcatalin.marinas@arm.com, will.deacon@arm.com,\n\tdri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org,\n\tlinux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org,\n\tdevicetree@vger.kernel.org","Content-Type":"text/plain; charset=\"UTF-8\"","Sender":"devicetree-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<devicetree.vger.kernel.org>","X-Mailing-List":"devicetree@vger.kernel.org"}},{"id":1761500,"web_url":"http://patchwork.ozlabs.org/comment/1761500/","msgid":"<10747c31-55fc-6464-eb00-99da6d66fca6@samsung.com>","list_archive_url":null,"date":"2017-09-01T07:31:46","subject":"Re: [PATCH 3/3] drm/exynos/gsc: Add rotation hardware limits of\n\tgscaler","submitter":{"id":4023,"url":"http://patchwork.ozlabs.org/api/people/4023/","name":"Marek Szyprowski","email":"m.szyprowski@samsung.com"},"content":"Hi Hoegeun,\n\nOn 2017-09-01 03:47, Hoegeun Kwon wrote:\n> The gscaler has hardware rotation limits that need to be imported from\n> dts. Parse them and add them to the property list.\n>\n> The rotation hardware limits are related to the cropped source size.\n> When swap occurs, use rot_max size instead of crop_max size.\n>\n> Also the scaling limits are related to post size, use pos size to\n> check the limits.\n>\n> Signed-off-by: Hoegeun Kwon <hoegeun.kwon@samsung.com>\n> ---\n>   drivers/gpu/drm/exynos/exynos_drm_gsc.c | 63 +++++++++++++++++++++------------\n>   include/uapi/drm/exynos_drm.h           |  2 ++\n>   2 files changed, 42 insertions(+), 23 deletions(-)\n>\n> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gsc.c b/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n> index 0506b2b..dd9b057 100644\n> --- a/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n> +++ b/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n> @@ -1401,6 +1401,23 @@ static int gsc_ippdrv_check_property(struct device *dev,\n>   \tbool swap;\n>   \tint i;\n>   \n> +\tconfig = &property->config[EXYNOS_DRM_OPS_DST];\n> +\n> +\t/* check for degree */\n> +\tswitch (config->degree) {\n> +\tcase EXYNOS_DRM_DEGREE_90:\n> +\tcase EXYNOS_DRM_DEGREE_270:\n> +\t\tswap = true;\n> +\t\tbreak;\n> +\tcase EXYNOS_DRM_DEGREE_0:\n> +\tcase EXYNOS_DRM_DEGREE_180:\n> +\t\tswap = false;\n> +\t\tbreak;\n> +\tdefault:\n> +\t\tDRM_ERROR(\"invalid degree.\\n\");\n> +\t\tgoto err_property;\n> +\t}\n> +\n>   \tfor_each_ipp_ops(i) {\n>   \t\tif ((i == EXYNOS_DRM_OPS_SRC) &&\n>   \t\t\t(property->cmd == IPP_CMD_WB))\n> @@ -1416,21 +1433,6 @@ static int gsc_ippdrv_check_property(struct device *dev,\n>   \t\t\tgoto err_property;\n>   \t\t}\n>   \n> -\t\t/* check for degree */\n> -\t\tswitch (config->degree) {\n> -\t\tcase EXYNOS_DRM_DEGREE_90:\n> -\t\tcase EXYNOS_DRM_DEGREE_270:\n> -\t\t\tswap = true;\n> -\t\t\tbreak;\n> -\t\tcase EXYNOS_DRM_DEGREE_0:\n> -\t\tcase EXYNOS_DRM_DEGREE_180:\n> -\t\t\tswap = false;\n> -\t\t\tbreak;\n> -\t\tdefault:\n> -\t\t\tDRM_ERROR(\"invalid degree.\\n\");\n> -\t\t\tgoto err_property;\n> -\t\t}\n> -\n>   \t\t/* check for buffer bound */\n>   \t\tif ((pos->x + pos->w > sz->hsize) ||\n>   \t\t\t(pos->y + pos->h > sz->vsize)) {\n> @@ -1438,21 +1440,27 @@ static int gsc_ippdrv_check_property(struct device *dev,\n>   \t\t\tgoto err_property;\n>   \t\t}\n>   \n> +\t\t/*\n> +\t\t * The rotation hardware limits are related to the cropped\n> +\t\t * source size. So use rot_max size to check the limits when\n> +\t\t * swap happens. And also the scaling limits are related to pos\n> +\t\t * size, use pos size to check the limits.\n> +\t\t */\n>   \t\t/* check for crop */\n>   \t\tif ((i == EXYNOS_DRM_OPS_SRC) && (pp->crop)) {\n>   \t\t\tif (swap) {\n>   \t\t\t\tif ((pos->h < pp->crop_min.hsize) ||\n> -\t\t\t\t\t(sz->vsize > pp->crop_max.hsize) ||\n> +\t\t\t\t\t(pos->h > pp->rot_max.hsize) ||\n>   \t\t\t\t\t(pos->w < pp->crop_min.vsize) ||\n> -\t\t\t\t\t(sz->hsize > pp->crop_max.vsize)) {\n> +\t\t\t\t\t(pos->w > pp->rot_max.vsize)) {\n>   \t\t\t\t\tDRM_ERROR(\"out of crop size.\\n\");\n>   \t\t\t\t\tgoto err_property;\n>   \t\t\t\t}\n>   \t\t\t} else {\n>   \t\t\t\tif ((pos->w < pp->crop_min.hsize) ||\n> -\t\t\t\t\t(sz->hsize > pp->crop_max.hsize) ||\n> +\t\t\t\t\t(pos->w > pp->crop_max.hsize) ||\n>   \t\t\t\t\t(pos->h < pp->crop_min.vsize) ||\n> -\t\t\t\t\t(sz->vsize > pp->crop_max.vsize)) {\n> +\t\t\t\t\t(pos->h > pp->crop_max.vsize)) {\n>   \t\t\t\t\tDRM_ERROR(\"out of crop size.\\n\");\n>   \t\t\t\t\tgoto err_property;\n>   \t\t\t\t}\n> @@ -1463,17 +1471,17 @@ static int gsc_ippdrv_check_property(struct device *dev,\n>   \t\tif ((i == EXYNOS_DRM_OPS_DST) && (pp->scale)) {\n>   \t\t\tif (swap) {\n>   \t\t\t\tif ((pos->h < pp->scale_min.hsize) ||\n> -\t\t\t\t\t(sz->vsize > pp->scale_max.hsize) ||\n> +\t\t\t\t\t(pos->h > pp->scale_max.hsize) ||\n>   \t\t\t\t\t(pos->w < pp->scale_min.vsize) ||\n> -\t\t\t\t\t(sz->hsize > pp->scale_max.vsize)) {\n> +\t\t\t\t\t(pos->w > pp->scale_max.vsize)) {\n>   \t\t\t\t\tDRM_ERROR(\"out of scale size.\\n\");\n>   \t\t\t\t\tgoto err_property;\n>   \t\t\t\t}\n>   \t\t\t} else {\n>   \t\t\t\tif ((pos->w < pp->scale_min.hsize) ||\n> -\t\t\t\t\t(sz->hsize > pp->scale_max.hsize) ||\n> +\t\t\t\t\t(pos->w > pp->scale_max.hsize) ||\n>   \t\t\t\t\t(pos->h < pp->scale_min.vsize) ||\n> -\t\t\t\t\t(sz->vsize > pp->scale_max.vsize)) {\n> +\t\t\t\t\t(pos->h > pp->scale_max.vsize)) {\n>   \t\t\t\t\tDRM_ERROR(\"out of scale size.\\n\");\n>   \t\t\t\t\tgoto err_property;\n>   \t\t\t\t}\n> @@ -1676,6 +1684,15 @@ static int gsc_probe(struct platform_device *pdev)\n>   \t\t\tdev_warn(dev, \"failed to get system register.\\n\");\n>   \t\t\tctx->sysreg = NULL;\n>   \t\t}\n> +\n> +\t\tret = of_property_read_u32(dev->of_node, \"rot-max-hsize\",\n> +\t\t\t\t&ctx->ippdrv.prop_list.rot_max.hsize);\n> +\t\tret |= of_property_read_u32(dev->of_node, \"rot-max-vsize\",\n> +\t\t\t\t&ctx->ippdrv.prop_list.rot_max.vsize);\n> +\t\tif (ret) {\n> +\t\t\tdev_err(dev, \"rot-max property should be provided by device tree.\\n\");\n> +\t\t\treturn -EINVAL;\n> +\t\t}\n>   \t}\n>   \n>   \t/* clock control */\n> diff --git a/include/uapi/drm/exynos_drm.h b/include/uapi/drm/exynos_drm.h\n> index cb3e9f9..d5d5518 100644\n> --- a/include/uapi/drm/exynos_drm.h\n> +++ b/include/uapi/drm/exynos_drm.h\n> @@ -192,6 +192,7 @@ enum drm_exynos_planer {\n>    * @crop_max: crop max resolution.\n>    * @scale_min: scale min resolution.\n>    * @scale_max: scale max resolution.\n> + * @rot_max: rotation max resolution.\n>    */\n>   struct drm_exynos_ipp_prop_list {\n>   \t__u32\tversion;\n> @@ -210,6 +211,7 @@ struct drm_exynos_ipp_prop_list {\n>   \tstruct drm_exynos_sz\tcrop_max;\n>   \tstruct drm_exynos_sz\tscale_min;\n>   \tstruct drm_exynos_sz\tscale_max;\n> +\tstruct drm_exynos_sz\trot_max;\n>   };\n>   \n>   /**\n\nIMO maximum supported picture size should be hardcoded into driver, there\nis no need to add device tree properties for that. Please also check v4l2\ndriver for Exynos GSC.\n\nCurrently it uses only one compatible - \"exynos5-gsc\", but imho You should\nsimply replace it with \"exynos5250-gsc\" and \"exynos5420-gsc\", and add those\nvariants with proper maximum supported size (2047 and 2016 respectively).\n\nBest regards","headers":{"Return-Path":"<devicetree-owner@vger.kernel.org>","X-Original-To":"incoming-dt@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming-dt@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=devicetree-owner@vger.kernel.org; receiver=<UNKNOWN>)","Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xk9tN5GtQz9sMN\n\tfor <incoming-dt@patchwork.ozlabs.org>;\n\tFri,  1 Sep 2017 17:32:12 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751631AbdIAHb4 (ORCPT\n\t<rfc822;incoming-dt@patchwork.ozlabs.org>);\n\tFri, 1 Sep 2017 03:31:56 -0400","from mailout2.w1.samsung.com ([210.118.77.12]:54528 \"EHLO\n\tmailout2.w1.samsung.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751415AbdIAHbw (ORCPT\n\t<rfc822; devicetree@vger.kernel.org>); Fri, 1 Sep 2017 03:31:52 -0400","from eucas1p2.samsung.com (unknown [182.198.249.207])\n\tby mailout2.w1.samsung.com (KnoxPortal) with ESMTP id\n\t20170901073149euoutp0275f975712251bcde0f32329d86c5460e~gLGoVhDjj2226122261euoutp02Y;\n\tFri,  1 Sep 2017 07:31:49 +0000 (GMT)","from eusmges3.samsung.com (unknown [203.254.199.242]) by\n\teucas1p2.samsung.com (KnoxPortal) with ESMTP id\n\t20170901073149eucas1p23cd2b790df80204ef08226b6a55792e5~gLGntaLkz1827518275eucas1p2Y;\n\tFri,  1 Sep 2017 07:31:49 +0000 (GMT)","from eucas1p1.samsung.com ( [182.198.249.206]) by\n\teusmges3.samsung.com (EUCPMTA) with SMTP id 49.6E.12867.4EC09A95;\n\tFri,  1 Sep 2017 08:31:48 +0100 (BST)","from eusmgms2.samsung.com (unknown [182.198.249.180]) by\n\teucas1p2.samsung.com (KnoxPortal) with ESMTP id\n\t20170901073148eucas1p23bca921709bb3616122d5671cd551ada~gLGnCdeaY1826818268eucas1p2d;\n\tFri,  1 Sep 2017 07:31:48 +0000 (GMT)","from eusync1.samsung.com ( [203.254.199.211]) by\n\teusmgms2.samsung.com (EUCPMTA) with SMTP id C5.DA.20118.4EC09A95;\n\tFri,  1 Sep 2017 08:31:48 +0100 (BST)","from [106.116.147.30] by eusync1.samsung.com (Oracle\n\tCommunications Messaging Server 7.0.5.31.0 64bit (built May 5 2014))\n\twith ESMTPA id <0OVL00689BKZC180@eusync1.samsung.com>;\n\tFri, 01 Sep 2017 08:31:48 +0100 (BST)"],"X-AuditID":"cbfec7f2-f793b6d000003243-b7-59a90ce42d16","Subject":"Re: [PATCH 3/3] drm/exynos/gsc: Add rotation hardware limits of\n\tgscaler","To":"Hoegeun Kwon <hoegeun.kwon@samsung.com>, inki.dae@samsung.com,\n\tjy0922.shim@samsung.com, sw0312.kim@samsung.com, airlied@linux.ie,\n\tkgene@kernel.org, krzk@kernel.org, robh+dt@kernel.org,\n\tmark.rutland@arm.com, catalin.marinas@arm.com, will.deacon@arm.com","Cc":"dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org,\n\tlinux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org,\n\tdevicetree@vger.kernel.org","From":"Marek Szyprowski <m.szyprowski@samsung.com>","Message-id":"<10747c31-55fc-6464-eb00-99da6d66fca6@samsung.com>","Date":"Fri, 01 Sep 2017 09:31:46 +0200","User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101\n\tThunderbird/52.3.0","MIME-version":"1.0","In-reply-to":"<1504230476-1878-4-git-send-email-hoegeun.kwon@samsung.com>","Content-type":"text/plain; charset=\"utf-8\"; format=\"flowed\"","Content-transfer-encoding":"7bit","Content-language":"en-US","X-Brightmail-Tracker":["H4sIAAAAAAAAA02Sa0hTYRjHec85OzsuZ2/T8lG7LvqQq1VUdrCSjKhDH7ooFEZUI0/Ociab\n\tSoaRGbM1LUWLbOpWUJaXymZoaEWuaGk4L0Wi5QXtounQNMUitbaj4Lff/33+7/O8/4eXIWVd\n\tIn8mOjae18aqYuS0hKp489ux+otnUcTaZ49Xs1cctQQ7WJiBWMtrh4j9MDpIs4P3jDSb3ZlF\n\tsb0dTRSb2dNPsg0NZWLW2vNRxL6vyqfZ3IYXBHu3pYlg9c9fi9ncnD6a7fv5ltqGuVJzKeKs\n\txZdprnKsS8R1ptsJrvzOee7qk2LEjVgX7xMfkmyJ5GOiE3ntmpBjErX52hQZ16Y8M2AzUCmo\n\tZrkReTCAN8DDllIk8AJo7HhEG5GEkeG7CJqzbpCCGEHw1VZBzdyobp8ghEIhgs76Z5QgviMw\n\t1ZlJl8sbh0HKxVF3Xx+sJ+B6XqDLROJiBG0ms7tA43VgdBppF0txCIw3l7hHUHgFdPc3us/n\n\t48NwydZKCp55MJ7T4fZ4YA4+ZrQSLiZxMHyb1IsEXgLlpU5SYF+4qG91vw6wnoGfr8rERsT8\n\tF4vA+pIU4uyAbEMWIbA3/LA/EQu8EN7npE9HzkSQqlcInIvA4ZQKvBle2Zum53pBdoVrX672\n\tUjCkyQQLBy2fR6bbh0Lqzfzp/bYi+OVsIbLQUtOsaKZZcUyz4phmxbmFqGLkwyfoNFG8br1S\n\tp9LoEmKjlMdPa6zo/797N2kffopG3wbbEGaQ3FPau/1+hEykStQlaWwIGFLuIz1AF0XIpJGq\n\tpLO89vRRbUIMr7OhAIaS+0q3HkqLkOEoVTx/iufjeO1MlWA8/FNQqHLvQFi/urJcWTBcreiO\n\tDpqbtvng5za1pd3vyPiFAHXcppNeXeeSE6ryVu3Mz+3eVZKzG8s3rX1kCLbMGyqgwpeFGXvL\n\t/sSJx2Rj+/9iamO65VNy+EqD2cdfsb4mZumJjDkdCs2D29iOKoNqmUC/qIqC5vpjjiGJZWBi\n\tT92SKTmlU6vWBZJaneof0hXarnMDAAA=","H4sIAAAAAAAAA+NgFmpileLIzCtJLcpLzFFi42I5/e/4Zd0nPCsjDU5t4rfoPXeSyeL9sh5G\n\ti/lHzrFaXPn6ns3i/fIuNotJ9yewWLy4d5HFov/xa2aL8+c3sFtsenyN1eLyrjlsFjPO72Oy\n\tWHr9IpNF694j7BYzJr9ks3j58QSLg4DHmnlrGD02repk89j+7QGrx/3u40wem5fUe/RtWcXo\n\t8XmTXAB7lJtNRmpiSmqRQmpecn5KZl66rVJoiJuuhZJCXmJuqq1ShK5vSJCSQlliTimQZ2SA\n\tBhycA9yDlfTtEtwy5k35z1xwS6/izaEOlgbGg8pdjJwcEgImErvv/mWCsMUkLtxbz9bFyMUh\n\tJLCEUWLjz4UsEM5zRokf95+zgFQJCwRIHDx0EKxKRKCVSeLAnAPMIA6zwCpGibkfn7JCtNxk\n\tlHj+bwfYYDYBQ4mut11sIDavgJ3Ej0urwUaxCKhKPHp9ASwuKhAj8fPSIxaIGkGJH5Pvgdmc\n\tAh4S13pugs1hFjCT+PLyMCuELS+xec1bZghbXKK59SbLBEbBWUjaZyFpmYWkZRaSlgWMLKsY\n\tRVJLi3PTc4uN9IoTc4tL89L1kvNzNzEC43/bsZ9bdjB2vQs+xCjAwajEw7uCa0WkEGtiWXFl\n\t7iFGCQ5mJRHeMLaVkUK8KYmVValF+fFFpTmpxYcYTYGem8gsJZqcD0xNeSXxhiaG5paGRsYW\n\tFuZGRkrivOqXmyKFBNITS1KzU1MLUotg+pg4OKUaGA2mHPg3q9ly75k6cwEfjy2sGjm+r9bm\n\tmslXP90trjNtXebhqNiep4Zrgla51jS6ae65JBJVc0SWx6ik3UjgxH611mVfGZ1avv1NUXaZ\n\tqxZycXpRqI+Jxmz1Gj/Vug0iPRsUzjiL8cix+It1irvsU6+4X/Nx6rXkF8x9a6RVuq4Z+di/\n\tzdZRYinOSDTUYi4qTgQA/5VMWBUDAAA="],"X-MTR":"20000000000000000@CPGS","X-CMS-MailID":"20170901073148eucas1p23bca921709bb3616122d5671cd551ada","X-Msg-Generator":"CA","X-Sender-IP":"182.198.249.180","X-Local-Sender":"=?utf-8?q?Marek_Szyprowski=1BSRPOL-Kernel_=28TP=29=1B?=\n\t=?utf-8?b?7IK87ISx7KCE7J6QG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?=","X-Global-Sender":"=?utf-8?q?Marek_Szyprowski=1BSRPOL-Kernel_=28TP=29=1BSam?=\n\t=?utf-8?q?sung_Electronics=1BSenior_Software_Engineer?=","X-Sender-Code":"=?utf-8?q?C10=1BEHQ=1BC10CD02CD027392?=","CMS-TYPE":"201P","X-CMS-RootMailID":"20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d","X-RootMTR":"20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d","References":"<1504230476-1878-1-git-send-email-hoegeun.kwon@samsung.com>\n\t<CGME20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d@epcas2p1.samsung.com>\n\t<1504230476-1878-4-git-send-email-hoegeun.kwon@samsung.com>","Sender":"devicetree-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<devicetree.vger.kernel.org>","X-Mailing-List":"devicetree@vger.kernel.org"}},{"id":1762441,"web_url":"http://patchwork.ozlabs.org/comment/1762441/","msgid":"<7e628ff8-82be-a295-90fa-8f547a541cb3@samsung.com>","list_archive_url":null,"date":"2017-09-04T06:19:55","subject":"Re: [PATCH 3/3] drm/exynos/gsc: Add rotation hardware limits of\n\tgscaler","submitter":{"id":70608,"url":"http://patchwork.ozlabs.org/api/people/70608/","name":"Hoegeun Kwon","email":"hoegeun.kwon@samsung.com"},"content":"On 09/01/2017 04:31 PM, Marek Szyprowski wrote:\n> Hi Hoegeun,\n>\n> On 2017-09-01 03:47, Hoegeun Kwon wrote:\n>> The gscaler has hardware rotation limits that need to be imported from\n>> dts. Parse them and add them to the property list.\n>>\n>> The rotation hardware limits are related to the cropped source size.\n>> When swap occurs, use rot_max size instead of crop_max size.\n>>\n>> Also the scaling limits are related to post size, use pos size to\n>> check the limits.\n>>\n>> Signed-off-by: Hoegeun Kwon <hoegeun.kwon@samsung.com>\n>> ---\n>>   drivers/gpu/drm/exynos/exynos_drm_gsc.c | 63 \n>> +++++++++++++++++++++------------\n>>   include/uapi/drm/exynos_drm.h           |  2 ++\n>>   2 files changed, 42 insertions(+), 23 deletions(-)\n>>\n>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gsc.c \n>> b/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n>> index 0506b2b..dd9b057 100644\n>> --- a/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n>> +++ b/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n>> @@ -1401,6 +1401,23 @@ static int gsc_ippdrv_check_property(struct \n>> device *dev,\n>>       bool swap;\n>>       int i;\n>>   +    config = &property->config[EXYNOS_DRM_OPS_DST];\n>> +\n>> +    /* check for degree */\n>> +    switch (config->degree) {\n>> +    case EXYNOS_DRM_DEGREE_90:\n>> +    case EXYNOS_DRM_DEGREE_270:\n>> +        swap = true;\n>> +        break;\n>> +    case EXYNOS_DRM_DEGREE_0:\n>> +    case EXYNOS_DRM_DEGREE_180:\n>> +        swap = false;\n>> +        break;\n>> +    default:\n>> +        DRM_ERROR(\"invalid degree.\\n\");\n>> +        goto err_property;\n>> +    }\n>> +\n>>       for_each_ipp_ops(i) {\n>>           if ((i == EXYNOS_DRM_OPS_SRC) &&\n>>               (property->cmd == IPP_CMD_WB))\n>> @@ -1416,21 +1433,6 @@ static int gsc_ippdrv_check_property(struct \n>> device *dev,\n>>               goto err_property;\n>>           }\n>>   -        /* check for degree */\n>> -        switch (config->degree) {\n>> -        case EXYNOS_DRM_DEGREE_90:\n>> -        case EXYNOS_DRM_DEGREE_270:\n>> -            swap = true;\n>> -            break;\n>> -        case EXYNOS_DRM_DEGREE_0:\n>> -        case EXYNOS_DRM_DEGREE_180:\n>> -            swap = false;\n>> -            break;\n>> -        default:\n>> -            DRM_ERROR(\"invalid degree.\\n\");\n>> -            goto err_property;\n>> -        }\n>> -\n>>           /* check for buffer bound */\n>>           if ((pos->x + pos->w > sz->hsize) ||\n>>               (pos->y + pos->h > sz->vsize)) {\n>> @@ -1438,21 +1440,27 @@ static int gsc_ippdrv_check_property(struct \n>> device *dev,\n>>               goto err_property;\n>>           }\n>>   +        /*\n>> +         * The rotation hardware limits are related to the cropped\n>> +         * source size. So use rot_max size to check the limits when\n>> +         * swap happens. And also the scaling limits are related to pos\n>> +         * size, use pos size to check the limits.\n>> +         */\n>>           /* check for crop */\n>>           if ((i == EXYNOS_DRM_OPS_SRC) && (pp->crop)) {\n>>               if (swap) {\n>>                   if ((pos->h < pp->crop_min.hsize) ||\n>> -                    (sz->vsize > pp->crop_max.hsize) ||\n>> +                    (pos->h > pp->rot_max.hsize) ||\n>>                       (pos->w < pp->crop_min.vsize) ||\n>> -                    (sz->hsize > pp->crop_max.vsize)) {\n>> +                    (pos->w > pp->rot_max.vsize)) {\n>>                       DRM_ERROR(\"out of crop size.\\n\");\n>>                       goto err_property;\n>>                   }\n>>               } else {\n>>                   if ((pos->w < pp->crop_min.hsize) ||\n>> -                    (sz->hsize > pp->crop_max.hsize) ||\n>> +                    (pos->w > pp->crop_max.hsize) ||\n>>                       (pos->h < pp->crop_min.vsize) ||\n>> -                    (sz->vsize > pp->crop_max.vsize)) {\n>> +                    (pos->h > pp->crop_max.vsize)) {\n>>                       DRM_ERROR(\"out of crop size.\\n\");\n>>                       goto err_property;\n>>                   }\n>> @@ -1463,17 +1471,17 @@ static int gsc_ippdrv_check_property(struct \n>> device *dev,\n>>           if ((i == EXYNOS_DRM_OPS_DST) && (pp->scale)) {\n>>               if (swap) {\n>>                   if ((pos->h < pp->scale_min.hsize) ||\n>> -                    (sz->vsize > pp->scale_max.hsize) ||\n>> +                    (pos->h > pp->scale_max.hsize) ||\n>>                       (pos->w < pp->scale_min.vsize) ||\n>> -                    (sz->hsize > pp->scale_max.vsize)) {\n>> +                    (pos->w > pp->scale_max.vsize)) {\n>>                       DRM_ERROR(\"out of scale size.\\n\");\n>>                       goto err_property;\n>>                   }\n>>               } else {\n>>                   if ((pos->w < pp->scale_min.hsize) ||\n>> -                    (sz->hsize > pp->scale_max.hsize) ||\n>> +                    (pos->w > pp->scale_max.hsize) ||\n>>                       (pos->h < pp->scale_min.vsize) ||\n>> -                    (sz->vsize > pp->scale_max.vsize)) {\n>> +                    (pos->h > pp->scale_max.vsize)) {\n>>                       DRM_ERROR(\"out of scale size.\\n\");\n>>                       goto err_property;\n>>                   }\n>> @@ -1676,6 +1684,15 @@ static int gsc_probe(struct platform_device \n>> *pdev)\n>>               dev_warn(dev, \"failed to get system register.\\n\");\n>>               ctx->sysreg = NULL;\n>>           }\n>> +\n>> +        ret = of_property_read_u32(dev->of_node, \"rot-max-hsize\",\n>> +                &ctx->ippdrv.prop_list.rot_max.hsize);\n>> +        ret |= of_property_read_u32(dev->of_node, \"rot-max-vsize\",\n>> +                &ctx->ippdrv.prop_list.rot_max.vsize);\n>> +        if (ret) {\n>> +            dev_err(dev, \"rot-max property should be provided by \n>> device tree.\\n\");\n>> +            return -EINVAL;\n>> +        }\n>>       }\n>>         /* clock control */\n>> diff --git a/include/uapi/drm/exynos_drm.h \n>> b/include/uapi/drm/exynos_drm.h\n>> index cb3e9f9..d5d5518 100644\n>> --- a/include/uapi/drm/exynos_drm.h\n>> +++ b/include/uapi/drm/exynos_drm.h\n>> @@ -192,6 +192,7 @@ enum drm_exynos_planer {\n>>    * @crop_max: crop max resolution.\n>>    * @scale_min: scale min resolution.\n>>    * @scale_max: scale max resolution.\n>> + * @rot_max: rotation max resolution.\n>>    */\n>>   struct drm_exynos_ipp_prop_list {\n>>       __u32    version;\n>> @@ -210,6 +211,7 @@ struct drm_exynos_ipp_prop_list {\n>>       struct drm_exynos_sz    crop_max;\n>>       struct drm_exynos_sz    scale_min;\n>>       struct drm_exynos_sz    scale_max;\n>> +    struct drm_exynos_sz    rot_max;\n>>   };\n>>     /**\n>\n> IMO maximum supported picture size should be hardcoded into driver, there\n> is no need to add device tree properties for that. Please also check v4l2\n> driver for Exynos GSC.\n>\n> Currently it uses only one compatible - \"exynos5-gsc\", but imho You \n> should\n> simply replace it with \"exynos5250-gsc\" and \"exynos5420-gsc\", and add \n> those\n> variants with proper maximum supported size (2047 and 2016 respectively).\n>\n> Best regards\n\nHi Krzysztof and Marek,\n\nThanks Krzysztof and Marek reviews.\n\nAs Marek says, rot_max size will be hardcoded into driver,\nthen it will not break the ABI. And also,\nI will check the v4l2 driver for Exynos GSC.\n\nBest regards,\nHoegeun\n\n--\nTo unsubscribe from this list: send the line \"unsubscribe devicetree\" in\nthe body of a message to majordomo@vger.kernel.org\nMore majordomo info at  http://vger.kernel.org/majordomo-info.html","headers":{"Return-Path":"<devicetree-owner@vger.kernel.org>","X-Original-To":"incoming-dt@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming-dt@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=devicetree-owner@vger.kernel.org; receiver=<UNKNOWN>)","Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xm07m0jxmz9s7f\n\tfor <incoming-dt@patchwork.ozlabs.org>;\n\tMon,  4 Sep 2017 16:20:04 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1753228AbdIDGUB (ORCPT\n\t<rfc822;incoming-dt@patchwork.ozlabs.org>);\n\tMon, 4 Sep 2017 02:20:01 -0400","from mailout2.samsung.com ([203.254.224.25]:44254 \"EHLO\n\tmailout2.samsung.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1750782AbdIDGT7 (ORCPT\n\t<rfc822; devicetree@vger.kernel.org>); Mon, 4 Sep 2017 02:19:59 -0400","from epcas1p2.samsung.com (unknown [182.195.41.46])\n\tby mailout2.samsung.com (KnoxPortal) with ESMTP id\n\t20170904061957epoutp02ec017f8136c809f014b14ca43d50cbdc~hFDuscQOw2628626286epoutp02I;\n\tMon,  4 Sep 2017 06:19:57 +0000 (GMT)","from epsmges1p4.samsung.com (unknown [182.195.40.69]) by\n\tepcas1p4.samsung.com (KnoxPortal) with ESMTP id\n\t20170904061956epcas1p437863dc9c4883762f25cdd3dae701b20~hFDuTp1C72760727607epcas1p45;\n\tMon,  4 Sep 2017 06:19:56 +0000 (GMT)","from epcas1p1.samsung.com ( [182.195.41.45]) by\n\tepsmges1p4.samsung.com (Symantec Messaging Gateway) with SMTP id\n\tFA.BC.20296.C80FCA95; Mon,  4 Sep 2017 15:19:56 +0900 (KST)","from epsmgms2p1new.samsung.com (unknown [182.195.42.142]) by\n\tepcas1p1.samsung.com (KnoxPortal) with ESMTP id\n\t20170904061956epcas1p10f461c2b1a755037e3b2c835aad5b74a~hFDuAndej0423504235epcas1p1c;\n\tMon,  4 Sep 2017 06:19:56 +0000 (GMT)","from epmmp1.local.host ( [203.254.227.16]) by\n\tepsmgms2p1new.samsung.com (Symantec Messaging Gateway) with SMTP id\n\t25.02.11757.C80FCA95; Mon,  4 Sep 2017 15:19:56 +0900 (KST)","from [10.113.63.38] by mmp1.samsung.com (Oracle Communications\n\tMessaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id\n\t<0OVQ00NC9S975270@mmp1.samsung.com>;\n\tMon, 04 Sep 2017 15:19:55 +0900 (KST)"],"X-AuditID":"b6c32a38-f799e6d000004f48-ac-59acf08c90e0","Subject":"Re: [PATCH 3/3] drm/exynos/gsc: Add rotation hardware limits of\n\tgscaler","To":"Marek Szyprowski <m.szyprowski@samsung.com>,\n\tKrzysztof Kozlowski <krzk@kernel.org>,\n\tInki Dae <inki.dae@samsung.com>, sw0312.kim@samsung.com,\n\tairlied@linux.ie, kgene@kernel.org, krzk@kernel.org,\n\trobh+dt@kernel.org, mark.rutland@arm.com, catalin.marinas@arm.com,\n\twill.deacon@arm.com","Cc":"dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org,\n\tlinux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org,\n\tdevicetree@vger.kernel.org, Hoegeun Kwon <hoegeun.kwon@samsung.com>","From":"Hoegeun Kwon <hoegeun.kwon@samsung.com>","Message-id":"<7e628ff8-82be-a295-90fa-8f547a541cb3@samsung.com>","Date":"Mon, 04 Sep 2017 15:19:55 +0900","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.2.1","MIME-version":"1.0","In-reply-to":"<10747c31-55fc-6464-eb00-99da6d66fca6@samsung.com>","Content-type":"text/plain; charset=\"utf-8\"; format=\"flowed\"","Content-transfer-encoding":"7bit","Content-language":"en-US","X-Brightmail-Tracker":["H4sIAAAAAAAAA+NgFjrFJsWRmVeSWpSXmKPExsWy7bCmrm7PhzWRBpuuKVv0njvJZPF+WQ+j\n\txfwj51gtrnx9z2bxfnkXm8Wk+xNYLPofv2a2OH9+A7vFpsfXWC0u75rDZjHj/D4mi7VH7rJb\n\tLL1+kcmide8RdosZk1+yWbz8eILFQcBjzbw1jB6bVnWyeWz/9oDV4373cSaPzUvqPfq2rGL0\n\t+LxJLoA9KtUmIzUxJbVIITUvOT8lMy/dVsk7ON453tTMwFDX0NLCXEkhLzE31VbJxSdA1y0z\n\tB+h4JYWyxJxSoFBAYnGxkr6dTVF+aUmqQkZ+cYmtUrShoZGeoYG5npGRkZ6JcayVkSlQSUJq\n\tRvfG1awFdy0ruh7kNDCuUuti5OSQEDCRODT9NBOELSZx4d56ti5GLg4hgR2MEv9372aBcL4z\n\tSvz+f58JpmPh0m6oxG5GiU0Nn9hBEkICdxklJh82BrGFBYIkGpq/MoIUiQgsYpKY2jCZFcRh\n\tFrjMKDHxXj/YKDYBXYmvPdfBbF4BO4mLOyawgtgsAqoSa758AbNFBSIktn2fwQZRIyjxY/I9\n\tFhCbU8BeYuuWCWBxZgEriWf/WlkhbHmJzWveMkPY4hLNrTdZIM5exC6x/mE4hO0icfXoBTYI\n\tW1ji1fEtQB9wANnSEpeO2kKE6yUu7zgJ9oCEQAOjRP/E2ewQCWOJU12NTBDz+STefe1hhejl\n\tlehoE4Io8ZC4fuczNLQcJZpmzoGGaR+TxKS9O9knMMrPQvLOLCQvzELywiwkLyxgZFnFKJZa\n\tUJybnlpsWGCiV5yYW1yal66XnJ+7iRGcjrUsdjDuOedziFGAg1GJh1fh5ppIIdbEsuLK3EOM\n\tEhzMSiK8dm+AQrwpiZVVqUX58UWlOanFhxhNgcE9kVlKNDkfmCvySuINTSwNTMyMgOnO0tBQ\n\tSZxXdP21CCGB9MSS1OzU1ILUIpg+Jg5OqQbGlohbjh+7Xv15v4V5xsor16wn2Wbm8l949sag\n\tfZZz0KdsJv9FofYeq0pWL9W9x2V4I+Jhiw6X1r8HDP+fhxx8WTJBnmd+t8++Q7WyCsy21o06\n\t7/5N6J3FaPL14MdraeVfp3hMlXzDHX8+7ZxpRUay14MjBX/Fr+Uuu3i93dUwI/P0zdqHYlcS\n\tlViKMxINtZiLihMBjhnRJt0DAAA=","H4sIAAAAAAAAA+NgFlrMIsWRmVeSWpSXmKPExsVy+t9jAd2eD2siDSY8FrDoPXeSyeL9sh5G\n\ti/lHzrFaXPn6ns3i/fIuNotJ9yewWPQ/fs1scf78BnaLTY+vsVpc3jWHzWLG+X1MFmuP3GW3\n\tWHr9IpNF694j7BYzJr9ks3j58QSLg4DHmnlrGD02repk89j+7QGrx/3u40wem5fUe/RtWcXo\n\t8XmTXAB7FJdNSmpOZllqkb5dAldG98bVrAV3LSu6HuQ0MK5S62Lk5JAQMJFYuLSbBcQWEtjJ\n\tKPHuGGMXIxeQfZ9R4uGJQ6wgCWGBAImDhw6ygSREBJYwSfza/ZIVxGEWuMwosarnB1RLH5PE\n\t3KXrwFrYBHQlvvZcZwKxeQXsJC7umAAWZxFQlVjz5QuYLSoQIdH39jI7RI2gxI/J98Du4BSw\n\tl9i6ZQIbiM0sYCbx5eVhVghbXmLzmrfMELa4RHPrTZYJjAKzkLTPQtIyC0nLLCQtCxhZVjFK\n\tphYU56bnFhsVGOallusVJ+YWl+al6yXn525iBEbdtsNafTsY7y+JP8QowMGoxMPLwbQ6Uog1\n\tsay4MvcQowQHs5IIr92bNZFCvCmJlVWpRfnxRaU5qcWHGKU5WJTEeTP7ZkQKCaQnlqRmp6YW\n\tpBbBZJk4OKUaGCOmbLVg2ilfteo7/9IT56LmdTcZvV7vcXHR/r9L80xM03NN5eoDsuMkv2tv\n\tMd7CZn34cm7aO63TR99Z6fdtcvxaVxsZ8uDzvn+7AxL03tm81f7GV7jwaYPOneSf1SusxCfE\n\tTXh4oHXC0rtLs84EqrwXfjSnWmTSu9e36mLSl578HxHFXXvQrlmJpTgj0VCLuag4EQAS0lRt\n\ttgIAAA=="],"X-CMS-MailID":"20170904061956epcas1p10f461c2b1a755037e3b2c835aad5b74a","X-Msg-Generator":"CA","X-Sender-IP":"182.195.42.142","X-Local-Sender":"=?utf-8?b?6raM7ZqM6re8G1RpemVuIFBsYXRmb3JtIExhYihTL1c=?=\n\t=?utf-8?b?7IS87YSwKRvsgrzshLHsoITsnpAbRW5naW5lZXI=?=","X-Global-Sender":"=?utf-8?q?Hoegeun_Kwon=1BTizen_Platform_Lab=2E=1BSamsung?=\n\t=?utf-8?q?_Electronics=1BEngineer?=","X-Sender-Code":"=?utf-8?q?C10=1BTELE=1BC10V8111?=","CMS-TYPE":"101P","DLP-Filter":"Pass","X-CFilter-Loop":"Reflected","X-CMS-RootMailID":"20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d","X-RootMTR":"20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d","References":"<1504230476-1878-1-git-send-email-hoegeun.kwon@samsung.com>\n\t<CGME20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d@epcas2p1.samsung.com>\n\t<1504230476-1878-4-git-send-email-hoegeun.kwon@samsung.com>\n\t<10747c31-55fc-6464-eb00-99da6d66fca6@samsung.com>","Sender":"devicetree-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<devicetree.vger.kernel.org>","X-Mailing-List":"devicetree@vger.kernel.org"}},{"id":1764507,"web_url":"http://patchwork.ozlabs.org/comment/1764507/","msgid":"<1e8a7563-046b-82b1-6da9-2e883426edf7@samsung.com>","list_archive_url":null,"date":"2017-09-07T05:16:13","subject":"Re: [PATCH 3/3] drm/exynos/gsc: Add rotation hardware limits of\n\tgscaler","submitter":{"id":70608,"url":"http://patchwork.ozlabs.org/api/people/70608/","name":"Hoegeun Kwon","email":"hoegeun.kwon@samsung.com"},"content":"On 09/04/2017 03:19 PM, Hoegeun Kwon wrote:\n> On 09/01/2017 04:31 PM, Marek Szyprowski wrote:\n>> Hi Hoegeun,\n>>\n>> On 2017-09-01 03:47, Hoegeun Kwon wrote:\n>>> The gscaler has hardware rotation limits that need to be imported from\n>>> dts. Parse them and add them to the property list.\n>>>\n>>> The rotation hardware limits are related to the cropped source size.\n>>> When swap occurs, use rot_max size instead of crop_max size.\n>>>\n>>> Also the scaling limits are related to post size, use pos size to\n>>> check the limits.\n>>>\n>>> Signed-off-by: Hoegeun Kwon <hoegeun.kwon@samsung.com>\n>>> ---\n>>>   drivers/gpu/drm/exynos/exynos_drm_gsc.c | 63 \n>>> +++++++++++++++++++++------------\n>>>   include/uapi/drm/exynos_drm.h           |  2 ++\n>>>   2 files changed, 42 insertions(+), 23 deletions(-)\n>>>\n>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gsc.c \n>>> b/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n>>> index 0506b2b..dd9b057 100644\n>>> --- a/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n>>> @@ -1401,6 +1401,23 @@ static int gsc_ippdrv_check_property(struct \n>>> device *dev,\n>>>       bool swap;\n>>>       int i;\n>>>   +    config = &property->config[EXYNOS_DRM_OPS_DST];\n>>> +\n>>> +    /* check for degree */\n>>> +    switch (config->degree) {\n>>> +    case EXYNOS_DRM_DEGREE_90:\n>>> +    case EXYNOS_DRM_DEGREE_270:\n>>> +        swap = true;\n>>> +        break;\n>>> +    case EXYNOS_DRM_DEGREE_0:\n>>> +    case EXYNOS_DRM_DEGREE_180:\n>>> +        swap = false;\n>>> +        break;\n>>> +    default:\n>>> +        DRM_ERROR(\"invalid degree.\\n\");\n>>> +        goto err_property;\n>>> +    }\n>>> +\n>>>       for_each_ipp_ops(i) {\n>>>           if ((i == EXYNOS_DRM_OPS_SRC) &&\n>>>               (property->cmd == IPP_CMD_WB))\n>>> @@ -1416,21 +1433,6 @@ static int gsc_ippdrv_check_property(struct \n>>> device *dev,\n>>>               goto err_property;\n>>>           }\n>>>   -        /* check for degree */\n>>> -        switch (config->degree) {\n>>> -        case EXYNOS_DRM_DEGREE_90:\n>>> -        case EXYNOS_DRM_DEGREE_270:\n>>> -            swap = true;\n>>> -            break;\n>>> -        case EXYNOS_DRM_DEGREE_0:\n>>> -        case EXYNOS_DRM_DEGREE_180:\n>>> -            swap = false;\n>>> -            break;\n>>> -        default:\n>>> -            DRM_ERROR(\"invalid degree.\\n\");\n>>> -            goto err_property;\n>>> -        }\n>>> -\n>>>           /* check for buffer bound */\n>>>           if ((pos->x + pos->w > sz->hsize) ||\n>>>               (pos->y + pos->h > sz->vsize)) {\n>>> @@ -1438,21 +1440,27 @@ static int gsc_ippdrv_check_property(struct \n>>> device *dev,\n>>>               goto err_property;\n>>>           }\n>>>   +        /*\n>>> +         * The rotation hardware limits are related to the cropped\n>>> +         * source size. So use rot_max size to check the limits when\n>>> +         * swap happens. And also the scaling limits are related to \n>>> pos\n>>> +         * size, use pos size to check the limits.\n>>> +         */\n>>>           /* check for crop */\n>>>           if ((i == EXYNOS_DRM_OPS_SRC) && (pp->crop)) {\n>>>               if (swap) {\n>>>                   if ((pos->h < pp->crop_min.hsize) ||\n>>> -                    (sz->vsize > pp->crop_max.hsize) ||\n>>> +                    (pos->h > pp->rot_max.hsize) ||\n>>>                       (pos->w < pp->crop_min.vsize) ||\n>>> -                    (sz->hsize > pp->crop_max.vsize)) {\n>>> +                    (pos->w > pp->rot_max.vsize)) {\n>>>                       DRM_ERROR(\"out of crop size.\\n\");\n>>>                       goto err_property;\n>>>                   }\n>>>               } else {\n>>>                   if ((pos->w < pp->crop_min.hsize) ||\n>>> -                    (sz->hsize > pp->crop_max.hsize) ||\n>>> +                    (pos->w > pp->crop_max.hsize) ||\n>>>                       (pos->h < pp->crop_min.vsize) ||\n>>> -                    (sz->vsize > pp->crop_max.vsize)) {\n>>> +                    (pos->h > pp->crop_max.vsize)) {\n>>>                       DRM_ERROR(\"out of crop size.\\n\");\n>>>                       goto err_property;\n>>>                   }\n>>> @@ -1463,17 +1471,17 @@ static int gsc_ippdrv_check_property(struct \n>>> device *dev,\n>>>           if ((i == EXYNOS_DRM_OPS_DST) && (pp->scale)) {\n>>>               if (swap) {\n>>>                   if ((pos->h < pp->scale_min.hsize) ||\n>>> -                    (sz->vsize > pp->scale_max.hsize) ||\n>>> +                    (pos->h > pp->scale_max.hsize) ||\n>>>                       (pos->w < pp->scale_min.vsize) ||\n>>> -                    (sz->hsize > pp->scale_max.vsize)) {\n>>> +                    (pos->w > pp->scale_max.vsize)) {\n>>>                       DRM_ERROR(\"out of scale size.\\n\");\n>>>                       goto err_property;\n>>>                   }\n>>>               } else {\n>>>                   if ((pos->w < pp->scale_min.hsize) ||\n>>> -                    (sz->hsize > pp->scale_max.hsize) ||\n>>> +                    (pos->w > pp->scale_max.hsize) ||\n>>>                       (pos->h < pp->scale_min.vsize) ||\n>>> -                    (sz->vsize > pp->scale_max.vsize)) {\n>>> +                    (pos->h > pp->scale_max.vsize)) {\n>>>                       DRM_ERROR(\"out of scale size.\\n\");\n>>>                       goto err_property;\n>>>                   }\n>>> @@ -1676,6 +1684,15 @@ static int gsc_probe(struct platform_device \n>>> *pdev)\n>>>               dev_warn(dev, \"failed to get system register.\\n\");\n>>>               ctx->sysreg = NULL;\n>>>           }\n>>> +\n>>> +        ret = of_property_read_u32(dev->of_node, \"rot-max-hsize\",\n>>> +                &ctx->ippdrv.prop_list.rot_max.hsize);\n>>> +        ret |= of_property_read_u32(dev->of_node, \"rot-max-vsize\",\n>>> +                &ctx->ippdrv.prop_list.rot_max.vsize);\n>>> +        if (ret) {\n>>> +            dev_err(dev, \"rot-max property should be provided by \n>>> device tree.\\n\");\n>>> +            return -EINVAL;\n>>> +        }\n>>>       }\n>>>         /* clock control */\n>>> diff --git a/include/uapi/drm/exynos_drm.h \n>>> b/include/uapi/drm/exynos_drm.h\n>>> index cb3e9f9..d5d5518 100644\n>>> --- a/include/uapi/drm/exynos_drm.h\n>>> +++ b/include/uapi/drm/exynos_drm.h\n>>> @@ -192,6 +192,7 @@ enum drm_exynos_planer {\n>>>    * @crop_max: crop max resolution.\n>>>    * @scale_min: scale min resolution.\n>>>    * @scale_max: scale max resolution.\n>>> + * @rot_max: rotation max resolution.\n>>>    */\n>>>   struct drm_exynos_ipp_prop_list {\n>>>       __u32    version;\n>>> @@ -210,6 +211,7 @@ struct drm_exynos_ipp_prop_list {\n>>>       struct drm_exynos_sz    crop_max;\n>>>       struct drm_exynos_sz    scale_min;\n>>>       struct drm_exynos_sz    scale_max;\n>>> +    struct drm_exynos_sz    rot_max;\n>>>   };\n>>>     /**\n>>\n>> IMO maximum supported picture size should be hardcoded into driver, \n>> there\n>> is no need to add device tree properties for that. Please also check \n>> v4l2\n>> driver for Exynos GSC.\n>>\n>> Currently it uses only one compatible - \"exynos5-gsc\", but imho You \n>> should\n>> simply replace it with \"exynos5250-gsc\" and \"exynos5420-gsc\", and add \n>> those\n>> variants with proper maximum supported size (2047 and 2016 \n>> respectively).\n>>\n>> Best regards\n>\n> Hi Krzysztof and Marek,\n>\n> Thanks Krzysztof and Marek reviews.\n>\n> As Marek says, rot_max size will be hardcoded into driver,\n> then it will not break the ABI. And also,\n> I will check the v4l2 driver for Exynos GSC.\n>\n> Best regards,\n> Hoegeun\n>\n\nHi Marek,\n\nI have checked v4l2 driver for Exynos GSC. The v4l2 driver supports\nExynos 5250 and 5433 GSC. Currently, the hardware limits rotation is\nset to 2047 in the v4l2 driver.\n\nIn my opinion don't need to fix it, because the Exynos 5250 has a\nhardware rotation limits of 2048 and the Exynos 5250 has a hardware\nrotation limits of 2047.\n\nPlease tell me if you have any other opinion.\n\nBest regards,\nHoegeun\n\n--\nTo unsubscribe from this list: send the line \"unsubscribe devicetree\" in\nthe body of a message to majordomo@vger.kernel.org\nMore majordomo info at  http://vger.kernel.org/majordomo-info.html","headers":{"Return-Path":"<devicetree-owner@vger.kernel.org>","X-Original-To":"incoming-dt@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming-dt@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=devicetree-owner@vger.kernel.org; receiver=<UNKNOWN>)","Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xnpbG1ZM9z9s9Y\n\tfor <incoming-dt@patchwork.ozlabs.org>;\n\tThu,  7 Sep 2017 15:16:42 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1753374AbdIGFQP (ORCPT\n\t<rfc822;incoming-dt@patchwork.ozlabs.org>);\n\tThu, 7 Sep 2017 01:16:15 -0400","from mailout3.samsung.com ([203.254.224.33]:64596 \"EHLO\n\tmailout3.samsung.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1752142AbdIGFQN (ORCPT\n\t<rfc822; devicetree@vger.kernel.org>); Thu, 7 Sep 2017 01:16:13 -0400","from epcas1p2.samsung.com (unknown [182.195.41.46])\n\tby mailout3.samsung.com (KnoxPortal) with ESMTP id\n\t20170907051611epoutp03fce49099adfe580ba7e1e7d18224b45a~h-H6qbbKD2218722187epoutp03t;\n\tThu,  7 Sep 2017 05:16:11 +0000 (GMT)","from epsmges2p1.samsung.com (unknown [182.195.40.66]) by\n\tepcas1p1.samsung.com (KnoxPortal) with ESMTP id\n\t20170907051611epcas1p1557d30ee3d6627da495093fa344d8c81~h-H6TGi9e0805308053epcas1p1o;\n\tThu,  7 Sep 2017 05:16:11 +0000 (GMT)","from epcas2p3.samsung.com ( [182.195.41.55]) by\n\tepsmges2p1.samsung.com (Symantec Messaging Gateway) with SMTP id\n\t84.B6.10950.A16D0B95; Thu,  7 Sep 2017 14:16:10 +0900 (KST)","from epsmgms2p2new.samsung.com (unknown [182.195.42.143]) by\n\tepcas2p3.samsung.com (KnoxPortal) with ESMTP id\n\t20170907051610epcas2p3c28afe411231ef06212c51ab3a028b74~h-H53vqk82612126121epcas2p3V;\n\tThu,  7 Sep 2017 05:16:10 +0000 (GMT)","from epmmp1.local.host ( [203.254.227.16]) by\n\tepsmgms2p2new.samsung.com (Symantec Messaging Gateway) with SMTP id\n\tCD.D1.10338.A16D0B95; Thu,  7 Sep 2017 14:16:10 +0900 (KST)","from [10.113.63.38] by mmp1.samsung.com (Oracle Communications\n\tMessaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id\n\t<0OVW0028F9AYPN90@mmp1.samsung.com>;\n\tThu, 07 Sep 2017 14:16:10 +0900 (KST)"],"X-AuditID":"b6c32a45-f79466d000002ac6-88-59b0d61a0240","Subject":"Re: [PATCH 3/3] drm/exynos/gsc: Add rotation hardware limits of\n\tgscaler","To":"Marek Szyprowski <m.szyprowski@samsung.com>,\n\tKrzysztof Kozlowski <krzk@kernel.org>,\n\tInki Dae <inki.dae@samsung.com>, sw0312.kim@samsung.com,\n\tairlied@linux.ie, kgene@kernel.org, robh+dt@kernel.org,\n\tmark.rutland@arm.com, catalin.marinas@arm.com, will.deacon@arm.com","Cc":"dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org,\n\tlinux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org,\n\tdevicetree@vger.kernel.org, Hoegeun Kwon <hoegeun.kwon@samsung.com>","From":"Hoegeun Kwon <hoegeun.kwon@samsung.com>","Message-id":"<1e8a7563-046b-82b1-6da9-2e883426edf7@samsung.com>","Date":"Thu, 07 Sep 2017 14:16:13 +0900","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.2.1","MIME-version":"1.0","In-reply-to":"<7e628ff8-82be-a295-90fa-8f547a541cb3@samsung.com>","Content-type":"text/plain; charset=\"utf-8\"; format=\"flowed\"","Content-transfer-encoding":"7bit","Content-language":"en-US","X-Brightmail-Tracker":["H4sIAAAAAAAAA+NgFjrHJsWRmVeSWpSXmKPExsWy7bCmua7UtQ2RBi3HLSx6z51ksni/rIfR\n\tYv6Rc6wWV76+Z7N4v7yLzWLS/QksFv2PXzNbnD+/gd1i0+NrrBaXd81hs5hxfh+Txdojd9kt\n\tll6/yGTRuvcIu8WMyS/ZLF5+PMHiIOCxZt4aRo9NqzrZPLZ/e8Dqcb/7OJPH5iX1Hn1bVjF6\n\tfN4kF8AelWqTkZqYklqkkJqXnJ+SmZduq+QdHO8cb2pmYKhraGlhrqSQl5ibaqvk4hOg65aZ\n\tA3S8kkJZYk4pUCggsbhYSd/Opii/tCRVISO/uMRWKdrQ0EjP0MBcz8jISM/EONbKyBSoJCE1\n\t49beBWwFffYVE3b9Z2xgvK/VxcjJISFgInHu9D5mCFtM4sK99WxdjFwcQgI7GCWuLFsI5Xxn\n\tlPj/9Dc7TMfXV5fYIRK7GSVmvf0H5dxllHj3/gQjSJWwQJBEQ/NXRpCEiMBEJom/T4+BOcwC\n\tlxklJt7rZwKpYhPQlfjacx3M5hWwk7h6uwWsm0VAVeLc7Vawq0QFIiS2fZ/BBlEjKPFj8j0W\n\tEJtTwF6ia9cZsJuYBawknv1rZYWw5SU2r3nLDGGLSzS33mQBWSwhsIxd4v7yjSwQT7hIbPr7\n\tgRHCFpZ4dXwL1HPSEs9WbYSK10tc3nGSEaK5gVGif+JsqCJjiVNdjUwQG/gkOg7/BYpzAMV5\n\tJTrahCBKPCSu3/nMBGE7SjTNnAMNycNMEpsWPGecwCg/C8lDs5A8MQvJE7OQPLGAkWUVo1hq\n\tQXFuemqxUYGhXnFibnFpXrpecn7uJkZwWtZy3cE445zPIUYBDkYlHt6E/+sjhVgTy4orcw8x\n\tSnAwK4nwvjyzIVKINyWxsiq1KD++qDQntfgQoykwwCcyS4km5wNzRl5JvKGJpYGJmZmRuZkF\n\tMPWJ89ZvuxYhJJCeWJKanZpakFoE08fEwSnVwHijnfVm1xLusD35ZhN65vS0by2J+CbPe2vl\n\ttZQmpzaT5OkNmRdeSE6o499r9jrqXFk0m3j+gpM9zlvXnPJU5D61V4ObjX/NL5Vj0+VENTmS\n\tJ70x3Nw6OVleTzCo+X6yNP/n7Fkb+JaEe956KqhTs9SmwaLF4VZ0a/9FR9c9NZurpa+/kY/j\n\tV2Ipzkg01GIuKk4EAKILnXHhAwAA","H4sIAAAAAAAAA+NgFlrCIsWRmVeSWpSXmKPExsVy+t9jAV2paxsiDfbMlLPoPXeSyeL9sh5G\n\ti/lHzrFaXPn6ns3i/fIuNotJ9yewWPQ/fs1scf78BnaLTY+vsVpc3jWHzWLG+X1MFmuP3GW3\n\tWHr9IpNF694j7BYzJr9ks3j58QSLg4DHmnlrGD02repk89j+7QGrx/3u40wem5fUe/RtWcXo\n\t8XmTXAB7FJdNSmpOZllqkb5dAlfGrb0L2Ar67Csm7PrP2MB4X6uLkZNDQsBE4uurS+xdjFwc\n\tQgI7GSXerp/NDpIQErjPKLFiehqILSwQIHHw0EE2kCIRgclMEr2v1jODOMwClxklVvX8YIRo\n\tP8wkMWv1FSaQFjYBXYmvPdfBbF4BO4mrt1sYQWwWAVWJc7dbmUFsUYEIib63l9khagQlfky+\n\txwJicwrYS3TtOgMWZxYwk/jy8jArhC0vsXnNW2YIW1yiufUmywRGgVlI2mchaZmFpGUWkpYF\n\tjCyrGCVTC4pz03OLjQqM8lLL9YoTc4tL89L1kvNzNzEC427bYa3+HYyPl8QfYhTgYFTi4d3B\n\tuCFSiDWxrLgy9xCjBAezkgjvyzNAId6UxMqq1KL8+KLSnNTiQ4zSHCxK4ryZfTMihQTSE0tS\n\ts1NTC1KLYLJMHJxSDYx6RgprpY//2GLKuv3F9RlfCxs3OPWWqWv2Zc/UFXzfy8vTzRB7Ny7u\n\tR9MKpbKZZ67L7JFayrHu3UvJD9Me24q7Kmr+v7zfzW/ihfiyN+xX09OWr23b/P1RY+iW0y7B\n\tbWbT/xZH6KhN5TP6u1SYt7TnTHHtETn1/PJ3vXvicivOKWdOsLRUElViKc5INNRiLipOBADG\n\tP4XHtwIAAA=="],"X-CMS-MailID":"20170907051610epcas2p3c28afe411231ef06212c51ab3a028b74","X-Msg-Generator":"CA","X-Sender-IP":"182.195.42.143","X-Local-Sender":"=?utf-8?b?6raM7ZqM6re8G1RpemVuIFBsYXRmb3JtIExhYihTL1c=?=\n\t=?utf-8?b?7IS87YSwKRvsgrzshLHsoITsnpAbRW5naW5lZXI=?=","X-Global-Sender":"=?utf-8?q?Hoegeun_Kwon=1BTizen_Platform_Lab=2E=1BSamsung?=\n\t=?utf-8?q?_Electronics=1BEngineer?=","X-Sender-Code":"=?utf-8?q?C10=1BTELE=1BC10V8111?=","CMS-TYPE":"102P","DLP-Filter":"Pass","X-CFilter-Loop":"Reflected","X-CMS-RootMailID":"20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d","X-RootMTR":"20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d","References":"<1504230476-1878-1-git-send-email-hoegeun.kwon@samsung.com>\n\t<CGME20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d@epcas2p1.samsung.com>\n\t<1504230476-1878-4-git-send-email-hoegeun.kwon@samsung.com>\n\t<10747c31-55fc-6464-eb00-99da6d66fca6@samsung.com>\n\t<7e628ff8-82be-a295-90fa-8f547a541cb3@samsung.com>","Sender":"devicetree-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<devicetree.vger.kernel.org>","X-Mailing-List":"devicetree@vger.kernel.org"}},{"id":1764658,"web_url":"http://patchwork.ozlabs.org/comment/1764658/","msgid":"<024ea0a3-abe7-4a87-7723-2e7341237df2@samsung.com>","list_archive_url":null,"date":"2017-09-07T11:25:22","subject":"Re: [PATCH 3/3] drm/exynos/gsc: Add rotation hardware limits of\n\tgscaler","submitter":{"id":4023,"url":"http://patchwork.ozlabs.org/api/people/4023/","name":"Marek Szyprowski","email":"m.szyprowski@samsung.com"},"content":"Hi Hoegeun,\n\nOn 2017-09-07 07:16, Hoegeun Kwon wrote:\n> On 09/04/2017 03:19 PM, Hoegeun Kwon wrote:\n>> On 09/01/2017 04:31 PM, Marek Szyprowski wrote:\n>>> Hi Hoegeun,\n>>>\n>>> On 2017-09-01 03:47, Hoegeun Kwon wrote:\n>>>> The gscaler has hardware rotation limits that need to be imported from\n>>>> dts. Parse them and add them to the property list.\n>>>>\n>>>> The rotation hardware limits are related to the cropped source size.\n>>>> When swap occurs, use rot_max size instead of crop_max size.\n>>>>\n>>>> Also the scaling limits are related to post size, use pos size to\n>>>> check the limits.\n>>>>\n>>>> Signed-off-by: Hoegeun Kwon <hoegeun.kwon@samsung.com>\n>>>> ---\n>>>>   drivers/gpu/drm/exynos/exynos_drm_gsc.c | 63 \n>>>> +++++++++++++++++++++------------\n>>>>   include/uapi/drm/exynos_drm.h           |  2 ++\n>>>>   2 files changed, 42 insertions(+), 23 deletions(-)\n>>>>\n>>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gsc.c \n>>>> b/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n>>>> index 0506b2b..dd9b057 100644\n>>>> --- a/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n>>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n>>>> @@ -1401,6 +1401,23 @@ static int gsc_ippdrv_check_property(struct \n>>>> device *dev,\n>>>>       bool swap;\n>>>>       int i;\n>>>>   +    config = &property->config[EXYNOS_DRM_OPS_DST];\n>>>> +\n>>>> +    /* check for degree */\n>>>> +    switch (config->degree) {\n>>>> +    case EXYNOS_DRM_DEGREE_90:\n>>>> +    case EXYNOS_DRM_DEGREE_270:\n>>>> +        swap = true;\n>>>> +        break;\n>>>> +    case EXYNOS_DRM_DEGREE_0:\n>>>> +    case EXYNOS_DRM_DEGREE_180:\n>>>> +        swap = false;\n>>>> +        break;\n>>>> +    default:\n>>>> +        DRM_ERROR(\"invalid degree.\\n\");\n>>>> +        goto err_property;\n>>>> +    }\n>>>> +\n>>>>       for_each_ipp_ops(i) {\n>>>>           if ((i == EXYNOS_DRM_OPS_SRC) &&\n>>>>               (property->cmd == IPP_CMD_WB))\n>>>> @@ -1416,21 +1433,6 @@ static int gsc_ippdrv_check_property(struct \n>>>> device *dev,\n>>>>               goto err_property;\n>>>>           }\n>>>>   -        /* check for degree */\n>>>> -        switch (config->degree) {\n>>>> -        case EXYNOS_DRM_DEGREE_90:\n>>>> -        case EXYNOS_DRM_DEGREE_270:\n>>>> -            swap = true;\n>>>> -            break;\n>>>> -        case EXYNOS_DRM_DEGREE_0:\n>>>> -        case EXYNOS_DRM_DEGREE_180:\n>>>> -            swap = false;\n>>>> -            break;\n>>>> -        default:\n>>>> -            DRM_ERROR(\"invalid degree.\\n\");\n>>>> -            goto err_property;\n>>>> -        }\n>>>> -\n>>>>           /* check for buffer bound */\n>>>>           if ((pos->x + pos->w > sz->hsize) ||\n>>>>               (pos->y + pos->h > sz->vsize)) {\n>>>> @@ -1438,21 +1440,27 @@ static int gsc_ippdrv_check_property(struct \n>>>> device *dev,\n>>>>               goto err_property;\n>>>>           }\n>>>>   +        /*\n>>>> +         * The rotation hardware limits are related to the cropped\n>>>> +         * source size. So use rot_max size to check the limits when\n>>>> +         * swap happens. And also the scaling limits are related \n>>>> to pos\n>>>> +         * size, use pos size to check the limits.\n>>>> +         */\n>>>>           /* check for crop */\n>>>>           if ((i == EXYNOS_DRM_OPS_SRC) && (pp->crop)) {\n>>>>               if (swap) {\n>>>>                   if ((pos->h < pp->crop_min.hsize) ||\n>>>> -                    (sz->vsize > pp->crop_max.hsize) ||\n>>>> +                    (pos->h > pp->rot_max.hsize) ||\n>>>>                       (pos->w < pp->crop_min.vsize) ||\n>>>> -                    (sz->hsize > pp->crop_max.vsize)) {\n>>>> +                    (pos->w > pp->rot_max.vsize)) {\n>>>>                       DRM_ERROR(\"out of crop size.\\n\");\n>>>>                       goto err_property;\n>>>>                   }\n>>>>               } else {\n>>>>                   if ((pos->w < pp->crop_min.hsize) ||\n>>>> -                    (sz->hsize > pp->crop_max.hsize) ||\n>>>> +                    (pos->w > pp->crop_max.hsize) ||\n>>>>                       (pos->h < pp->crop_min.vsize) ||\n>>>> -                    (sz->vsize > pp->crop_max.vsize)) {\n>>>> +                    (pos->h > pp->crop_max.vsize)) {\n>>>>                       DRM_ERROR(\"out of crop size.\\n\");\n>>>>                       goto err_property;\n>>>>                   }\n>>>> @@ -1463,17 +1471,17 @@ static int gsc_ippdrv_check_property(struct \n>>>> device *dev,\n>>>>           if ((i == EXYNOS_DRM_OPS_DST) && (pp->scale)) {\n>>>>               if (swap) {\n>>>>                   if ((pos->h < pp->scale_min.hsize) ||\n>>>> -                    (sz->vsize > pp->scale_max.hsize) ||\n>>>> +                    (pos->h > pp->scale_max.hsize) ||\n>>>>                       (pos->w < pp->scale_min.vsize) ||\n>>>> -                    (sz->hsize > pp->scale_max.vsize)) {\n>>>> +                    (pos->w > pp->scale_max.vsize)) {\n>>>>                       DRM_ERROR(\"out of scale size.\\n\");\n>>>>                       goto err_property;\n>>>>                   }\n>>>>               } else {\n>>>>                   if ((pos->w < pp->scale_min.hsize) ||\n>>>> -                    (sz->hsize > pp->scale_max.hsize) ||\n>>>> +                    (pos->w > pp->scale_max.hsize) ||\n>>>>                       (pos->h < pp->scale_min.vsize) ||\n>>>> -                    (sz->vsize > pp->scale_max.vsize)) {\n>>>> +                    (pos->h > pp->scale_max.vsize)) {\n>>>>                       DRM_ERROR(\"out of scale size.\\n\");\n>>>>                       goto err_property;\n>>>>                   }\n>>>> @@ -1676,6 +1684,15 @@ static int gsc_probe(struct platform_device \n>>>> *pdev)\n>>>>               dev_warn(dev, \"failed to get system register.\\n\");\n>>>>               ctx->sysreg = NULL;\n>>>>           }\n>>>> +\n>>>> +        ret = of_property_read_u32(dev->of_node, \"rot-max-hsize\",\n>>>> + &ctx->ippdrv.prop_list.rot_max.hsize);\n>>>> +        ret |= of_property_read_u32(dev->of_node, \"rot-max-vsize\",\n>>>> + &ctx->ippdrv.prop_list.rot_max.vsize);\n>>>> +        if (ret) {\n>>>> +            dev_err(dev, \"rot-max property should be provided by \n>>>> device tree.\\n\");\n>>>> +            return -EINVAL;\n>>>> +        }\n>>>>       }\n>>>>         /* clock control */\n>>>> diff --git a/include/uapi/drm/exynos_drm.h \n>>>> b/include/uapi/drm/exynos_drm.h\n>>>> index cb3e9f9..d5d5518 100644\n>>>> --- a/include/uapi/drm/exynos_drm.h\n>>>> +++ b/include/uapi/drm/exynos_drm.h\n>>>> @@ -192,6 +192,7 @@ enum drm_exynos_planer {\n>>>>    * @crop_max: crop max resolution.\n>>>>    * @scale_min: scale min resolution.\n>>>>    * @scale_max: scale max resolution.\n>>>> + * @rot_max: rotation max resolution.\n>>>>    */\n>>>>   struct drm_exynos_ipp_prop_list {\n>>>>       __u32    version;\n>>>> @@ -210,6 +211,7 @@ struct drm_exynos_ipp_prop_list {\n>>>>       struct drm_exynos_sz    crop_max;\n>>>>       struct drm_exynos_sz    scale_min;\n>>>>       struct drm_exynos_sz    scale_max;\n>>>> +    struct drm_exynos_sz    rot_max;\n>>>>   };\n>>>>     /**\n>>>\n>>> IMO maximum supported picture size should be hardcoded into driver, \n>>> there\n>>> is no need to add device tree properties for that. Please also check \n>>> v4l2\n>>> driver for Exynos GSC.\n>>>\n>>> Currently it uses only one compatible - \"exynos5-gsc\", but imho You \n>>> should\n>>> simply replace it with \"exynos5250-gsc\" and \"exynos5420-gsc\", and \n>>> add those\n>>> variants with proper maximum supported size (2047 and 2016 \n>>> respectively).\n>>>\n>>> Best regards\n>>\n>> Hi Krzysztof and Marek,\n>>\n>> Thanks Krzysztof and Marek reviews.\n>>\n>> As Marek says, rot_max size will be hardcoded into driver,\n>> then it will not break the ABI. And also,\n>> I will check the v4l2 driver for Exynos GSC.\n>>\n>> Best regards,\n>> Hoegeun\n>>\n>\n> Hi Marek,\n>\n> I have checked v4l2 driver for Exynos GSC. The v4l2 driver supports\n> Exynos 5250 and 5433 GSC. Currently, the hardware limits rotation is\n> set to 2047 in the v4l2 driver.\n>\n\nV4l2 GSC driver also supports Exynos5420/5422 SoCs, see\n# git grep \"samsung,exynos5-gsc\" arch/arm/boot/dts/\n\n> In my opinion don't need to fix it, because the Exynos 5250 has a\n> hardware rotation limits of 2048 and the Exynos 5250 has a hardware\n> rotation limits of 2047.\n\nLike you pointed earlier, Exynos 5420/5422/5800 supports rotation only\nup to 2016x2016, so additional patch for v4l2 is also needed.\n\n>\n> Please tell me if you have any other opinion.\n>\n\nBest regards","headers":{"Return-Path":"<devicetree-owner@vger.kernel.org>","X-Original-To":"incoming-dt@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming-dt@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=devicetree-owner@vger.kernel.org; receiver=<UNKNOWN>)","Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xnymq19Sdz9sCZ\n\tfor <incoming-dt@patchwork.ozlabs.org>;\n\tThu,  7 Sep 2017 21:25:31 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1754943AbdIGLZ3 (ORCPT\n\t<rfc822;incoming-dt@patchwork.ozlabs.org>);\n\tThu, 7 Sep 2017 07:25:29 -0400","from mailout1.w1.samsung.com ([210.118.77.11]:45544 \"EHLO\n\tmailout1.w1.samsung.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1755036AbdIGLZ2 (ORCPT\n\t<rfc822; devicetree@vger.kernel.org>); Thu, 7 Sep 2017 07:25:28 -0400","from eucas1p2.samsung.com (unknown [182.198.249.207])\n\tby mailout1.w1.samsung.com (KnoxPortal) with ESMTP id\n\t20170907112525euoutp01780a18d2e9b5a1c956df9484794c7be7~iEKTJldRG1130411304euoutp01I;\n\tThu,  7 Sep 2017 11:25:25 +0000 (GMT)","from eusmges3.samsung.com (unknown [203.254.199.242]) by\n\teucas1p1.samsung.com (KnoxPortal) with ESMTP id\n\t20170907112524eucas1p11c0c6d13d28b68d6c2809f3c29659155~iEKSdlkfB2181921819eucas1p1U;\n\tThu,  7 Sep 2017 11:25:24 +0000 (GMT)","from eucas1p1.samsung.com ( [182.198.249.206]) by\n\teusmges3.samsung.com (EUCPMTA) with SMTP id D9.83.12867.4AC21B95;\n\tThu,  7 Sep 2017 12:25:24 +0100 (BST)","from eusmgms2.samsung.com (unknown [182.198.249.180]) by\n\teucas1p1.samsung.com (KnoxPortal) with ESMTP id\n\t20170907112524eucas1p1baaf5df96104bce261bcef6465e9157e~iEKR0iDiJ1168411684eucas1p1-;\n\tThu,  7 Sep 2017 11:25:24 +0000 (GMT)","from eusync3.samsung.com ( [203.254.199.213]) by\n\teusmgms2.samsung.com (EUCPMTA) with SMTP id D8.66.20118.3AC21B95;\n\tThu,  7 Sep 2017 12:25:23 +0100 (BST)","from [106.116.147.30] by eusync3.samsung.com (Oracle\n\tCommunications Messaging Server 7.0.5.31.0 64bit (built May 5 2014))\n\twith ESMTPA id <0OVW009PEQEBTSB0@eusync3.samsung.com>;\n\tThu, 07 Sep 2017 12:25:23 +0100 (BST)"],"X-AuditID":"cbfec7f2-f793b6d000003243-9d-59b12ca436c6","MIME-version":"1.0","Content-type":"text/plain; charset=\"utf-8\"; format=\"flowed\"","Subject":"Re: [PATCH 3/3] drm/exynos/gsc: Add rotation hardware limits of\n\tgscaler","To":"Hoegeun Kwon <hoegeun.kwon@samsung.com>,\n\tKrzysztof Kozlowski <krzk@kernel.org>,\n\tInki Dae <inki.dae@samsung.com>, sw0312.kim@samsung.com,\n\tairlied@linux.ie, kgene@kernel.org, robh+dt@kernel.org,\n\tmark.rutland@arm.com, catalin.marinas@arm.com, will.deacon@arm.com","Cc":"dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org,\n\tlinux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org,\n\tdevicetree@vger.kernel.org","From":"Marek Szyprowski <m.szyprowski@samsung.com>","Message-id":"<024ea0a3-abe7-4a87-7723-2e7341237df2@samsung.com>","Date":"Thu, 07 Sep 2017 13:25:22 +0200","User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101\n\tThunderbird/52.3.0","In-reply-to":"<1e8a7563-046b-82b1-6da9-2e883426edf7@samsung.com>","Content-transfer-encoding":"8bit","Content-language":"en-US","X-Brightmail-Tracker":["H4sIAAAAAAAAA+NgFjrPKsWRmVeSWpSXmKPExsWy7djPc7pLdDZGGiy6KmXRe+4kk8X7ZT2M\n\tFvOPnGO1uPL1PZvF++VdbBaT7k9gseh//JrZ4vz5DewWmx5fY7W4vGsOm8WM8/uYLJZev8hk\n\t0br3CLvFjMkv2SxefjzB4sDvsWbeGkaPTas62Ty2f3vA6nG/+ziTx+Yl9R59W1YxenzeJBfA\n\tHsVlk5Kak1mWWqRvl8CVcbd9JWPBFt+Kay/vMTUw3nbqYuTkkBAwkTjQvYANwhaTuHBvPZDN\n\txSEksJRRYtrULewQzmdGiYbOf4wwHfseb2QBsYUEljFKnPzIDWLzCghK/Jh8DyzOLGAl8exf\n\tKytE83NGiY+H1rCDJIQFgiQamr+CDRIR6GWSWP5UCKSIWWAVo8StWfPAEmwChhJdb7vYIKba\n\tSSyeegXMZhFQlXhz/zoTiC0qECPRfugmM4jNKWAv8WLdfEaIzfISB688h7pCXKK59SYLyAIJ\n\tgUXsEvv2PmSFeMFFYvq2pywQtrDEq+Nb2CFsGYnLk7uh4v2MEk2t2hD2DEaJc295IWxricPH\n\tL7JCLOCTmLRtOtARHEBxXomONiGIEg+J63c+M0HYjhJNM+dAw/QHk8TG/oWsExjlZyGF2Cyk\n\tEJuF5IdZSH5YwMiyilEktbQ4Nz212FivODG3uDQvXS85P3cTIzCZnf53/NMOxq8nrA4xCnAw\n\tKvHwNkhviBRiTSwrrsw9xCjBwawkwiujvTFSiDclsbIqtSg/vqg0J7X4EKM0B4uSOK9tVFuk\n\tkEB6YklqdmpqQWoRTJaJg1OqgTG3euabWu/zT9/JLl/wKcTv16udm462P1orbMBYc3Px8ard\n\t3Ab5HTJ8ysmrlvz59HDf1I/mK7LDVz80mlPi+2/C19fhbAbKcT6ySeFPeUS3vRZp3vqpa6+a\n\t76kPqhd1dMsvq6VcKLMM/Lo1onL2jc6ZgkwTXLK/Vn1gdNGwvOjfeIzfqOv4wh4lluKMREMt\n\t5qLiRABsnTRZYgMAAA==","H4sIAAAAAAAAA+NgFlrGIsWRmVeSWpSXmKPExsVy+t/xq7qLdTZGGmy6YG3Re+4kk8X7ZT2M\n\tFvOPnGO1uPL1PZvF++VdbBaT7k9gseh//JrZ4vz5DewWmx5fY7W4vGsOm8WM8/uYLJZev8hk\n\t0br3CLvFjMkv2SxefjzB4sDvsWbeGkaPTas62Ty2f3vA6nG/+ziTx+Yl9R59W1YxenzeJBfA\n\tHsVlk5Kak1mWWqRvl8CVcbd9JWPBFt+Kay/vMTUw3nbqYuTkkBAwkdj3eCMLhC0mceHeerYu\n\tRi4OIYEljBLbth9hBEnwCghK/Jh8D6yIWcBM4svLw6wgtpDAc0aJA81xILawQIDEwUMHwZpF\n\tBPqZJF7fm8gE4jALrGKUmPvxKSvE2B9MEidvzmYCaWETMJToetvFBrHCTmLx1CtgNouAqsSb\n\t+9fBakQFYiR+XnoEtppTwF7ixbr5jBBnyEscvPIc6iRxiebWmywTGAVnIbl2FpJrZyFpmYWk\n\tZQEjyypGkdTS4tz03GIjveLE3OLSvHS95PzcTYzA2Nt27OeWHYxd74IPMQpwMCrx8Cb8Xx8p\n\txJpYVlyZe4hRgoNZSYRXRntjpBBvSmJlVWpRfnxRaU5q8SFGaQ4WJXHe3j2rI4UE0hNLUrNT\n\tUwtSi2CyTBycUg2M9pfFvCZtcdxz/tWH3nS/XM4nCfH9OVbaP7/+Ntrf1X3r3vobfPs+aEnJ\n\t7e6duaSI6a3usyNBv7aKOs30F85JWhs8zUeAn3NirOLMt1tKba99jT7dd1TFbX7F1PNOMrtm\n\tmkyZeEbhxKbUiTk7dYUYn08oCiiTeqdc5S11QZeZIz5srwyvnAOzEktxRqKhFnNRcSIAc0IZ\n\tXbkCAAA="],"X-CMS-MailID":"20170907112524eucas1p1baaf5df96104bce261bcef6465e9157e","X-Msg-Generator":"CA","X-Sender-IP":"182.198.249.180","X-Local-Sender":"=?utf-8?q?Marek_Szyprowski=1BSRPOL-Kernel_=28TP=29=1B?=\n\t=?utf-8?b?7IK87ISx7KCE7J6QG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?=","X-Global-Sender":"=?utf-8?q?Marek_Szyprowski=1BSRPOL-Kernel_=28TP=29=1BSam?=\n\t=?utf-8?q?sung_Electronics=1BSenior_Software_Engineer?=","X-Sender-Code":"=?utf-8?q?C10=1BEHQ=1BC10CD02CD027392?=","CMS-TYPE":"201P","X-CMS-RootMailID":"20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d","X-RootMTR":"20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d","References":"<1504230476-1878-1-git-send-email-hoegeun.kwon@samsung.com>\n\t<CGME20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d@epcas2p1.samsung.com>\n\t<1504230476-1878-4-git-send-email-hoegeun.kwon@samsung.com>\n\t<10747c31-55fc-6464-eb00-99da6d66fca6@samsung.com>\n\t<7e628ff8-82be-a295-90fa-8f547a541cb3@samsung.com>\n\t<1e8a7563-046b-82b1-6da9-2e883426edf7@samsung.com>","Sender":"devicetree-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<devicetree.vger.kernel.org>","X-Mailing-List":"devicetree@vger.kernel.org"}},{"id":1765045,"web_url":"http://patchwork.ozlabs.org/comment/1765045/","msgid":"<f9ed590f-2e2d-8c9b-8c5f-e27eb8e3f39e@samsung.com>","list_archive_url":null,"date":"2017-09-08T02:21:10","subject":"Re: [PATCH 3/3] drm/exynos/gsc: Add rotation hardware limits of\n\tgscaler","submitter":{"id":70608,"url":"http://patchwork.ozlabs.org/api/people/70608/","name":"Hoegeun Kwon","email":"hoegeun.kwon@samsung.com"},"content":"On 09/07/2017 08:25 PM, Marek Szyprowski wrote:\n> Hi Hoegeun,\n>\n> On 2017-09-07 07:16, Hoegeun Kwon wrote:\n>> On 09/04/2017 03:19 PM, Hoegeun Kwon wrote:\n>>> On 09/01/2017 04:31 PM, Marek Szyprowski wrote:\n>>>> Hi Hoegeun,\n>>>>\n>>>> On 2017-09-01 03:47, Hoegeun Kwon wrote:\n>>>>> The gscaler has hardware rotation limits that need to be imported \n>>>>> from\n>>>>> dts. Parse them and add them to the property list.\n>>>>>\n>>>>> The rotation hardware limits are related to the cropped source size.\n>>>>> When swap occurs, use rot_max size instead of crop_max size.\n>>>>>\n>>>>> Also the scaling limits are related to post size, use pos size to\n>>>>> check the limits.\n>>>>>\n>>>>> Signed-off-by: Hoegeun Kwon <hoegeun.kwon@samsung.com>\n>>>>> ---\n>>>>>   drivers/gpu/drm/exynos/exynos_drm_gsc.c | 63 \n>>>>> +++++++++++++++++++++------------\n>>>>>   include/uapi/drm/exynos_drm.h           |  2 ++\n>>>>>   2 files changed, 42 insertions(+), 23 deletions(-)\n>>>>>\n>>>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gsc.c \n>>>>> b/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n>>>>> index 0506b2b..dd9b057 100644\n>>>>> --- a/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n>>>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_gsc.c\n>>>>> @@ -1401,6 +1401,23 @@ static int gsc_ippdrv_check_property(struct \n>>>>> device *dev,\n>>>>>       bool swap;\n>>>>>       int i;\n>>>>>   +    config = &property->config[EXYNOS_DRM_OPS_DST];\n>>>>> +\n>>>>> +    /* check for degree */\n>>>>> +    switch (config->degree) {\n>>>>> +    case EXYNOS_DRM_DEGREE_90:\n>>>>> +    case EXYNOS_DRM_DEGREE_270:\n>>>>> +        swap = true;\n>>>>> +        break;\n>>>>> +    case EXYNOS_DRM_DEGREE_0:\n>>>>> +    case EXYNOS_DRM_DEGREE_180:\n>>>>> +        swap = false;\n>>>>> +        break;\n>>>>> +    default:\n>>>>> +        DRM_ERROR(\"invalid degree.\\n\");\n>>>>> +        goto err_property;\n>>>>> +    }\n>>>>> +\n>>>>>       for_each_ipp_ops(i) {\n>>>>>           if ((i == EXYNOS_DRM_OPS_SRC) &&\n>>>>>               (property->cmd == IPP_CMD_WB))\n>>>>> @@ -1416,21 +1433,6 @@ static int gsc_ippdrv_check_property(struct \n>>>>> device *dev,\n>>>>>               goto err_property;\n>>>>>           }\n>>>>>   -        /* check for degree */\n>>>>> -        switch (config->degree) {\n>>>>> -        case EXYNOS_DRM_DEGREE_90:\n>>>>> -        case EXYNOS_DRM_DEGREE_270:\n>>>>> -            swap = true;\n>>>>> -            break;\n>>>>> -        case EXYNOS_DRM_DEGREE_0:\n>>>>> -        case EXYNOS_DRM_DEGREE_180:\n>>>>> -            swap = false;\n>>>>> -            break;\n>>>>> -        default:\n>>>>> -            DRM_ERROR(\"invalid degree.\\n\");\n>>>>> -            goto err_property;\n>>>>> -        }\n>>>>> -\n>>>>>           /* check for buffer bound */\n>>>>>           if ((pos->x + pos->w > sz->hsize) ||\n>>>>>               (pos->y + pos->h > sz->vsize)) {\n>>>>> @@ -1438,21 +1440,27 @@ static int \n>>>>> gsc_ippdrv_check_property(struct device *dev,\n>>>>>               goto err_property;\n>>>>>           }\n>>>>>   +        /*\n>>>>> +         * The rotation hardware limits are related to the cropped\n>>>>> +         * source size. So use rot_max size to check the limits when\n>>>>> +         * swap happens. And also the scaling limits are related \n>>>>> to pos\n>>>>> +         * size, use pos size to check the limits.\n>>>>> +         */\n>>>>>           /* check for crop */\n>>>>>           if ((i == EXYNOS_DRM_OPS_SRC) && (pp->crop)) {\n>>>>>               if (swap) {\n>>>>>                   if ((pos->h < pp->crop_min.hsize) ||\n>>>>> -                    (sz->vsize > pp->crop_max.hsize) ||\n>>>>> +                    (pos->h > pp->rot_max.hsize) ||\n>>>>>                       (pos->w < pp->crop_min.vsize) ||\n>>>>> -                    (sz->hsize > pp->crop_max.vsize)) {\n>>>>> +                    (pos->w > pp->rot_max.vsize)) {\n>>>>>                       DRM_ERROR(\"out of crop size.\\n\");\n>>>>>                       goto err_property;\n>>>>>                   }\n>>>>>               } else {\n>>>>>                   if ((pos->w < pp->crop_min.hsize) ||\n>>>>> -                    (sz->hsize > pp->crop_max.hsize) ||\n>>>>> +                    (pos->w > pp->crop_max.hsize) ||\n>>>>>                       (pos->h < pp->crop_min.vsize) ||\n>>>>> -                    (sz->vsize > pp->crop_max.vsize)) {\n>>>>> +                    (pos->h > pp->crop_max.vsize)) {\n>>>>>                       DRM_ERROR(\"out of crop size.\\n\");\n>>>>>                       goto err_property;\n>>>>>                   }\n>>>>> @@ -1463,17 +1471,17 @@ static int \n>>>>> gsc_ippdrv_check_property(struct device *dev,\n>>>>>           if ((i == EXYNOS_DRM_OPS_DST) && (pp->scale)) {\n>>>>>               if (swap) {\n>>>>>                   if ((pos->h < pp->scale_min.hsize) ||\n>>>>> -                    (sz->vsize > pp->scale_max.hsize) ||\n>>>>> +                    (pos->h > pp->scale_max.hsize) ||\n>>>>>                       (pos->w < pp->scale_min.vsize) ||\n>>>>> -                    (sz->hsize > pp->scale_max.vsize)) {\n>>>>> +                    (pos->w > pp->scale_max.vsize)) {\n>>>>>                       DRM_ERROR(\"out of scale size.\\n\");\n>>>>>                       goto err_property;\n>>>>>                   }\n>>>>>               } else {\n>>>>>                   if ((pos->w < pp->scale_min.hsize) ||\n>>>>> -                    (sz->hsize > pp->scale_max.hsize) ||\n>>>>> +                    (pos->w > pp->scale_max.hsize) ||\n>>>>>                       (pos->h < pp->scale_min.vsize) ||\n>>>>> -                    (sz->vsize > pp->scale_max.vsize)) {\n>>>>> +                    (pos->h > pp->scale_max.vsize)) {\n>>>>>                       DRM_ERROR(\"out of scale size.\\n\");\n>>>>>                       goto err_property;\n>>>>>                   }\n>>>>> @@ -1676,6 +1684,15 @@ static int gsc_probe(struct platform_device \n>>>>> *pdev)\n>>>>>               dev_warn(dev, \"failed to get system register.\\n\");\n>>>>>               ctx->sysreg = NULL;\n>>>>>           }\n>>>>> +\n>>>>> +        ret = of_property_read_u32(dev->of_node, \"rot-max-hsize\",\n>>>>> + &ctx->ippdrv.prop_list.rot_max.hsize);\n>>>>> +        ret |= of_property_read_u32(dev->of_node, \"rot-max-vsize\",\n>>>>> + &ctx->ippdrv.prop_list.rot_max.vsize);\n>>>>> +        if (ret) {\n>>>>> +            dev_err(dev, \"rot-max property should be provided by \n>>>>> device tree.\\n\");\n>>>>> +            return -EINVAL;\n>>>>> +        }\n>>>>>       }\n>>>>>         /* clock control */\n>>>>> diff --git a/include/uapi/drm/exynos_drm.h \n>>>>> b/include/uapi/drm/exynos_drm.h\n>>>>> index cb3e9f9..d5d5518 100644\n>>>>> --- a/include/uapi/drm/exynos_drm.h\n>>>>> +++ b/include/uapi/drm/exynos_drm.h\n>>>>> @@ -192,6 +192,7 @@ enum drm_exynos_planer {\n>>>>>    * @crop_max: crop max resolution.\n>>>>>    * @scale_min: scale min resolution.\n>>>>>    * @scale_max: scale max resolution.\n>>>>> + * @rot_max: rotation max resolution.\n>>>>>    */\n>>>>>   struct drm_exynos_ipp_prop_list {\n>>>>>       __u32    version;\n>>>>> @@ -210,6 +211,7 @@ struct drm_exynos_ipp_prop_list {\n>>>>>       struct drm_exynos_sz    crop_max;\n>>>>>       struct drm_exynos_sz    scale_min;\n>>>>>       struct drm_exynos_sz    scale_max;\n>>>>> +    struct drm_exynos_sz    rot_max;\n>>>>>   };\n>>>>>     /**\n>>>>\n>>>> IMO maximum supported picture size should be hardcoded into driver, \n>>>> there\n>>>> is no need to add device tree properties for that. Please also \n>>>> check v4l2\n>>>> driver for Exynos GSC.\n>>>>\n>>>> Currently it uses only one compatible - \"exynos5-gsc\", but imho You \n>>>> should\n>>>> simply replace it with \"exynos5250-gsc\" and \"exynos5420-gsc\", and \n>>>> add those\n>>>> variants with proper maximum supported size (2047 and 2016 \n>>>> respectively).\n>>>>\n>>>> Best regards\n>>>\n>>> Hi Krzysztof and Marek,\n>>>\n>>> Thanks Krzysztof and Marek reviews.\n>>>\n>>> As Marek says, rot_max size will be hardcoded into driver,\n>>> then it will not break the ABI. And also,\n>>> I will check the v4l2 driver for Exynos GSC.\n>>>\n>>> Best regards,\n>>> Hoegeun\n>>>\n>>\n>> Hi Marek,\n>>\n>> I have checked v4l2 driver for Exynos GSC. The v4l2 driver supports\n>> Exynos 5250 and 5433 GSC. Currently, the hardware limits rotation is\n>> set to 2047 in the v4l2 driver.\n>>\n>\n> V4l2 GSC driver also supports Exynos5420/5422 SoCs, see\n> # git grep \"samsung,exynos5-gsc\" arch/arm/boot/dts/\n>\n>> In my opinion don't need to fix it, because the Exynos 5250 has a\n>> hardware rotation limits of 2048 and the Exynos 5250 has a hardware\n>> rotation limits of 2047.\n>\n> Like you pointed earlier, Exynos 5420/5422/5800 supports rotation only\n> up to 2016x2016, so additional patch for v4l2 is also needed.\n\nOk, I mistook it as not supporting the Exynos5420.\nSo, I will also upload patches related to v4l2 from patch ver3.\n\nBest regards,\nHoegeun\n\n>\n>>\n>> Please tell me if you have any other opinion.\n>>\n>\n> Best regards\n\n--\nTo unsubscribe from this list: send the line \"unsubscribe devicetree\" in\nthe body of a message to majordomo@vger.kernel.org\nMore majordomo info at  http://vger.kernel.org/majordomo-info.html","headers":{"Return-Path":"<devicetree-owner@vger.kernel.org>","X-Original-To":"incoming-dt@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming-dt@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=devicetree-owner@vger.kernel.org; receiver=<UNKNOWN>)","Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xpLfJ0N6sz9sPk\n\tfor <incoming-dt@patchwork.ozlabs.org>;\n\tFri,  8 Sep 2017 12:21:12 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1752979AbdIHCVK (ORCPT\n\t<rfc822;incoming-dt@patchwork.ozlabs.org>);\n\tThu, 7 Sep 2017 22:21:10 -0400","from mailout3.samsung.com ([203.254.224.33]:48747 \"EHLO\n\tmailout3.samsung.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1750966AbdIHCVI (ORCPT\n\t<rfc822; devicetree@vger.kernel.org>); Thu, 7 Sep 2017 22:21:08 -0400","from epcas1p4.samsung.com (unknown [182.195.41.48])\n\tby mailout3.samsung.com (KnoxPortal) with ESMTP id\n\t20170908022106epoutp0372e350fcc657fee28ade49d004adcc84~iQYVq_05u2546825468epoutp03T;\n\tFri,  8 Sep 2017 02:21:06 +0000 (GMT)","from epsmges1p1.samsung.com (unknown [182.195.40.64]) by\n\tepcas1p4.samsung.com (KnoxPortal) with ESMTP id\n\t20170908022105epcas1p4f51133eac09b59d57c99c9f9be60209c~iQYUv8kN_2533125331epcas1p4p;\n\tFri,  8 Sep 2017 02:21:05 +0000 (GMT)","from epcas1p3.samsung.com ( [182.195.41.47]) by\n\tepsmges1p1.samsung.com (Symantec Messaging Gateway) with SMTP id\n\t29.A5.22848.19EF1B95; Fri,  8 Sep 2017 11:21:05 +0900 (KST)","from epsmgms2p1new.samsung.com (unknown [182.195.42.142]) by\n\tepcas1p2.samsung.com (KnoxPortal) with ESMTP id\n\t20170908022105epcas1p225bb7fbbe91d6ff5bcb0b1bde22a8db2~iQYUWm8eA1327513275epcas1p2k;\n\tFri,  8 Sep 2017 02:21:05 +0000 (GMT)","from epmmp1.local.host ( [203.254.227.16]) by\n\tepsmgms2p1new.samsung.com (Symantec Messaging Gateway) with SMTP id\n\t72.F9.11757.19EF1B95; Fri,  8 Sep 2017 11:21:05 +0900 (KST)","from [10.113.63.38] by mmp1.samsung.com (Oracle Communications\n\tMessaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id\n\t<0OVX003S6VV41V10@mmp1.samsung.com>;\n\tFri, 08 Sep 2017 11:21:05 +0900 (KST)"],"X-AuditID":"b6c32a35-f798c6d000005940-da-59b1fe912590","Subject":"Re: [PATCH 3/3] drm/exynos/gsc: Add rotation hardware limits of\n\tgscaler","To":"Marek Szyprowski <m.szyprowski@samsung.com>,\n\tKrzysztof Kozlowski <krzk@kernel.org>,\n\tInki Dae <inki.dae@samsung.com>, sw0312.kim@samsung.com,\n\tairlied@linux.ie, kgene@kernel.org, robh+dt@kernel.org,\n\tmark.rutland@arm.com, catalin.marinas@arm.com, will.deacon@arm.com","Cc":"dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org,\n\tlinux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org,\n\tdevicetree@vger.kernel.org, Hoegeun Kwon <hoegeun.kwon@samsung.com>","From":"Hoegeun Kwon <hoegeun.kwon@samsung.com>","Message-id":"<f9ed590f-2e2d-8c9b-8c5f-e27eb8e3f39e@samsung.com>","Date":"Fri, 08 Sep 2017 11:21:10 +0900","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.2.1","MIME-version":"1.0","In-reply-to":"<024ea0a3-abe7-4a87-7723-2e7341237df2@samsung.com>","Content-type":"text/plain; charset=\"utf-8\"; format=\"flowed\"","Content-transfer-encoding":"7bit","Content-language":"en-US","X-Brightmail-Tracker":["H4sIAAAAAAAAA+NgFjrLJsWRmVeSWpSXmKPExsWy7bCmvu7EfxsjDdY26Fr0njvJZPF+WQ+j\n\txfwj51gtrnx9z2bxfnkXm8Wk+xNYLPofv2a2OH9+A7vFpsfXWC0u75rDZjHj/D4mi7VH7rJb\n\tLL1+kcmide8RdosZk1+yWbz8eILFQcBjzbw1jB6bVnWyeWz/9oDV4373cSaPzUvqPfq2rGL0\n\t+LxJLoA9KtUmIzUxJbVIITUvOT8lMy/dVsk7ON453tTMwFDX0NLCXEkhLzE31VbJxSdA1y0z\n\tB+h4JYWyxJxSoFBAYnGxkr6dTVF+aUmqQkZ+cYmtUrShoZGeoYG5npGRkZ6JcayVkSlQSUJq\n\tRvufr6wFC90qLu3ay9rAOMuwi5GTQ0LAROLnul5WCFtM4sK99WxdjFwcQgI7GCUWLn7ABOF8\n\tZ5SYd2E/E0zHgt//oKp2M0rMvHqVFcK5yyhx8PAZNpAqYYEgiYbmr4wgCRGBiUwSf58eA3OY\n\tBS4zSky81w82i01AV+Jrz3Uwm1fATmLZxIfsIDaLgKrE4/c3wOKiAhES277PYIOoEZT4Mfke\n\tC4jNKWAvsfXoW0YQm1nASuLZv1ZWCFteYvOat8wQtrhEc+tNFpDFEgLL2CWaNs9jg3jCReLp\n\tiecsELawxKvjW4AWcwDZ0hKXjtpChOslLu84yQjR28Ao0T9xNjtEwljiVFcjE8QCPol3X3tY\n\tIXp5JTrahCBKPCSu3/kMDS9HiaaZc6DhtZZZ4tf15ewTGOVnIflnFpIfZiH5YRaSHxYwsqxi\n\tFEstKM5NTy02LDDUK07MLS7NS9dLzs/dxAhOylqmOxinnPM5xCjAwajEwzshdGOkEGtiWXFl\n\t7iFGCQ5mJRHexR+AQrwpiZVVqUX58UWlOanFhxhNgeE9kVlKNDkfmDHySuINTSwNTMyMgEnP\n\t0tBQSZxXdP21CCGB9MSS1OzU1ILUIpg+Jg5OqQZGbb0Ytmp5LsutydYXj6SemKnoeX7T6t0B\n\tKif3/LU/ePj4KrPLjVMa0gRDqr6qZ17O//J922Jz/+LFl9/e8Xv4cH5Sgh9PM9ujE4kcUWud\n\tTJwqTslPqb25XHbltECtqnkaET+9X8++a9fRcLnq+6LIg5fY8i+rZS3y8M54uFf80vXUztP5\n\tHf7ZSizFGYmGWsxFxYkAB1pLZOADAAA=","H4sIAAAAAAAAA+NgFlrCIsWRmVeSWpSXmKPExsVy+t9jAd2J/zZGGny+J2DRe+4kk8X7ZT2M\n\tFvOPnGO1uPL1PZvF++VdbBaT7k9gseh//JrZ4vz5DewWmx5fY7W4vGsOm8WM8/uYLNYeuctu\n\tsfT6RSaL1r1H2C1mTH7JZvHy4wkWBwGPNfPWMHpsWtXJ5rH92wNWj/vdx5k8Ni+p9+jbsorR\n\t4/MmuQD2KC6blNSczLLUIn27BK6M9j9fWQsWulVc2rWXtYFxlmEXIyeHhICJxILf/9i6GLk4\n\thAR2Mko8WLiBESQhJHCfUWL/dk0QW1ggQOLgoYNgRSICk5kkel+tZwZxmAUuM0qs6vnBCNG+\n\tllmi+d0ONpAWNgFdia8915lAbF4BO4llEx+yg9gsAqoSj9/fAIuLCkRI9L29zA5RIyjxY/I9\n\tFhCbU8BeYuvRt2BnMAuYSXx5eZgVwpaX2LzmLTOELS7R3HqTZQKjwCwk7bOQtMxC0jILScsC\n\tRpZVjJKpBcW56bnFRgWGeanlesWJucWleel6yfm5mxiBcbftsFbfDsb7S+IPMQpwMCrx8FoE\n\tb4wUYk0sK67MPcQowcGsJMK7+ANQiDclsbIqtSg/vqg0J7X4EKM0B4uSOG9m34xIIYH0xJLU\n\t7NTUgtQimCwTB6dUA6NxkUGT16rNEvdWmS5abmG5J5Jbb9GequZNP7aUrlvGduR1R+jn6nW3\n\tbSfz/Vm73uJ93OFXSk/O/lrMqfMsOOvRzrpk3us8c59OEn2989bUMBXNRt9dD+xXTL3jnWYz\n\t9cyBBw4XAh1y2JlX6M87cUm+af638tnCkqHP3t2RsvbZv/agzZJXLbWLlFiKMxINtZiLihMB\n\txTXAJLcCAAA="],"X-CMS-MailID":"20170908022105epcas1p225bb7fbbe91d6ff5bcb0b1bde22a8db2","X-Msg-Generator":"CA","X-Sender-IP":"182.195.42.142","X-Local-Sender":"=?utf-8?b?6raM7ZqM6re8G1RpemVuIFBsYXRmb3JtIExhYihTL1c=?=\n\t=?utf-8?b?7IS87YSwKRvsgrzshLHsoITsnpAbRW5naW5lZXI=?=","X-Global-Sender":"=?utf-8?q?Hoegeun_Kwon=1BTizen_Platform_Lab=2E=1BSamsung?=\n\t=?utf-8?q?_Electronics=1BEngineer?=","X-Sender-Code":"=?utf-8?q?C10=1BTELE=1BC10V8111?=","CMS-TYPE":"101P","DLP-Filter":"Pass","X-CFilter-Loop":"Reflected","X-CMS-RootMailID":"20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d","X-RootMTR":"20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d","References":"<1504230476-1878-1-git-send-email-hoegeun.kwon@samsung.com>\n\t<CGME20170901014758epcas2p13ae73e7dcac72a1a28c9324164efbd6d@epcas2p1.samsung.com>\n\t<1504230476-1878-4-git-send-email-hoegeun.kwon@samsung.com>\n\t<10747c31-55fc-6464-eb00-99da6d66fca6@samsung.com>\n\t<7e628ff8-82be-a295-90fa-8f547a541cb3@samsung.com>\n\t<1e8a7563-046b-82b1-6da9-2e883426edf7@samsung.com>\n\t<024ea0a3-abe7-4a87-7723-2e7341237df2@samsung.com>","Sender":"devicetree-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<devicetree.vger.kernel.org>","X-Mailing-List":"devicetree@vger.kernel.org"}}]