Subject: com at ebus - stray interrupts
To: None <tech-kern@netbsd.org>
From: Valeriy E. Ushakov <uwe@ptc.spbu.ru>
List: tech-kern
Date: 01/28/2002 14:32:44
I have a very strange problem with com at ebus (interrupting at level 13)
in Krups JavaStation (sparc).  When comstart() is called with fewer
than 8 bytes to transmit, kernel receives an interrupt from com, but
the IIR register denies any knowledge of ever sending one (IIR_NOPEND)
- thus making it a stray interrupt.  Even worse, sometimes during such
a "ghost" interrupt from com there's no interrupt bit set in system
hardware interrupt pending register.

The work-around I found is to modify comstart() to send the chunk of
data first and enable TX interrupts only after that.

Linux, reportedly, doesn't have such problem, but linux driver is
structured in a slightly different way, in particular its su_start()
routine simply enables the TX interrupt and the first chunk of data is
sent when TX interrupt is received (this approach makes the problem go
away with our driver too).

Is there a particular reason that comstart() enables TX interrupt
before sending data?

SY, Uwe
-- 
uwe@ptc.spbu.ru                         |       Zu Grunde kommen
http://www.ptc.spbu.ru/~uwe/            |       Ist zu Grunde gehen