Subject: new evbppc console
To: None <port-powerpc@NetBSD.org>
From: KIYOHARA Takashi <kiyohara@kk.iij4u.or.jp>
List: port-powerpc
Date: 01/12/2004 21:25:10
----Next_Part(Mon_Jan_12_21:25:10_2004_363)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hi!


I wrote new evbppc console for MI/MD.
How is it?

--
kiyohara

----Next_Part(Mon_Jan_12_21:25:10_2004_363)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="console3.diff"

Index: arch/evbppc/evbppc/evbppc_machdep.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbppc/evbppc/evbppc_machdep.c,v
retrieving revision 1.4
diff -c -r1.4 evbppc_machdep.c
*** arch/evbppc/evbppc/evbppc_machdep.c	2003/07/25 11:44:19	1.4
--- arch/evbppc/evbppc/evbppc_machdep.c	2004/01/12 11:52:56
***************
*** 79,85 ****
--- 79,88 ----
  #include <machine/cpu.h>
  #include <machine/bus.h>
  #include <machine/pmap.h>
+ #include <machine/autoconf.h>
  
+ #include <powerpc/ibm4xx/dev/opbvar.h>
+ 
  int fake_mapiodev = 1;
  
  /*
***************
*** 115,118 ****
--- 118,139 ----
  	}
  	pmap_update(pmap_kernel());
  	return (void *)(va + off);
+ }
+ 
+ /*
+  * consinit:
+  * initialize the system console.
+  * XXX - shouldn't deal with this initted thing, but then,
+  * it shouldn't be called from initppc either.
+  */
+ void
+ consinit()
+ {
+ 	(*consinit_machdep)();
+ }
+ 
+ void
+ generic_cnattach(int conspeed, int com_freq, int comcnmode)
+ {
+ 	com_opb_cnattach(conspeed, com_freq, comcnmode);
  }
Index: arch/evbppc/obs405/consinit.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbppc/obs405/consinit.c,v
retrieving revision 1.1
diff -c -r1.1 consinit.c
*** arch/evbppc/obs405/consinit.c	2003/09/23 14:45:14	1.1
--- arch/evbppc/obs405/consinit.c	2004/01/12 11:52:57
***************
*** 29,61 ****
  #include <sys/cdefs.h>
  __KERNEL_RCSID(0, "$NetBSD: consinit.c,v 1.1 2003/09/23 14:45:14 shige Exp $");
  
- #include "opt_kgdb.h"
- 
  #include <sys/param.h>
  #include <sys/systm.h>
  #include <sys/device.h>
  #include <machine/bus.h>
  
- #include <powerpc/ibm4xx/ibm405gp.h>
- #include <powerpc/ibm4xx/dev/opbvar.h>
- 
- #include "com.h"
- #if (NCOM > 0)
- #include <sys/termios.h>
  #include <dev/ic/comreg.h>
- #include <dev/ic/comvar.h>
- #endif
- 
- #include <dev/cons.h>
- 
- #ifndef CONSDEVNAME
- #define CONSDEVNAME "com"
- #endif
  
- #if (NCOM > 0)
- #ifndef CONADDR
- #define CONADDR IBM405GP_UART0_BASE
- #endif
  #ifndef CONSPEED
  #define CONSPEED B9600	/*  */
  // #define CONSPEED B115200	/* 9600 is too slow for my taste */
--- 29,44 ----
  #include <sys/cdefs.h>
  __KERNEL_RCSID(0, "$NetBSD: consinit.c,v 1.1 2003/09/23 14:45:14 shige Exp $");
  
  #include <sys/param.h>
  #include <sys/systm.h>
  #include <sys/device.h>
+ #include <sys/termios.h>
  #include <machine/bus.h>
+ #include <machine/autoconf.h>
+ #include <machine/obs405.h>
  
  #include <dev/ic/comreg.h>
  
  #ifndef CONSPEED
  #define CONSPEED B9600	/*  */
  // #define CONSPEED B115200	/* 9600 is too slow for my taste */
