]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 27 Jun 2014 21:47:21 +0000 (14:47 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 27 Jun 2014 21:47:21 +0000 (14:47 -0700)
added patches:
matroxfb-perform-a-dummy-read-of-m_status.patch

queue-3.10/matroxfb-perform-a-dummy-read-of-m_status.patch [new file with mode: 0644]
queue-3.10/series

diff --git a/queue-3.10/matroxfb-perform-a-dummy-read-of-m_status.patch b/queue-3.10/matroxfb-perform-a-dummy-read-of-m_status.patch
new file mode 100644 (file)
index 0000000..71410d5
--- /dev/null
@@ -0,0 +1,40 @@
+From 972754cfaee94d6e25acf94a497bc0a864d91b7e Mon Sep 17 00:00:00 2001
+From: Mikulas Patocka <mpatocka@redhat.com>
+Date: Thu, 15 May 2014 06:58:24 -0400
+Subject: matroxfb: perform a dummy read of M_STATUS
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+commit 972754cfaee94d6e25acf94a497bc0a864d91b7e upstream.
+
+I had occasional screen corruption with the matrox framebuffer driver and
+I found out that the reason for the corruption is that the hardware
+blitter accesses the videoram while it is being written to.
+
+The matrox driver has a macro WaitTillIdle() that should wait until the
+blitter is idle, but it sometimes doesn't work. I added a dummy read
+mga_inl(M_STATUS) to WaitTillIdle() to fix the problem. The dummy read
+will flush the write buffer in the PCI chipset, and the next read of
+M_STATUS will return the hardware status.
+
+Since applying this patch, I had no screen corruption at all.
+
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/video/matrox/matroxfb_base.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/video/matrox/matroxfb_base.h
++++ b/drivers/video/matrox/matroxfb_base.h
+@@ -698,7 +698,7 @@ void matroxfb_unregister_driver(struct m
+ #define mga_fifo(n)   do {} while ((mga_inl(M_FIFOSTATUS) & 0xFF) < (n))
+-#define WaitTillIdle()        do {} while (mga_inl(M_STATUS) & 0x10000)
++#define WaitTillIdle()        do { mga_inl(M_STATUS); do {} while (mga_inl(M_STATUS) & 0x10000); } while (0)
+ /* code speedup */
+ #ifdef CONFIG_FB_MATROX_MILLENIUM
index 5467d47256e03e52ac76cb5899902146709f735d..a81ca22f3f5678c2b645a07a7fba1fe97e9a040e 100644 (file)
@@ -23,3 +23,4 @@ idr-fix-overflow-bug-during-maximum-id-calculation-at-maximum-height.patch
 s390-lowcore-reserve-96-bytes-for-irb-in-lowcore.patch
 ext4-fix-zeroing-of-page-during-writeback.patch
 ext4-fix-wrong-assert-in-ext4_mb_normalize_request.patch
+matroxfb-perform-a-dummy-read-of-m_status.patch