WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-ppc-devel

[XenPPC] [linux-ppc-2.6] [POWERPC][XEN] Use new Xen based Real Time Cloc

To: xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Subject: [XenPPC] [linux-ppc-2.6] [POWERPC][XEN] Use new Xen based Real Time Clock logic in DomUs
From: Xen patchbot-linux-ppc-2.6 <patchbot-linux-ppc-2.6@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 19 Dec 2006 14:30:53 +0000
Delivery-date: Tue, 19 Dec 2006 11:35:16 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-ppc-devel-request@lists.xensource.com?subject=help>
List-id: Xen PPC development <xen-ppc-devel.lists.xensource.com>
List-post: <mailto:xen-ppc-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-ppc-devel-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Jimi Xenidis <jimix@xxxxxxxxxxxxxx>
# Node ID bbf2db4ddf5400e908ee6bf92ac798e5cfed82a0
# Parent  c8d1f32fd7deebb9c15e5dc4ec3bcbd3678d9488
[POWERPC][XEN] Use new Xen based Real Time Clock logic in DomUs

Signed-off-by: Jimi Xenidis <jimix@xxxxxxxxxxxxxx>
---
 arch/powerpc/platforms/xen/Makefile  |    1 
 arch/powerpc/platforms/xen/setup.c   |   10 +--
 arch/powerpc/platforms/xen/setup.h   |    1 
 arch/powerpc/platforms/xen/time.c    |   96 +++++++++++++++++++++++++++++++++++
 include/xen/interface/arch-powerpc.h |    2 
 5 files changed, 104 insertions(+), 6 deletions(-)

diff -r c8d1f32fd7de -r bbf2db4ddf54 arch/powerpc/platforms/xen/Makefile
--- a/arch/powerpc/platforms/xen/Makefile       Wed Nov 22 14:51:54 2006 -0500
+++ b/arch/powerpc/platforms/xen/Makefile       Tue Dec 19 09:22:37 2006 -0500
@@ -3,6 +3,7 @@ obj-y   += hcall.o
 obj-y  += hcall.o
 obj-y  += reboot.o
 obj-y  += setup.o
+obj-y  += time.o
 obj-y  += udbg_xen.o
 obj-y  += xen_guest.o
 obj-y  += xencomm.o
diff -r c8d1f32fd7de -r bbf2db4ddf54 arch/powerpc/platforms/xen/setup.c
--- a/arch/powerpc/platforms/xen/setup.c        Wed Nov 22 14:51:54 2006 -0500
+++ b/arch/powerpc/platforms/xen/setup.c        Tue Dec 19 09:22:37 2006 -0500
@@ -109,12 +109,12 @@ static void __init xen_init_early(void)
        DBG("    console_mfn    %llx\n", xen_start_info->console.domU.mfn);
        DBG("    console_evtchn %x\n", xen_start_info->console.domU.evtchn);
 
+       xen_setup_time(&mach_maple_md);
+
        if (is_initial_xendomain()) {
-               ppc_md.pcibios_fixup            = mach_maple_md.pcibios_fixup;
-               ppc_md.pci_get_legacy_ide_irq   = 
mach_maple_md.pci_get_legacy_ide_irq;
-               ppc_md.get_boot_time            = mach_maple_md.get_boot_time;
-               ppc_md.set_rtc_time             = mach_maple_md.set_rtc_time;
-               ppc_md.get_rtc_time             = mach_maple_md.get_rtc_time;
+               ppc_md.pcibios_fixup = mach_maple_md.pcibios_fixup;
+               ppc_md.pci_get_legacy_ide_irq =
+                       mach_maple_md.pci_get_legacy_ide_irq;
 
                add_preferred_console("ttyS", 0, NULL);
        }
