summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorambrisko <ambrisko@FreeBSD.org>2004-05-03 22:35:28 +0000
committerambrisko <ambrisko@FreeBSD.org>2004-05-03 22:35:28 +0000
commit15b2afd48d4fd4449a185be66041193f610303a5 (patch)
tree233941e7057256d325f2e3010220871fc4d82961
parentfaf8cf3425cc2d36d29a6229e68e8dc1e5d55b86 (diff)
downloadFreeBSD-src-15b2afd48d4fd4449a185be66041193f610303a5.zip
FreeBSD-src-15b2afd48d4fd4449a185be66041193f610303a5.tar.gz
Remove new options and my prevention of system freeze when the sio probe
returns okay when HW probe fails. This happens when comconsole flag is set but VGA console is used instead. Back out requested by: bde (He will be looking at other solutions from scratch)
-rw-r--r--share/man/man4/sio.42
-rw-r--r--sys/conf/NOTES2
-rw-r--r--sys/conf/options1
-rw-r--r--sys/dev/sio/sio.c125
4 files changed, 49 insertions, 81 deletions
diff --git a/share/man/man4/sio.4 b/share/man/man4/sio.4
index 7905401..864714c 100644
--- a/share/man/man4/sio.4
+++ b/share/man/man4/sio.4
@@ -178,8 +178,6 @@ minor number of master port
PPS timestamping on CTS instead of DCD
.It 0x20000
device is assumed to use a 16650A-type (extended FIFO) chip
-.It 0x400000
-If no comconsole found then mark as a comconsole
.El
.Pp
Minor numbering:
diff --git a/sys/conf/NOTES b/sys/conf/NOTES
index ae900c6..f35b058 100644
--- a/sys/conf/NOTES
+++ b/sys/conf/NOTES
@@ -1468,8 +1468,6 @@ options COM_ESP # Code for Hayes ESP.
options COM_MULTIPORT # Code for some cards with shared IRQs.
options CONSPEED=115200 # Speed for serial console
# (default 9600).
-options FORCECONSPEED # no matter what use CONSPEED for
- # console.
# `flags' specific to sio(4). See below for flags used by both sio(4) and
# uart(4).
diff --git a/sys/conf/options b/sys/conf/options
index 7b8abc7..e7717cc 100644
--- a/sys/conf/options
+++ b/sys/conf/options
@@ -522,7 +522,6 @@ BKTR_NEW_MSP34XX_DRIVER opt_bktr.h
# options for serial support
COM_ESP opt_sio.h
COM_MULTIPORT opt_sio.h
-FORCECONSPEED opt_sio.h
BREAK_TO_DEBUGGER opt_comconsole.h
ALT_BREAK_TO_DEBUGGER opt_comconsole.h
diff --git a/sys/dev/sio/sio.c b/sys/dev/sio/sio.c
index 0cd3557..192973d 100644
--- a/sys/dev/sio/sio.c
+++ b/sys/dev/sio/sio.c
@@ -123,7 +123,6 @@ __FBSDID("$FreeBSD$");
#define COM_PPSCTS(flags) ((flags) & 0x10000)
#define COM_ST16650A(flags) ((flags) & 0x20000)
#define COM_TI16754(flags) ((flags) & 0x200000)
-#define COM_ALTCONSOLE(flags) ((flags) & 0x400000)
#define sio_getreg(com, off) \
(bus_space_read_1((com)->bst, (com)->bsh, (off)))
@@ -750,7 +749,7 @@ sioprobe(dev, xrid, rclk, noprobe)
sio_setreg(com, com_cfcr, CFCR_8BITS);
mtx_unlock_spin(&sio_lock);
bus_release_resource(dev, SYS_RES_IOPORT, rid, port);
- if (comconsole != -1 && iobase == siocniobase)
+ if (iobase == siocniobase)
result = 0;
if (result != 0) {
device_set_softc(dev, NULL);
@@ -796,7 +795,6 @@ sioprobe(dev, xrid, rclk, noprobe)
mtx_unlock_spin(&sio_lock);
- result = 0;
irqs = irqmap[1] & ~irqmap[0];
if (bus_get_resource(idev, SYS_RES_IRQ, 0, &xirq, NULL) == 0 &&
((1 << xirq) & irqs) == 0) {
@@ -806,14 +804,14 @@ sioprobe(dev, xrid, rclk, noprobe)
printf(
"sio%d: port may not be enabled\n",
device_get_unit(dev));
- result = ENXIO;
}
if (bootverbose)
printf("sio%d: irq maps: %#x %#x %#x %#x\n",
device_get_unit(dev),
irqmap[0], irqmap[1], irqmap[2], irqmap[3]);
- for (fn = 0; result == 0 && fn < sizeof failures; ++fn)
+ result = 0;
+ for (fn = 0; fn < sizeof failures; ++fn)
if (failures[fn]) {
sio_setreg(com, com_mcr, 0);
result = ENXIO;
@@ -828,7 +826,7 @@ sioprobe(dev, xrid, rclk, noprobe)
break;
}
bus_release_resource(dev, SYS_RES_IOPORT, rid, port);
- if (comconsole != -1 && iobase == siocniobase)
+ if (iobase == siocniobase)
result = 0;
if (result != 0) {
device_set_softc(dev, NULL);
@@ -2816,9 +2814,6 @@ siocngetspeed(iobase, rclk)
u_char cfcr;
cfcr = inb(iobase + com_cfcr);
- outb(iobase + com_cfcr, 0x0e);
- if (inb(iobase + com_cfcr) != 0x0e)
- return (0);
outb(iobase + com_cfcr, CFCR_DLAB | cfcr);
dlbl = inb(iobase + com_dlbl);
@@ -2831,12 +2826,7 @@ siocngetspeed(iobase, rclk)
/* XXX there should be more sanity checking. */
if (divisor == 0)
return (CONSPEED);
-
-#ifdef FORCECONSPEED
- return (CONSPEED);
-#else
return (rclk / (16UL * divisor));
-#endif
}
#endif
@@ -2917,7 +2907,7 @@ siocnprobe(cp)
speed_t boot_speed;
u_char cfcr;
u_int divisor;
- int s, unit, check_flags;
+ int s, unit;
struct siocnstate sp;
/*
@@ -2936,42 +2926,28 @@ siocnprobe(cp)
*/
cp->cn_pri = CN_DEAD;
- siocniobase = 0;
- for(check_flags = 1; check_flags >= 0 && !siocniobase; check_flags--) {
- for (unit = 0; unit < 16; unit++) { /* XXX need to know how
- many */
- int flags;
+ for (unit = 0; unit < 16; unit++) { /* XXX need to know how many */
+ int flags;
- if (resource_disabled("sio", unit))
- continue;
- if (resource_int_value("sio", unit, "flags", &flags))
- continue;
+ if (resource_disabled("sio", unit))
+ continue;
+ if (resource_int_value("sio", unit, "flags", &flags))
+ continue;
+ if (COM_CONSOLE(flags) || COM_DEBUGGER(flags)) {
+ int port;
+ Port_t iobase;
- if (!check_flags && COM_ALTCONSOLE(flags)
- && !siocniobase){
- flags |= 0x10;
+ if (resource_int_value("sio", unit, "port", &port))
+ continue;
+ iobase = port;
+ s = spltty();
+ if (boothowto & RB_SERIAL) {
+ boot_speed =
+ siocngetspeed(iobase, comdefaultrclk);
+ if (boot_speed)
+ comdefaultrate = boot_speed;
}
- if (COM_CONSOLE(flags) || COM_DEBUGGER(flags)) {
- int port;
- Port_t iobase;
-
- if (resource_int_value("sio", unit, "port",
- &port))
- continue;
- iobase = port;
- s = spltty();
- if (boothowto & RB_SERIAL) {
- boot_speed = siocngetspeed(iobase,
- comdefaultrclk);
- if (boot_speed)
- comdefaultrate = boot_speed;
- else {
- splx(s);
- continue;
- }
- }
-
/*
* Initialize the divisor latch. We can't rely on
* siocnopen() to do this the first time, since it
@@ -2981,37 +2957,34 @@ siocnprobe(cp)
* need to set the speed in hardware so that
* switching it later is null.
*/
- cfcr = inb(iobase + com_cfcr);
- outb(iobase + com_cfcr, CFCR_DLAB | cfcr);
- divisor = siodivisor(comdefaultrclk, comdefaultrate);
- outb(iobase + com_dlbl, divisor & 0xff);
- outb(iobase + com_dlbh, divisor >> 8);
- outb(iobase + com_cfcr, cfcr);
-
- siocnopen(&sp, iobase, comdefaultrate);
-
- splx(s);
- if (!siocniobase && COM_CONSOLE(flags)
- && !COM_LLCONSOLE(flags)) {
- siocnset(cp, unit);
- cp->cn_pri = COM_FORCECONSOLE(flags)
- || boothowto & RB_SERIAL
- ? CN_REMOTE : CN_NORMAL;
- siocniobase = iobase;
- siocnunit = unit;
- }
- if (COM_DEBUGGER(flags)) {
- printf("sio%d: gdb debugging port\n",
- unit);
- siogdbiobase = iobase;
- siogdbunit = unit;
+ cfcr = inb(iobase + com_cfcr);
+ outb(iobase + com_cfcr, CFCR_DLAB | cfcr);
+ divisor = siodivisor(comdefaultrclk, comdefaultrate);
+ outb(iobase + com_dlbl, divisor & 0xff);
+ outb(iobase + com_dlbh, divisor >> 8);
+ outb(iobase + com_cfcr, cfcr);
+
+ siocnopen(&sp, iobase, comdefaultrate);
+
+ splx(s);
+ if (COM_CONSOLE(flags) && !COM_LLCONSOLE(flags)) {
+ siocnset(cp, unit);
+ cp->cn_pri = COM_FORCECONSOLE(flags)
+ || boothowto & RB_SERIAL
+ ? CN_REMOTE : CN_NORMAL;
+ siocniobase = iobase;
+ siocnunit = unit;
+ }
+ if (COM_DEBUGGER(flags)) {
+ printf("sio%d: gdb debugging port\n", unit);
+ siogdbiobase = iobase;
+ siogdbunit = unit;
#if DDB > 0
- siocnset(&gdbconsdev, unit);
- gdb_arg = &gdbconsdev;
- gdb_getc = siocngetc;
- gdb_putc = siocnputc;
+ siocnset(&gdbconsdev, unit);
+ gdb_arg = &gdbconsdev;
+ gdb_getc = siocngetc;
+ gdb_putc = siocnputc;
#endif
- }
}
}
}
OpenPOWER on IntegriCloud