Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp640618ybi; Wed, 17 Jul 2019 02:35:30 -0700 (PDT) X-Google-Smtp-Source: APXvYqwJ7Sz8pB/auCcKoYmdwiTznfdm6VFjztnuR22OK7PKRv4NnwHI+vvUuyNDMoXptjuCyzqO X-Received: by 2002:a17:90a:24e4:: with SMTP id i91mr44586842pje.9.1563356130835; Wed, 17 Jul 2019 02:35:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563356130; cv=none; d=google.com; s=arc-20160816; b=f2FDjRh0GyBNJl9qlGOnT6UD3Sy6mR3oEvFKR/b6bneknjfmaVrmvE7wizS5K6seYn icnpTnbIjJBdeUTi5DCVoYnKAVImZYQuCv9RJkBDaP7k0L/bLollrKkhdXtPQ3syVHXo z6Ssyi5/N4C4Am+CwJ2uIdHQd1C0oqyoULF5zdfoJ2QYZmSbwkwP0Q73eex13IWtcWdk QhVbGfUuRF/WSj5iXwJ9rB+cdwNpue0ZnpKua+BannE5b5fRC1F/dWZw9JcIpGkZK4FA 8q8OzvxmmbOwXhCKyC+7cRIgEHdLwBSW66uEcgFIZYw5GU2Svd30m6XPjeI77DtjClO1 gSQw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=vDn9+AD8J169P71LKhBtu2T3Ur4zZhy+IXdD2S5rE7g=; b=bJ2tVsTESmfnXFgTAZBdwwTckK/OP9TuGllryfccdpBsBWYhoy8cwjR39cds04FU1J k2SKXVOuy+0RR4C6js88QqxOneZywKeJjRJUsKHB73mBGEnJgX9y+kRbvhs4MTh2HTTW IAmL+KouiSTOLGZRz77dpMaxIsJExSyfqrJ8s1ItnKighqkcFOW09TuKAqLoIn2OwvqR ct4eQFrlShoyxgrlXZLT0utJv573HoWS09LuqNpcNiSauIMbtxO6r86GGMEaML/x4axH JQnAq22g6uB3yVQmOMu3itNa7tkQxXqN2Tl6BflsqGXVhKcqOkPcPLkr24M3igxjzt3O Ag5A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c8si20563357pls.436.2019.07.17.02.35.14; Wed, 17 Jul 2019 02:35:30 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726336AbfGQJdO (ORCPT + 99 others); Wed, 17 Jul 2019 05:33:14 -0400 Received: from inva021.nxp.com ([92.121.34.21]:53564 "EHLO inva021.nxp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725941AbfGQJdO (ORCPT ); Wed, 17 Jul 2019 05:33:14 -0400 Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id BD3682000A5; Wed, 17 Jul 2019 11:33:11 +0200 (CEST) Received: from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com [165.114.16.14]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 04A6520005C; Wed, 17 Jul 2019 11:33:07 +0200 (CEST) Received: from titan.ap.freescale.net (TITAN.ap.freescale.net [10.192.208.233]) by invc005.ap-rdc01.nxp.com (Postfix) with ESMTP id 2D2F1402D5; Wed, 17 Jul 2019 17:33:01 +0800 (SGT) From: Wen He To: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, liviu.dudau@arm.com, brian.starkey@arm.com, airlied@linux.ie, daniel@ffwll.ch Cc: leoyang.li@nxp.com, Wen He Subject: [PATCH] drm/arm/mali-dp: Add display QoS interface configuration Date: Wed, 17 Jul 2019 17:23:53 +0800 Message-Id: <20190717092353.43386-1-wen.he_1@nxp.com> X-Mailer: git-send-email 2.9.5 X-Virus-Scanned: ClamAV using ClamSMTP Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Configure the display Quality of service (QoS) levels to high priority if the level is defined as high as in DTS. The ARQOS for DP500 is driven from the "RQOS" register, needed to program the RQOS register value < 7 for the 4k resolution flicker to disappear on the LS1028A platform. Signed-off-by: Wen He --- change in v2: - add new implementation for 4k flicker issue on the LS1028A drivers/gpu/drm/arm/malidp_drv.c | 5 +++++ drivers/gpu/drm/arm/malidp_hw.c | 13 +++++++++++++ drivers/gpu/drm/arm/malidp_hw.h | 3 +++ drivers/gpu/drm/arm/malidp_regs.h | 12 ++++++++++++ 4 files changed, 33 insertions(+) diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c index f25ec4382277..d2b2cf52ac87 100644 --- a/drivers/gpu/drm/arm/malidp_drv.c +++ b/drivers/gpu/drm/arm/malidp_drv.c @@ -818,6 +818,11 @@ static int malidp_bind(struct device *dev) malidp->core_id = version; + hwdev->arqos_high_level = false; + + hwdev->arqos_high_level = of_property_read_bool(dev->of_node, + "arm,malidp-arqos-high-level"); + /* set the number of lines used for output of RGB data */ ret = of_property_read_u8_array(dev->of_node, "arm,malidp-output-port-lines", diff --git a/drivers/gpu/drm/arm/malidp_hw.c b/drivers/gpu/drm/arm/malidp_hw.c index 50af399d7f6f..eaa1658cd86b 100644 --- a/drivers/gpu/drm/arm/malidp_hw.c +++ b/drivers/gpu/drm/arm/malidp_hw.c @@ -374,6 +374,19 @@ static void malidp500_modeset(struct malidp_hw_device *hwdev, struct videomode * malidp_hw_setbits(hwdev, MALIDP_DISP_FUNC_ILACED, MALIDP_DE_DISPLAY_FUNC); else malidp_hw_clearbits(hwdev, MALIDP_DISP_FUNC_ILACED, MALIDP_DE_DISPLAY_FUNC); + + /* + * Program the RQoS register to increasing QoS levels for + * the 4k resolution flicker to disappear on the LS1028A. + */ + if (hwdev->arqos_high_level) { + val = RED_ARQOS_VALUE | GREEN_ARQOS_VALUE; + + if (mode->pixelclock == 594000000) + malidp_hw_setbits(hwdev, val, MALIDP500_RQOS_QUALITY); + else + malidp_hw_clearbits(hwdev, val, MALIDP500_RQOS_QUALITY); + } } int malidp_format_get_bpp(u32 fmt) diff --git a/drivers/gpu/drm/arm/malidp_hw.h b/drivers/gpu/drm/arm/malidp_hw.h index 968a65eed371..b8baba60508a 100644 --- a/drivers/gpu/drm/arm/malidp_hw.h +++ b/drivers/gpu/drm/arm/malidp_hw.h @@ -251,6 +251,9 @@ struct malidp_hw_device { /* size of memory used for rotating layers, up to two banks available */ u32 rotation_memory[2]; + + /* priority level of RQOS register used for driven the ARQOS signal */ + bool arqos_high_level; }; static inline u32 malidp_hw_read(struct malidp_hw_device *hwdev, u32 reg) diff --git a/drivers/gpu/drm/arm/malidp_regs.h b/drivers/gpu/drm/arm/malidp_regs.h index 993031542fa1..08842142b3b2 100644 --- a/drivers/gpu/drm/arm/malidp_regs.h +++ b/drivers/gpu/drm/arm/malidp_regs.h @@ -210,6 +210,18 @@ #define MALIDP500_CONFIG_VALID 0x00f00 #define MALIDP500_CONFIG_ID 0x00fd4 +/* + * The quality of service (QoS) register on the DP500. RQOS register values + * are driven by the ARQOS signal, using AXI transacations, dependent on the + * FIFO input level. + * The RQOS register can also set QoS levels for: + * - RED_ARQOS @ A 4-bit signal value for close to underflow conditions + * - GREEN_ARQOS @ A 4-bit signal value for normal conditions + */ +#define MALIDP500_RQOS_QUALITY 0x00500 +#define RED_ARQOS_VALUE (0xd << 12) +#define GREEN_ARQOS_VALUE (0xd << 28) + /* register offsets and bits specific to DP550/DP650 */ #define MALIDP550_ADDR_SPACE_SIZE 0x10000 #define MALIDP550_DE_CONTROL 0x00010 -- 2.17.1