Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp403919pxa; Wed, 19 Aug 2020 04:53:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwMW0VMoBgnpyzyONQARh8DnbBgbKnpu8n9Z7pGZy3AJFZ09yQhoi+kEyufzDOUXwnRHDPg X-Received: by 2002:aa7:c889:: with SMTP id p9mr24539394eds.105.1597838038592; Wed, 19 Aug 2020 04:53:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597838038; cv=none; d=google.com; s=arc-20160816; b=iO5O4t3LmrzYW7xxcgDzYCibn/Y3fsvB6bIhYoZ1FwMNzQXVE5nCrWeWUip1Znv886 c88y93GiySYX81ios3QF8UciU8jauwUeWwN//Us5UY8xs+lLbPAGE9C0+atkUvsVvpsk eiXDMwSLNPlnvxWdOTPq+na535ufrea5nQmfLYu1VPLEz20s4HIrqqV3WdTpbQzk6Jgj B6hG2y0V0gBjvZoYbT+VtSN/gq0sBBw9DeQ1Y5Sjmp60Yl3IY/TY8YPGWFaKXXhdsTEw pcs3BV6jqFmTyc/KMXoN1VdXh1lzLRlKTLTvQFWuqFnWl10Cv2GOL8qYQMD5GLTK9bEY cSOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=rg2pMV44jrjXcd+Ga7oWT8u7REVqKrVROehbEgRFjmY=; b=k4jIodlHx8X9dF0IkQoUK5ybOB4Vi4iDfNZSdSJBU9H5/78PATA2VTbxJO04mNB90y sHjuCfmNYXfZe7ZAcnXsXOUDClIYU0Pm5HhjKqnjqyoGSKnaypG7Y2U2vKMxaTlxXW+o wUiOR2hDEQr8akUSlywElMNA8aWfqJI31k/jcialLhIUc2HYhp/oKo4PfRMqDIbXopyO UxFTqZ0eaACi0BCGXJ7w3yVrj+WgG2s7VbY3f6ZY04keOLQZ73E/y1IaWm57rHhNHVEn exW8xFkM7eMwHOI1U6Q6vEHlYWx6EX6ccXSq7y9FviHfmGAxnhIKCaRi27yqqwXAZUij Si5w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=BA5qOAXE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e7si15074284ejn.5.2020.08.19.04.53.34; Wed, 19 Aug 2020 04:53:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=BA5qOAXE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728325AbgHSLtp (ORCPT + 99 others); Wed, 19 Aug 2020 07:49:45 -0400 Received: from mail.kernel.org ([198.145.29.99]:46514 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728125AbgHSLqw (ORCPT ); Wed, 19 Aug 2020 07:46:52 -0400 Received: from mail.kernel.org (ip5f5ad5a3.dynamic.kabel-deutschland.de [95.90.213.163]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 45DF622CA0; Wed, 19 Aug 2020 11:46:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1597837582; bh=VjNc5JFUvoN5A0Ro+s3Ld1Lo9J+b152vB+hxRMelsFc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BA5qOAXEqN55ggNtrgIejmWTeCp3mIWRwmoYjzZdKSzGQ26FtS1kwnkF/MmghyhrY 72n0PqjIoDY32qjo3lELyTeIUl0rl1QI3MKor4ThRAa6d9v4jE+GI3HG43MMGxhsT0 ju9mcFXyRPRZ6RyLPMk4TDpKeKtf6T5bMyqlfdcI= Received: from mchehab by mail.kernel.org with local (Exim 4.94) (envelope-from ) id 1k8MXs-00Euaq-7z; Wed, 19 Aug 2020 13:46:20 +0200 From: Mauro Carvalho Chehab To: Greg Kroah-Hartman Cc: linuxarm@huawei.com, mauro.chehab@huawei.com, Mauro Carvalho Chehab , John Stultz , Manivannan Sadhasivam , Daniel Vetter , dri-devel , Xiubin Zhang , Liwei Cai , Chen Feng , Wanchun Zheng , devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org Subject: [PATCH 21/49] staging: hikey9xx/gpu: add support for using a reserved CMA memory Date: Wed, 19 Aug 2020 13:45:49 +0200 Message-Id: <04e21a7298d2c076d5de89a1a937b9cb40bcc213.1597833138.git.mchehab+huawei@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Allocate the framebuffer memory via CMA, as otherwise the drm driver may not work properly with X11. Part of the changes here were based on a patch originally authored by: alik The original version can be found at: https://github.com/Bigcountry907/linux/commit/046e29834ef1c523c73614747377d3660eec3964 Signed-off-by: Mauro Carvalho Chehab --- .../staging/hikey9xx/gpu/kirin9xx_drm_drv.c | 36 ++++++------------- .../staging/hikey9xx/gpu/kirin9xx_drm_drv.h | 4 +-- .../hikey9xx/gpu/kirin9xx_drm_overlay_utils.c | 16 ++------- 3 files changed, 13 insertions(+), 43 deletions(-) diff --git a/drivers/staging/hikey9xx/gpu/kirin9xx_drm_drv.c b/drivers/staging/hikey9xx/gpu/kirin9xx_drm_drv.c index 49f591da1cf7..fee686760c78 100644 --- a/drivers/staging/hikey9xx/gpu/kirin9xx_drm_drv.c +++ b/drivers/staging/hikey9xx/gpu/kirin9xx_drm_drv.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -29,13 +30,6 @@ #include "kirin9xx_drm_drv.h" -#ifdef CONFIG_DRM_FBDEV_EMULATION -static bool fbdev = true; -MODULE_PARM_DESC(fbdev, "Enable fbdev compat layer"); -module_param(fbdev, bool, 0600); -#endif - - static struct kirin_dc_ops *dc_ops; static int kirin_drm_kms_cleanup(struct drm_device *dev) @@ -60,22 +54,7 @@ static void kirin_fbdev_output_poll_changed(struct drm_device *dev) dsi_set_output_client(dev); -#ifdef CMA_BUFFER_USED - if (priv->fbdev) { - DRM_INFO("hotplug_event!!!!!!\n"); - drm_fbdev_cma_hotplug_event(priv->fbdev); - } else { - DRM_INFO("cma_init!!!!!!\n"); - priv->fbdev = drm_fbdev_cma_init(dev, 32, - dev->mode_config.num_crtc, - dev->mode_config.num_connector); - if (IS_ERR(priv->fbdev)) - priv->fbdev = NULL; - } -#else - if (priv->fbdev) - drm_fb_helper_hotplug_event(priv->fbdev); -#endif + drm_fb_helper_hotplug_event(priv->fbdev); } static const struct drm_mode_config_funcs kirin_drm_mode_config_funcs = { @@ -98,7 +77,7 @@ static void kirin_drm_mode_config_init(struct drm_device *dev) static int kirin_drm_kms_init(struct drm_device *dev) { - struct kirin_drm_private *priv; + struct kirin_drm_private *priv = dev->dev_private; int ret; priv = devm_kzalloc(dev->dev, sizeof(*priv), GFP_KERNEL); @@ -256,6 +235,7 @@ static int kirin_drm_bind(struct device *dev) { struct drm_driver *driver = &kirin_drm_driver; struct drm_device *drm_dev; + struct kirin_drm_private *priv; int ret; drm_dev = drm_dev_alloc(driver, dev); @@ -270,6 +250,9 @@ static int kirin_drm_bind(struct device *dev) if (ret) goto err_kms_cleanup; + drm_fbdev_generic_setup(drm_dev, 32); + priv = drm_dev->dev_private; + /* connectors should be registered after drm device register */ ret = kirin_drm_connectors_register(drm_dev); if (ret) @@ -340,6 +323,7 @@ static int kirin_drm_platform_probe(struct platform_device *pdev) struct device_node *np = dev->of_node; struct component_match *match = NULL; struct device_node *remote; + int ret; dc_ops = (struct kirin_dc_ops *)of_device_get_match_data(dev); if (!dc_ops) { @@ -356,9 +340,9 @@ static int kirin_drm_platform_probe(struct platform_device *pdev) component_match_add(dev, &match, compare_of, remote); + if (ret) + DRM_ERROR("cma device init failed!"); return component_master_add_with_match(dev, &kirin_drm_ops, match); - - return 0; } static int kirin_drm_platform_remove(struct platform_device *pdev) diff --git a/drivers/staging/hikey9xx/gpu/kirin9xx_drm_drv.h b/drivers/staging/hikey9xx/gpu/kirin9xx_drm_drv.h index b704f025d64b..261259cb8f5f 100644 --- a/drivers/staging/hikey9xx/gpu/kirin9xx_drm_drv.h +++ b/drivers/staging/hikey9xx/gpu/kirin9xx_drm_drv.h @@ -13,6 +13,7 @@ #include #include +#include #include #include @@ -21,8 +22,6 @@ #define MAX_CRTC 2 -#define to_kirin_fbdev(x) container_of(x, struct kirin_fbdev, fb_helper) - /* display controller init/cleanup ops */ struct kirin_dc_ops { int (*init)(struct drm_device *dev); @@ -32,7 +31,6 @@ struct kirin_dc_ops { }; struct kirin_drm_private { - struct drm_fb_helper *fb_helper; struct drm_fb_helper *fbdev; struct drm_crtc *crtc[MAX_CRTC]; }; diff --git a/drivers/staging/hikey9xx/gpu/kirin9xx_drm_overlay_utils.c b/drivers/staging/hikey9xx/gpu/kirin9xx_drm_overlay_utils.c index 8be5865b615c..2b9672a3d057 100644 --- a/drivers/staging/hikey9xx/gpu/kirin9xx_drm_overlay_utils.c +++ b/drivers/staging/hikey9xx/gpu/kirin9xx_drm_overlay_utils.c @@ -1517,15 +1517,10 @@ void hisi_fb_pan_display(struct drm_plane *plane) struct dss_crtc *acrtc = aplane->acrtc; struct dss_hw_ctx *ctx = acrtc->ctx; -#ifndef CMA_BUFFER_USED - struct kirin_drm_private *priv = plane->dev->dev_private; - struct kirin_fbdev *fbdev = to_kirin_fbdev(priv->fbdev); -#else struct drm_gem_cma_object *obj = drm_fb_cma_get_gem_obj(state->fb, 0); -#endif bool afbcd = false; - bool mmu_enable = true; + bool mmu_enable = false; dss_rect_ltrb_t rect; u32 bpp; u32 stride; @@ -1550,14 +1545,7 @@ void hisi_fb_pan_display(struct drm_plane *plane) bpp = fb->format->cpp[0]; stride = fb->pitches[0]; -#ifndef CMA_BUFFER_USED - if (fbdev) - display_addr = (u32)fbdev->smem_start + src_y * stride; - else - DRM_ERROR("fbdev is null? \n"); -#else display_addr = (u32)obj->paddr + src_y * stride; -#endif rect.left = 0; rect.right = src_w - 1; @@ -1609,7 +1597,7 @@ void hisi_dss_online_play(struct kirin_fbdev *fbdev, struct drm_plane *plane, dr struct dss_hw_ctx *ctx = acrtc->ctx; bool afbcd = false; - bool mmu_enable = true; + bool mmu_enable = false; dss_rect_ltrb_t rect; u32 bpp; u32 stride; -- 2.26.2