ppc fails to attach to puc on 9.1-STABLE, 7.4-STABLE works
John Baldwin
jhb at freebsd.org
Mon Jan 14 20:50:29 UTC 2013
On Thursday, January 10, 2013 2:40:52 am Andre Albsmeier wrote:
> [Retrying here, maybe anyone can help...}
>
> I want my printer port back on 9.1 ;-(
>
> I have this card:
>
> puc0 at pci0:4:1:0: class=0x078000 card=0x00121000 chip=0x98359710
rev=0x01 hdr=0x00
> vendor = 'NetMos Technology'
> device = 'PCI 9835 Multi-I/O Controller'
> class = simple comms
>
> It attached and worked under 7.4-STABLE (as long as I disabled
> the interrupt using hint.ppc.0.irq=""):
>
> puc0: <NetMos NM9835 Dual UART and 1284 Printer port> port
0xdf00-0xdf07,0xde00-0xde07,0xdd00-0xdd07
> ,0xdc00-0xdc07,0xdb00-0xdb07,0xda00-0xda0f irq 17 at device 1.0 on pci4
> puc0: [FILTER]
> uart0: <Non-standard ns8250 class UART with FIFOs> on puc0
> uart0: [FILTER]
> uart1: <Non-standard ns8250 class UART with FIFOs> on puc0
> uart1: [FILTER]
> ppc0: <Parallel port> on puc0
> ppc0: Generic chipset (ECP/EPP/PS2/NIBBLE) in ECP+EPP mode (EPP 1.9)
> ppbus0: <Parallel port bus> on ppc0
> lpt0: <Printer> on ppbus0
> lpt0: Polled port
>
>
> Under 9.1 the card does not attach the ppc anymore. The hint entries
>
> hint.ppc.0.at=puc0
> hint.ppc.0.irq=""
> hint.ppc.0.flags=0x2F
>
> get ignored and so it probes as ppc1 (failing due to the interrupt
> problem as it was in 7.4 without hints):
>
> puc0: <NetMos NM9835 Dual UART and 1284 Printer port> port
0xdf00-0xdf07,0xde00-0xde07,0xdd00-0xdd07
> ,0xdc00-0xdc07,0xdb00-0xdb07,0xda00-0xda0f irq 17 at device 1.0 on pci4
> uart2: <Non-standard ns8250 class UART with FIFOs> at port 1 on puc0
> uart3: <16550 or compatible> at port 2 on puc0
> ppc1: <Parallel port> at port 3 on puc0
> ppc1: Generic chipset (EPP/NIBBLE) in COMPATIBLE mode
> ppc1: failed to register interrupt handler: 6
> device_attach: ppc1 attach returned 6
>
> Any ideas? How do I construct the hint entries under 9.1 so that
>
> 1. it does not want to use the interrupt (which made it attach under 7.4)
> 2. it takes the flags 0x2F as it did before.
>
> I have also never understood if ppc itself needs to attach to
> the irq as well (I thought this all would be handled by puc).
Well, ppc wants to use puc's interrupt, and it should be finding puc's
interrupt. Ah, I think I found the bug. Try this patch to sys/dev/puc/puc.c:
Index: puc.c
===================================================================
--- puc.c (revision 245225)
+++ puc.c (working copy)
@@ -622,7 +628,7 @@ puc_bus_setup_intr(device_t dev, device_t child, s
if (cookiep == NULL || res != port->p_ires)
return (EINVAL);
/* We demand that serdev devices use filter_only interrupts. */
- if (ihand != NULL)
+ if (port->p_type == PUC_TYPE_SERIAL && ihand != NULL)
return (ENXIO);
if (rman_get_device(port->p_ires) != originator)
return (ENXIO);
This should let your ppc device re-use IRQ 17 from your puc device.
--
John Baldwin
More information about the freebsd-hardware
mailing list