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

Re: [XenPPC] [PATCH/RFC] Support Xen console=comX option

To: Hollis Blanchard <hollisb@xxxxxxxxxx>
Subject: Re: [XenPPC] [PATCH/RFC] Support Xen console=comX option
From: Amos Waterland <apw@xxxxxxxxxx>
Date: Thu, 10 Aug 2006 13:25:16 -0400
Cc: xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Thu, 10 Aug 2006 10:25:54 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <1155227134.24447.49.camel@xxxxxxxxxxxxxxxxxxxxx>
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>
References: <20060809233714.GA7459@xxxxxxxxxxxxxxxxxxxxx> <1155227134.24447.49.camel@xxxxxxxxxxxxxxxxxxxxx>
Sender: xen-ppc-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.12-2006-07-14
Let Xen/PPC support the console=comX option that Xen/x86 uses, so one
need simply supply CMDLINE="console=com2" on the make invocation to get
proper use of the physical serial port on a JS21.  

We do this by pruning all serial devices from the device tree, and then
initializing both com1 and com2 (like arch/x86/setup.c does).

Note that `setenv direct-serial? true; nvupdate' should in theory help
with this, but it does not work at present, and will only be supported
in some future version of SLOF.  Regardless, it is useful to support the
console=comX option, since there will always be environments where it is
difficult to get access to the firmware console.

Tested on JS20 and JS21 blades.

Signed-off-by: Amos Waterland <apw@xxxxxxxxxx>

---

 Makefile  |    6 ++++--
 boot_of.c |   35 +++++++++++++++++++++--------------
 setup.c   |    4 ++++
 3 files changed, 29 insertions(+), 16 deletions(-)

diff -r 058f2e27476d xen/arch/powerpc/Makefile
--- a/xen/arch/powerpc/Makefile Mon Aug 07 17:49:16 2006 -0500
+++ b/xen/arch/powerpc/Makefile Thu Aug 10 12:40:21 2006 -0400
@@ -83,8 +83,10 @@ physdev.o: ../x86/physdev.c
 
 HDRS += $(wildcard *.h)
 
-CMDLINE = "xen"
-boot_of.o: CFLAGS += -DCMDLINE="\"$(CMDLINE)\""
+# The first token in the arguments will be silently dropped.
+IMAGENAME = xen
+CMDLINE = ""
+boot_of.o: CFLAGS += -DCMDLINE="\"$(IMAGENAME) $(CMDLINE)\""
 
 start.o: boot/start.S
        $(CC) $(CFLAGS) -D__ASSEMBLY__ -c $< -o $@
diff -r 058f2e27476d xen/arch/powerpc/boot_of.c
--- a/xen/arch/powerpc/boot_of.c        Mon Aug 07 17:49:16 2006 -0500
+++ b/xen/arch/powerpc/boot_of.c        Thu Aug 10 13:02:39 2006 -0400
@@ -13,7 +13,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  *
- * Copyright (C) IBM Corp. 2005
+ * Copyright (C) IBM Corp. 2005, 2006
  *
  * Authors: Jimi Xenidis <jimix@xxxxxxxxxxxxxx>
  */
@@ -760,19 +760,27 @@ static int __init boot_of_serial(void *o
     if (n == OF_FAILURE) {
         of_panic("instance-to-package of /chosen/stdout: failed\n");
     }
-
-    /* prune this from the oftree */
-    rc = of_package_to_path(n, buf, sizeof(buf));
-    if (rc == OF_FAILURE) {
-        of_panic("package-to-path of /chosen/stdout: failed\n");
-    }
-    of_printf("Pruning from devtree: %s\n"
-              "  since Xen will be using it for console\n", buf);
-    rc = ofd_prune_path(oftree, buf);
-    if (rc < 0) {
-        of_panic("prune path \"%s\" failed\n", buf);
-    }
     
+    /* Prune all serial devices from the device tree, including the
+     * one pointed to by /chosen/stdout, because a guest domain can
+     * initialize them and in so doing corrupt our console output.
+     */
+    for (p = n; p > 0; p = of_getpeer(p)) {
+        char *str;
+
+        rc = of_package_to_path(p, buf, sizeof(buf));
+        if (rc == OF_FAILURE)
+            of_panic("package-to-path failed\n");
+
+        str = strrchr(buf, '/');
+        if (str == NULL || strncmp(str + 1, "serial@", 7) != 0)
+            continue;
+
+        of_printf("pruning `%s' from devtree\n", buf);
+        rc = ofd_prune_path(oftree, buf);
+        if (rc < 0)
+            of_panic("prune of `%s' failed\n", buf);
+    }
 
     p = of_getparent(n);
     if (p == OF_FAILURE) {
@@ -799,7 +807,6 @@ static int __init boot_of_serial(void *o
     if (rc == OF_FAILURE) {
         of_panic("%s: no location for serial port\n", __func__);
     }
-    ns16550.io_base = val[1];
 
     ns16550.baud = BAUD_AUTO;
     ns16550.data_bits = 8;
diff -r 058f2e27476d xen/arch/powerpc/setup.c
--- a/xen/arch/powerpc/setup.c  Mon Aug 07 17:49:16 2006 -0500
+++ b/xen/arch/powerpc/setup.c  Thu Aug 10 12:40:21 2006 -0400
@@ -214,7 +214,11 @@ static void __init __start_xen(multiboot
     if ((mbi->flags & MBI_CMDLINE) && (mbi->cmdline != 0))
         cmdline_parse(__va((ulong)mbi->cmdline));
 
+    /* We initialise the serial devices very early so we can get debugging. */
+    ns16550.io_base = 0x3f8;
     ns16550_init(0, &ns16550);
+    ns16550.io_base = 0x2f8;
+    ns16550_init(1, &ns16550);
     serial_init_preirq();
 
     init_console();

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