linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Johannes Berg <johannes@sipsolutions.net>
To: linuxppc-dev@ozlabs.org
Subject: [PATCH 2/3] powermac: proper time of day after resume
Date: Wed, 13 Dec 2006 13:38:21 +0100	[thread overview]
Message-ID: <20061213123945.386891000@sipsolutions.net> (raw)
In-Reply-To: 20061213123819.403286000@sipsolutions.net

This patch converts the time restore code from a PMU notifier to a regular
sys device so I can profit from it even when I don't suspend through the
PMU, i.e. suspend to disk.

Also another step towards dropping pmu_sleep_notifier completely.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>

---
Tested on my powermac with my suspend code there but not yet on the
powerbook.

It seems that this could be done in the generic instead of the arch
dependent code since we have a machine op for getting the boot time...
Should we?

--- linux-2.6-git.orig/arch/powerpc/platforms/powermac/time.c	2006-12-12 16:54:10.573639512 +0100
+++ linux-2.6-git/arch/powerpc/platforms/powermac/time.c	2006-12-12 16:54:16.805639512 +0100
@@ -298,36 +298,56 @@ int __init via_calibrate_decr(void)
 #endif
 
 #ifdef CONFIG_PM
+
+static unsigned long time_diff;
+
 /*
  * Reset the time after a sleep.
  */
-static int
-time_sleep_notify(struct pmu_sleep_notifier *self, int when)
+static int timer_resume(struct sys_device *dev)
+{
+	struct timespec tv;
+
+	tv.tv_sec = pmac_get_boot_time() + time_diff;
+	tv.tv_nsec = 0;
+	do_settimeofday(&tv);
+
+	return 0;
+}
+
+static int timer_suspend(struct sys_device *dev, pm_message_t state)
 {
-	static unsigned long time_diff;
 	unsigned long flags;
 	unsigned long seq;
-	struct timespec tv;
 
-	switch (when) {
-	case PBOOK_SLEEP_NOW:
-		do {
-			seq = read_seqbegin_irqsave(&xtime_lock, flags);
-			time_diff = xtime.tv_sec - pmac_get_boot_time();
-		} while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
-		break;
-	case PBOOK_WAKE:
-		tv.tv_sec = pmac_get_boot_time() + time_diff;
-		tv.tv_nsec = 0;
-		do_settimeofday(&tv);
-		break;
-	}
-	return PBOOK_SLEEP_OK;
+	do {
+		seq = read_seqbegin_irqsave(&xtime_lock, flags);
+		time_diff = xtime.tv_sec - pmac_get_boot_time();
+	} while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
+
+	return 0;
 }
 
-static struct pmu_sleep_notifier time_sleep_notifier = {
-	time_sleep_notify, SLEEP_LEVEL_MISC,
+static struct sysdev_class timer_sysclass = {
+	.resume = timer_resume,
+	.suspend = timer_suspend,
+	set_kset_name("timer"),
+};
+
+static struct sys_device device_timer = {
+	.id = 0,
+	.cls = &timer_sysclass,
 };
+
+static int time_init_device(void)
+{
+	int error = sysdev_class_register(&timer_sysclass);
+	if (!error)
+		error = sysdev_register(&device_timer);
+	return error;
+}
+
+device_initcall(time_init_device);
 #endif /* CONFIG_PM */
 
 /*
@@ -335,11 +355,6 @@ static struct pmu_sleep_notifier time_sl
  */
 void __init pmac_calibrate_decr(void)
 {
-#if defined(CONFIG_PM) && defined(CONFIG_ADB_PMU)
-	/* XXX why here? */
-	pmu_register_sleep_notifier(&time_sleep_notifier);
-#endif
-
 	generic_calibrate_decr();
 
 #ifdef CONFIG_PPC32

--

  parent reply	other threads:[~2006-12-13 13:01 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-13 12:38 [PATCH 0/3] some preparations for suspend on G5 powermac Johannes Berg
2006-12-13 12:38 ` [PATCH 1/3] windfarm: dont die on suspend thread signal Johannes Berg
2007-01-24  6:32   ` Benjamin Herrenschmidt
2006-12-13 12:38 ` Johannes Berg [this message]
2007-01-24  6:34   ` [PATCH 2/3] powermac: proper time of day after resume Benjamin Herrenschmidt
2007-01-24  8:46     ` Johannes Berg
2007-01-24  8:51       ` Benjamin Herrenschmidt
2007-01-24  8:54     ` Gabriel Paubert
2007-01-24  9:32       ` Benjamin Herrenschmidt
2007-01-24 10:36         ` Gabriel Paubert
2007-01-24 14:23           ` Segher Boessenkool
2007-01-24 21:44             ` Benjamin Herrenschmidt
2007-01-24 22:24               ` Segher Boessenkool
2007-01-24 22:35                 ` Benjamin Herrenschmidt
2007-01-24 23:21                   ` Segher Boessenkool
2007-01-25  7:39               ` Michel Dänzer
2007-01-25  8:06                 ` Benjamin Herrenschmidt
2007-01-25  8:10                   ` Michel Dänzer
2007-01-25 11:09             ` Gabriel Paubert
2007-01-25 12:54               ` Johannes Berg
2007-01-26 14:35     ` Johannes Berg
2007-02-01 19:16     ` [PATCH] " Johannes Berg
2007-02-02 12:19       ` Johannes Berg
2007-02-03  2:41       ` Michael Ellerman
2007-02-03 17:37         ` Johannes Berg
2007-05-02  4:45       ` Paul Mackerras
2007-05-02  4:47         ` Paul Mackerras
2007-05-02  8:26         ` Johannes Berg
2007-05-02 14:25         ` [PATCH] powerpc timer sysdev: use mktime Johannes Berg
2007-05-23 15:28           ` Johannes Berg
2007-05-28  4:33             ` Paul Mackerras
2006-12-13 12:38 ` [PATCH 3/3] powerpc: fix comment in kernel/irq.c Johannes Berg
2006-12-13 13:13   ` Johannes Berg
2006-12-19  5:40   ` Paul Mackerras
2006-12-19 18:29     ` Johannes Berg
2007-01-24  6:35   ` Benjamin Herrenschmidt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20061213123945.386891000@sipsolutions.net \
    --to=johannes@sipsolutions.net \
    --cc=linuxppc-dev@ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).