Patchwork [3.5.yuz,extended,stable] Patch "viafb: don't touch clock state on OLPC XO-1.5" has been added to staging queue

mail settings
Submitter Herton Ronaldo Krzesinski
Date Nov. 15, 2012, 5:47 a.m.
Message ID <>
Download mbox | patch
Permalink /patch/199148/
State New
Headers show


Herton Ronaldo Krzesinski - Nov. 15, 2012, 5:47 a.m.
This is a note to let you know that I have just added a patch titled

    viafb: don't touch clock state on OLPC XO-1.5

to the linux-3.5.y-queue branch of the 3.5.yuz extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.yuz tree, see



From 03757f63cadc0a357b6c17a91c6587a2f6fcac7e Mon Sep 17 00:00:00 2001
From: Daniel Drake <>
Date: Tue, 4 Sep 2012 11:45:32 -0400
Subject: [PATCH] viafb: don't touch clock state on OLPC XO-1.5

commit 012a1211845eab69a5488d59eb87d24cc518c627 upstream.

As detailed in the thread titled "viafb PLL/clock tweaking causes XO-1.5
instability," enabling or disabling the IGA1/IGA2 clocks causes occasional
stability problems during suspend/resume cycles on this platform.

This is rather odd, as the documentation suggests that clocks have two
states (on/off) and the default (stable) configuration is configured to
enable the clock only when it is needed. However, explicitly enabling *or*
disabling the clock triggers this system instability, suggesting that there
is a 3rd state at play here.

Leaving the clock enable/disable registers alone solves this problem.
This fixes spurious reboots during suspend/resume behaviour introduced by
commit b692a63a.

Signed-off-by: Daniel Drake <>
Signed-off-by: Florian Tobias Schandinat <>
Signed-off-by: Herton Ronaldo Krzesinski <>
 drivers/video/via/via_clock.c |   19 +++++++++++++++++++
 1 file changed, 19 insertions(+)



diff --git a/drivers/video/via/via_clock.c b/drivers/video/via/via_clock.c
index af8f26b..db1e392 100644
--- a/drivers/video/via/via_clock.c
+++ b/drivers/video/via/via_clock.c
@@ -25,6 +25,7 @@ 

 #include <linux/kernel.h>
 #include <linux/via-core.h>
+#include <asm/olpc.h>
 #include "via_clock.h"
 #include "global.h"
 #include "debug.h"
@@ -289,6 +290,10 @@  static void dummy_set_pll(struct via_pll_config config)
 	printk(KERN_INFO "Using undocumented set PLL.\n%s", via_slap);

+static void noop_set_clock_state(u8 state)
 void via_clock_init(struct via_clock *clock, int gfx_chip)
 	switch (gfx_chip) {
@@ -346,4 +351,18 @@  void via_clock_init(struct via_clock *clock, int gfx_chip)

+	if (machine_is_olpc()) {
+		/* The OLPC XO-1.5 cannot suspend/resume reliably if the
+		 * IGA1/IGA2 clocks are set as on or off (memory rot
+		 * occasionally happens during suspend under such
+		 * configurations).
+		 *
+		 * The only known stable scenario is to leave this bits as-is,
+		 * which in their default states are documented to enable the
+		 * clock only when it is needed.
+		 */
+		clock->set_primary_clock_state = noop_set_clock_state;
+		clock->set_secondary_clock_state = noop_set_clock_state;
+	}