diff -r c8d1f32fd7de -r bbf2db4ddf54 arch/powerpc/platforms/xen/setup.h
--- a/arch/powerpc/platforms/xen/setup.h        Wed Nov 22 14:51:54 2006 -0500
+++ b/arch/powerpc/platforms/xen/setup.h        Tue Dec 19 09:22:37 2006 -0500
@@ -26,3 +26,4 @@ extern struct page *alloc_foreign_page(v
 extern struct page *alloc_foreign_page(void);
 extern void free_foreign_page(struct page *page);
 
+extern void __init xen_setup_time(struct machdep_calls *host_md);
diff -r c8d1f32fd7de -r bbf2db4ddf54 include/xen/interface/arch-powerpc.h
--- a/include/xen/interface/arch-powerpc.h      Wed Nov 22 14:51:54 2006 -0500
+++ b/include/xen/interface/arch-powerpc.h      Tue Dec 19 09:22:37 2006 -0500
@@ -108,7 +108,7 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_guest_conte
 DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
 
 struct arch_shared_info {
-    uint64_t pad[32];
+    uint64_t boot_timebase;
 };
 
 struct arch_vcpu_info {
diff -r c8d1f32fd7de -r bbf2db4ddf54 arch/powerpc/platforms/xen/time.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/arch/powerpc/platforms/xen/time.c Tue Dec 19 09:22:37 2006 -0500
@@ -0,0 +1,96 @@
+#include <linux/module.h>
+#include <linux/time.h>
+#include <linux/rtc.h>
+#include <asm/hypervisor.h>
+#include <asm/machdep.h>
+#include <asm/time.h>
+#include <asm/udbg.h>
+
+#define DEBUG
+
+#ifdef DEBUG
+#define DBG(fmt...) printk(fmt)
+#else
+#define DBG(fmt...)
+#endif
+
+static inline ulong time_from_shared(void)
+{
+       ulong t;
+
+       DBG("tb_freq: %ld\n", ppc_tb_freq);
+       
+       t = mftb() - HYPERVISOR_shared_info->arch.boot_timebase;
+       t /= ppc_tb_freq;
+       t += HYPERVISOR_shared_info->wc_sec;
+
+       return t;
+}
+
+static void (*host_md_get_rtc_time)(struct rtc_time *tm);
+static void xen_get_rtc_time(struct rtc_time *tm)
+{
+       if (is_initial_xendomain()) {
+               host_md_get_rtc_time(tm);
+               return;
+       } else {
+               ulong t;
+
+               t = time_from_shared();
+               to_tm(t, tm);
+       }
+}
+
+static int (*host_md_set_rtc_time)(struct rtc_time *tm);
+static int xen_set_rtc_time(struct rtc_time *tm)
+{
+       ulong sec;
+
+       if (is_initial_xendomain()) {
+               host_md_set_rtc_time(tm);
+               return 0;
+       }
+
+       sec = mktime(tm->tm_year, tm->tm_mon, tm->tm_mday,
+                    tm->tm_hour, tm->tm_min, tm->tm_sec);
+
+       HYPERVISOR_shared_info->wc_sec = sec;
+       HYPERVISOR_shared_info->arch.boot_timebase = mftb();
+
+       return 0;
+}
+
+static unsigned long (*host_md_get_boot_time)(void);
+static unsigned long __init xen_get_boot_time(void)
+{
+       ulong t;
+
+       if (is_initial_xendomain()) {
+               t = host_md_get_boot_time();
+
+               HYPERVISOR_shared_info->wc_sec = t;
+               HYPERVISOR_shared_info->arch.boot_timebase = mftb();
+               DBG("%s: time: %ld\n", __func__, t);
+       } else {
+               t = time_from_shared();
+               DBG("%s: %ld\n", __func__, t);
+       }
+       return t;
+}
+
+void __init xen_setup_time(struct machdep_calls *host_md)
+{
+       ppc_md.get_boot_time = xen_get_boot_time;
+       host_md_get_boot_time = host_md->get_boot_time;
+
+
+       ppc_md.set_rtc_time = xen_set_rtc_time;
+       host_md_set_rtc_time = host_md->set_rtc_time;
+
+
+       ppc_md.get_rtc_time = xen_get_rtc_time;
+       host_md_get_rtc_time = host_md->get_rtc_time;
+}
+
+
+       

_______________________________________________
Xen-ppc-devel mailing list
Xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ppc-devel

<Prev in Thread] Current Thread [Next in Thread>
  • [XenPPC] [linux-ppc-2.6] [POWERPC][XEN] Use new Xen based Real Time Clock logic in DomUs, Xen patchbot-linux-ppc-2 . 6 <=