Serial console only works after reboot?

Bruce Evans bde at
Sun Jan 4 22:38:11 PST 2004

On Sun, 4 Jan 2004, Nate Lawson wrote:

> On Sun, 4 Jan 2004, M. Warner Losh wrote:
> > In message: <20040103233044.N17367 at>
> >             Nate Lawson <nate at> writes:
> > : On Sat, 3 Jan 2004, M. Warner Losh wrote:
> > : > In message: <20040103184934.V16815 at>
> > : >             Nate Lawson <nate at> writes:
> > : > : I have a laptop (IBM T23) and use sio0 as my console/gdb port.  One thing
> > : > : I noticed is if I power up the laptop and boot -h, I get garbage out the
> > : > : serial port.  However, if I boot fully and then just warm reboot, the
> > : > : serial console works fine.  I'm only using 9600 bps.  Ideas?
> > : >
> > : > weird.  Is the garbage data at some different rate?
> > :
> > : Nope, checked everything from 1200 up to 38400, different garbage but
> > : always garbage.  This is with -current as of 2003/12/30, no patches.
> >
> > Try 115200.
> That works.

Is this with just changing the external tty to 115200 and no config changes?

> Now the question is "why".  Note that I have no "options
> CONSPEED" so according to /sys/dev/sio/sioreg.h, it should default to 9600
> and indeed does, after a reboot.  But not on a cold startup.

As mentioned in other replies, CONSPEED is irrelevant for serial consoles
in many cases.  The speed is normally determined by BOOT_COMCONSOLE_SPEED
(or its default of 9600).
- the kernel console may be a serial one even if the boot blocks don't
  use or set a serial console.  This happens when there is no other
  preferred console, or if you switch to a serial console using
  "sysctl kern.console=...".  Then CONSPEED (or its default of 9600) is
  used initially.
- the initial setting of the console speed may be changed using
  "sysctl machdep.conspeed".
- if the "serial console" is actually just a gdb port, then it won't
  be affected by BOOT_COMCONSOLE_SPEED.  Then GDBSPEED (or its default
  of CONSPEED) is used initially.
- the initial setting of the gdb speed may be changed using
  "sysctl machdep.gdbspeed".  This sysctl is sloppier than the one for
  consoles -- it is just a SYSCTL_INT() and doesn't adjust any associated
  state (mainly speeds for other uses of the port).
- if the serial console is also the gdb port, then the gdb speed is used
  for gdb and the console speed is used for console i/o.  There is also
  a speed for the high-level tty.  Speed setting is mostly dynamic (the
  speed normally set for the high-level tty and switched on every character
  for console and gdb i/o), so garbled output may result even for the
  speed that matches the external device if the 3 speed settings are not
  all the same.  Console i/o usually works in this case though.

Add some printfs to see which of the speed settings are different, and
fix whatever sets an inconsistent one.


More information about the freebsd-current mailing list