lkml.org 
[lkml]   [1999]   [Sep]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: Linux 2.3.18ac1
Here are two small fixes for Linux kernel 2.3.18:

* The patch 2.3.10->2.3.11 added a return statement to the F0 0F
bug workaround code which disabled the workaround. (I assume
this was intended as a temporary fix while ironing out other
changes.) The patch below re-enables the F0 0F workaround.

* parport_pc has one "virtual" bug and one real one:
* After placing the ECP port in configuration mode, the config
status should be read from I/O port CONFIGA(pb), not FIFO(pb).
[They denote the same I/O address, but that address changes
meaning depending on the mode of the parallel port.]
* The ISA-Level/Pulses bit (0x80) should be read from CONFIGA(pb),
not CONFIGB(pb). (0x80 in CONFIGB is the "compress" flag.)

While I'm at it: the check for IRQ conflict further down fails
on my Dell Latitude notebook: On the Latitude, CONFIGB always
reads as zero, which makes parport_pc believe there's an IRQ
conflict (there isn't). parport_pc then turns off IRQ capability,
which leaves the parport in a next to useless state (printing
is excruciatingly slow, if it works at all). I know some documents
recommend this check; I'm just not sure whether they're wrong
or whether the Dell Latitude has a crap parallel port controller.
Printing works in polling mode and IRQ-mode without FIFO/DMA.

/Mikael

--- linux-2.3.18/arch/i386/kernel/traps.c.~1~ Sun Sep 12 02:51:52 1999
+++ linux-2.3.18/arch/i386/kernel/traps.c Sun Sep 12 13:42:43 1999
@@ -489,7 +489,6 @@
pmd_t * pmd;
pte_t * pte;

-return;
/*
* Allocate a new page in virtual address space,
* move the IDT into it and write protect this page.
--- linux-2.3.18/drivers/parport/parport_pc.c.orig Thu Aug 19 18:41:54 1999
+++ linux-2.3.18/drivers/parport/parport_pc.c Sun Sep 12 13:42:20 1999
@@ -1202,7 +1202,7 @@

outb (ECR_SPP << 5, ECONTROL (pb)); /* Reset FIFO */
outb (0xf4, ECONTROL (pb)); /* Configuration mode */
- config = inb (FIFO (pb));
+ config = inb (CONFIGA (pb));
pword = (config >> 4) & 0x7;
switch (pword) {
case 0:
@@ -1225,10 +1225,10 @@
priv->pword = pword;
printk (KERN_DEBUG "0x%lx: PWord is %d bits\n", pb->base, 8 * pword);

- config = inb (CONFIGB (pb));
printk (KERN_DEBUG "0x%lx: Interrupts are ISA-%s\n", pb->base,
config & 0x80 ? "Level" : "Pulses");

+ config = inb (CONFIGB (pb));
if (!(config & 0x40)) {
printk (KERN_WARNING "0x%lx: IRQ conflict!\n", pb->base);
pb->irq = PARPORT_IRQ_NONE;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:53    [W:0.019 / U:0.900 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site