From patchwork Tue Sep 1 07:22:52 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joonyoung Shim X-Patchwork-Id: 7103561 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id F16C29F32B for ; Tue, 1 Sep 2015 07:23:00 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id BEA0F2052D for ; Tue, 1 Sep 2015 07:22:59 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 9813320528 for ; Tue, 1 Sep 2015 07:22:58 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A048D6E330; Tue, 1 Sep 2015 00:22:54 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mailout1.samsung.com (mailout1.samsung.com [203.254.224.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 347E16E237 for ; Tue, 1 Sep 2015 00:22:53 -0700 (PDT) Received: from epcpsbgr5.samsung.com (u145.gpu120.samsung.co.kr [203.254.230.145]) by mailout1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0NTZ01R23LU3AN70@mailout1.samsung.com> for dri-devel@lists.freedesktop.org; Tue, 01 Sep 2015 16:22:51 +0900 (KST) Received: from epcpsbgm2new.samsung.com ( [172.20.52.115]) by epcpsbgr5.samsung.com (EPCPMTA) with SMTP id 3B.CB.17770.B4255E55; Tue, 1 Sep 2015 16:22:51 +0900 (KST) X-AuditID: cbfee691-f79ca6d00000456a-d6-55e5524b38bd Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm2new.samsung.com (EPCPMTA) with SMTP id 4F.9F.18629.A4255E55; Tue, 1 Sep 2015 16:22:51 +0900 (KST) Received: from localhost.localdomain ([10.252.81.123]) by mmp2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0NTZ00AOGLU2EMF0@mmp2.samsung.com>; Tue, 01 Sep 2015 16:22:50 +0900 (KST) From: Joonyoung Shim To: dri-devel@lists.freedesktop.org Subject: [PATCH 6/9] drm/exynos: update exynos_drm_framebuffer_init() for multiple buffers Date: Tue, 01 Sep 2015 16:22:52 +0900 Message-id: <1441092175-18187-6-git-send-email-jy0922.shim@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1441092175-18187-1-git-send-email-jy0922.shim@samsung.com> References: <1441092175-18187-1-git-send-email-jy0922.shim@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrHLMWRmVeSWpSXmKPExsWyRsSkWNc76GmowZ2FrBZXvr5ns5h0fwKL xYt7F1ksZkx+yebA4nG/+ziTR9+WVYwBTFFcNimpOZllqUX6dglcGb0rPrIVPJer2Ny4iamB 8YlkFyMnh4SAiUT3zRlMELaYxIV769m6GLk4hARWMEpc29fODlN0rGk+M0RiFqPErIfvoZwf jBL/bnwHq2IT0JO4s+042CgRAWWJvxNXMYLYzAKeEitWzQOLCwvESDx9sgwozsHBIqAqMfG1 IUiYV8BdYvmMm2wQy+QkTh6bzApicwp4SNzbtAWsVQio5uSJ1ywgeyUEPrNJ7OyfC9bAIiAg 8W3yIRaQmRICshKbDjBDzJGUOLjiBssERuEFjAyrGEVTC5ILipPSi0z1ihNzi0vz0vWS83M3 MQKD9fS/ZxN3MN4/YH2IUYCDUYmHt+Pjk1Ah1sSy4srcQ4ymQBsmMkuJJucDYyKvJN7Q2MzI wtTE1NjI3NJMSZxXR/pnsJBAemJJanZqakFqUXxRaU5q8SFGJg5OqQbGqQbxcopetd9Wb1U5 uLDaV+Cp/kG+6xJywjc2LStjuSTF1Bi3UqlNRV4lITEsRm5O0Ff5ST+FMr2fqn/Oepr7Tm5i G+9xGW676dJVOhnOJ6LuWv7+dOS7/6WuxJ9HFNcdNjzk6ly/zInhg7H4kmtninb+Y73ZM/ey 3b2zlkszOATvVJ3ZsD1WiaU4I9FQi7moOBEAcGHJtlECAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupikeLIzCtJLcpLzFFi42I5/e+xoK530NNQg+cJFle+vmezmHR/AovF i3sXWSxmTH7J5sDicb/7OJNH35ZVjAFMUQ2MNhmpiSmpRQqpecn5KZl56bZK3sHxzvGmZgaG uoaWFuZKCnmJuam2Si4+AbpumTlAm5QUyhJzSoFCAYnFxUr6dpgmhIa46VrANEbo+oYEwfUY GaCBhDWMGb0rPrIVPJer2Ny4iamB8YlkFyMnh4SAicSxpvnMELaYxIV769m6GLk4hARmMUrM evieGcL5wSjx78Z3dpAqNgE9iTvbjjOB2CICyhJ/J65iBLGZBTwlVqyaBxYXFoiRePpkGVCc g4NFQFVi4mtDkDCvgLvE8hk32SCWyUmcPDaZFcTmFPCQuLdpC1irEFDNyROvWSYw8i5gZFjF KJFakFxQnJSea5SXWq5XnJhbXJqXrpecn7uJERwPz6R3MB7e5X6IUYCDUYmHt+Pjk1Ah1sSy 4srcQ4wSHMxKIrzHPJ6GCvGmJFZWpRblxxeV5qQWH2I0BbprIrOUaHI+MFbzSuINjU3MjCyN zA0tjIzNlcR5c9iB5gikJ5akZqemFqQWwfQxcXBKNTCmyUU6Cjo8s9IP/DQ5TdjxsZp1Sd7O z+dP7A3ZEqa1KFHpzaQ5U1uO627ISrPZNj9BXVP1wMyZ79qFigwjKqe7Rwnsa3II8X/rknPD nUtuoVzfK7OEFwe4Z329lWX7S2hN+zapWaHs69m3/jL2rJfNFN4ZeDzrcLc279J5xn0a8xfp 6BVNfqDEUpyRaKjFXFScCADfNmysnQIAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Cc: sw0312.kim@samsung.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This modifies exynos_drm_framebuffer_init() to be possible to support multiple buffers. Then it can be used by exynos_user_fb_create(). Signed-off-by: Joonyoung Shim Reviewed-by: Gustavo Padovan --- drivers/gpu/drm/exynos/exynos_drm_fb.c | 36 +++++++++++++++++-------------- drivers/gpu/drm/exynos/exynos_drm_fb.h | 5 ++++- drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 3 +-- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c index 5cee148..8e5d3eb 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fb.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c @@ -23,7 +23,6 @@ #include "exynos_drm_drv.h" #include "exynos_drm_fb.h" #include "exynos_drm_fbdev.h" -#include "exynos_drm_gem.h" #include "exynos_drm_iommu.h" #include "exynos_drm_crtc.h" @@ -134,36 +133,41 @@ unsigned int exynos_drm_fb_get_buf_cnt(struct drm_framebuffer *fb) struct drm_framebuffer * exynos_drm_framebuffer_init(struct drm_device *dev, struct drm_mode_fb_cmd2 *mode_cmd, - struct drm_gem_object *obj) + struct exynos_drm_gem_obj **gem_obj, + int count) { struct exynos_drm_fb *exynos_fb; - struct exynos_drm_gem_obj *exynos_gem_obj; + int i; int ret; - exynos_gem_obj = to_exynos_gem_obj(obj); - - ret = check_fb_gem_memory_type(dev, exynos_gem_obj); - if (ret < 0) - return ERR_PTR(ret); - exynos_fb = kzalloc(sizeof(*exynos_fb), GFP_KERNEL); if (!exynos_fb) return ERR_PTR(-ENOMEM); - drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd); - exynos_fb->exynos_gem_obj[0] = exynos_gem_obj; + exynos_fb->buf_cnt = count; + DRM_DEBUG_KMS("buf_cnt = %d\n", exynos_fb->buf_cnt); - /* buffer count to framebuffer always is 1 at booting time. */ - exynos_fb->buf_cnt = 1; + for (i = 0; i < count; i++) { + ret = check_fb_gem_memory_type(dev, gem_obj[i]); + if (ret < 0) + goto err; + + exynos_fb->exynos_gem_obj[i] = gem_obj[i]; + } + + drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd); ret = drm_framebuffer_init(dev, &exynos_fb->fb, &exynos_drm_fb_funcs); - if (ret) { - kfree(exynos_fb); + if (ret < 0) { DRM_ERROR("failed to initialize framebuffer\n"); - return ERR_PTR(ret); + goto err; } return &exynos_fb->fb; + +err: + kfree(exynos_fb); + return ERR_PTR(ret); } static struct drm_framebuffer * diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.h b/drivers/gpu/drm/exynos/exynos_drm_fb.h index 897d2cf..8900f6b 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fb.h +++ b/drivers/gpu/drm/exynos/exynos_drm_fb.h @@ -14,10 +14,13 @@ #ifndef _EXYNOS_DRM_FB_H_ #define _EXYNOS_DRM_FB_H +#include "exynos_drm_gem.h" + struct drm_framebuffer * exynos_drm_framebuffer_init(struct drm_device *dev, struct drm_mode_fb_cmd2 *mode_cmd, - struct drm_gem_object *obj); + struct exynos_drm_gem_obj **gem_obj, + int count); /* get gem object of a drm framebuffer */ struct exynos_drm_gem_obj *exynos_drm_fb_gem_obj(struct drm_framebuffer *fb, diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c index 133cf5f..a221f75 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c @@ -21,7 +21,6 @@ #include "exynos_drm_drv.h" #include "exynos_drm_fb.h" #include "exynos_drm_fbdev.h" -#include "exynos_drm_gem.h" #include "exynos_drm_iommu.h" #define MAX_CONNECTOR 4 @@ -160,7 +159,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper, exynos_fbdev->obj = obj; - helper->fb = exynos_drm_framebuffer_init(dev, &mode_cmd, &obj->base); + helper->fb = exynos_drm_framebuffer_init(dev, &mode_cmd, &obj, 1); if (IS_ERR(helper->fb)) { DRM_ERROR("failed to create drm framebuffer.\n"); ret = PTR_ERR(helper->fb);