***************
*** 63,139 ****
  #ifndef CONMODE
  #define CONMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
  #endif
- int comcnmode = CONMODE;
- #endif /* NCOM */
- 
- #ifdef KGDB
- #ifndef KGDB_DEVNAME
- #define KGDB_DEVNAME "com"
- #endif
- char kgdb_devname[] = KGDB_DEVNAME;
- 
- #if (NCOM > 1)
- #ifndef KGDB_DEVADDR
- #define KGDB_DEVADDR  UART1_BASE
- #endif
- int comkgdbaddr = KGDB_DEVADDR;
- 
- #ifndef KGDB_DEVRATE
- #define KGDB_DEVRATE CONSPEED
- #endif
- int comkgdbrate = KGDB_DEVRATE;
- 
- #ifndef KGDB_DEVMODE
- #define KGDB_DEVMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
- #endif
- int comkgdbmode = KGDB_DEVMODE;
- 
- #endif /* NCOM */
  
- #endif /* KGDB */
  
- /*
-  * consinit:
-  * initialize the system console.
-  * XXX - shouldn't deal with this initted thing, but then,
-  * it shouldn't be called from initppc either.
-  */
  void
! consinit(void)
  {
! 	static int initted = 0;
! #if (NCOM > 0)
! 	bus_space_tag_t tag;
! #endif
! 
! 	if (initted)
! 		return;
! 	initted = 1;
! 
! #if (NCOM > 0)
! 	/* We *know* the com-console attaches to opb */
! 	tag = opb_get_bus_space_tag();
  
! 	if (comcnattach(tag, CONADDR, CONSPEED, COM_FREQ*4,
! 	    COM_TYPE_NORMAL, comcnmode))
! 		panic("can't init serial console @%x", CONADDR);
! 	else
! 		return;
! #endif
! 	panic("console device missing -- serial console not in kernel");
! 	/* Of course, this is moot if there is no console... */
  }
- 
- #ifdef KGDB
- void
- kgdb_port_init(void)
- {
- #if (NCOM > 0)
- 	if(!strcmp(kgdb_devname, "com")) {
- 		bus_space_tag_t tag = opb_get_bus_space_tag();
- 		com_kgdb_attach(tag, comkgdbaddr, comkgdbrate, COM_FREQ * 4,
- 		    COM_TYPE_NORMAL, comkgdbmode);
- 	}
- #endif
- }
- #endif
--- 46,57 ----
  #ifndef CONMODE
  #define CONMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
  #endif
  
  
  void
! consinit_obs405(void)
  {
! 	com_freq = COM_FREQ * 4;
  
! 	generic_cnattach(CONSPEED, com_freq, CONMODE);
  }
Index: arch/evbppc/obs405/machdep.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbppc/obs405/machdep.c,v
retrieving revision 1.1
diff -c -r1.1 machdep.c
*** arch/evbppc/obs405/machdep.c	2003/09/23 14:45:14	1.1
--- arch/evbppc/obs405/machdep.c	2004/01/12 11:52:57
***************
*** 100,105 ****
--- 100,107 ----
  #include <machine/bus.h>
  #include <machine/trap.h>
  #include <machine/powerpc.h>
+ #include <machine/autoconf.h>
+ #include <machine/obs405.h>
  #include <powerpc/spr.h>
  #include <powerpc/ibm4xx/dcr405gp.h>
  
***************
*** 129,134 ****
--- 131,137 ----
  
  	ibm4xx_init_board_data(info_block, startkernel);
  
