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: xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Subject: Re: [XenPPC] [PATCH/RFC] Support Xen console=comX option
From: Amos Waterland <apw@xxxxxxxxxx>
Date: Wed, 9 Aug 2006 22:24:27 -0400
Delivery-date: Wed, 09 Aug 2006 19:24:38 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <20060809233714.GA7459@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>
Sender: xen-ppc-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.12-2006-07-14
On Wed, Aug 09, 2006 at 07:37:14PM -0400, Amos Waterland wrote:
> The below patch allows Xen/PPC to support the console=comX option 
> that Xen/x86 uses.  With this patch applied, one need simply 
> supply CMDLINE="console=com2" on the make invocation to get proper use
> of the physical serial port on a JS21.
> 
> I will soon split out the pieces for submission, but I am posting this
> for now for review of the basic approach.  I'd also like to ask that
> someone with a Maple-D apply this patch, undefine BROKEN_SLOF, and tell
> me whether they see a panic because we try to prune a path we have just
> pruned. 

I had an error in my logic that was caching the package-to-path
conversion.  Also, the exit condition from the loop walking the peer
list should be zero or negative.  Thanks to Jimi for pointing this out.
SLOF is not broken :)

Here is a corrected version of the patch.  Tested on JS20 and JS21 blades.

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

---

 Makefile  |    6 ++++--
 boot_of.c |   45 ++++++++++++++++++++++++++++++++-------------
 setup.c   |    4 ++++
 3 files changed, 40 insertions(+), 15 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 Wed Aug 09 22:07:18 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        Wed Aug 09 22:16:51 2006 -0400
@@ -760,19 +760,15 @@ 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);
-    }
     
+    for (p = n; p > 0; p = of_getpeer(p)) {
+        rc = of_package_to_path(p, buf, sizeof(buf));
+        if (rc == OF_FAILURE) of_panic("package-to-path failed\n");
+        if (strstr(buf, "serial@") == NULL) 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 +795,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  Wed Aug 09 22:07:18 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