mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-28 01:28:59 +00:00
86 lines
3.0 KiB
Diff
86 lines
3.0 KiB
Diff
|
From dae2475df84cd77c6f7245984869897c0eb0f84e Mon Sep 17 00:00:00 2001
|
||
|
From: Wen He <wen.he_1@nxp.com>
|
||
|
Date: Tue, 10 Sep 2019 15:01:00 +0800
|
||
|
Subject: [PATCH] drm/arm/mali-dp: Add display QoS interface configuration for
|
||
|
Mali DP500
|
||
|
|
||
|
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 high resolutions flicker issue on the LS1028A platform.
|
||
|
|
||
|
Signed-off-by: Wen He <wen.he_1@nxp.com>
|
||
|
---
|
||
|
drivers/gpu/drm/arm/malidp_drv.c | 6 ++++++
|
||
|
drivers/gpu/drm/arm/malidp_hw.c | 9 +++++++++
|
||
|
drivers/gpu/drm/arm/malidp_hw.h | 3 +++
|
||
|
drivers/gpu/drm/arm/malidp_regs.h | 10 ++++++++++
|
||
|
4 files changed, 28 insertions(+)
|
||
|
|
||
|
--- a/drivers/gpu/drm/arm/malidp_drv.c
|
||
|
+++ b/drivers/gpu/drm/arm/malidp_drv.c
|
||
|
@@ -817,6 +817,12 @@ static int malidp_bind(struct device *de
|
||
|
|
||
|
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",
|
||
|
--- a/drivers/gpu/drm/arm/malidp_hw.c
|
||
|
+++ b/drivers/gpu/drm/arm/malidp_hw.c
|
||
|
@@ -379,6 +379,15 @@ static void malidp500_modeset(struct mal
|
||
|
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 high resolutions flicker
|
||
|
+ * issue on the LS1028A.
|
||
|
+ */
|
||
|
+ if (hwdev->arqos_value) {
|
||
|
+ val = hwdev->arqos_value;
|
||
|
+ malidp_hw_setbits(hwdev, val, MALIDP500_RQOS_QUALITY);
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
int malidp_format_get_bpp(u32 fmt)
|
||
|
--- 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)
|
||
|
--- 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
|