*BSD News Article 32611


Return to BSD News archive

Newsgroups: comp.os.386bsd.questions
Path: sserve!newshost.anu.edu.au!harbinger.cc.monash.edu.au!msuinfo!agate!howland.reston.ans.net!swrinde!pipex!uknet!cf-cm!isl-gate.elsy.cf.ac.uk!paul
From: paul@isl-gate.elsy.cf.ac.uk (Paul)
Subject: Re: SIO/COM driver 16550A limitations?
Message-ID: <1994Jul8.130349.11260@cm.cf.ac.uk>
Sender: paul@isl-gate.elsy.cf.ac.uk (Paul)
Organization: ELSYM, University of Wales, College of Cardiff, UK.
References: <1994Jul4.130216.19263@bruce.cs.monash.edu.au> <PHILS.94Jul7114917@satori.tv.tek.com>
Date: Fri, 8 Jul 1994 13:03:47 +0000
Lines: 77

In article <PHILS.94Jul7114917@satori.tv.tek.com>,
Phil Staub <phils@tv.tek.com> wrote:
>In article <1994Jul4.130216.19263@bruce.cs.monash.edu.au> maurice@bruce.cs.monash.edu.au writes:
>
>> From article <2v1kdv$qal@lastactionhero.rs.itd.umich.edu>, by pha@umich.edu (Paul Anderson):
>> > I just installed FreeBSD 1.1.5R (what a phenomenal job, folks).
>> > 
>> > The man pages for SIO and COM both allude to problems with cheap
>> > clone 16550A serial boards (which I have).  What is the failure
>> > mode for these?  When I do: "cat </dev/tty00" on a stock system,
>> > the consoles freeze (no keystrokes do anything), and it appears
>> > that the system goes dead (I don't actually know what the CPU
>> > is doing, since I have no bus analyzer).
>> > 
>> 
>> Before concluding that your serial card is at fault use kermit to 
>> try and set the line. If your system does not quickly respond
>                                                ^^^^^^^^^^^^^^^
>Can you say "hangs completely"?
>
>
>> try the following:
>> 
>> 	/bin/stty -f /dev/tty00 clocal
>
>I am having the same problem. In fact any attempt to access /dev/tty0*
>in any way (even the "stty -f /dev/tty00 clocal" suggested above)
>results in the frozen console that Paul reported. Accessing
>/dev/ttyi00 seems to work ok (i.e., I can successfully do the stty),
>but it doesn't prevent the hanging when I then try to touch tty00.
>
>What's worse, I've further noted that if this happens with dirty disk
>buffers, upon reboot it is obvious that disk updates have not taken
>place, because I get fsck errors, even if I let the system sit for
>long enough that the buffers should be stable. Needless to say, this
>has caused me considerable grief.
>
>It appears that the driver is stuck in an interrupt service routine with
>interrupts disabled. 
>

yes, this is exactly what seems to be happening.

Do you have an SMC chip on your board? There's a lot of these around and
they have a nasty bug that causes a lockup when you try to enable the
FIFO. Since the interrupt level is raised when trying to open the serial
port this causes a total lockup of the machine and generally results in
a inconsistent filesystem (although I've never seen it in such a state that
it won;t get fixed at boot).

Anyway, we've been playing around with a fix in FreeBSD ad we have one that
works but we're still looking at exactly what's happening.  It's a pity
the fix we had didn't get into 1.1.5, I did suggest that it should!

Here's a fix from Christian that solved the problem for me but there
seems to be more to the story than this so we're still looking into
the correct fix.


From: cg@FIMP01.fim.uni-linz.ac.at (DI. Christian Gusenbauer)

*** sio.c.orig  Wed Jun 22 19:44:07 1994
--- sio.c       Tue Jun 28 22:56:01 1994
***************
*** 745,750 ****
--- 745,751 ----
                commctl(com, MCR_DTR | MCR_RTS, DMSET);
                com->ftl_max = com->ftl_init;
                ++com->wopeners;
+ (void) inb(com->data_port);
                error = comparam(tp, &tp->t_termios);
                --com->wopeners;
                if (error != 0)
-- 
  Paul Richards, FreeBSD core team member.
  Intelligent Systems Laboratory, ELSYM ,University of Wales, College Cardiff
  Internet: paul@isl.cf.ac.uk,  JANET(UK): RICHARDSDP@CARDIFF.AC.UK