From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7CFDECA9EAF for ; Mon, 21 Oct 2019 21:48:20 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3395820659 for ; Mon, 21 Oct 2019 21:48:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="int6D4by" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3395820659 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=/NiAlVzAuj8ZJtieJ3AGCSMKOapnuLR+6NNZM6nup6M=; b=int6D4byIU/ROU edgdqQr9p+ATZopEaVSyijeQ6zRQ0VpqjaizpImCD7UBfi5xOP/ZFYYjdFykNpTdhZ7RH4LAN772h bvsMHB2r+q+sh0VhR81qQjiTfyaEN+otXarBRiNqblrXRJM9Um/umOQtpCCuaRcOWJsgaaFm/iPfg OqVud3c2ONKlDso6xmyW4ZNv7b80/b3SGgTDD5HJAUgFDjKetiHIDfk/1EQdTM801Pgu+Al0DXc/v TOdwaNRkBDnhTdwmkfZPlwJbOxI/wwcTy/OWT6vpqogMzDZYAlO/LHoxaEuOSTY9J1schONuneLli vWQnJSY4TGM6moQxKNkA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iMfX3-0002Rr-7Z; Mon, 21 Oct 2019 21:48:05 +0000 Received: from mail-ot1-f67.google.com ([209.85.210.67]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iMfV6-0000JL-Di; Mon, 21 Oct 2019 21:46:07 +0000 Received: by mail-ot1-f67.google.com with SMTP id e11so12373826otl.5; Mon, 21 Oct 2019 14:46:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QQDw9NPftsDM5OhHs6ZNOxGtsrxVPosqKf8720sJxbM=; b=UU/4gXVzkca73PEEl1ZezHLkWFrkddXIlFuYG8iiUUcX7+UC5yS+uFPUltu474kmuZ 85GDhHpoXBuJ+bMLd5rbeCNQBCFAvtrBb2ElqWyDijc+xnmZTEQ1mJ4C15j+gWntFfIz YivMrabcSimRiCSTU/u9So63jbPVo4T8gewRBlyy1lX35U6oX0NtMAKNsKLYPiOa8uzM KJdgq/mxiZKzzs6DTEZlvOkTaLWUu5agnMTogxfmCwPXK6Y8MdKw8c2pxx/ZdKDznc0t cQn1+xU9cYoCFjFcU1weyrPTKTn4O9OWUwkS1Z4WfXeWlsYMUwvoJ3i/iWZ8MfaiuilG jxSQ== X-Gm-Message-State: APjAAAV+lGtJEcJI9cdavjOYYv1vmiQR/d8HakZWSO471MN6iSZNM5HC STPW6wyWFUz1DQ3Xub/lIQ== X-Google-Smtp-Source: APXvYqw6b8W3vI30N7gM1+NXuyDoi2C4I2ewSclJeKb4IZyrqQe6H9toYKkWgNpHOdph0+3yURR+Rw== X-Received: by 2002:a9d:344a:: with SMTP id v68mr55638otb.85.1571694363240; Mon, 21 Oct 2019 14:46:03 -0700 (PDT) Received: from xps15.herring.priv (24-155-109-49.dyn.grandenetworks.net. [24.155.109.49]) by smtp.googlemail.com with ESMTPSA id u130sm4122676oib.56.2019.10.21.14.46.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 14:46:02 -0700 (PDT) From: Rob Herring To: dri-devel@lists.freedesktop.org Subject: [PATCH 5/6] drm/mediatek: Convert to use CMA helpers Date: Mon, 21 Oct 2019 16:45:49 -0500 Message-Id: <20191021214550.1461-6-robh@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191021214550.1461-1-robh@kernel.org> References: <20191021214550.1461-1-robh@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191021_144604_481693_D1DCF7B1 X-CRM114-Status: GOOD ( 23.61 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Heiko=20St=C3=BCbner?= , Neil Armstrong , David Airlie , Liviu Dudau , Sandy Huang , Laurent Pinchart , Benjamin Gaignard , Yannick Fertre , Kevin Hilman , Xinwei Kong , Xinliang Liu , linux-rockchip@lists.infradead.org, Chen-Yu Tsai , =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , "James \(Qian\) Wang" , CK Hu , Philipp Zabel , Alexandre Torgue , Chen Feng , Maarten Lankhorst , Maxime Ripard , linux-mediatek@lists.infradead.org, Matthias Brugger , Daniel Vetter , Sean Paul , linux-arm-kernel@lists.infradead.org, Philippe Cornu , Vincent Abriou , Kieran Bingham , Maxime Coquelin , Rongrong Zou Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org The only reason the Mediatek driver doesn't use the CMA helpers is it sets DMA_ATTR_NO_KERNEL_MAPPING and does a vmap() on demand. Using vmap() is not even guaranteed to work as DMA buffers may not have a struct page. Now that the CMA helpers support setting DMA_ATTR_NO_KERNEL_MAPPING as needed or not, convert Mediatek driver to use CMA helpers. Cc: CK Hu Cc: Philipp Zabel Cc: David Airlie Cc: Daniel Vetter Cc: Matthias Brugger Cc: linux-arm-kernel@lists.infradead.org Cc: linux-mediatek@lists.infradead.org Signed-off-by: Rob Herring --- drivers/gpu/drm/mediatek/Makefile | 1 - drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 2 +- drivers/gpu/drm/mediatek/mtk_drm_drv.c | 28 +-- drivers/gpu/drm/mediatek/mtk_drm_fb.c | 1 - drivers/gpu/drm/mediatek/mtk_drm_gem.c | 289 ----------------------- drivers/gpu/drm/mediatek/mtk_drm_gem.h | 51 ---- drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +- 7 files changed, 15 insertions(+), 364 deletions(-) delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_gem.c delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_gem.h diff --git a/drivers/gpu/drm/mediatek/Makefile b/drivers/gpu/drm/mediatek/Makefile index 82ae49c64221..50a50e86738f 100644 --- a/drivers/gpu/drm/mediatek/Makefile +++ b/drivers/gpu/drm/mediatek/Makefile @@ -8,7 +8,6 @@ mediatek-drm-y := mtk_disp_color.o \ mtk_drm_ddp_comp.o \ mtk_drm_drv.o \ mtk_drm_fb.o \ - mtk_drm_gem.o \ mtk_drm_plane.o \ mtk_dsi.o \ mtk_mipi_tx.o \ diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c index 34a731755791..638d57e8ac12 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -18,7 +19,6 @@ #include "mtk_drm_crtc.h" #include "mtk_drm_ddp.h" #include "mtk_drm_ddp_comp.h" -#include "mtk_drm_gem.h" #include "mtk_drm_plane.h" /** diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c index 352b81a7a670..36f32507e5fb 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c @@ -28,7 +28,6 @@ #include "mtk_drm_ddp_comp.h" #include "mtk_drm_drv.h" #include "mtk_drm_fb.h" -#include "mtk_drm_gem.h" #define DRIVER_NAME "mediatek" #define DRIVER_DESC "Mediatek SoC DRM" @@ -335,16 +334,14 @@ static void mtk_drm_kms_deinit(struct drm_device *drm) drm_mode_config_cleanup(drm); } -static const struct file_operations mtk_drm_fops = { - .owner = THIS_MODULE, - .open = drm_open, - .release = drm_release, - .unlocked_ioctl = drm_ioctl, - .mmap = mtk_drm_gem_mmap, - .poll = drm_poll, - .read = drm_read, - .compat_ioctl = drm_compat_ioctl, -}; +DEFINE_DRM_GEM_CMA_FOPS(mtk_drm_fops); + +static int mtk_drm_gem_dumb_create(struct drm_file *file_priv, + struct drm_device *dev, + struct drm_mode_create_dumb *args) +{ + return drm_gem_cma_dumb_create_internal(file_priv, dev, args); +} /* * We need to override this because the device used to import the memory is @@ -361,18 +358,15 @@ struct drm_gem_object *mtk_drm_gem_prime_import(struct drm_device *dev, static struct drm_driver mtk_drm_driver = { .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC, - .gem_free_object_unlocked = mtk_drm_gem_free_object, .gem_vm_ops = &drm_gem_cma_vm_ops, + .gem_create_object = drm_cma_gem_create_object_default_funcs, .dumb_create = mtk_drm_gem_dumb_create, .prime_handle_to_fd = drm_gem_prime_handle_to_fd, .prime_fd_to_handle = drm_gem_prime_fd_to_handle, .gem_prime_import = mtk_drm_gem_prime_import, - .gem_prime_get_sg_table = mtk_gem_prime_get_sg_table, - .gem_prime_import_sg_table = mtk_gem_prime_import_sg_table, - .gem_prime_mmap = mtk_drm_gem_mmap_buf, - .gem_prime_vmap = mtk_drm_gem_prime_vmap, - .gem_prime_vunmap = mtk_drm_gem_prime_vunmap, + .gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table_vmap, + .gem_prime_mmap = drm_gem_prime_mmap, .fops = &mtk_drm_fops, .name = DRIVER_NAME, diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c index 3f230a28a2dc..596b4d5ed002 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_fb.c @@ -14,7 +14,6 @@ #include "mtk_drm_drv.h" #include "mtk_drm_fb.h" -#include "mtk_drm_gem.h" static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = { .create_handle = drm_gem_fb_create_handle, diff --git a/drivers/gpu/drm/mediatek/mtk_drm_gem.c b/drivers/gpu/drm/mediatek/mtk_drm_gem.c deleted file mode 100644 index ca672f1d140d..000000000000 --- a/drivers/gpu/drm/mediatek/mtk_drm_gem.c +++ /dev/null @@ -1,289 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Copyright (c) 2015 MediaTek Inc. - */ - -#include - -#include -#include -#include -#include - -#include "mtk_drm_drv.h" -#include "mtk_drm_gem.h" - -static struct mtk_drm_gem_obj *mtk_drm_gem_init(struct drm_device *dev, - unsigned long size) -{ - struct mtk_drm_gem_obj *mtk_gem_obj; - int ret; - - size = round_up(size, PAGE_SIZE); - - mtk_gem_obj = kzalloc(sizeof(*mtk_gem_obj), GFP_KERNEL); - if (!mtk_gem_obj) - return ERR_PTR(-ENOMEM); - - ret = drm_gem_object_init(dev, &mtk_gem_obj->base, size); - if (ret < 0) { - DRM_ERROR("failed to initialize gem object\n"); - kfree(mtk_gem_obj); - return ERR_PTR(ret); - } - - return mtk_gem_obj; -} - -struct mtk_drm_gem_obj *mtk_drm_gem_create(struct drm_device *dev, - size_t size, bool alloc_kmap) -{ - struct mtk_drm_private *priv = dev->dev_private; - struct mtk_drm_gem_obj *mtk_gem; - struct drm_gem_object *obj; - int ret; - - mtk_gem = mtk_drm_gem_init(dev, size); - if (IS_ERR(mtk_gem)) - return ERR_CAST(mtk_gem); - - obj = &mtk_gem->base; - - mtk_gem->dma_attrs = DMA_ATTR_WRITE_COMBINE; - - if (!alloc_kmap) - mtk_gem->dma_attrs |= DMA_ATTR_NO_KERNEL_MAPPING; - - mtk_gem->cookie = dma_alloc_attrs(priv->dma_dev, obj->size, - &mtk_gem->dma_addr, GFP_KERNEL, - mtk_gem->dma_attrs); - if (!mtk_gem->cookie) { - DRM_ERROR("failed to allocate %zx byte dma buffer", obj->size); - ret = -ENOMEM; - goto err_gem_free; - } - - if (alloc_kmap) - mtk_gem->kvaddr = mtk_gem->cookie; - - DRM_DEBUG_DRIVER("cookie = %p dma_addr = %pad size = %zu\n", - mtk_gem->cookie, &mtk_gem->dma_addr, - size); - - return mtk_gem; - -err_gem_free: - drm_gem_object_release(obj); - kfree(mtk_gem); - return ERR_PTR(ret); -} - -void mtk_drm_gem_free_object(struct drm_gem_object *obj) -{ - struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj); - struct mtk_drm_private *priv = obj->dev->dev_private; - - if (mtk_gem->sg) - drm_prime_gem_destroy(obj, mtk_gem->sg); - else - dma_free_attrs(priv->dma_dev, obj->size, mtk_gem->cookie, - mtk_gem->dma_addr, mtk_gem->dma_attrs); - - /* release file pointer to gem object. */ - drm_gem_object_release(obj); - - kfree(mtk_gem); -} - -int mtk_drm_gem_dumb_create(struct drm_file *file_priv, struct drm_device *dev, - struct drm_mode_create_dumb *args) -{ - struct mtk_drm_gem_obj *mtk_gem; - int ret; - - args->pitch = DIV_ROUND_UP(args->width * args->bpp, 8); - args->size = args->pitch * args->height; - - mtk_gem = mtk_drm_gem_create(dev, args->size, false); - if (IS_ERR(mtk_gem)) - return PTR_ERR(mtk_gem); - - /* - * allocate a id of idr table where the obj is registered - * and handle has the id what user can see. - */ - ret = drm_gem_handle_create(file_priv, &mtk_gem->base, &args->handle); - if (ret) - goto err_handle_create; - - /* drop reference from allocate - handle holds it now. */ - drm_gem_object_put_unlocked(&mtk_gem->base); - - return 0; - -err_handle_create: - mtk_drm_gem_free_object(&mtk_gem->base); - return ret; -} - -static int mtk_drm_gem_object_mmap(struct drm_gem_object *obj, - struct vm_area_struct *vma) - -{ - int ret; - struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj); - struct mtk_drm_private *priv = obj->dev->dev_private; - - /* - * dma_alloc_attrs() allocated a struct page table for mtk_gem, so clear - * VM_PFNMAP flag that was set by drm_gem_mmap_obj()/drm_gem_mmap(). - */ - vma->vm_flags &= ~VM_PFNMAP; - - ret = dma_mmap_attrs(priv->dma_dev, vma, mtk_gem->cookie, - mtk_gem->dma_addr, obj->size, mtk_gem->dma_attrs); - if (ret) - drm_gem_vm_close(vma); - - return ret; -} - -int mtk_drm_gem_mmap_buf(struct drm_gem_object *obj, struct vm_area_struct *vma) -{ - int ret; - - ret = drm_gem_mmap_obj(obj, obj->size, vma); - if (ret) - return ret; - - return mtk_drm_gem_object_mmap(obj, vma); -} - -int mtk_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma) -{ - struct drm_gem_object *obj; - int ret; - - ret = drm_gem_mmap(filp, vma); - if (ret) - return ret; - - obj = vma->vm_private_data; - - /* - * Set vm_pgoff (used as a fake buffer offset by DRM) to 0 and map the - * whole buffer from the start. - */ - vma->vm_pgoff = 0; - - return mtk_drm_gem_object_mmap(obj, vma); -} - -/* - * Allocate a sg_table for this GEM object. - * Note: Both the table's contents, and the sg_table itself must be freed by - * the caller. - * Returns a pointer to the newly allocated sg_table, or an ERR_PTR() error. - */ -struct sg_table *mtk_gem_prime_get_sg_table(struct drm_gem_object *obj) -{ - struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj); - struct mtk_drm_private *priv = obj->dev->dev_private; - struct sg_table *sgt; - int ret; - - sgt = kzalloc(sizeof(*sgt), GFP_KERNEL); - if (!sgt) - return ERR_PTR(-ENOMEM); - - ret = dma_get_sgtable_attrs(priv->dma_dev, sgt, mtk_gem->cookie, - mtk_gem->dma_addr, obj->size, - mtk_gem->dma_attrs); - if (ret) { - DRM_ERROR("failed to allocate sgt, %d\n", ret); - kfree(sgt); - return ERR_PTR(ret); - } - - return sgt; -} - -struct drm_gem_object *mtk_gem_prime_import_sg_table(struct drm_device *dev, - struct dma_buf_attachment *attach, struct sg_table *sg) -{ - struct mtk_drm_gem_obj *mtk_gem; - int ret; - struct scatterlist *s; - unsigned int i; - dma_addr_t expected; - - mtk_gem = mtk_drm_gem_init(dev, attach->dmabuf->size); - - if (IS_ERR(mtk_gem)) - return ERR_CAST(mtk_gem); - - expected = sg_dma_address(sg->sgl); - for_each_sg(sg->sgl, s, sg->nents, i) { - if (sg_dma_address(s) != expected) { - DRM_ERROR("sg_table is not contiguous"); - ret = -EINVAL; - goto err_gem_free; - } - expected = sg_dma_address(s) + sg_dma_len(s); - } - - mtk_gem->dma_addr = sg_dma_address(sg->sgl); - mtk_gem->sg = sg; - - return &mtk_gem->base; - -err_gem_free: - kfree(mtk_gem); - return ERR_PTR(ret); -} - -void *mtk_drm_gem_prime_vmap(struct drm_gem_object *obj) -{ - struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj); - struct sg_table *sgt; - struct sg_page_iter iter; - unsigned int npages; - unsigned int i = 0; - - if (mtk_gem->kvaddr) - return mtk_gem->kvaddr; - - sgt = mtk_gem_prime_get_sg_table(obj); - if (IS_ERR(sgt)) - return NULL; - - npages = obj->size >> PAGE_SHIFT; - mtk_gem->pages = kcalloc(npages, sizeof(*mtk_gem->pages), GFP_KERNEL); - if (!mtk_gem->pages) - goto out; - - for_each_sg_page(sgt->sgl, &iter, sgt->orig_nents, 0) { - mtk_gem->pages[i++] = sg_page_iter_page(&iter); - if (i > npages) - break; - } - mtk_gem->kvaddr = vmap(mtk_gem->pages, npages, VM_MAP, - pgprot_writecombine(PAGE_KERNEL)); - -out: - kfree((void *)sgt); - - return mtk_gem->kvaddr; -} - -void mtk_drm_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) -{ - struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj); - - if (!mtk_gem->pages) - return; - - vunmap(vaddr); - mtk_gem->kvaddr = 0; - kfree((void *)mtk_gem->pages); -} diff --git a/drivers/gpu/drm/mediatek/mtk_drm_gem.h b/drivers/gpu/drm/mediatek/mtk_drm_gem.h deleted file mode 100644 index ff9f976d9807..000000000000 --- a/drivers/gpu/drm/mediatek/mtk_drm_gem.h +++ /dev/null @@ -1,51 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * Copyright (c) 2015 MediaTek Inc. - */ - -#ifndef _MTK_DRM_GEM_H_ -#define _MTK_DRM_GEM_H_ - -#include - -/* - * mtk drm buffer structure. - * - * @base: a gem object. - * - a new handle to this gem object would be created - * by drm_gem_handle_create(). - * @cookie: the return value of dma_alloc_attrs(), keep it for dma_free_attrs() - * @kvaddr: kernel virtual address of gem buffer. - * @dma_addr: dma address of gem buffer. - * @dma_attrs: dma attributes of gem buffer. - * - * P.S. this object would be transferred to user as kms_bo.handle so - * user can access the buffer through kms_bo.handle. - */ -struct mtk_drm_gem_obj { - struct drm_gem_object base; - void *cookie; - void *kvaddr; - dma_addr_t dma_addr; - unsigned long dma_attrs; - struct sg_table *sg; - struct page **pages; -}; - -#define to_mtk_gem_obj(x) container_of(x, struct mtk_drm_gem_obj, base) - -void mtk_drm_gem_free_object(struct drm_gem_object *gem); -struct mtk_drm_gem_obj *mtk_drm_gem_create(struct drm_device *dev, size_t size, - bool alloc_kmap); -int mtk_drm_gem_dumb_create(struct drm_file *file_priv, struct drm_device *dev, - struct drm_mode_create_dumb *args); -int mtk_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma); -int mtk_drm_gem_mmap_buf(struct drm_gem_object *obj, - struct vm_area_struct *vma); -struct sg_table *mtk_gem_prime_get_sg_table(struct drm_gem_object *obj); -struct drm_gem_object *mtk_gem_prime_import_sg_table(struct drm_device *dev, - struct dma_buf_attachment *attach, struct sg_table *sg); -void *mtk_drm_gem_prime_vmap(struct drm_gem_object *obj); -void mtk_drm_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); - -#endif diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c index 584a9ecadce6..8f256602f075 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c @@ -8,13 +8,14 @@ #include #include #include +#include +#include #include #include "mtk_drm_crtc.h" #include "mtk_drm_ddp_comp.h" #include "mtk_drm_drv.h" #include "mtk_drm_fb.h" -#include "mtk_drm_gem.h" #include "mtk_drm_plane.h" static const u32 formats[] = { @@ -108,7 +109,6 @@ static void mtk_plane_atomic_update(struct drm_plane *plane, struct drm_crtc *crtc = plane->state->crtc; struct drm_framebuffer *fb = plane->state->fb; struct drm_gem_object *gem; - struct mtk_drm_gem_obj *mtk_gem; unsigned int pitch, format; dma_addr_t addr; @@ -116,8 +116,7 @@ static void mtk_plane_atomic_update(struct drm_plane *plane, return; gem = fb->obj[0]; - mtk_gem = to_mtk_gem_obj(gem); - addr = mtk_gem->dma_addr; + addr = to_drm_gem_cma_obj(gem)->paddr; pitch = fb->pitches[0]; format = fb->format->format; -- 2.20.1 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Herring Subject: [PATCH 5/6] drm/mediatek: Convert to use CMA helpers Date: Mon, 21 Oct 2019 16:45:49 -0500 Message-ID: <20191021214550.1461-6-robh@kernel.org> References: <20191021214550.1461-1-robh@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191021214550.1461-1-robh@kernel.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Neil Armstrong , David Airlie , Liviu Dudau , Laurent Pinchart , Yannick Fertre , Kevin Hilman , Xinwei Kong , Xinliang Liu , linux-rockchip@lists.infradead.org, Chen-Yu Tsai , Kieran Bingham , "James (Qian) Wang" , Alexandre Torgue , Chen Feng , linux-mediatek@lists.infradead.org, Matthias Brugger , Sean Paul , linux-arm-kernel@lists.infradead.org, Philippe Cornu , Vincent Abriou , Maxime Coquelin , Rongrong Zou List-Id: linux-rockchip.vger.kernel.org VGhlIG9ubHkgcmVhc29uIHRoZSBNZWRpYXRlayBkcml2ZXIgZG9lc24ndCB1c2UgdGhlIENNQSBo ZWxwZXJzIGlzIGl0CnNldHMgRE1BX0FUVFJfTk9fS0VSTkVMX01BUFBJTkcgYW5kIGRvZXMgYSB2 bWFwKCkgb24gZGVtYW5kLiBVc2luZwp2bWFwKCkgaXMgbm90IGV2ZW4gZ3VhcmFudGVlZCB0byB3 b3JrIGFzIERNQSBidWZmZXJzIG1heSBub3QgaGF2ZSBhCnN0cnVjdCBwYWdlLiBOb3cgdGhhdCB0 aGUgQ01BIGhlbHBlcnMgc3VwcG9ydCBzZXR0aW5nCkRNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5H IGFzIG5lZWRlZCBvciBub3QsIGNvbnZlcnQgTWVkaWF0ZWsgZHJpdmVyIHRvCnVzZSBDTUEgaGVs cGVycy4KCkNjOiBDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgpDYzogUGhpbGlwcCBaYWJlbCA8 cC56YWJlbEBwZW5ndXRyb25peC5kZT4KQ2M6IERhdmlkIEFpcmxpZSA8YWlybGllZEBsaW51eC5p ZT4KQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4KQ2M6IE1hdHRoaWFzIEJydWdn ZXIgPG1hdHRoaWFzLmJnZ0BnbWFpbC5jb20+CkNjOiBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKQ2M6IGxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcKU2lnbmVk LW9mZi1ieTogUm9iIEhlcnJpbmcgPHJvYmhAa2VybmVsLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgIHwgICAxIC0KIGRyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX2NydGMuYyAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2Rydi5jICAgfCAgMjggKy0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9mYi5jICAgIHwgICAxIC0KIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5j ICAgfCAyODkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2dlbS5oICAgfCAgNTEgLS0tLQogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fcGxhbmUuYyB8ICAgNyArLQogNyBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCsp LCAzNjQgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fZ2VtLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9nZW0uaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQppbmRleCA4 MmFlNDljNjQyMjEuLjUwYTUwZTg2NzM4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQpA QCAtOCw3ICs4LDYgQEAgbWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3BfY29sb3IubyBcCiAJCSAg bXRrX2RybV9kZHBfY29tcC5vIFwKIAkJICBtdGtfZHJtX2Rydi5vIFwKIAkJICBtdGtfZHJtX2Zi Lm8gXAotCQkgIG10a19kcm1fZ2VtLm8gXAogCQkgIG10a19kcm1fcGxhbmUubyBcCiAJCSAgbXRr X2RzaS5vIFwKIAkJICBtdGtfbWlwaV90eC5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2NydGMuYwppbmRleCAzNGE3MzE3NTU3OTEuLjYzOGQ1N2U4YWMxMiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVk ZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxw ZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9wcm9i ZV9oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX3ZibGFuay5oPgogCkBAIC0xOCw3ICsxOSw2 IEBACiAjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCiAjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIK ICNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCi0jaW5jbHVkZSAibXRrX2RybV9nZW0uaCIK ICNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kcnYuYwppbmRleCAzNTJiODFhN2E2NzAuLjM2ZjMyNTA3ZTVmYiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRl ICJtdGtfZHJtX2RkcF9jb21wLmgiCiAjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKICNpbmNsdWRl ICJtdGtfZHJtX2ZiLmgiCi0jaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKIAogI2RlZmluZSBEUklW RVJfTkFNRSAibWVkaWF0ZWsiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJNZWRpYXRlayBTb0MgRFJN IgpAQCAtMzM1LDE2ICszMzQsMTQgQEAgc3RhdGljIHZvaWQgbXRrX2RybV9rbXNfZGVpbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0pCiAJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKIH0K IAotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXRrX2RybV9mb3BzID0gewot CS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gZHJtX29wZW4sCi0JLnJlbGVhc2UgPSBk cm1fcmVsZWFzZSwKLQkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCi0JLm1tYXAgPSBtdGtf ZHJtX2dlbV9tbWFwLAotCS5wb2xsID0gZHJtX3BvbGwsCi0JLnJlYWQgPSBkcm1fcmVhZCwKLQku Y29tcGF0X2lvY3RsID0gZHJtX2NvbXBhdF9pb2N0bCwKLX07CitERUZJTkVfRFJNX0dFTV9DTUFf Rk9QUyhtdGtfZHJtX2ZvcHMpOworCitzdGF0aWMgaW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRl KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgIHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCisJCQkJICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKQoreworCXJldHVy biBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZV9pbnRlcm5hbChmaWxlX3ByaXYsIGRldiwgYXJncyk7 Cit9CiAKIC8qCiAgKiBXZSBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgYmVjYXVzZSB0aGUgZGV2aWNl IHVzZWQgdG8gaW1wb3J0IHRoZSBtZW1vcnkgaXMKQEAgLTM2MSwxOCArMzU4LDE1IEBAIHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqbXRrX2RybV9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgbXRrX2RybV9kcml2ZXIgPSB7CiAJ LmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX0dFTSB8IERSSVZFUl9B VE9NSUMsCiAKLQkuZ2VtX2ZyZWVfb2JqZWN0X3VubG9ja2VkID0gbXRrX2RybV9nZW1fZnJlZV9v YmplY3QsCiAJLmdlbV92bV9vcHMgPSAmZHJtX2dlbV9jbWFfdm1fb3BzLAorCS5nZW1fY3JlYXRl X29iamVjdCA9IGRybV9jbWFfZ2VtX2NyZWF0ZV9vYmplY3RfZGVmYXVsdF9mdW5jcywKIAkuZHVt Yl9jcmVhdGUgPSBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0ZSwKIAogCS5wcmltZV9oYW5kbGVfdG9f ZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKIAkucHJpbWVfZmRfdG9faGFuZGxlID0g ZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCiAJLmdlbV9wcmltZV9pbXBvcnQgPSBtdGtfZHJt X2dlbV9wcmltZV9pbXBvcnQsCi0JLmdlbV9wcmltZV9nZXRfc2dfdGFibGUgPSBtdGtfZ2VtX3By aW1lX2dldF9zZ190YWJsZSwKLQkuZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSA9IG10a19nZW1f cHJpbWVfaW1wb3J0X3NnX3RhYmxlLAotCS5nZW1fcHJpbWVfbW1hcCA9IG10a19kcm1fZ2VtX21t YXBfYnVmLAotCS5nZW1fcHJpbWVfdm1hcCA9IG10a19kcm1fZ2VtX3ByaW1lX3ZtYXAsCi0JLmdl bV9wcmltZV92dW5tYXAgPSBtdGtfZHJtX2dlbV9wcmltZV92dW5tYXAsCisJLmdlbV9wcmltZV9p bXBvcnRfc2dfdGFibGUgPSBkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGVfdm1hcCwK KwkuZ2VtX3ByaW1lX21tYXAgPSBkcm1fZ2VtX3ByaW1lX21tYXAsCiAJLmZvcHMgPSAmbXRrX2Ry bV9mb3BzLAogCiAJLm5hbWUgPSBEUklWRVJfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9mYi5jCmluZGV4IDNmMjMwYTI4YTJkYy4uNTk2YjRkNWVkMDAyIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMKQEAgLTE0LDcgKzE0LDYgQEAKIAogI2luY2x1ZGUgIm10 a19kcm1fZHJ2LmgiCiAjaW5jbHVkZSAibXRrX2RybV9mYi5oIgotI2luY2x1ZGUgIm10a19kcm1f Z2VtLmgiCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIG10a19k cm1fZmJfZnVuY3MgPSB7CiAJLmNyZWF0ZV9oYW5kbGUgPSBkcm1fZ2VtX2ZiX2NyZWF0ZV9oYW5k bGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyBi L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBjYTY3MmYxZDE0MGQuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYworKysgL2Rldi9udWxsCkBAIC0xLDI4OSArMCww IEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogQ29w eXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZG1h LWJ1Zi5oPgotCi0jaW5jbHVkZSA8ZHJtL2RybS5oPgotI2luY2x1ZGUgPGRybS9kcm1fZGV2aWNl Lmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KLSNpbmNsdWRlIDxkcm0vZHJtX3ByaW1lLmg+ Ci0KLSNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgotI2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCi0K LXN0YXRpYyBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZHJtX2dlbV9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCi0JCQkJCQl1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0Jc3RydWN0IG10 a19kcm1fZ2VtX29iaiAqbXRrX2dlbV9vYmo7Ci0JaW50IHJldDsKLQotCXNpemUgPSByb3VuZF91 cChzaXplLCBQQUdFX1NJWkUpOwotCi0JbXRrX2dlbV9vYmogPSBremFsbG9jKHNpemVvZigqbXRr X2dlbV9vYmopLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW10a19nZW1fb2JqKQotCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKLQotCXJldCA9IGRybV9nZW1fb2JqZWN0X2luaXQoZGV2LCAmbXRrX2dl bV9vYmotPmJhc2UsIHNpemUpOwotCWlmIChyZXQgPCAwKSB7Ci0JCURSTV9FUlJPUigiZmFpbGVk IHRvIGluaXRpYWxpemUgZ2VtIG9iamVjdFxuIik7Ci0JCWtmcmVlKG10a19nZW1fb2JqKTsKLQkJ cmV0dXJuIEVSUl9QVFIocmV0KTsKLQl9Ci0KLQlyZXR1cm4gbXRrX2dlbV9vYmo7Ci19Ci0KLXN0 cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAotCQkJCQkgICBzaXplX3Qgc2l6ZSwgYm9vbCBhbGxvY19rbWFwKQotewotCXN0cnVj dCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBtdGtf ZHJtX2dlbV9vYmogKm10a19nZW07Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci0JaW50 IHJldDsKLQotCW10a19nZW0gPSBtdGtfZHJtX2dlbV9pbml0KGRldiwgc2l6ZSk7Ci0JaWYgKElT X0VSUihtdGtfZ2VtKSkKLQkJcmV0dXJuIEVSUl9DQVNUKG10a19nZW0pOwotCi0Jb2JqID0gJm10 a19nZW0tPmJhc2U7Ci0KLQltdGtfZ2VtLT5kbWFfYXR0cnMgPSBETUFfQVRUUl9XUklURV9DT01C SU5FOwotCi0JaWYgKCFhbGxvY19rbWFwKQotCQltdGtfZ2VtLT5kbWFfYXR0cnMgfD0gRE1BX0FU VFJfTk9fS0VSTkVMX01BUFBJTkc7Ci0KLQltdGtfZ2VtLT5jb29raWUgPSBkbWFfYWxsb2NfYXR0 cnMocHJpdi0+ZG1hX2Rldiwgb2JqLT5zaXplLAotCQkJCQkgICZtdGtfZ2VtLT5kbWFfYWRkciwg R0ZQX0tFUk5FTCwKLQkJCQkJICBtdGtfZ2VtLT5kbWFfYXR0cnMpOwotCWlmICghbXRrX2dlbS0+ Y29va2llKSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlICV6eCBieXRlIGRtYSBi dWZmZXIiLCBvYmotPnNpemUpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9nZW1fZnJl ZTsKLQl9Ci0KLQlpZiAoYWxsb2Nfa21hcCkKLQkJbXRrX2dlbS0+a3ZhZGRyID0gbXRrX2dlbS0+ Y29va2llOwotCi0JRFJNX0RFQlVHX0RSSVZFUigiY29va2llID0gJXAgZG1hX2FkZHIgPSAlcGFk IHNpemUgPSAlenVcbiIsCi0JCQkgbXRrX2dlbS0+Y29va2llLCAmbXRrX2dlbS0+ZG1hX2FkZHIs Ci0JCQkgc2l6ZSk7Ci0KLQlyZXR1cm4gbXRrX2dlbTsKLQotZXJyX2dlbV9mcmVlOgotCWRybV9n ZW1fb2JqZWN0X3JlbGVhc2Uob2JqKTsKLQlrZnJlZShtdGtfZ2VtKTsKLQlyZXR1cm4gRVJSX1BU UihyZXQpOwotfQotCi12b2lkIG10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKQotewotCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW0gPSB0b19t dGtfZ2VtX29iaihvYmopOwotCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBvYmotPmRl di0+ZGV2X3ByaXZhdGU7Ci0KLQlpZiAobXRrX2dlbS0+c2cpCi0JCWRybV9wcmltZV9nZW1fZGVz dHJveShvYmosIG10a19nZW0tPnNnKTsKLQllbHNlCi0JCWRtYV9mcmVlX2F0dHJzKHByaXYtPmRt YV9kZXYsIG9iai0+c2l6ZSwgbXRrX2dlbS0+Y29va2llLAotCQkJICAgICAgIG10a19nZW0tPmRt YV9hZGRyLCBtdGtfZ2VtLT5kbWFfYXR0cnMpOwotCi0JLyogcmVsZWFzZSBmaWxlIHBvaW50ZXIg dG8gZ2VtIG9iamVjdC4gKi8KLQlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7Ci0KLQlrZnJl ZShtdGtfZ2VtKTsKLX0KLQotaW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBk cm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKLXsKLQlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICpt dGtfZ2VtOwotCWludCByZXQ7Ci0KLQlhcmdzLT5waXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53 aWR0aCAqIGFyZ3MtPmJwcCwgOCk7Ci0JYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+ aGVpZ2h0OwotCi0JbXRrX2dlbSA9IG10a19kcm1fZ2VtX2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUs IGZhbHNlKTsKLQlpZiAoSVNfRVJSKG10a19nZW0pKQotCQlyZXR1cm4gUFRSX0VSUihtdGtfZ2Vt KTsKLQotCS8qCi0JICogYWxsb2NhdGUgYSBpZCBvZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBp cyByZWdpc3RlcmVkCi0JICogYW5kIGhhbmRsZSBoYXMgdGhlIGlkIHdoYXQgdXNlciBjYW4gc2Vl LgotCSAqLwotCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZtdGtfZ2Vt LT5iYXNlLCAmYXJncy0+aGFuZGxlKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9oYW5kbGVfY3Jl YXRlOwotCi0JLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBp dCBub3cuICovCi0JZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZtdGtfZ2VtLT5iYXNlKTsK LQotCXJldHVybiAwOwotCi1lcnJfaGFuZGxlX2NyZWF0ZToKLQltdGtfZHJtX2dlbV9mcmVlX29i amVjdCgmbXRrX2dlbS0+YmFzZSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBtdGtf ZHJtX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKLQkJCQkgICBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLQotewotCWludCByZXQ7Ci0Jc3RydWN0IG10a19k cm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7Ci0Jc3RydWN0IG10a19k cm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKLQotCS8qCi0JICogZG1h X2FsbG9jX2F0dHJzKCkgYWxsb2NhdGVkIGEgc3RydWN0IHBhZ2UgdGFibGUgZm9yIG10a19nZW0s IHNvIGNsZWFyCi0JICogVk1fUEZOTUFQIGZsYWcgdGhhdCB3YXMgc2V0IGJ5IGRybV9nZW1fbW1h cF9vYmooKS9kcm1fZ2VtX21tYXAoKS4KLQkgKi8KLQl2bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5N QVA7Ci0KLQlyZXQgPSBkbWFfbW1hcF9hdHRycyhwcml2LT5kbWFfZGV2LCB2bWEsIG10a19nZW0t PmNvb2tpZSwKLQkJCSAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9iai0+c2l6ZSwgbXRrX2dlbS0+ ZG1hX2F0dHJzKTsKLQlpZiAocmV0KQotCQlkcm1fZ2VtX3ZtX2Nsb3NlKHZtYSk7Ci0KLQlyZXR1 cm4gcmV0OwotfQotCi1pbnQgbXRrX2RybV9nZW1fbW1hcF9idWYoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCWludCByZXQ7Ci0KLQly ZXQgPSBkcm1fZ2VtX21tYXBfb2JqKG9iaiwgb2JqLT5zaXplLCB2bWEpOwotCWlmIChyZXQpCi0J CXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gbXRrX2RybV9nZW1fb2JqZWN0X21tYXAob2JqLCB2bWEp OwotfQotCi1pbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci0JaW50 IHJldDsKLQotCXJldCA9IGRybV9nZW1fbW1hcChmaWxwLCB2bWEpOwotCWlmIChyZXQpCi0JCXJl dHVybiByZXQ7Ci0KLQlvYmogPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKLQotCS8qCi0JICogU2V0 IHZtX3Bnb2ZmICh1c2VkIGFzIGEgZmFrZSBidWZmZXIgb2Zmc2V0IGJ5IERSTSkgdG8gMCBhbmQg bWFwIHRoZQotCSAqIHdob2xlIGJ1ZmZlciBmcm9tIHRoZSBzdGFydC4KLQkgKi8KLQl2bWEtPnZt X3Bnb2ZmID0gMDsKLQotCXJldHVybiBtdGtfZHJtX2dlbV9vYmplY3RfbW1hcChvYmosIHZtYSk7 Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBhIHNnX3RhYmxlIGZvciB0aGlzIEdFTSBvYmplY3QuCi0g KiBOb3RlOiBCb3RoIHRoZSB0YWJsZSdzIGNvbnRlbnRzLCBhbmQgdGhlIHNnX3RhYmxlIGl0c2Vs ZiBtdXN0IGJlIGZyZWVkIGJ5Ci0gKiAgICAgICB0aGUgY2FsbGVyLgotICogUmV0dXJucyBhIHBv aW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzZ190YWJsZSwgb3IgYW4gRVJSX1BUUigpIGVy cm9yLgotICovCi1zdHJ1Y3Qgc2dfdGFibGUgKm10a19nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQotewotCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10 a19nZW0gPSB0b19tdGtfZ2VtX29iaihvYmopOwotCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnBy aXYgPSBvYmotPmRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHNnX3RhYmxlICpzZ3Q7Ci0JaW50 IHJldDsKLQotCXNndCA9IGt6YWxsb2Moc2l6ZW9mKCpzZ3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAo IXNndCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlyZXQgPSBkbWFfZ2V0X3NndGFi bGVfYXR0cnMocHJpdi0+ZG1hX2Rldiwgc2d0LCBtdGtfZ2VtLT5jb29raWUsCi0JCQkJICAgIG10 a19nZW0tPmRtYV9hZGRyLCBvYmotPnNpemUsCi0JCQkJICAgIG10a19nZW0tPmRtYV9hdHRycyk7 Ci0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBzZ3QsICVkXG4i LCByZXQpOwotCQlrZnJlZShzZ3QpOwotCQlyZXR1cm4gRVJSX1BUUihyZXQpOwotCX0KLQotCXJl dHVybiBzZ3Q7Ci19Ci0KLXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2dlbV9wcmltZV9pbXBv cnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBkbWFfYnVmX2F0 dGFjaG1lbnQgKmF0dGFjaCwgc3RydWN0IHNnX3RhYmxlICpzZykKLXsKLQlzdHJ1Y3QgbXRrX2Ry bV9nZW1fb2JqICptdGtfZ2VtOwotCWludCByZXQ7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzOwot CXVuc2lnbmVkIGludCBpOwotCWRtYV9hZGRyX3QgZXhwZWN0ZWQ7Ci0KLQltdGtfZ2VtID0gbXRr X2RybV9nZW1faW5pdChkZXYsIGF0dGFjaC0+ZG1hYnVmLT5zaXplKTsKLQotCWlmIChJU19FUlIo bXRrX2dlbSkpCi0JCXJldHVybiBFUlJfQ0FTVChtdGtfZ2VtKTsKLQotCWV4cGVjdGVkID0gc2df ZG1hX2FkZHJlc3Moc2ctPnNnbCk7Ci0JZm9yX2VhY2hfc2coc2ctPnNnbCwgcywgc2ctPm5lbnRz LCBpKSB7Ci0JCWlmIChzZ19kbWFfYWRkcmVzcyhzKSAhPSBleHBlY3RlZCkgewotCQkJRFJNX0VS Uk9SKCJzZ190YWJsZSBpcyBub3QgY29udGlndW91cyIpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJ CWdvdG8gZXJyX2dlbV9mcmVlOwotCQl9Ci0JCWV4cGVjdGVkID0gc2dfZG1hX2FkZHJlc3Mocykg KyBzZ19kbWFfbGVuKHMpOwotCX0KLQotCW10a19nZW0tPmRtYV9hZGRyID0gc2dfZG1hX2FkZHJl c3Moc2ctPnNnbCk7Ci0JbXRrX2dlbS0+c2cgPSBzZzsKLQotCXJldHVybiAmbXRrX2dlbS0+YmFz ZTsKLQotZXJyX2dlbV9mcmVlOgotCWtmcmVlKG10a19nZW0pOwotCXJldHVybiBFUlJfUFRSKHJl dCk7Ci19Ci0KLXZvaWQgKm10a19kcm1fZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmopCi17Ci0Jc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19n ZW1fb2JqKG9iaik7Ci0Jc3RydWN0IHNnX3RhYmxlICpzZ3Q7Ci0Jc3RydWN0IHNnX3BhZ2VfaXRl ciBpdGVyOwotCXVuc2lnbmVkIGludCBucGFnZXM7Ci0JdW5zaWduZWQgaW50IGkgPSAwOwotCi0J aWYgKG10a19nZW0tPmt2YWRkcikKLQkJcmV0dXJuIG10a19nZW0tPmt2YWRkcjsKLQotCXNndCA9 IG10a19nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKG9iaik7Ci0JaWYgKElTX0VSUihzZ3QpKQotCQly ZXR1cm4gTlVMTDsKLQotCW5wYWdlcyA9IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOwotCW10a19n ZW0tPnBhZ2VzID0ga2NhbGxvYyhucGFnZXMsIHNpemVvZigqbXRrX2dlbS0+cGFnZXMpLCBHRlBf S0VSTkVMKTsKLQlpZiAoIW10a19nZW0tPnBhZ2VzKQotCQlnb3RvIG91dDsKLQotCWZvcl9lYWNo X3NnX3BhZ2Uoc2d0LT5zZ2wsICZpdGVyLCBzZ3QtPm9yaWdfbmVudHMsIDApIHsKLQkJbXRrX2dl bS0+cGFnZXNbaSsrXSA9IHNnX3BhZ2VfaXRlcl9wYWdlKCZpdGVyKTsKLQkJaWYgKGkgPiBucGFn ZXMpCi0JCQlicmVhazsKLQl9Ci0JbXRrX2dlbS0+a3ZhZGRyID0gdm1hcChtdGtfZ2VtLT5wYWdl cywgbnBhZ2VzLCBWTV9NQVAsCi0JCQkgICAgICAgcGdwcm90X3dyaXRlY29tYmluZShQQUdFX0tF Uk5FTCkpOwotCi1vdXQ6Ci0Ja2ZyZWUoKHZvaWQgKilzZ3QpOwotCi0JcmV0dXJuIG10a19nZW0t Pmt2YWRkcjsKLX0KLQotdm9pZCBtdGtfZHJtX2dlbV9wcmltZV92dW5tYXAoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKQotewotCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmog Km10a19nZW0gPSB0b19tdGtfZ2VtX29iaihvYmopOwotCi0JaWYgKCFtdGtfZ2VtLT5wYWdlcykK LQkJcmV0dXJuOwotCi0JdnVubWFwKHZhZGRyKTsKLQltdGtfZ2VtLT5rdmFkZHIgPSAwOwotCWtm cmVlKCh2b2lkICopbXRrX2dlbS0+cGFnZXMpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9nZW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY5Zjk3NmQ5ODA3Li4w MDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgK KysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIElu Yy4KLSAqLwotCi0jaWZuZGVmIF9NVEtfRFJNX0dFTV9IXwotI2RlZmluZSBfTVRLX0RSTV9HRU1f SF8KLQotI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+Ci0KLS8qCi0gKiBtdGsgZHJtIGJ1ZmZlciBz dHJ1Y3R1cmUuCi0gKgotICogQGJhc2U6IGEgZ2VtIG9iamVjdC4KLSAqCS0gYSBuZXcgaGFuZGxl IHRvIHRoaXMgZ2VtIG9iamVjdCB3b3VsZCBiZSBjcmVhdGVkCi0gKglieSBkcm1fZ2VtX2hhbmRs ZV9jcmVhdGUoKS4KLSAqIEBjb29raWU6IHRoZSByZXR1cm4gdmFsdWUgb2YgZG1hX2FsbG9jX2F0 dHJzKCksIGtlZXAgaXQgZm9yIGRtYV9mcmVlX2F0dHJzKCkKLSAqIEBrdmFkZHI6IGtlcm5lbCB2 aXJ0dWFsIGFkZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KLSAqIEBkbWFfYWRkcjogZG1hIGFkZHJlc3Mg b2YgZ2VtIGJ1ZmZlci4KLSAqIEBkbWFfYXR0cnM6IGRtYSBhdHRyaWJ1dGVzIG9mIGdlbSBidWZm ZXIuCi0gKgotICogUC5TLiB0aGlzIG9iamVjdCB3b3VsZCBiZSB0cmFuc2ZlcnJlZCB0byB1c2Vy IGFzIGttc19iby5oYW5kbGUgc28KLSAqCXVzZXIgY2FuIGFjY2VzcyB0aGUgYnVmZmVyIHRocm91 Z2gga21zX2JvLmhhbmRsZS4KLSAqLwotc3RydWN0IG10a19kcm1fZ2VtX29iaiB7Ci0Jc3RydWN0 IGRybV9nZW1fb2JqZWN0CWJhc2U7Ci0Jdm9pZAkJCSpjb29raWU7Ci0Jdm9pZAkJCSprdmFkZHI7 Ci0JZG1hX2FkZHJfdAkJZG1hX2FkZHI7Ci0JdW5zaWduZWQgbG9uZwkJZG1hX2F0dHJzOwotCXN0 cnVjdCBzZ190YWJsZQkJKnNnOwotCXN0cnVjdCBwYWdlCQkqKnBhZ2VzOwotfTsKLQotI2RlZmlu ZSB0b19tdGtfZ2VtX29iaih4KQljb250YWluZXJfb2YoeCwgc3RydWN0IG10a19kcm1fZ2VtX29i aiwgYmFzZSkKLQotdm9pZCBtdGtfZHJtX2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKmdlbSk7Ci1zdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZHJtX2dlbV9jcmVhdGUo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJCSAgIGJvb2wgYWxsb2Nf a21hcCk7Ci1pbnQgbXRrX2RybV9nZW1fZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGRybV9tb2RlX2Ny ZWF0ZV9kdW1iICphcmdzKTsKLWludCBtdGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxw LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Ci1pbnQgbXRrX2RybV9nZW1fbW1hcF9idWYo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEpOwotc3RydWN0IHNnX3RhYmxlICptdGtfZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaik7Ci1zdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm10a19nZW1fcHJp bWVfaW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgZG1h X2J1Zl9hdHRhY2htZW50ICphdHRhY2gsIHN0cnVjdCBzZ190YWJsZSAqc2cpOwotdm9pZCAqbXRr X2RybV9nZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Ci12b2lkIG10 a19kcm1fZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAq dmFkZHIpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5j CmluZGV4IDU4NGE5ZWNhZGNlNi4uOGYyNTY2MDJmMDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX3BsYW5lLmMKQEAgLTgsMTMgKzgsMTQgQEAKICNpbmNsdWRlIDxkcm0vZHJt X2F0b21pY19oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgogI2luY2x1ZGUg PGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2dlbV9m cmFtZWJ1ZmZlcl9oZWxwZXIuaD4KIAogI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgogI2luY2x1 ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKICNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgogI2luY2x1 ZGUgIm10a19kcm1fZmIuaCIKLSNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgogI2luY2x1ZGUgIm10 a19kcm1fcGxhbmUuaCIKIAogc3RhdGljIGNvbnN0IHUzMiBmb3JtYXRzW10gPSB7CkBAIC0xMDgs NyArMTA5LDYgQEAgc3RhdGljIHZvaWQgbXRrX3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCiAJc3RydWN0IGRybV9jcnRjICpjcnRjID0gcGxhbmUtPnN0YXRlLT5j cnRjOwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmUtPnN0YXRlLT5mYjsKIAlz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKLQlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtf Z2VtOwogCXVuc2lnbmVkIGludCBwaXRjaCwgZm9ybWF0OwogCWRtYV9hZGRyX3QgYWRkcjsKIApA QCAtMTE2LDggKzExNiw3IEBAIHN0YXRpYyB2b2lkIG10a19wbGFuZV9hdG9taWNfdXBkYXRlKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQlyZXR1cm47CiAKIAlnZW0gPSBmYi0+b2JqWzBdOwot CW10a19nZW0gPSB0b19tdGtfZ2VtX29iaihnZW0pOwotCWFkZHIgPSBtdGtfZ2VtLT5kbWFfYWRk cjsKKwlhZGRyID0gdG9fZHJtX2dlbV9jbWFfb2JqKGdlbSktPnBhZGRyOwogCXBpdGNoID0gZmIt PnBpdGNoZXNbMF07CiAJZm9ybWF0ID0gZmItPmZvcm1hdC0+Zm9ybWF0OwogCi0tIAoyLjIwLjEK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B7745CA9EAF for ; Mon, 21 Oct 2019 21:47:58 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 72EF220659 for ; Mon, 21 Oct 2019 21:47:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="GyK5fKwV" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 72EF220659 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=f2DHslpf+iT5YGaJ29N+seaAeIoWOsT8bMbV5IBingQ=; b=GyK5fKwVl2pPIQ fxnG52+w4WgfybuG5b32MIm4ZEGpkYbxgAWQJlKXwPFgN9qK4iMZiacDeybL0LQXHfwGAFw01s6iZ xQyB1E/NYTg3gWIB0gwtavMLzTdbeP+LisawHIhX5sNaifWvRHHuuONJbbnsnnTQHo6HiipuS1ELx MOWzG7AuxhK7oxPH1A9+FObXVoF0tXZae57BycNP9LNr4ggWQZFOPHkFKD9VgjaOwCLQHXdRVnDNn jeH052WukQhTBLpYs/n76Lo5KSI0VXqrEORIt+kOdivUePWglMd9UHVyrjplzvY21L9+bU8NcFWxW eZxAMrb8TeAUVikxQsUA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iMfWS-0001fw-EU; Mon, 21 Oct 2019 21:47:28 +0000 Received: from mail-ot1-f67.google.com ([209.85.210.67]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iMfV6-0000JL-Di; Mon, 21 Oct 2019 21:46:07 +0000 Received: by mail-ot1-f67.google.com with SMTP id e11so12373826otl.5; Mon, 21 Oct 2019 14:46:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QQDw9NPftsDM5OhHs6ZNOxGtsrxVPosqKf8720sJxbM=; b=UU/4gXVzkca73PEEl1ZezHLkWFrkddXIlFuYG8iiUUcX7+UC5yS+uFPUltu474kmuZ 85GDhHpoXBuJ+bMLd5rbeCNQBCFAvtrBb2ElqWyDijc+xnmZTEQ1mJ4C15j+gWntFfIz YivMrabcSimRiCSTU/u9So63jbPVo4T8gewRBlyy1lX35U6oX0NtMAKNsKLYPiOa8uzM KJdgq/mxiZKzzs6DTEZlvOkTaLWUu5agnMTogxfmCwPXK6Y8MdKw8c2pxx/ZdKDznc0t cQn1+xU9cYoCFjFcU1weyrPTKTn4O9OWUwkS1Z4WfXeWlsYMUwvoJ3i/iWZ8MfaiuilG jxSQ== X-Gm-Message-State: APjAAAV+lGtJEcJI9cdavjOYYv1vmiQR/d8HakZWSO471MN6iSZNM5HC STPW6wyWFUz1DQ3Xub/lIQ== X-Google-Smtp-Source: APXvYqw6b8W3vI30N7gM1+NXuyDoi2C4I2ewSclJeKb4IZyrqQe6H9toYKkWgNpHOdph0+3yURR+Rw== X-Received: by 2002:a9d:344a:: with SMTP id v68mr55638otb.85.1571694363240; Mon, 21 Oct 2019 14:46:03 -0700 (PDT) Received: from xps15.herring.priv (24-155-109-49.dyn.grandenetworks.net. [24.155.109.49]) by smtp.googlemail.com with ESMTPSA id u130sm4122676oib.56.2019.10.21.14.46.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 14:46:02 -0700 (PDT) From: Rob Herring To: dri-devel@lists.freedesktop.org Subject: [PATCH 5/6] drm/mediatek: Convert to use CMA helpers Date: Mon, 21 Oct 2019 16:45:49 -0500 Message-Id: <20191021214550.1461-6-robh@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191021214550.1461-1-robh@kernel.org> References: <20191021214550.1461-1-robh@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191021_144604_481693_D1DCF7B1 X-CRM114-Status: GOOD ( 23.61 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Heiko=20St=C3=BCbner?= , Neil Armstrong , David Airlie , Liviu Dudau , Sandy Huang , Laurent Pinchart , Benjamin Gaignard , Yannick Fertre , Kevin Hilman , Xinwei Kong , Xinliang Liu , linux-rockchip@lists.infradead.org, Chen-Yu Tsai , =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , "James \(Qian\) Wang" , CK Hu , Philipp Zabel , Alexandre Torgue , Chen Feng , Maarten Lankhorst , Maxime Ripard , linux-mediatek@lists.infradead.org, Matthias Brugger , Daniel Vetter , Sean Paul , linux-arm-kernel@lists.infradead.org, Philippe Cornu , Vincent Abriou , Kieran Bingham , Maxime Coquelin , Rongrong Zou Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org The only reason the Mediatek driver doesn't use the CMA helpers is it sets DMA_ATTR_NO_KERNEL_MAPPING and does a vmap() on demand. Using vmap() is not even guaranteed to work as DMA buffers may not have a struct page. Now that the CMA helpers support setting DMA_ATTR_NO_KERNEL_MAPPING as needed or not, convert Mediatek driver to use CMA helpers. Cc: CK Hu Cc: Philipp Zabel Cc: David Airlie Cc: Daniel Vetter Cc: Matthias Brugger Cc: linux-arm-kernel@lists.infradead.org Cc: linux-mediatek@lists.infradead.org Signed-off-by: Rob Herring --- drivers/gpu/drm/mediatek/Makefile | 1 - drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 2 +- drivers/gpu/drm/mediatek/mtk_drm_drv.c | 28 +-- drivers/gpu/drm/mediatek/mtk_drm_fb.c | 1 - drivers/gpu/drm/mediatek/mtk_drm_gem.c | 289 ----------------------- drivers/gpu/drm/mediatek/mtk_drm_gem.h | 51 ---- drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +- 7 files changed, 15 insertions(+), 364 deletions(-) delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_gem.c delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_gem.h diff --git a/drivers/gpu/drm/mediatek/Makefile b/drivers/gpu/drm/mediatek/Makefile index 82ae49c64221..50a50e86738f 100644 --- a/drivers/gpu/drm/mediatek/Makefile +++ b/drivers/gpu/drm/mediatek/Makefile @@ -8,7 +8,6 @@ mediatek-drm-y := mtk_disp_color.o \ mtk_drm_ddp_comp.o \ mtk_drm_drv.o \ mtk_drm_fb.o \ - mtk_drm_gem.o \ mtk_drm_plane.o \ mtk_dsi.o \ mtk_mipi_tx.o \ diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c index 34a731755791..638d57e8ac12 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -18,7 +19,6 @@ #include "mtk_drm_crtc.h" #include "mtk_drm_ddp.h" #include "mtk_drm_ddp_comp.h" -#include "mtk_drm_gem.h" #include "mtk_drm_plane.h" /** diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c index 352b81a7a670..36f32507e5fb 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c @@ -28,7 +28,6 @@ #include "mtk_drm_ddp_comp.h" #include "mtk_drm_drv.h" #include "mtk_drm_fb.h" -#include "mtk_drm_gem.h" #define DRIVER_NAME "mediatek" #define DRIVER_DESC "Mediatek SoC DRM" @@ -335,16 +334,14 @@ static void mtk_drm_kms_deinit(struct drm_device *drm) drm_mode_config_cleanup(drm); } -static const struct file_operations mtk_drm_fops = { - .owner = THIS_MODULE, - .open = drm_open, - .release = drm_release, - .unlocked_ioctl = drm_ioctl, - .mmap = mtk_drm_gem_mmap, - .poll = drm_poll, - .read = drm_read, - .compat_ioctl = drm_compat_ioctl, -}; +DEFINE_DRM_GEM_CMA_FOPS(mtk_drm_fops); + +static int mtk_drm_gem_dumb_create(struct drm_file *file_priv, + struct drm_device *dev, + struct drm_mode_create_dumb *args) +{ + return drm_gem_cma_dumb_create_internal(file_priv, dev, args); +} /* * We need to override this because the device used to import the memory is @@ -361,18 +358,15 @@ struct drm_gem_object *mtk_drm_gem_prime_import(struct drm_device *dev, static struct drm_driver mtk_drm_driver = { .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC, - .gem_free_object_unlocked = mtk_drm_gem_free_object, .gem_vm_ops = &drm_gem_cma_vm_ops, + .gem_create_object = drm_cma_gem_create_object_default_funcs, .dumb_create = mtk_drm_gem_dumb_create, .prime_handle_to_fd = drm_gem_prime_handle_to_fd, .prime_fd_to_handle = drm_gem_prime_fd_to_handle, .gem_prime_import = mtk_drm_gem_prime_import, - .gem_prime_get_sg_table = mtk_gem_prime_get_sg_table, - .gem_prime_import_sg_table = mtk_gem_prime_import_sg_table, - .gem_prime_mmap = mtk_drm_gem_mmap_buf, - .gem_prime_vmap = mtk_drm_gem_prime_vmap, - .gem_prime_vunmap = mtk_drm_gem_prime_vunmap, + .gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table_vmap, + .gem_prime_mmap = drm_gem_prime_mmap, .fops = &mtk_drm_fops, .name = DRIVER_NAME, diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c index 3f230a28a2dc..596b4d5ed002 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_fb.c @@ -14,7 +14,6 @@ #include "mtk_drm_drv.h" #include "mtk_drm_fb.h" -#include "mtk_drm_gem.h" static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = { .create_handle = drm_gem_fb_create_handle, diff --git a/drivers/gpu/drm/mediatek/mtk_drm_gem.c b/drivers/gpu/drm/mediatek/mtk_drm_gem.c deleted file mode 100644 index ca672f1d140d..000000000000 --- a/drivers/gpu/drm/mediatek/mtk_drm_gem.c +++ /dev/null @@ -1,289 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Copyright (c) 2015 MediaTek Inc. - */ - -#include - -#include -#include -#include -#include - -#include "mtk_drm_drv.h" -#include "mtk_drm_gem.h" - -static struct mtk_drm_gem_obj *mtk_drm_gem_init(struct drm_device *dev, - unsigned long size) -{ - struct mtk_drm_gem_obj *mtk_gem_obj; - int ret; - - size = round_up(size, PAGE_SIZE); - - mtk_gem_obj = kzalloc(sizeof(*mtk_gem_obj), GFP_KERNEL); - if (!mtk_gem_obj) - return ERR_PTR(-ENOMEM); - - ret = drm_gem_object_init(dev, &mtk_gem_obj->base, size); - if (ret < 0) { - DRM_ERROR("failed to initialize gem object\n"); - kfree(mtk_gem_obj); - return ERR_PTR(ret); - } - - return mtk_gem_obj; -} - -struct mtk_drm_gem_obj *mtk_drm_gem_create(struct drm_device *dev, - size_t size, bool alloc_kmap) -{ - struct mtk_drm_private *priv = dev->dev_private; - struct mtk_drm_gem_obj *mtk_gem; - struct drm_gem_object *obj; - int ret; - - mtk_gem = mtk_drm_gem_init(dev, size); - if (IS_ERR(mtk_gem)) - return ERR_CAST(mtk_gem); - - obj = &mtk_gem->base; - - mtk_gem->dma_attrs = DMA_ATTR_WRITE_COMBINE; - - if (!alloc_kmap) - mtk_gem->dma_attrs |= DMA_ATTR_NO_KERNEL_MAPPING; - - mtk_gem->cookie = dma_alloc_attrs(priv->dma_dev, obj->size, - &mtk_gem->dma_addr, GFP_KERNEL, - mtk_gem->dma_attrs); - if (!mtk_gem->cookie) { - DRM_ERROR("failed to allocate %zx byte dma buffer", obj->size); - ret = -ENOMEM; - goto err_gem_free; - } - - if (alloc_kmap) - mtk_gem->kvaddr = mtk_gem->cookie; - - DRM_DEBUG_DRIVER("cookie = %p dma_addr = %pad size = %zu\n", - mtk_gem->cookie, &mtk_gem->dma_addr, - size); - - return mtk_gem; - -err_gem_free: - drm_gem_object_release(obj); - kfree(mtk_gem); - return ERR_PTR(ret); -} - -void mtk_drm_gem_free_object(struct drm_gem_object *obj) -{ - struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj); - struct mtk_drm_private *priv = obj->dev->dev_private; - - if (mtk_gem->sg) - drm_prime_gem_destroy(obj, mtk_gem->sg); - else - dma_free_attrs(priv->dma_dev, obj->size, mtk_gem->cookie, - mtk_gem->dma_addr, mtk_gem->dma_attrs); - - /* release file pointer to gem object. */ - drm_gem_object_release(obj); - - kfree(mtk_gem); -} - -int mtk_drm_gem_dumb_create(struct drm_file *file_priv, struct drm_device *dev, - struct drm_mode_create_dumb *args) -{ - struct mtk_drm_gem_obj *mtk_gem; - int ret; - - args->pitch = DIV_ROUND_UP(args->width * args->bpp, 8); - args->size = args->pitch * args->height; - - mtk_gem = mtk_drm_gem_create(dev, args->size, false); - if (IS_ERR(mtk_gem)) - return PTR_ERR(mtk_gem); - - /* - * allocate a id of idr table where the obj is registered - * and handle has the id what user can see. - */ - ret = drm_gem_handle_create(file_priv, &mtk_gem->base, &args->handle); - if (ret) - goto err_handle_create; - - /* drop reference from allocate - handle holds it now. */ - drm_gem_object_put_unlocked(&mtk_gem->base); - - return 0; - -err_handle_create: - mtk_drm_gem_free_object(&mtk_gem->base); - return ret; -} - -static int mtk_drm_gem_object_mmap(struct drm_gem_object *obj, - struct vm_area_struct *vma) - -{ - int ret; - struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj); - struct mtk_drm_private *priv = obj->dev->dev_private; - - /* - * dma_alloc_attrs() allocated a struct page table for mtk_gem, so clear - * VM_PFNMAP flag that was set by drm_gem_mmap_obj()/drm_gem_mmap(). - */ - vma->vm_flags &= ~VM_PFNMAP; - - ret = dma_mmap_attrs(priv->dma_dev, vma, mtk_gem->cookie, - mtk_gem->dma_addr, obj->size, mtk_gem->dma_attrs); - if (ret) - drm_gem_vm_close(vma); - - return ret; -} - -int mtk_drm_gem_mmap_buf(struct drm_gem_object *obj, struct vm_area_struct *vma) -{ - int ret; - - ret = drm_gem_mmap_obj(obj, obj->size, vma); - if (ret) - return ret; - - return mtk_drm_gem_object_mmap(obj, vma); -} - -int mtk_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma) -{ - struct drm_gem_object *obj; - int ret; - - ret = drm_gem_mmap(filp, vma); - if (ret) - return ret; - - obj = vma->vm_private_data; - - /* - * Set vm_pgoff (used as a fake buffer offset by DRM) to 0 and map the - * whole buffer from the start. - */ - vma->vm_pgoff = 0; - - return mtk_drm_gem_object_mmap(obj, vma); -} - -/* - * Allocate a sg_table for this GEM object. - * Note: Both the table's contents, and the sg_table itself must be freed by - * the caller. - * Returns a pointer to the newly allocated sg_table, or an ERR_PTR() error. - */ -struct sg_table *mtk_gem_prime_get_sg_table(struct drm_gem_object *obj) -{ - struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj); - struct mtk_drm_private *priv = obj->dev->dev_private; - struct sg_table *sgt; - int ret; - - sgt = kzalloc(sizeof(*sgt), GFP_KERNEL); - if (!sgt) - return ERR_PTR(-ENOMEM); - - ret = dma_get_sgtable_attrs(priv->dma_dev, sgt, mtk_gem->cookie, - mtk_gem->dma_addr, obj->size, - mtk_gem->dma_attrs); - if (ret) { - DRM_ERROR("failed to allocate sgt, %d\n", ret); - kfree(sgt); - return ERR_PTR(ret); - } - - return sgt; -} - -struct drm_gem_object *mtk_gem_prime_import_sg_table(struct drm_device *dev, - struct dma_buf_attachment *attach, struct sg_table *sg) -{ - struct mtk_drm_gem_obj *mtk_gem; - int ret; - struct scatterlist *s; - unsigned int i; - dma_addr_t expected; - - mtk_gem = mtk_drm_gem_init(dev, attach->dmabuf->size); - - if (IS_ERR(mtk_gem)) - return ERR_CAST(mtk_gem); - - expected = sg_dma_address(sg->sgl); - for_each_sg(sg->sgl, s, sg->nents, i) { - if (sg_dma_address(s) != expected) { - DRM_ERROR("sg_table is not contiguous"); - ret = -EINVAL; - goto err_gem_free; - } - expected = sg_dma_address(s) + sg_dma_len(s); - } - - mtk_gem->dma_addr = sg_dma_address(sg->sgl); - mtk_gem->sg = sg; - - return &mtk_gem->base; - -err_gem_free: - kfree(mtk_gem); - return ERR_PTR(ret); -} - -void *mtk_drm_gem_prime_vmap(struct drm_gem_object *obj) -{ - struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj); - struct sg_table *sgt; - struct sg_page_iter iter; - unsigned int npages; - unsigned int i = 0; - - if (mtk_gem->kvaddr) - return mtk_gem->kvaddr; - - sgt = mtk_gem_prime_get_sg_table(obj); - if (IS_ERR(sgt)) - return NULL; - - npages = obj->size >> PAGE_SHIFT; - mtk_gem->pages = kcalloc(npages, sizeof(*mtk_gem->pages), GFP_KERNEL); - if (!mtk_gem->pages) - goto out; - - for_each_sg_page(sgt->sgl, &iter, sgt->orig_nents, 0) { - mtk_gem->pages[i++] = sg_page_iter_page(&iter); - if (i > npages) - break; - } - mtk_gem->kvaddr = vmap(mtk_gem->pages, npages, VM_MAP, - pgprot_writecombine(PAGE_KERNEL)); - -out: - kfree((void *)sgt); - - return mtk_gem->kvaddr; -} - -void mtk_drm_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) -{ - struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj); - - if (!mtk_gem->pages) - return; - - vunmap(vaddr); - mtk_gem->kvaddr = 0; - kfree((void *)mtk_gem->pages); -} diff --git a/drivers/gpu/drm/mediatek/mtk_drm_gem.h b/drivers/gpu/drm/mediatek/mtk_drm_gem.h deleted file mode 100644 index ff9f976d9807..000000000000 --- a/drivers/gpu/drm/mediatek/mtk_drm_gem.h +++ /dev/null @@ -1,51 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * Copyright (c) 2015 MediaTek Inc. - */ - -#ifndef _MTK_DRM_GEM_H_ -#define _MTK_DRM_GEM_H_ - -#include - -/* - * mtk drm buffer structure. - * - * @base: a gem object. - * - a new handle to this gem object would be created - * by drm_gem_handle_create(). - * @cookie: the return value of dma_alloc_attrs(), keep it for dma_free_attrs() - * @kvaddr: kernel virtual address of gem buffer. - * @dma_addr: dma address of gem buffer. - * @dma_attrs: dma attributes of gem buffer. - * - * P.S. this object would be transferred to user as kms_bo.handle so - * user can access the buffer through kms_bo.handle. - */ -struct mtk_drm_gem_obj { - struct drm_gem_object base; - void *cookie; - void *kvaddr; - dma_addr_t dma_addr; - unsigned long dma_attrs; - struct sg_table *sg; - struct page **pages; -}; - -#define to_mtk_gem_obj(x) container_of(x, struct mtk_drm_gem_obj, base) - -void mtk_drm_gem_free_object(struct drm_gem_object *gem); -struct mtk_drm_gem_obj *mtk_drm_gem_create(struct drm_device *dev, size_t size, - bool alloc_kmap); -int mtk_drm_gem_dumb_create(struct drm_file *file_priv, struct drm_device *dev, - struct drm_mode_create_dumb *args); -int mtk_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma); -int mtk_drm_gem_mmap_buf(struct drm_gem_object *obj, - struct vm_area_struct *vma); -struct sg_table *mtk_gem_prime_get_sg_table(struct drm_gem_object *obj); -struct drm_gem_object *mtk_gem_prime_import_sg_table(struct drm_device *dev, - struct dma_buf_attachment *attach, struct sg_table *sg); -void *mtk_drm_gem_prime_vmap(struct drm_gem_object *obj); -void mtk_drm_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); - -#endif diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c index 584a9ecadce6..8f256602f075 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c @@ -8,13 +8,14 @@ #include #include #include +#include +#include #include #include "mtk_drm_crtc.h" #include "mtk_drm_ddp_comp.h" #include "mtk_drm_drv.h" #include "mtk_drm_fb.h" -#include "mtk_drm_gem.h" #include "mtk_drm_plane.h" static const u32 formats[] = { @@ -108,7 +109,6 @@ static void mtk_plane_atomic_update(struct drm_plane *plane, struct drm_crtc *crtc = plane->state->crtc; struct drm_framebuffer *fb = plane->state->fb; struct drm_gem_object *gem; - struct mtk_drm_gem_obj *mtk_gem; unsigned int pitch, format; dma_addr_t addr; @@ -116,8 +116,7 @@ static void mtk_plane_atomic_update(struct drm_plane *plane, return; gem = fb->obj[0]; - mtk_gem = to_mtk_gem_obj(gem); - addr = mtk_gem->dma_addr; + addr = to_drm_gem_cma_obj(gem)->paddr; pitch = fb->pitches[0]; format = fb->format->format; -- 2.20.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel