mirror of
https://github.com/Ysurac/openmptcprouter.git
synced 2025-03-09 15:40:20 +00:00
76 lines
2.7 KiB
Diff
76 lines
2.7 KiB
Diff
From 362e013b4a3f887c718a5808c8825e98a0e3511e Mon Sep 17 00:00:00 2001
|
|
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|
Date: Mon, 13 Sep 2021 17:30:18 +0100
|
|
Subject: [PATCH 505/634] drm/vc4: Reset HDMI MISC_CONTROL register.
|
|
|
|
The HDMI block can repeat pixels for double clocked modes,
|
|
and the firmware is now configuring the block to do this as
|
|
the PV is doing it incorrectly when at 2pixels/clock.
|
|
If the kernel doesn't reset it then we end up with strange
|
|
modes.
|
|
|
|
Reset MISC_CONTROL.
|
|
|
|
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|
---
|
|
drivers/gpu/drm/vc4/vc4_hdmi.c | 8 ++++++++
|
|
drivers/gpu/drm/vc4/vc4_hdmi_regs.h | 3 +++
|
|
2 files changed, 11 insertions(+)
|
|
|
|
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
|
index 395a9e9c1e5a..a6afd7d7f21c 100644
|
|
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
|
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
|
@@ -78,6 +78,9 @@
|
|
#define VC5_HDMI_VERTB_VSPO_SHIFT 16
|
|
#define VC5_HDMI_VERTB_VSPO_MASK VC4_MASK(29, 16)
|
|
|
|
+#define VC5_HDMI_MISC_CONTROL_PIXEL_REP_SHIFT 0
|
|
+#define VC5_HDMI_MISC_CONTROL_PIXEL_REP_MASK VC4_MASK(3, 0)
|
|
+
|
|
#define VC5_HDMI_SCRAMBLER_CTL_ENABLE BIT(0)
|
|
|
|
#define VC5_HDMI_DEEP_COLOR_CONFIG_1_INIT_PACK_PHASE_SHIFT 8
|
|
@@ -962,6 +965,11 @@ static void vc5_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi,
|
|
reg |= gcp_en ? VC5_HDMI_GCP_CONFIG_GCP_ENABLE : 0;
|
|
HDMI_WRITE(HDMI_GCP_CONFIG, reg);
|
|
|
|
+ reg = HDMI_READ(HDMI_MISC_CONTROL);
|
|
+ reg &= ~VC5_HDMI_MISC_CONTROL_PIXEL_REP_MASK;
|
|
+ reg |= VC4_SET_FIELD(0, VC5_HDMI_MISC_CONTROL_PIXEL_REP);
|
|
+ HDMI_WRITE(HDMI_MISC_CONTROL, reg);
|
|
+
|
|
HDMI_WRITE(HDMI_CLOCK_STOP, 0);
|
|
|
|
spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
|
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi_regs.h b/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
|
|
index fc971506bd4f..24056441a4bb 100644
|
|
--- a/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
|
|
+++ b/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
|
|
@@ -125,6 +125,7 @@ enum vc4_hdmi_field {
|
|
HDMI_VERTB0,
|
|
HDMI_VERTB1,
|
|
HDMI_VID_CTL,
|
|
+ HDMI_MISC_CONTROL,
|
|
};
|
|
|
|
struct vc4_hdmi_register {
|
|
@@ -235,6 +236,7 @@ static const struct vc4_hdmi_register __maybe_unused vc5_hdmi_hdmi0_fields[] = {
|
|
VC4_HDMI_REG(HDMI_VERTB0, 0x0f0),
|
|
VC4_HDMI_REG(HDMI_VERTA1, 0x0f4),
|
|
VC4_HDMI_REG(HDMI_VERTB1, 0x0f8),
|
|
+ VC4_HDMI_REG(HDMI_MISC_CONTROL, 0x100),
|
|
VC4_HDMI_REG(HDMI_MAI_CHANNEL_MAP, 0x09c),
|
|
VC4_HDMI_REG(HDMI_MAI_CONFIG, 0x0a0),
|
|
VC4_HDMI_REG(HDMI_DEEP_COLOR_CONFIG_1, 0x170),
|
|
@@ -315,6 +317,7 @@ static const struct vc4_hdmi_register __maybe_unused vc5_hdmi_hdmi1_fields[] = {
|
|
VC4_HDMI_REG(HDMI_VERTB0, 0x0f0),
|
|
VC4_HDMI_REG(HDMI_VERTA1, 0x0f4),
|
|
VC4_HDMI_REG(HDMI_VERTB1, 0x0f8),
|
|
+ VC4_HDMI_REG(HDMI_MISC_CONTROL, 0x100),
|
|
VC4_HDMI_REG(HDMI_MAI_CHANNEL_MAP, 0x09c),
|
|
VC4_HDMI_REG(HDMI_MAI_CONFIG, 0x0a0),
|
|
VC4_HDMI_REG(HDMI_DEEP_COLOR_CONFIG_1, 0x170),
|
|
--
|
|
2.33.1
|
|
|