+ 	consinit_machdep = consinit_obs405;
  	ibm4xx_init((void (*)(void))ext_intr);
  
  	/*
Index: arch/powerpc/ibm4xx/ibm4xxgpx_autoconf.c
===================================================================
RCS file: /cvsroot/src/sys/arch/powerpc/ibm4xx/ibm4xxgpx_autoconf.c,v
retrieving revision 1.1
diff -c -r1.1 ibm4xxgpx_autoconf.c
*** arch/powerpc/ibm4xx/ibm4xxgpx_autoconf.c	2003/09/24 11:47:02	1.1
--- arch/powerpc/ibm4xx/ibm4xxgpx_autoconf.c	2004/01/12 11:53:04
***************
*** 46,51 ****
--- 46,52 ----
  
  struct device *booted_device;
  int booted_partition;
+ int com_freq;
  
  /*
   * List of port-specific devices to attach to the processor local bus.
***************
*** 101,110 ****
  	if (strcmp(dev->dv_cfdata->cf_name, "com") == 0 &&
  	    strcmp(parent->dv_cfdata->cf_name, "opb") == 0) {
  		/* Set the frequency of the on-chip UART. */
- 		int freq = COM_FREQ * 6;
- 
  		if (prop_set(dev_propdb, dev, "frequency",
! 			     &freq, sizeof(freq), PROP_INT, 0) != 0)
  			printf("WARNING: unable to set frequency "
  			    "property for %s\n", dev->dv_xname);
  		return;
