[PATCH] Make parport_pc use check_legacy_ioport()

Michael Neuling mikey at neuling.org
Sat Dec 10 20:54:22 EST 2005


> > This should prevent the crashes on PowerMac and Cell when parport_pc
> > pokes at non-existent ports...
> 
> Mikey has a better patch afaik

I've attched this here. This patched is rebased to Paulus current
powerpc.git tree.  It compiles but is not tested (although it was tested on
an earlier verision).

There is also a pcspkr patch for a similar problem which I'll repost in the
coming days.

Mikey

Patch stops parport from accessing non existant ports.

Signed-off-by: Michael Neuling <mikey at neuling.org>

 include/asm-powerpc/parport.h |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)

Index: linux-2.6-powerpc.nobackup/include/asm-powerpc/parport.h
===================================================================
--- linux-2.6-powerpc.nobackup.orig/include/asm-powerpc/parport.h
+++ linux-2.6-powerpc.nobackup/include/asm-powerpc/parport.h
@@ -9,10 +9,34 @@
 #ifndef _ASM_POWERPC_PARPORT_H
 #define _ASM_POWERPC_PARPORT_H
 
-static int __devinit parport_pc_find_isa_ports (int autoirq, int autodma);
+#include <asm/prom.h>
+
+extern struct parport *parport_pc_probe_port (unsigned long int base,
+                                              unsigned long int base_hi,
+                                              int irq, int dma,
+                                              struct pci_dev *dev);
+
 static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma)
 {
-	return parport_pc_find_isa_ports (autoirq, autodma);
+	struct device_node *np;
+	u32 *prop;
+	u32 io1, io2;
+	int propsize;
+	int count = 0;
+	for (np = NULL; (np = of_find_compatible_node(np,
+						      "parallel",
+						      "pnpPNP,400")) != NULL;) {
+		prop = (u32 *)get_property(np, "reg", &propsize);
+		if (!prop || propsize > 6*sizeof(u32))
+			continue;
+		io1 = prop[1]; io2 = prop[2];
+		prop = (u32 *)get_property(np, "interrupts", NULL);
+		if (!prop)
+			continue;
+		if (parport_pc_probe_port(io1, io2, prop[0], autodma, NULL) != NULL)
+			count++;
+	}
+	return count;
 }
 
 #endif /* !(_ASM_POWERPC_PARPORT_H) */



More information about the Linuxppc64-dev mailing list