]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 11 Jul 2012 15:45:46 +0000 (08:45 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 11 Jul 2012 15:45:46 +0000 (08:45 -0700)
added patches:
omapdss-use-dsi_fifo_bug-workaround-only-for-manual-update-displays.patch

queue-3.4/omapdss-use-dsi_fifo_bug-workaround-only-for-manual-update-displays.patch [new file with mode: 0644]
queue-3.4/series

diff --git a/queue-3.4/omapdss-use-dsi_fifo_bug-workaround-only-for-manual-update-displays.patch b/queue-3.4/omapdss-use-dsi_fifo_bug-workaround-only-for-manual-update-displays.patch
new file mode 100644 (file)
index 0000000..1169627
--- /dev/null
@@ -0,0 +1,85 @@
+From 3568f2a46f2a73bab18c914df06afd98a97e0e0e Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Tue, 15 May 2012 15:31:01 +0300
+Subject: OMAPDSS: use DSI_FIFO_BUG workaround only for manual update displays
+
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+
+commit 3568f2a46f2a73bab18c914df06afd98a97e0e0e upstream.
+
+There is a problem related to DSS FIFO thresholds and power management
+on OMAP3. It seems that when the full PM hits in, we get underflows. The
+core reason is unknown, but after experiments it looks like only
+particular FIFO thresholds work correctly.
+
+This bug is related to an earlier patch, which added special FIFO
+threshold configuration for OMAP3, because DSI command mode output
+didn't work with the normal threshold configuration.
+
+However, as the above work-around worked fine for other output types
+also, we currently always configure thresholds in this special way on
+OMAP3. In theory there should be negligible difference with this special
+way and the standard way. The first paragraph explains what happens in
+practice.
+
+This patch changes the driver to use the special threshold configuration
+only when the output is a manual update display on OMAP3. This does
+include RFBI displays also, and although it hasn't been tested (no
+boards using RFBI) I suspect the similar behaviour is present there
+also, as the DISPC side should work similarly for DSI command mode and
+RFBI.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Cc: Joe Woodward <jw@terrafix.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/video/omap2/dss/apply.c |    2 +-
+ drivers/video/omap2/dss/dispc.c |    5 +++--
+ drivers/video/omap2/dss/dss.h   |    3 ++-
+ 3 files changed, 6 insertions(+), 4 deletions(-)
+
+--- a/drivers/video/omap2/dss/apply.c
++++ b/drivers/video/omap2/dss/apply.c
+@@ -927,7 +927,7 @@ static void dss_ovl_setup_fifo(struct om
+       dssdev = ovl->manager->device;
+       dispc_ovl_compute_fifo_thresholds(ovl->id, &fifo_low, &fifo_high,
+-                      use_fifo_merge);
++                      use_fifo_merge, ovl_manual_update(ovl));
+       dss_apply_ovl_fifo_thresholds(ovl, fifo_low, fifo_high);
+ }
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -1063,7 +1063,8 @@ void dispc_enable_fifomerge(bool enable)
+ }
+ void dispc_ovl_compute_fifo_thresholds(enum omap_plane plane,
+-              u32 *fifo_low, u32 *fifo_high, bool use_fifomerge)
++              u32 *fifo_low, u32 *fifo_high, bool use_fifomerge,
++              bool manual_update)
+ {
+       /*
+        * All sizes are in bytes. Both the buffer and burst are made of
+@@ -1091,7 +1092,7 @@ void dispc_ovl_compute_fifo_thresholds(e
+        * combined fifo size
+        */
+-      if (dss_has_feature(FEAT_OMAP3_DSI_FIFO_BUG)) {
++      if (manual_update && dss_has_feature(FEAT_OMAP3_DSI_FIFO_BUG)) {
+               *fifo_low = ovl_fifo_size - burst_size * 2;
+               *fifo_high = total_fifo_size - burst_size;
+       } else {
+--- a/drivers/video/omap2/dss/dss.h
++++ b/drivers/video/omap2/dss/dss.h
+@@ -424,7 +424,8 @@ int dispc_calc_clock_rates(unsigned long
+ void dispc_ovl_set_fifo_threshold(enum omap_plane plane, u32 low, u32 high);
+ void dispc_ovl_compute_fifo_thresholds(enum omap_plane plane,
+-              u32 *fifo_low, u32 *fifo_high, bool use_fifomerge);
++              u32 *fifo_low, u32 *fifo_high, bool use_fifomerge,
++              bool manual_update);
+ int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,
+               bool ilace, bool replication);
+ int dispc_ovl_enable(enum omap_plane plane, bool enable);
index 65daab669cfa0af317a29d1596297c4f027a5d75..5cf04fbb4631b49b2a16172988723496ae7a4d02 100644 (file)
@@ -137,3 +137,4 @@ ecryptfs-properly-check-for-o_rdonly-flag-before-doing-privileged-open.patch
 mm-memblock-cleanup-on-duplicate-va-pa-conversion.patch
 mm-memblock-fix-memory-leak-on-extending-regions.patch
 mm-memblock-fix-overlapping-allocation-when-doubling-reserved-array.patch
+omapdss-use-dsi_fifo_bug-workaround-only-for-manual-update-displays.patch