Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp3424544ybi; Fri, 19 Jul 2019 03:04:53 -0700 (PDT) X-Google-Smtp-Source: APXvYqyRB0Fxb5PSHaeViGKuTWpFF4P3JaOohuPspz4T9QrkdBgwtSEWa8jXJzS3yIUIrdCag37y X-Received: by 2002:a17:902:f216:: with SMTP id gn22mr54742189plb.118.1563530693655; Fri, 19 Jul 2019 03:04:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563530693; cv=none; d=google.com; s=arc-20160816; b=eqGIKrYi4v8o2TspvV5h9RLWqAY8eDnDTJCb2DMXAz8M+aFu8utOYhBOv6Yl2+0XEF zy7N9ZrkBROy1jr8WNNvnGwMtY76umuTYgYW1Oc90Gc6gzodqnzf691oiNtNjLPUXJij wFFgxR1CJPrzz1A47SwFfQImh/Bzrovbi1Fz3HhxZbJEiHjKPdXYvicxd8/a9/QfS5AP IblwftDxSxjJpD9FmqXiamCVGuAZEeostsJdpgfHKo1xga15xMm2qD6xj3xH+a5eF+Oz rlLLCb6KDWJCJUPWeeQ31fvz/ByLzujdUnBrGSv4wlLAk0qOd2AM/1lgk7tOl7EQis17 CFVA== 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=Mv+CSmcsEiK4+Hhp/ZBukZxJmjFDvpkuSj9MD4VjnJY=; b=oFZSSKbfq8r9sf1E0ZM6FjqK76CgNiel5WPgevGmmAHgejGhUenXuqBkDz5lj6lKtf ayMjou+tYhsK5pewsOIvNvHuTgWYUrBfwybj6B0pn86KttMv1HJGo7U8fUZPQKa8i4B4 HOHHcat477xQdxmV5fd3nQiFYErnbWdeaP3Eo1Cg9DAGNpXR+6ZM08b2ScFyRpUq5CqT YvneBZ7vsUtXTNaAxnzBR1GLibQ5owRQwg07sDANAk8fe4b6MIKNFYgX8WvMX8kInuAh wAY8haKwRE9JVzNN5ymRYmXwpipqJLQ9XdAqbZ8Z0AXJTL5X+gp12DBgxpG1cRItUycl lP5g== 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 r8si27136920pjd.64.2019.07.19.03.04.37; Fri, 19 Jul 2019 03:04:53 -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 S1727348AbfGSKEI (ORCPT + 99 others); Fri, 19 Jul 2019 06:04:08 -0400 Received: from inva021.nxp.com ([92.121.34.21]:55478 "EHLO inva021.nxp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725853AbfGSKEI (ORCPT ); Fri, 19 Jul 2019 06:04:08 -0400 Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 3F172200158; Fri, 19 Jul 2019 12:04:06 +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 93545200266; Fri, 19 Jul 2019 12:04:01 +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 E856D402B5; Fri, 19 Jul 2019 18:03:55 +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: [v2 1/3] drm/arm/mali-dp: Add display QoS interface configuration for Mali DP500 Date: Fri, 19 Jul 2019 17:54:45 +0800 Message-Id: <20190719095445.11575-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 priority if the optional property node "arm,malidp-aqros-value" is defined in DTS file. QoS signaling using AQROS and AWQOS AXI interface signals, the AQROS is driven from the "RQOS" register, so needed to program the RQOS register to avoid the 4k resolution flicker issue on the LS1028A platform. Signed-off-by: Wen He --- change in v2: - modify some content based on feedback from maintainers drivers/gpu/drm/arm/malidp_drv.c | 6 ++++++ drivers/gpu/drm/arm/malidp_hw.c | 13 +++++++++++++ drivers/gpu/drm/arm/malidp_hw.h | 3 +++ drivers/gpu/drm/arm/malidp_regs.h | 10 ++++++++++ 4 files changed, 32 insertions(+) diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c index f25ec4382277..61c49a0668a7 100644 --- a/drivers/gpu/drm/arm/malidp_drv.c +++ b/drivers/gpu/drm/arm/malidp_drv.c @@ -818,6 +818,12 @@ static int malidp_bind(struct device *dev) malidp->core_id = version; + ret = of_property_read_u32(dev->of_node, + "arm,malidp-arqos-value", + &hwdev->arqos_value); + if (ret) + hwdev->arqos_value = 0x0; + /* 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..323683b1e9f7 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 avoid 4k resolution flicker + * on the LS1028A. + */ + if (hwdev->arqos_value) { + val = hwdev->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..e4c36bc90bda 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 */ + u32 arqos_value; }; 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..514c50dcb74d 100644 --- a/drivers/gpu/drm/arm/malidp_regs.h +++ b/drivers/gpu/drm/arm/malidp_regs.h @@ -210,6 +210,16 @@ #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 + /* register offsets and bits specific to DP550/DP650 */ #define MALIDP550_ADDR_SPACE_SIZE 0x10000 #define MALIDP550_DE_CONTROL 0x00010 -- 2.17.1