Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp3774375pxt; Tue, 10 Aug 2021 11:01:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxW9XlyNjC56JQt+vOL4RBkGKPWKJWoZaJtcfKtMXPRkSQYDOhtp/4oLU2pcoV9YYs13NOF X-Received: by 2002:a17:907:2706:: with SMTP id w6mr7860494ejk.101.1628618515471; Tue, 10 Aug 2021 11:01:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628618515; cv=none; d=google.com; s=arc-20160816; b=fxAJxNaMXOPzBFsKj8twiHmxqysb8oOlwG8HLXGdcRBXMaDMM7FJEwpqRvVsl08dFK tXMoZ+cX8eLmb5zpqPjkjRIpA7E2C5cAxDVMT7/vTL0Ev0YYKK/mDwn7mGUbclaQCCCz hTGgi8+6CoiTMy6v5UYwXiDyGryZbIDvEcNx1J58uY2NtSiwDrMtjGnro3ziuR688FHX cXKkxOL5M7urctYn3YCA4WBHD2TimqsuIyJpeVT+Nix6/S3T+AiMfxj1QUL02IItd6ft OlYnT1M/fe3eRnNfIsPNO6B551DWU7i6ZqAS+z1F7+Mf51jk1DnnEBH/AEN2rDBxTTgh o9MA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=57vE9c1GNCKJe2WjmOV+aji8YwdGBLfkSfDjS13EnWE=; b=dpBzsIEq7kD1y2Msbm8MtFGpiCid1CcPTH1wxrH9kT5BtIFu6FxhfMArsXwjuIw8OJ oW0vicB0vIkd0IrnpgBOy9Ph1j/tHp9ck4ep3hu6hONjjwdESIUZzbIFDOKyk1v0zTlQ ijZobpQDyECwKI+VrDlZoJeGAQk5J+axGpomumerLEJtweqQewKEmaisPnd8FMetJUQW ukkfp6rFdphNJAIwd1SY1BMiaQ0MJi4uCD7Ez83BJNRuiJS6xZ15Jizk8UuDJ8qXZ5cG 7TnmeTuzeG2hi0qfjNOLWUEpfkz6Sp8tcU6pogYlZdl+X0ENeUDu2JTa+mYwZYfDdAme 6b2w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=QT808uUj; 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=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h20si21823744edr.397.2021.08.10.11.01.30; Tue, 10 Aug 2021 11:01:55 -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=@linuxfoundation.org header.s=korg header.b=QT808uUj; 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=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233772AbhHJR6w (ORCPT + 99 others); Tue, 10 Aug 2021 13:58:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:51086 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237378AbhHJRyd (ORCPT ); Tue, 10 Aug 2021 13:54:33 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 46EEA60EFF; Tue, 10 Aug 2021 17:44:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1628617455; bh=aC+Hxy9Qty4662lS3IL6kgFcrw0zACzDGOsjZ3zvdBM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QT808uUjkrVYjcJI32GCeeAHq3yCkWtjQ11naXdtsBLVyPj39soWmga5hM3F+aED8 i1TjmkWWBCtVDbWXA9iCg6WY/Pz/DQPRq0Fk2yKplDAmuVLsDL/QETL+GV82j5e1ED FX5vevL5V+Mig+UV/snBBbvgFKxNIX3KlUj6SOfk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Edmund Dea , Anitha Chrisanthus , Sam Ravnborg , Sasha Levin Subject: [PATCH 5.13 033/175] drm/kmb: Enable LCD DMA for low TVDDCV Date: Tue, 10 Aug 2021 19:29:01 +0200 Message-Id: <20210810173002.052339003@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210810173000.928681411@linuxfoundation.org> References: <20210810173000.928681411@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Edmund Dea [ Upstream commit 0aab5dce395636eddf4e5f33eba88390328a95b4 ] There's an undocumented dependency between LCD layer enable bits [2-5] and the AXI pipelined read enable bit [28] in the LCD_CONTROL register. The proper order of operation is: 1) Clear AXI pipelined read enable bit 2) Set LCD layers 3) Set AXI pipelined read enable bit With this update, LCD can start DMA when TVDDCV is reduced down to 700mV. Fixes: 7f7b96a8a0a1 ("drm/kmb: Add support for KeemBay Display") Signed-off-by: Edmund Dea Signed-off-by: Anitha Chrisanthus Acked-by: Sam Ravnborg Link: https://patchwork.freedesktop.org/patch/msgid/20210728003126.1425028-1-anitha.chrisanthus@intel.com Signed-off-by: Sasha Levin --- drivers/gpu/drm/kmb/kmb_drv.c | 14 ++++++++++++++ drivers/gpu/drm/kmb/kmb_plane.c | 15 +++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/kmb/kmb_drv.c b/drivers/gpu/drm/kmb/kmb_drv.c index 96ea1a2c11dd..c0b1c6f99249 100644 --- a/drivers/gpu/drm/kmb/kmb_drv.c +++ b/drivers/gpu/drm/kmb/kmb_drv.c @@ -203,6 +203,7 @@ static irqreturn_t handle_lcd_irq(struct drm_device *dev) unsigned long status, val, val1; int plane_id, dma0_state, dma1_state; struct kmb_drm_private *kmb = to_kmb(dev); + u32 ctrl = 0; status = kmb_read_lcd(kmb, LCD_INT_STATUS); @@ -227,6 +228,19 @@ static irqreturn_t handle_lcd_irq(struct drm_device *dev) kmb_clr_bitmask_lcd(kmb, LCD_CONTROL, kmb->plane_status[plane_id].ctrl); + ctrl = kmb_read_lcd(kmb, LCD_CONTROL); + if (!(ctrl & (LCD_CTRL_VL1_ENABLE | + LCD_CTRL_VL2_ENABLE | + LCD_CTRL_GL1_ENABLE | + LCD_CTRL_GL2_ENABLE))) { + /* If no LCD layers are using DMA, + * then disable DMA pipelined AXI read + * transactions. + */ + kmb_clr_bitmask_lcd(kmb, LCD_CONTROL, + LCD_CTRL_PIPELINE_DMA); + } + kmb->plane_status[plane_id].disable = false; } } diff --git a/drivers/gpu/drm/kmb/kmb_plane.c b/drivers/gpu/drm/kmb/kmb_plane.c index d5b6195856d1..ecee6782612d 100644 --- a/drivers/gpu/drm/kmb/kmb_plane.c +++ b/drivers/gpu/drm/kmb/kmb_plane.c @@ -427,8 +427,14 @@ static void kmb_plane_atomic_update(struct drm_plane *plane, kmb_set_bitmask_lcd(kmb, LCD_CONTROL, ctrl); - /* FIXME no doc on how to set output format,these values are - * taken from the Myriadx tests + /* Enable pipeline AXI read transactions for the DMA + * after setting graphics layers. This must be done + * in a separate write cycle. + */ + kmb_set_bitmask_lcd(kmb, LCD_CONTROL, LCD_CTRL_PIPELINE_DMA); + + /* FIXME no doc on how to set output format, these values are taken + * from the Myriadx tests */ out_format |= LCD_OUTF_FORMAT_RGB888; @@ -526,6 +532,11 @@ struct kmb_plane *kmb_plane_init(struct drm_device *drm) plane->id = i; } + /* Disable pipeline AXI read transactions for the DMA + * prior to setting graphics layers + */ + kmb_clr_bitmask_lcd(kmb, LCD_CONTROL, LCD_CTRL_PIPELINE_DMA); + return primary; cleanup: drmm_kfree(drm, plane); -- 2.30.2