--- 102,109 ----
  	if (strcmp(dev->dv_cfdata->cf_name, "com") == 0 &&
  	    strcmp(parent->dv_cfdata->cf_name, "opb") == 0) {
  		/* Set the frequency of the on-chip UART. */
  		if (prop_set(dev_propdb, dev, "frequency",
! 			     &com_freq, sizeof(com_freq), PROP_INT, 0) != 0)
  			printf("WARNING: unable to set frequency "
  			    "property for %s\n", dev->dv_xname);
  		return;
Index: arch/powerpc/ibm4xx/dev/com_opb.c
===================================================================
RCS file: /cvsroot/src/sys/arch/powerpc/ibm4xx/dev/com_opb.c,v
retrieving revision 1.11
diff -c -r1.11 com_opb.c
*** arch/powerpc/ibm4xx/dev/com_opb.c	2003/07/15 02:54:44	1.11
--- arch/powerpc/ibm4xx/dev/com_opb.c	2004/01/12 11:53:04
***************
*** 38,43 ****
--- 38,45 ----
  #include <sys/cdefs.h>
  __KERNEL_RCSID(0, "$NetBSD: com_opb.c,v 1.11 2003/07/15 02:54:44 lukem Exp $");
  
+ #include "opt_kgdb.h"
+ 
  #include <sys/param.h>
  #include <sys/device.h>
  #include <sys/tty.h>
***************
*** 47,57 ****
--- 49,100 ----
  
  #include <machine/cpu.h>
  
+ #include <powerpc/ibm4xx/ibm405gp.h>
  #include <powerpc/ibm4xx/dev/opbvar.h>
  
+ #include <dev/cons.h>
  #include <dev/ic/comreg.h>
  #include <dev/ic/comvar.h>
  
+ #include "com.h"
+ 
+ #ifndef CONSDEVNAME
+ #define CONSDEVNAME "com"
+ #endif
+ 
+ #if (NCOM > 0)
+ #ifndef CONADDR
+ #define CONADDR IBM405GP_UART0_BASE
+ #endif
+ #endif /* NCOM */
+ 
+ #ifdef KGDB
+ #ifndef KGDB_DEVNAME
+ #define KGDB_DEVNAME "com"
+ #endif
+ char kgdb_devname[] = KGDB_DEVNAME;
+ 
+ #if (NCOM > 1)
+ #ifndef KGDB_DEVADDR
+ #define KGDB_DEVADDR  UART1_BASE
+ #endif
+ int comkgdbaddr = KGDB_DEVADDR;
+ 
+ #ifndef KGDB_DEVRATE
+ #define KGDB_DEVRATE CONSPEED
+ #endif
+ int comkgdbrate = KGDB_DEVRATE;
+ 
+ #ifndef KGDB_DEVMODE
+ #define KGDB_DEVMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1
+ */
+ #endif
+ int comkgdbmode = KGDB_DEVMODE;
+ 
+ #endif /* NCOM */
+ 
+ #endif /* KGDB */
+ 
  struct com_opb_softc {
  	struct com_softc sc_com;
  	void *sc_ih;
***************
*** 63,68 ****
--- 106,137 ----
  CFATTACH_DECL(com_opb, sizeof(struct com_opb_softc),
      com_opb_probe, com_opb_attach, NULL, NULL);
  
+ void
+ com_opb_cnattach(int conspeed, int com_freq, int comcnmode)
+ {
+ 	static int initted = 0;
+ #if (NCOM > 0)
+ 	bus_space_tag_t tag;
+ #endif
+ 
+ 	if (initted)
+ 		return;
+ 	initted = 1;
+ 
+ #if (NCOM > 0)
+ 	/* We *know* the com-console attaches to opb */
+ 	tag = opb_get_bus_space_tag();
+ 
+ 	if (comcnattach(
+ 	    tag, CONADDR, conspeed, com_freq, COM_TYPE_NORMAL, comcnmode))
+ 		panic("can't init serial console @%x", CONADDR);
+ 	else
+ 		return;
+ #endif
+ 	panic("console device missing -- serial console not in kernel");
+ 	/* Of course, this is moot if there is no console... */
+ }
+ 
  int
  com_opb_probe(struct device *parent, struct cfdata *cf, void *aux)
  {
***************
*** 100,102 ****
--- 169,185 ----
  
  	intr_establish(oaa->opb_irq, IST_LEVEL, IPL_SERIAL, comintr, sc);
  }
+ 
+ #ifdef KGDB
+ void
+ kgdb_port_init(void)
+ {
+ #if (NCOM > 0)
+ 	if(!strcmp(kgdb_devname, "com")) {
+ 		bus_space_tag_t tag = opb_get_bus_space_tag();
+ 		com_kgdb_attach(tag, comkgdbaddr, comkgdbrate, com_freq,
+ 		    COM_TYPE_NORMAL, comkgdbmode);
+ 	}
+ #endif
+ }
+ #endif
Index: arch/powerpc/ibm4xx/dev/opbvar.h
===================================================================
RCS file: /cvsroot/src/sys/arch/powerpc/ibm4xx/dev/opbvar.h,v
retrieving revision 1.2
diff -c -r1.2 opbvar.h
*** arch/powerpc/ibm4xx/dev/opbvar.h	2003/07/25 10:12:44	1.2
--- arch/powerpc/ibm4xx/dev/opbvar.h	2004/01/12 11:53:05
***************
*** 47,49 ****
--- 47,51 ----
  
  /* For use before opb_attach() is called */
  extern bus_space_tag_t opb_get_bus_space_tag(void);
+ 
+ void com_opb_cnattach(int, int, int);

----Next_Part(Mon_Jan_12_21:25:10_2004_363)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="autoconf.h"

/*      $NetBSD$        */

/*
 * Copyright (c) 2003
 *     KIYOHARA Takashi.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
#ifndef _EVBPPC_AUTOCONF_H_
#define	_EVBPPC_AUTOCONF_H_

void (*consinit_machdep) __P((void));
void generic_cnattach(int, int, int);

extern int com_freq;

#endif	/* _EVBPPC_AUTOCONF_H_ */

----Next_Part(Mon_Jan_12_21:25:10_2004_363)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="obs405.h"

/*      $NetBSD$        */

/*
 * Copyright (c) 2003
 *     KIYOHARA Takashi.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
#ifndef _OBS405_H
#define	_OBS405_H

void consinit_obs405(void);

#endif	/* _OBS405_H */

----Next_Part(Mon_Jan_12_21:25:10_2004_363)----