mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-08-02 07:27:49 +00:00
linux: update upstream patches (see https://bugs.freedesktop.org/show_bug.cgi?id=69675#c15)
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
b26792519a
commit
ee4b8ce6e2
@ -1,134 +0,0 @@
|
|||||||
diff -Naur linux-3.11.1/drivers/gpu/drm/drm_edid.c linux-3.11.1.patch/drivers/gpu/drm/drm_edid.c
|
|
||||||
--- linux-3.11.1/drivers/gpu/drm/drm_edid.c 2013-09-14 16:07:01.000000000 +0200
|
|
||||||
+++ linux-3.11.1.patch/drivers/gpu/drm/drm_edid.c 2013-09-24 02:41:23.718220411 +0200
|
|
||||||
@@ -2324,31 +2324,6 @@
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(drm_find_cea_extension);
|
|
||||||
|
|
||||||
-/*
|
|
||||||
- * Calculate the alternate clock for the CEA mode
|
|
||||||
- * (60Hz vs. 59.94Hz etc.)
|
|
||||||
- */
|
|
||||||
-static unsigned int
|
|
||||||
-cea_mode_alternate_clock(const struct drm_display_mode *cea_mode)
|
|
||||||
-{
|
|
||||||
- unsigned int clock = cea_mode->clock;
|
|
||||||
-
|
|
||||||
- if (cea_mode->vrefresh % 6 != 0)
|
|
||||||
- return clock;
|
|
||||||
-
|
|
||||||
- /*
|
|
||||||
- * edid_cea_modes contains the 59.94Hz
|
|
||||||
- * variant for 240 and 480 line modes,
|
|
||||||
- * and the 60Hz variant otherwise.
|
|
||||||
- */
|
|
||||||
- if (cea_mode->vdisplay == 240 || cea_mode->vdisplay == 480)
|
|
||||||
- clock = clock * 1001 / 1000;
|
|
||||||
- else
|
|
||||||
- clock = DIV_ROUND_UP(clock * 1000, 1001);
|
|
||||||
-
|
|
||||||
- return clock;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
/**
|
|
||||||
* drm_match_cea_mode - look for a CEA mode matching given mode
|
|
||||||
* @to_match: display mode
|
|
||||||
@@ -2367,9 +2342,21 @@
|
|
||||||
const struct drm_display_mode *cea_mode = &edid_cea_modes[mode];
|
|
||||||
unsigned int clock1, clock2;
|
|
||||||
|
|
||||||
+ clock1 = clock2 = cea_mode->clock;
|
|
||||||
+
|
|
||||||
/* Check both 60Hz and 59.94Hz */
|
|
||||||
- clock1 = cea_mode->clock;
|
|
||||||
- clock2 = cea_mode_alternate_clock(cea_mode);
|
|
||||||
+ if (cea_mode->vrefresh % 6 == 0) {
|
|
||||||
+ /*
|
|
||||||
+ * edid_cea_modes contains the 59.94Hz
|
|
||||||
+ * variant for 240 and 480 line modes,
|
|
||||||
+ * and the 60Hz variant otherwise.
|
|
||||||
+ */
|
|
||||||
+ if (cea_mode->vdisplay == 240 ||
|
|
||||||
+ cea_mode->vdisplay == 480)
|
|
||||||
+ clock1 = clock1 * 1001 / 1000;
|
|
||||||
+ else
|
|
||||||
+ clock2 = DIV_ROUND_UP(clock2 * 1000, 1001);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if ((KHZ2PICOS(to_match->clock) == KHZ2PICOS(clock1) ||
|
|
||||||
KHZ2PICOS(to_match->clock) == KHZ2PICOS(clock2)) &&
|
|
||||||
@@ -2380,66 +2367,6 @@
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(drm_match_cea_mode);
|
|
||||||
|
|
||||||
-static int
|
|
||||||
-add_alternate_cea_modes(struct drm_connector *connector, struct edid *edid)
|
|
||||||
-{
|
|
||||||
- struct drm_device *dev = connector->dev;
|
|
||||||
- struct drm_display_mode *mode, *tmp;
|
|
||||||
- LIST_HEAD(list);
|
|
||||||
- int modes = 0;
|
|
||||||
-
|
|
||||||
- /* Don't add CEA modes if the CEA extension block is missing */
|
|
||||||
- if (!drm_find_cea_extension(edid))
|
|
||||||
- return 0;
|
|
||||||
-
|
|
||||||
- /*
|
|
||||||
- * Go through all probed modes and create a new mode
|
|
||||||
- * with the alternate clock for certain CEA modes.
|
|
||||||
- */
|
|
||||||
- list_for_each_entry(mode, &connector->probed_modes, head) {
|
|
||||||
- const struct drm_display_mode *cea_mode;
|
|
||||||
- struct drm_display_mode *newmode;
|
|
||||||
- u8 cea_mode_idx = drm_match_cea_mode(mode) - 1;
|
|
||||||
- unsigned int clock1, clock2;
|
|
||||||
-
|
|
||||||
- if (cea_mode_idx >= ARRAY_SIZE(edid_cea_modes))
|
|
||||||
- continue;
|
|
||||||
-
|
|
||||||
- cea_mode = &edid_cea_modes[cea_mode_idx];
|
|
||||||
-
|
|
||||||
- clock1 = cea_mode->clock;
|
|
||||||
- clock2 = cea_mode_alternate_clock(cea_mode);
|
|
||||||
-
|
|
||||||
- if (clock1 == clock2)
|
|
||||||
- continue;
|
|
||||||
-
|
|
||||||
- if (mode->clock != clock1 && mode->clock != clock2)
|
|
||||||
- continue;
|
|
||||||
-
|
|
||||||
- newmode = drm_mode_duplicate(dev, cea_mode);
|
|
||||||
- if (!newmode)
|
|
||||||
- continue;
|
|
||||||
-
|
|
||||||
- /*
|
|
||||||
- * The current mode could be either variant. Make
|
|
||||||
- * sure to pick the "other" clock for the new mode.
|
|
||||||
- */
|
|
||||||
- if (mode->clock != clock1)
|
|
||||||
- newmode->clock = clock1;
|
|
||||||
- else
|
|
||||||
- newmode->clock = clock2;
|
|
||||||
-
|
|
||||||
- list_add_tail(&newmode->head, &list);
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- list_for_each_entry_safe(mode, tmp, &list, head) {
|
|
||||||
- list_del(&mode->head);
|
|
||||||
- drm_mode_probed_add(connector, mode);
|
|
||||||
- modes++;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- return modes;
|
|
||||||
-}
|
|
||||||
|
|
||||||
static int
|
|
||||||
do_cea_modes (struct drm_connector *connector, u8 *db, u8 len)
|
|
||||||
@@ -3022,7 +2949,6 @@
|
|
||||||
if (edid->features & DRM_EDID_FEATURE_DEFAULT_GTF)
|
|
||||||
num_modes += add_inferred_modes(connector, edid);
|
|
||||||
num_modes += add_cea_modes(connector, edid);
|
|
||||||
- num_modes += add_alternate_cea_modes(connector, edid);
|
|
||||||
|
|
||||||
if (quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75))
|
|
||||||
edid_fixup_preferred(connector, quirks);
|
|
41
packages/linux/patches/3.11.3/linux-990.12-RADEON-upstream-fix-01.patch
vendored
Normal file
41
packages/linux/patches/3.11.3/linux-990.12-RADEON-upstream-fix-01.patch
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
From 6a4a51f43cc6635c7b731d9fb2e1e32333d594fe Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alex Deucher <alexander.deucher@amd.com>
|
||||||
|
Date: Fri, 27 Sep 2013 18:09:54 -0400
|
||||||
|
Subject: [PATCH 1/3] drm/radeon: use 64-bit math to calculate CTS values for
|
||||||
|
audio (v2)
|
||||||
|
|
||||||
|
Avoid losing precision. See bug:
|
||||||
|
https://bugs.freedesktop.org/show_bug.cgi?id=69675
|
||||||
|
|
||||||
|
v2: fix math as per Anssi's comments.
|
||||||
|
|
||||||
|
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||||
|
---
|
||||||
|
drivers/gpu/drm/radeon/r600_hdmi.c | 11 +++++++++--
|
||||||
|
1 file changed, 9 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||||
|
index b0fa600..49043a5 100644
|
||||||
|
--- a/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||||
|
+++ b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||||
|
@@ -75,8 +75,15 @@ static const struct radeon_hdmi_acr r600_hdmi_predefined_acr[] = {
|
||||||
|
*/
|
||||||
|
static void r600_hdmi_calc_cts(uint32_t clock, int *CTS, int N, int freq)
|
||||||
|
{
|
||||||
|
- if (*CTS == 0)
|
||||||
|
- *CTS = clock * N / (128 * freq) * 1000;
|
||||||
|
+ u64 n;
|
||||||
|
+ u32 d;
|
||||||
|
+
|
||||||
|
+ if (*CTS == 0) {
|
||||||
|
+ n = (u64)clock * (u64)N * 1000ULL;
|
||||||
|
+ d = 128 * freq;
|
||||||
|
+ do_div(n, d);
|
||||||
|
+ *CTS = n;
|
||||||
|
+ }
|
||||||
|
DRM_DEBUG("Using ACR timing N=%d CTS=%d for frequency %d\n",
|
||||||
|
N, *CTS, freq);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
43
packages/linux/patches/3.11.3/linux-990.12-RADEON-upstream-fix-02.patch
vendored
Normal file
43
packages/linux/patches/3.11.3/linux-990.12-RADEON-upstream-fix-02.patch
vendored
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
From c8908f579ae9aac33122cfdfffaef30bba0a7697 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alex Deucher <alexander.deucher@amd.com>
|
||||||
|
Date: Fri, 27 Sep 2013 18:19:42 -0400
|
||||||
|
Subject: [PATCH 2/3] drm/radeon: fix N/CTS clock matching for audio
|
||||||
|
|
||||||
|
The drm code that calculates the 1001 clocks rounds up
|
||||||
|
rather than truncating. This allows the table to match
|
||||||
|
properly on those modes.
|
||||||
|
|
||||||
|
See bug:
|
||||||
|
https://bugs.freedesktop.org/show_bug.cgi?id=69675
|
||||||
|
|
||||||
|
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||||
|
---
|
||||||
|
drivers/gpu/drm/radeon/r600_hdmi.c | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||||
|
index 2ce2793..a378081 100644
|
||||||
|
--- a/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||||
|
+++ b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||||
|
@@ -58,15 +58,15 @@ enum r600_hdmi_iec_status_bits {
|
||||||
|
static const struct radeon_hdmi_acr r600_hdmi_predefined_acr[] = {
|
||||||
|
/* 32kHz 44.1kHz 48kHz */
|
||||||
|
/* Clock N CTS N CTS N CTS */
|
||||||
|
- { 25174, 4576, 28125, 7007, 31250, 6864, 28125 }, /* 25,20/1.001 MHz */
|
||||||
|
+ { 25175, 4576, 28125, 7007, 31250, 6864, 28125 }, /* 25,20/1.001 MHz */
|
||||||
|
{ 25200, 4096, 25200, 6272, 28000, 6144, 25200 }, /* 25.20 MHz */
|
||||||
|
{ 27000, 4096, 27000, 6272, 30000, 6144, 27000 }, /* 27.00 MHz */
|
||||||
|
{ 27027, 4096, 27027, 6272, 30030, 6144, 27027 }, /* 27.00*1.001 MHz */
|
||||||
|
{ 54000, 4096, 54000, 6272, 60000, 6144, 54000 }, /* 54.00 MHz */
|
||||||
|
{ 54054, 4096, 54054, 6272, 60060, 6144, 54054 }, /* 54.00*1.001 MHz */
|
||||||
|
- { 74175, 11648, 210937, 17836, 234375, 11648, 140625 }, /* 74.25/1.001 MHz */
|
||||||
|
+ { 74176, 11648, 210937, 17836, 234375, 11648, 140625 }, /* 74.25/1.001 MHz */
|
||||||
|
{ 74250, 4096, 74250, 6272, 82500, 6144, 74250 }, /* 74.25 MHz */
|
||||||
|
- { 148351, 11648, 421875, 8918, 234375, 5824, 140625 }, /* 148.50/1.001 MHz */
|
||||||
|
+ { 148352, 11648, 421875, 8918, 234375, 5824, 140625 }, /* 148.50/1.001 MHz */
|
||||||
|
{ 148500, 4096, 148500, 6272, 165000, 6144, 148500 }, /* 148.50 MHz */
|
||||||
|
{ 0, 4096, 0, 6272, 0, 6144, 0 } /* Other */
|
||||||
|
};
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
50
packages/linux/patches/3.11.3/linux-990.12-RADEON-upstream-fix-03.patch
vendored
Normal file
50
packages/linux/patches/3.11.3/linux-990.12-RADEON-upstream-fix-03.patch
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
From 37396f32fc8c8a4f68e0fd069e4e63ce19786ef4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alex Deucher <alexander.deucher@amd.com>
|
||||||
|
Date: Fri, 27 Sep 2013 18:22:15 -0400
|
||||||
|
Subject: [PATCH 3/3] drm/radeon: use hw generated CTS/N values for audio
|
||||||
|
|
||||||
|
Use the hw generated values rather than calculating
|
||||||
|
them in the driver. There may be some older r6xx
|
||||||
|
asics where this doesn't work correctly. This remains
|
||||||
|
to be seen.
|
||||||
|
|
||||||
|
See bug:
|
||||||
|
https://bugs.freedesktop.org/show_bug.cgi?id=69675
|
||||||
|
|
||||||
|
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||||
|
---
|
||||||
|
drivers/gpu/drm/radeon/evergreen_hdmi.c | 3 +--
|
||||||
|
drivers/gpu/drm/radeon/r600_hdmi.c | 3 +--
|
||||||
|
2 files changed, 2 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/gpu/drm/radeon/evergreen_hdmi.c b/drivers/gpu/drm/radeon/evergreen_hdmi.c
|
||||||
|
index f71ce39..f815c20 100644
|
||||||
|
--- a/drivers/gpu/drm/radeon/evergreen_hdmi.c
|
||||||
|
+++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c
|
||||||
|
@@ -288,8 +288,7 @@ void evergreen_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode
|
||||||
|
/* fglrx clears sth in AFMT_AUDIO_PACKET_CONTROL2 here */
|
||||||
|
|
||||||
|
WREG32(HDMI_ACR_PACKET_CONTROL + offset,
|
||||||
|
- HDMI_ACR_AUTO_SEND | /* allow hw to sent ACR packets when required */
|
||||||
|
- HDMI_ACR_SOURCE); /* select SW CTS value */
|
||||||
|
+ HDMI_ACR_AUTO_SEND); /* allow hw to sent ACR packets when required */
|
||||||
|
|
||||||
|
evergreen_hdmi_update_ACR(encoder, mode->clock);
|
||||||
|
|
||||||
|
diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||||
|
index a378081..2b5f9a7 100644
|
||||||
|
--- a/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||||
|
+++ b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||||
|
@@ -451,8 +451,7 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mod
|
||||||
|
}
|
||||||
|
|
||||||
|
WREG32(HDMI0_ACR_PACKET_CONTROL + offset,
|
||||||
|
- HDMI0_ACR_AUTO_SEND | /* allow hw to sent ACR packets when required */
|
||||||
|
- HDMI0_ACR_SOURCE); /* select SW CTS value */
|
||||||
|
+ HDMI0_ACR_AUTO_SEND); /* allow hw to sent ACR packets when required */
|
||||||
|
|
||||||
|
WREG32(HDMI0_VBI_PACKET_CONTROL + offset,
|
||||||
|
HDMI0_NULL_SEND | /* send null packets when required */
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user