Subject: Re: 2.1 Kernels do not boot
To: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
From: Alex Pelts <alexp@broadcom.com>
List: port-cobalt
Date: 11/24/2005 12:13:24
Izumi,
The patched kernel that you provided worked! It boots just fine on my 
Qube. Than you so much for that! Next I will try your patch. Is it 
possible to include the patch in the main source?

So far I could successfuly create VmWare virtual machine, populate it 
with NetBSD i386 and serve nfs root and dhcp out of it. Qube boots 
nicely and it could serve as a recovery and install environment. Now I 
just need to work out the details and package it nicely.

Thanks,
Alex


Izumi Tsutsui wrote:
> In article <43841337.2090302@broadcom.com>
> alexp@broadcom.com wrote:
> 
> 
>>>I'll try to build INSTALL-like kernel on 2.x and check how it goes
>>>on my RaQ2. If it works, I'll send a pullup request for netbsd-2 branch.
>>
>>Thanks for that.
> 
> 
> Okay, it looks there is a problem around console initialization.
> (consinit() called more than once?)
> Please try the attached patch (for netbsd-2) or this kernel:
> http://www.ceres.dti.ne.jp/~tsutsui/netbsd/netbsd-cobalt-INSTALL-2.1_STABLE.gz
> 
> 
>>>I see, maybe the way to go is to add kloader(4) support to
>>>cobalt kernels. It should be trivial though I have no idea
>>>how much work is needed for now.
>>
>>I will look in to that, I am curious about that too.
> 
> 
> Maybe src/sys/arch/hpcmips/hpcmips/kloader* files would be a good start.
> 
> 
>>I did use complete 2.1 userland that I downloaded from netbsd torrent. I 
>>downloaded iso image and used that to install 2.1
>>The config crashes like this - when I try to run it with or without 
>>parameters it dumps core with following message:
>>Bus error (core dumped)
> 
> 
> Hmm, does it always crash with the same error?
> What is the kernel version (uname -a)?
> What do ktrace(1)/kdump(1) say on the command?
> ---
> Izumi Tsutsui
> 
> 
> --- sys/arch/cobalt/cobalt/console.c.orig	2004-01-07 21:43:43.000000000 +0900
> +++ sys/arch/cobalt/cobalt/console.c	2005-11-23 15:16:47.000000000 +0900
> @@ -29,15 +29,9 @@
>  __KERNEL_RCSID(0, "$NetBSD: console.c,v 1.7 2004/01/07 12:43:43 cdi Exp $");
>  
>  #include <sys/param.h>
> -#include <sys/user.h>
> -#include <sys/uio.h>
>  #include <sys/systm.h>
> -#include <sys/kernel.h>
>  #include <sys/device.h>
>  #include <sys/conf.h>
> -#include <sys/proc.h>
> -#include <sys/tty.h>
> -#include <sys/termios.h>
>  
>  #include <machine/bus.h>
>  #include <machine/nvram.h>
> @@ -45,71 +39,33 @@
>  
>  #include <dev/cons.h>
>  
> -#include <dev/ic/comreg.h>
> -#include <dev/ic/comvar.h>
> +#include <cobalt/dev/com_mainbusvar.h>
>  
> -#include "com.h"
> +#include "com_mainbus.h"
>  #include "nullcons.h"
>  
> -dev_type_cnprobe(comcnprobe);
> -dev_type_cninit(comcninit);
> -
>  int	console_present = 0;	/* Do we have a console? */
>  
>  struct	consdev	constab[] = {
> -#if NCOM > 0
> -	{ comcnprobe, comcninit, },
> +#if NCOM_MAINBUS > 0
> +	{ com_mainbus_cnprobe, com_mainbus_cninit,
> +	    NULL, NULL, NULL, NULL, NULL, NULL, 0, CN_DEAD },
>  #endif
>  #if NNULLCONS > 0
> -	{ nullcnprobe, nullcninit },
> +	{ nullcnprobe, nullcninit,
> +	    NULL, NULL, NULL, NULL, NULL, NULL, 0, CN_DEAD },
>  #endif
> -	{ 0 }
> +	{ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, CN_DEAD }
>  };
>  
> -#if NCOM > 0
> -#define CONMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
> -
> -void
> -comcnprobe(cn)
> -	struct consdev *cn;
> -{
> -	struct btinfo_flags *bi_flags;
> -
> -	/*
> -	 * Linux code has a comment that serial console must be probed
> -	 * early, otherwise the value which allows to detect serial port
> -	 * could be overwritten. Okay, probe here and record the result
> -	 * for the future use.
> -	 *
> -	 * Note that if the kernel was booted with a boot loader,
> -	 * the latter *has* to provide a flag indicating whether console
> -	 * is present or not due to the reasons outlined above.
> -	 */
> -	if ( (bi_flags = lookup_bootinfo(BTINFO_FLAGS)) == NULL) {
> -		/* No boot information, probe console now */
> -		console_present = *(volatile u_int32_t *)
> -					MIPS_PHYS_TO_KSEG1(0x0020001c);
> -	} else {
> -		/* Get the value determined by the boot loader. */
> -		console_present = bi_flags->bi_flags & BI_SERIAL_CONSOLE;
> -	}
> -
> -	cn->cn_pri = (console_present != 0) ? CN_NORMAL : CN_DEAD;
> -}
> -
> -void
> -comcninit(cn)
> -	struct consdev *cn;
> -{
> -
> -	comcnattach(0, 0x1c800000, 115200, COM_FREQ * 10, COM_TYPE_NORMAL,
> -	    CONMODE);
> -}
> -#endif
> -
>  void
>  consinit()
>  {
> +	static int initted;
> +
> +	if (initted)
> +		return;
> +	initted = 1;
>  
>  	cninit();
>  }
> --- sys/arch/cobalt/conf/files.cobalt.orig	2003-10-18 03:20:10.000000000 +0900
> +++ sys/arch/cobalt/conf/files.cobalt	2005-11-23 15:16:43.000000000 +0900
> @@ -13,7 +13,7 @@
>  file arch/cobalt/cobalt/cpu.c		cpu
>  
>  attach com at mainbus with com_mainbus
> -file arch/cobalt/dev/com_mainbus.c	com_mainbus
> +file arch/cobalt/dev/com_mainbus.c	com_mainbus	needs-flag
>  
>  device panel: hd44780
>  attach panel at mainbus
> --- /dev/null	2005-11-23 15:04:16.000000000 +0900
> +++ sys/arch/cobalt/conf/INSTALL	2005-11-23 14:56:35.000000000 +0900
> @@ -0,0 +1,320 @@
> +# $NetBSD$
> +#
> +# INSTALL -- installation and rescue kernel.
> +#
> +# This kernel should be derived from GENERIC with most features
> +# commented out to shoehorn into Cobalt kernel size limitations.
> +# 
> +
> +include 	"arch/cobalt/conf/std.cobalt"
> +
> +options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
> +
> +#ident 		"INSTALL-$Revision$"
> +
> +makeoptions	COPTS="-Os -mmemcpy"
> +
> +maxusers	32
> +
> +# Standard system options
> +options 	KTRACE		# system call tracing support
> +options 	SYSTRACE	# system call vetting via systrace(1)
> +options 	SYSVMSG		# System V message queues
> +options 	SYSVSEM		# System V semaphores
> +#options 	SEMMNI=10	# number of semaphore identifiers
> +#options 	SEMMNS=60	# number of semaphores in system
> +#options 	SEMUME=10	# max number of undo entries per process
> +#options 	SEMMNU=30	# number of undo structures in system
> +options 	SYSVSHM		# System V shared memory
> +#options 	SHMMAXPGS=1024	# 1024 pages is the default
> +options 	P1003_1B_SEMAPHORE # p1003.1b semaphore support
> +#options 	LKM		# loadable kernel modules
> +#options 	NTP		# network time protocol
> +options 	USERCONF	# userconf(4) support
> +#options	PIPE_SOCKETPAIR	# smaller, but slower pipe(2)
> +#options 	SYSCTL_INCLUDE_DESCR	# Include sysctl descriptions in kernel
> +
> +# Enable experimental buffer queue strategy for better responsiveness under 
> +# high disk I/O load. Use it with caution - it's not proven to be stable yet.
> +#options 	NEW_BUFQ_STRATEGY
> +
> +# Debugging options
> +#options 	DIAGNOSTIC	# extra kernel sanity checking
> +#options 	DEBUG		# extra kernel debugging support
> +#options 	KMEMSTATS	# kernel memory statistics (vmstat -m)
> +options 	DDB		# kernel dynamic debugger
> +#options 	DDB_HISTORY_SIZE=100 # enable history editing in DDB
> +#makeoptions	DEBUG="-g"	# compile full symbol table
> +
> +# Compatibility options
> +options 	COMPAT_43	# compatibility with 4.3BSD binaries
> +#options 	COMPAT_09	# NetBSD 0.9 binary compatibility
> +#options 	COMPAT_10	# NetBSD 1.0 binary compatibility
> +#options 	COMPAT_11	# NetBSD 1.1 binary compatibility
> +#options 	COMPAT_12	# NetBSD 1.2 binary compatibility
> +#options 	COMPAT_13	# NetBSD 1.3 binary compatibility
> +#options 	COMPAT_14	# NetBSD 1.4 binary compatibility
> +options 	COMPAT_16	# NetBSD 1.6 binary compatibility
> +#options 	EXEC_ECOFF	# exec ECOFF binaries
> +#options 	COMPAT_ULTRIX	# binary compatibility with Ultrix
> +#options 	TCP_COMPAT_42	# 4.2BSD TCP/IP bug compat. Not recommended.
> +
> +# File systems
> +file-system	FFS		# Berkeley Fast Filesystem
> +file-system 	EXT2FS		# second extended file system (linux)
> +file-system	NFS		# Sun NFS-compatible filesystem client
> +#file-system	KERNFS		# kernel data-structure filesystem
> +#file-system	NULLFS		# NULL layered filesystem
> +#file-system 	OVERLAY		# overlay file system
> +file-system	MFS		# memory-based filesystem
> +file-system	FDESC		# user file descriptor filesystem
> +#file-system	UMAPFS		# uid/gid remapping filesystem
> +#file-system	LFS		# Log-based filesystem (still experimental)
> +#file-system	PORTAL		# portal filesystem (still experimental)
> +#file-system	PROCFS		# /proc
> +#file-system	CD9660		# ISO 9660 + Rock Ridge file system
> +#file-system	UNION		# union file system
> +#file-system	MSDOSFS		# MS-DOS FAT filesystem(s).
> +#file-system 	CODA		# Coda File System; also needs vcoda (below)
> +
> +# File system options
> +#options 	NFSSERVER	# Sun NFS-compatible filesystem server
> +#options 	QUOTA		# FFS quotas
> +#options 	FFS_EI		# FFS Endian Independant support
> +#options 	SOFTDEP		# FFS soft updates support.
> +#options 	EXT2FS_SYSTEM_FLAGS # makes ext2fs file flags (append and
> +				# immutable) behave as system flags.
> +
> +# Networking options
> +#options 	GATEWAY		# IP packet forwarding
> +options 	INET		# Internet protocols
> +#options 	INET6		# IPV6
> +#options 	IPSEC		# IP security
> +#options 	IPSEC_ESP	# IP security (encryption part; define w/IPSEC)
> +#options 	IPSEC_DEBUG	# debug for IP security
> +#options 	MROUTING	# packet forwarding of multicast packets
> +#options 	NS		# Xerox NS networking
> +#options 	NSIP		# Xerox NS tunneling over IP
> +#options 	ISO,TPIP	# OSI networking
> +#options 	EON		# OSI tunneling over IP
> +#options 	CCITT,LLC,HDLC	# X.25
> +#options 	NETATALK	# AppleTalk (over Ethernet) protocol
> +#options 	PPP_BSDCOMP	# BSD-Compress compression support for PPP
> +#options 	PPP_DEFLATE	# Deflate compression support for PPP
> +#options 	PPP_FILTER	# Active filter support for PPP (requires bpf)
> +#options 	PFIL_HOOKS	# pfil(9) packet filter hooks
> +#options 	IPFILTER_LOG	# ipmon(8) log support
> +#options 	IPFILTER_DEFAULT_BLOCK	# block all packets by default
> +#options 	TCP_DEBUG	# Record last TCP_NDEBUG packets with SO_DEBUG
> +
> +#options 	ALTQ		# Manipulate network interfaces' output queues
> +#options 	ALTQ_BLUE	# Stochastic Fair Blue
> +#options 	ALTQ_CBQ	# Class-Based Queueing
> +#options 	ALTQ_CDNR	# Diffserv Traffic Conditioner
> +#options 	ALTQ_FIFOQ	# First-In First-Out Queue
> +#options 	ALTQ_FLOWVALVE	# RED/flow-valve (red-penalty-box)
> +#options 	ALTQ_HFSC	# Hierarchical Fair Service Curve
> +#options 	ALTQ_LOCALQ	# Local queueing discipline
> +#options 	ALTQ_PRIQ	# Priority Queueing
> +#options 	ALTQ_RED	# Random Early Detection
> +#options 	ALTQ_RIO	# RED with IN/OUT
> +#options 	ALTQ_WFQ	# Weighted Fair Queueing
> +
> +# These options enable verbose messages for several subsystems.
> +# Warning, these may compile large string tables into the kernel!
> +#options 	PCIVERBOSE	# verbose PCI device autoconfig messages
> +#options 	PCI_CONFIG_DUMP	# verbosely dump PCI config space
> +#options 	SCSIVERBOSE	# human readable SCSI error messages
> +#options 	MIIVERBOSE	# verbose PHY autoconfig messages
> +
> +options 	NFS_BOOT_DHCP
> +
> +config		netbsd	root on ? type ?
> +
> +mainbus0 	at root
> +
> +cpu0 		at mainbus?
> +
> +com0		at mainbus? addr 0x1c800000 level 3
> +options 	COM16650
> +
> +panel0 		at mainbus? addr 0x1f000000
> +
> +gt0 		at mainbus? addr 0x14000000
> +
> +pci* 		at gt0
> +pchb* 		at pci? dev ? function ?
> +pcib* 		at pci? dev ? function ?
> +
> +# Cryptographic Devices
> +
> +# PCI cryptographic devices
> +#hifn*	at pci? dev ? function ?	# Hifn 7755/7811/795x
> +#ubsec*	at pci? dev ? function ?	# Broadcom 5501/5601/580x/582x
> +
> +# PCI serial/parallel interfaces
> +#puc* 		at pci? dev ? function ? 	# PCI "universal" comm. cards
> +#com* 		at puc? port ?
> +#lpt* 		at puc? port ?
> +#cy* 		at pci? dev ? function ?	# Cyclades Cyclom-Y serial cards
> +
> +# PCI SCSI controllers
> +#adv*		at pci? dev ? function ?	# AdvanSys 1200[A,B], 9xx[U,UA]
> +#adw*		at pci? dev ? function ?	# AdvanSys 9xxUW SCSI
> +#ahc*		at pci? dev ? function ?	# Adaptec [23]94x, aic78x0 SCSI
> +#bha*		at pci? dev ? function ?	# BusLogic 9xx SCSI
> +#dpt*		at pci? dev ? function ?	# DPT SmartCache/SmartRAID
> +#isp*		at pci? dev ? function ?	# Qlogic ISP [12]0x0 SCSI/FC
> +#siop*		at pci? dev ? function ?	# NCR 53c8xx SCSI
> +#esiop*		at pci? dev ? function ?	# NCR 53c82s75xx SCSI and newer
> +#pcscp*		at pci? dev ? function ?	# AMD 53c974 PCscsi-PCI SCSI
> +
> +# SCSI bus support
> +#scsibus* 	at adv?
> +#scsibus* 	at adw?
> +#scsibus* 	at ahc?
> +#scsibus* 	at bha?
> +#scsibus* 	at dpt?
> +#scsibus* 	at isp?
> +#scsibus* 	at siop?
> +#scsibus* 	at esiop?
> +#scsibus* 	at pcscp?
> +
> +# SCSI devices
> +#sd*		at scsibus? target ? lun ?	# SCSI disk drives
> +#st*		at scsibus? target ? lun ?	# SCSI tape drives
> +#cd*		at scsibus? target ? lun ?	# SCSI CD-ROM drives
> +#ch*		at scsibus? target ? lun ?	# SCSI autochangers
> +#ss*		at scsibus? target ? lun ?	# SCSI scanners
> +#uk*		at scsibus? target ? lun ?	# SCSI unknown
> +
> +# RAID controllers and devices
> +#cac*		at pci? dev ? function ?	# Compaq array controller
> +#ca*		at cac? unit ?			# Compaq array disk device
> +
> +# IDE and related devices
> +# PCI IDE controllers - see pciide(4) for supported hardware.
> +# The 0x0001 flag force the driver to use DMA, even if the driver doesn't know
> +# how to set up DMA modes for this chip. This may work, or may cause
> +# a machine hang with some controllers.
> +pciide* 	at pci? dev ? function ? flags 0x0000	# GENERIC pciide driver
> +acardide*	at pci? dev ? function ?	# Acard IDE controllers
> +aceride* 	at pci? dev ? function ?	# Acer Lab IDE controllers
> +artsata*	at pci? dev ? function ?	# Intel i31244 SATA controller
> +cmdide* 	at pci? dev ? function ?	# CMD tech IDE controllers
> +cypide* 	at pci? dev ? function ?	# Cypress IDE controllers
> +hptide* 	at pci? dev ? function ?	# Triones/HighPoint IDE controllers
> +optiide* 	at pci? dev ? function ?	# Opti IDE controllers
> +#piixide* 	at pci? dev ? function ?	# Intel IDE controllers
> +pdcide* 	at pci? dev ? function ?	# Promise IDE controllers
> +pdcsata* 	at pci? dev ? function ?	# Promise SATA150 controllers
> +satalink*	at pci? dev ? function ?	# SiI SATALink controllers
> +siside* 	at pci? dev ? function ?	# SiS IDE controllers
> +slide*  	at pci? dev ? function ?	# Symphony Labs IDE controllers
> +viaide* 	at pci? dev ? function ?	# VIA/AMD/Nvidia IDE controllers
> +
> +# ATA bus
> +atabus* 	at ata?
> +
> +# IDE drives
> +# Flags are used only with controllers that support DMA operations
> +# and mode settings (e.g. some pciide controllers)
> +# The lowest order four bits (rightmost digit) of the flags define the PIO
> +# mode to use, the next set of four bits the DMA mode and the third set the
> +# UltraDMA mode. For each set of four bits, the 3 lower bits define the mode
> +# to use, and the last bit must be 1 for this setting to be used.
> +# For DMA and UDMA, 0xf (1111) means 'disable'.
> +# 0x0fac means 'use PIO mode 4, DMA mode 2, disable UltraDMA'.
> +# (0xc=1100, 0xa=1010, 0xf=1111)
> +# 0x0000 means "use whatever the drive claims to support".
> +wd* 		at atabus? drive ? flags 0x0000
> +
> +# PCI network interfaces
> +#en*		at pci? dev ? function ?	# ENI/Adaptec ATM
> +#ep*		at pci? dev ? function ?	# 3Com 3c59x
> +#ex*		at pci? dev ? function ?	# 3Com 90x[BC]
> +#epic*		at pci? dev ? function ?	# SMC EPIC/100 Ethernet
> +#esh*		at pci? dev ? function ?	# Essential HIPPI card
> +#fpa*		at pci? dev ? function ?	# DEC DEFPA FDDI
> +#fxp*		at pci? dev ? function ?	# Intel EtherExpress PRO10+/100B
> +#le*		at pci? dev ? function ?	# PCnet-PCI Ethernet
> +#ne*		at pci? dev ? function ?	# NE2000-compatible Ethernet
> +#ntwoc*		at pci? dev ? function ?	# Riscom/N2 PCI Sync Serial
> +#sip*		at pci? dev ? function ?	# SiS 900 Ethernet
> +#tl*		at pci? dev ? function ?	# ThunderLAN-based Ethernet
> +tlp*		at pci? dev ? function ?	# DECchip 21x4x and clones
> +#vr*		at pci? dev ? function ?	# VIA Rhine Fast Ethernet
> +#lmc*		at pci? dev ? function ?	# Lan Media Corp SSI/HSSI/DS3
> +#rtk*		at pci? dev ? function ?	# Realtek 8129/8139
> +
> +# MII/PHY support
> +#exphy*		at mii? phy ?			# 3Com internal PHYs
> +#icsphy*		at mii? phy ?			# ICS189x PHYs
> +#inphy*		at mii? phy ?			# Intel 82555 PHYs
> +#iophy*		at mii? phy ?			# Intel 82553 PHYs
> +lxtphy*		at mii? phy ?			# Level One LXT-970 PHYs
> +#nsphy*		at mii? phy ?			# NS83840 PHYs
> +#nsphyter* 	at mii? phy ?			# NS83843 PHYs
> +#qsphy*		at mii? phy ?			# Quality Semiconductor QS6612
> +#sqphy*		at mii? phy ?			# Seeq 80220/80221/80223 PHYs
> +#tlphy*		at mii? phy ?			# ThunderLAN PHYs
> +#tqphy*		at mii? phy ?			# TDK Semiconductor PHYs
> +#ukphy*		at mii? phy ?			# generic unknown PHYs
> +
> +# PCI audio devices
> +#clcs*		at pci? dev ? function ?	# Cirrus Logic CS4280
> +#eap*		at pci? dev ? function ?	# Ensoniq AudioPCI
> +#eso*		at pci? dev ? function ?	# ESS Solo-1 PCI AudioDrive
> +#fms*		at pci? dev ? function ?	# Forte Media FM801
> +#sbl*		at pci? dev ? function ?	# SoundBlaster Live!
> +#sv*		at pci? dev ? function ?	# S3 SonicVibes
> +
> +# Pseudo-devices
> +
> +#pseudo-device 	crypto				# opencrypto framework
> +
> +# Disk/mass storage pseudo-devices
> +#pseudo-device	ccd		4		# concatenated disk devices
> +#pseudo-device	cgd		4		# cryptographic disk devices
> +#pseudo-device	raid		8		# RAIDframe disk driver
> +#options 	RAID_AUTOCONFIG			# auto-configuration of RAID
> +# Options to enable various other RAIDframe RAID types.
> +# options	RF_INCLUDE_EVENODD=1
> +# options	RF_INCLUDE_RAID5_RS=1
> +# options	RF_INCLUDE_PARITYLOGGING=1
> +# options	RF_INCLUDE_CHAINDECLUSTER=1
> +# options	RF_INCLUDE_INTERDECLUSTER=1
> +# options 	RF_INCLUDE_PARITY_DECLUSTERING=1
> +# options	RF_INCLUDE_PARITY_DECLUSTERING_DS=1
> +#pseudo-device	md		1		# memory disk device (ramdisk)
> +#pseudo-device	vnd		4		# disk-like interface to files
> +
> +# Network pseudo-devices
> +pseudo-device	bpfilter	8		# Berkeley packet filter
> +#pseudo-device	ipfilter			# IP filter (firewall) and NAT
> +pseudo-device	loop				# network loopback
> +#pseudo-device	ppp		2		# Point-to-Point Protocol
> +#pseudo-device	pppoe				# PPP over Ethernet (RFC 2516)
> +#pseudo-device	sl		2		# Serial Line IP
> +#pseudo-device	strip		2		# Starmode Radio IP (Metricom)
> +#pseudo-device	tun		2		# network tunneling over tty
> +#pseudo-device	gre		2		# generic L3 over IP tunnel
> +#pseudo-device	gif		4		# RFC1933 tunnel
> +#pseudo-device	faith		1		# IPv[46] tcp relay translation
> +#pseudo-device	stf		1		# 6to4 IPv6 over IPv4 encapsulation
> +#pseudo-device	vlan			# IEEE 802.1q encapsulation
> +#pseudo-device	bridge			# simple inter-network bridging
> +#options	BRIDGE_IPF		# bridge uses IP/IPv6 pfil hooks too
> +
> +# Miscellaneous pseudo-devices
> +pseudo-device	pty				# pseudo-terminals
> +#pseudo-device	tb		1		# tablet line discipline
> +#pseudo-device	sequencer	1		# MIDI sequencer
> +pseudo-device	rnd				# /dev/random & kernel generator
> +#options 	RND_COM				# use "com" randomness (BROKEN)
> +pseudo-device	clockctl		# user control of clock subsystem
> +pseudo-device	nullcons			# no-op console
> +
> +# A pseudo device needed for Coda		# also needs CODA (above)
> +#pseudo-device	vcoda		4		# coda minicache <-> venus comm.
> +#pseudo-device	ksyms				# /dev/ksyms
> --- sys/arch/cobalt/dev/com_mainbus.c.orig	2003-10-18 03:20:10.000000000 +0900
> +++ sys/arch/cobalt/dev/com_mainbus.c	2005-11-23 15:16:37.000000000 +0900
> @@ -30,27 +30,19 @@
>  
>  #include <sys/param.h>
>  #include <sys/systm.h>
> -#include <sys/ioctl.h>
> -#include <sys/select.h>
> -#include <sys/tty.h>
> -#include <sys/proc.h>
> -#include <sys/user.h>
> -#include <sys/conf.h>
> -#include <sys/file.h>
> -#include <sys/uio.h>
> -#include <sys/kernel.h>
> -#include <sys/syslog.h>
> -#include <sys/types.h>
>  #include <sys/device.h>
> +#include <sys/termios.h>
>  
>  #include <machine/autoconf.h>
>  #include <machine/intr.h>
>  #include <machine/bus.h>
>  #include <machine/nvram.h>
> +#include <machine/bootinfo.h>
>  
>  #include <dev/ic/comreg.h>
>  #include <dev/ic/comvar.h>
>  
> +#include <cobalt/dev/com_mainbusvar.h>
>  
>  extern int console_present;
>  
> @@ -59,6 +51,9 @@
>  	void *sc_ih;
>  };
>  
> +#define COM_MAINBUS_FREQ	(COM_FREQ * 10)
> +#define CONMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
> +
>  static int	com_mainbus_probe(struct device *, struct cfdata *, void *);
>  static void	com_mainbus_attach(struct device *, struct device *, void *);
>  
> @@ -66,35 +61,34 @@
>      com_mainbus_probe, com_mainbus_attach, NULL, NULL);
>  
>  int
> -com_mainbus_probe(parent, match, aux)
> -	struct device *parent;
> -	struct cfdata *match;
> -	void *aux;
> +com_mainbus_probe(struct device *parent, struct cfdata *match, void *aux)
>  {
>  
> -	return (console_present != 0);
> +	return console_present != 0;
>  }
>  
> -struct com_softc *com0; /* XXX */
> -
>  void
> -com_mainbus_attach(parent, self, aux)
> -	struct device *parent;
> -	struct device *self;
> -	void *aux;
> +com_mainbus_attach(struct device *parent, struct device *self, void *aux)
>  {
>  	struct com_mainbus_softc *msc = (void *)self;
>  	struct com_softc *sc = &msc->sc_com;
>  	struct mainbus_attach_args *maa = aux;
>  
> -	sc->sc_ioh = maa->ma_ioh;
>  	sc->sc_iot = maa->ma_iot;
>  	sc->sc_iobase = maa->ma_addr;
>  
> -	sc->sc_frequency = COM_FREQ * 10;
> +#if 0	/* XXX */
> +	if (!com_is_console(sc->sc_iot, sc->sc_iobase, &sc->sc_ioh) &&
> +	    bus_space_map(sc->sc_iot, sc->sc_iobase, COM_NPORTS, 0,
> +	    &sc->sc_ioh)) {
> +		printf(": can't map i/o space\n");
> +		return;
> +	}
> +#else
> +	sc->sc_ioh = maa->ma_ioh;
> +#endif
>  
> -	/* XXX console check */
> -	/* XXX map */
> +	sc->sc_frequency = COM_MAINBUS_FREQ;
>  
>  	com_attach_subr(sc);
>  
> @@ -102,3 +96,39 @@
>  
>  	return;
>  }
> +
> +void
> +com_mainbus_cnprobe(struct consdev *cn)
> +{
> +	struct btinfo_flags *bi_flags;
> +
> +	/*
> +	 * Linux code has a comment that serial console must be probed
> +	 * early, otherwise the value which allows to detect serial port
> +	 * could be overwritten. Okay, probe here and record the result
> +	 * for the future use.
> +	 *
> +	 * Note that if the kernel was booted with a boot loader,
> +	 * the latter *has* to provide a flag indicating whether console
> +	 * is present or not because the value might be overwritten by
> +	 * the loaded kernel.
> +	 */
> +	if ((bi_flags = lookup_bootinfo(BTINFO_FLAGS)) == NULL) {
> +		/* No boot information, probe console now */
> +		console_present = *(volatile u_int32_t *)
> +					MIPS_PHYS_TO_KSEG1(0x0020001c);
> +	} else {
> +		/* Get the value determined by the boot loader. */
> +		console_present = bi_flags->bi_flags & BI_SERIAL_CONSOLE;
> +	}
> +
> +	cn->cn_pri = (console_present != 0) ? CN_NORMAL : CN_DEAD;
> +}
> +
> +void
> +com_mainbus_cninit(struct consdev *cn)
> +{
> +
> +	comcnattach(0, 0x1c800000, 115200, COM_MAINBUS_FREQ, COM_TYPE_NORMAL,
> +	    CONMODE);
> +}
> --- /dev/null	2005-11-23 15:04:16.000000000 +0900
> +++ sys/arch/cobalt/dev/com_mainbusvar.h	2005-11-23 15:15:15.000000000 +0900
> @@ -0,0 +1,31 @@
> +/*	$NetBSD$	*/
> +
> +/*
> + * Copyright (c) 2000 Soren S. Jorvang.  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 AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
> + */
> +
> +#include <dev/cons.h>
> +
> +dev_type_cnprobe(com_mainbus_cnprobe);
> +dev_type_cninit(com_mainbus_cninit);
> 
> 
>