puc fails to attach serial ports
John Baldwin
jhb at freebsd.org
Tue Dec 13 08:01:48 PST 2005
On Tuesday 13 December 2005 09:49 am, Gavin Atkinson wrote:
> On Tue, 2005-12-13 at 13:38 +0000, Gavin Atkinson wrote:
> > On Mon, 2005-12-12 at 17:04 +0300, Gleb Smirnoff wrote:
> > > On Sun, Dec 11, 2005 at 06:22:40PM +0000, Gavin Atkinson wrote:
> > > G> I'm trying to use puc(4) under RELENG_6 to attach the two serial
> > > ports on G> a PCI card I have, but it's not working. It also fails
> > > under 6.0-RELEASE, G> I don't have the ability to test earlier
> > > versions.
> > > G>
> > > G> How can I further diagnose why this card is not getting recognised?
> > >
> > > Afaik, you need 'device uart', that will attach to your pucs.
> >
> > No, as far as I can tell, it's sio that should be attaching. I've
> > loaded the uart module anyway and it still fails.
> >
> > With BUS_DEBUG defined, I see the following:
> >
> > devclass_find_internal:761: looking for puc
> > devclass_add_device:1356: (null) in devclass puc
> > devclass_alloc_unit:1289: unit -1 in devclass puc
> > devclass_alloc_unit:1329: now: unit 0 in devclass puc
> > puc0: <Dolphin Peripherals 4036> port 0x18c0-0x18df irq 25 at device 9.0
> > on pci0
> > puc0: Reserved 0x20 bytes for rid 0x10 type 4 at 0x18c0
> > port rid 16 bst 0, start 18c0, end 18df
> > puc0: i 0, type sio, ressz 8, type 1
> > devclass_find_internal:761: looking for sio
> > puc: Using sio2
> > device_add_child_ordered:1542: sio at puc with order 0 as unit 2
> > make_device:1427: sio at puc as unit 2
> > devclass_find_internal:761: looking for sio
> > devclass_add_device:1356: (null) in devclass sio
> > devclass_alloc_unit:1289: unit 2 in devclass sio
> > devclass_alloc_unit:1329: now: unit 2 in devclass sio
> > puc: type 1, bar 10, offset 0
> > devclass_find_driver_internal:1019: sio in devclass puc
> > devclass_find_driver_internal:1026: not found
> > puc0: i 1, type sio, ressz 8, type 1
> > devclass_find_internal:761: looking for sio
> > puc: Using sio3
> > device_add_child_ordered:1542: sio at puc with order 0 as unit 3
> > make_device:1427: sio at puc as unit 3
> > devclass_find_internal:761: looking for sio
> > devclass_add_device:1356: (null) in devclass sio
> > devclass_alloc_unit:1289: unit 3 in devclass sio
> > devclass_alloc_unit:1329: now: unit 3 in devclass sio
> > puc: type 1, bar 10, offset 8
> > devclass_find_driver_internal:1019: sio in devclass puc
> > devclass_find_driver_internal:1026: not found
> >
> > I'm sure somebody with more newbus knowledge will know exactly what that
> > means... Are we somehow missing a devclass_add_driver(9) call from the
> > puc initialisation? I'm almost at the point now where I can't
> > understand how it could possibly be working for anyone else.
>
> OK, I've cracked what's happening. Indeed we are somehow missing a call
> to devclass_add_driver(9). I was loading puc as a module, and in that
> case the following relevant calls to devclass_add_driver are made:
>
> devclass_add_driver: adding puc to cardbus
> devclass_add_driver: adding puc to pci
> devclass_add_driver: adding puc to pccard
> devclass_add_driver: adding uart to puc
> devclass_add_driver: adding sio to pccard
> devclass_add_driver: adding sio to pci
> devclass_add_driver: adding sio to cardbus
> devclass_add_driver: adding sio to isa
> devclass_add_driver: adding sio to acpi
>
> When compiling puc into the kernel as opposed to using the module, the
> following extra call is made:
>
> devclass_add_driver: adding sio to puc
>
> I don't understand why the DRIVER_METHOD(sio, puc, ...) is being ignored
> in the puc-as-a-module case. Is this expected behaviour? I'm guessing
> it's not. I do note also that ppc(4) is not added to the puc devclass,
> presumably for the same reason. I'm also guessing things would work if
> sio was a module too.
>
> It seems odd to me that a module cannot add an in-kernel driver to it's
> devclass, but at this point I'm out of my depth as far as figuring out
> how to fix it goes.
Because sio(4) only includes sio_puc.c in the kernel if you have 'puc' in your
kernel config, and the puc kernel module only includes the puc files, it
doesn't include sio_puc.c and ppc_puc.c. uart has the same issue as well.
Looking at the three attachments, there's no reason for them to be dependent
on puc, they don't actually call any symbols in the puc(4) kernel module
itself, so they can be compiled into kernels w/o puc without causing any
harm. Then loading puc as a module would work. Here's a patch:
Index: files
===================================================================
RCS file: /usr/cvs/src/sys/conf/files,v
retrieving revision 1.1076
diff -u -r1.1076 files
--- files 12 Dec 2005 01:14:59 -0000 1.1076
+++ files 13 Dec 2005 16:00:04 -0000
@@ -815,7 +815,7 @@
dev/si/si_pci.c optional si pci
dev/sio/sio_pccard.c optional sio pccard
dev/sio/sio_pci.c optional sio pci
-dev/sio/sio_puc.c optional sio puc pci
+dev/sio/sio_puc.c optional sio pci
dev/smbus/smb.c optional smb
dev/smbus/smbconf.c optional smbus
dev/smbus/smbus.c optional smbus
@@ -928,7 +928,7 @@
dev/uart/uart_bus_isa.c optional uart isa
dev/uart/uart_bus_pccard.c optional uart pccard
dev/uart/uart_bus_pci.c optional uart pci
-dev/uart/uart_bus_puc.c optional uart puc
+dev/uart/uart_bus_puc.c optional uart
dev/uart/uart_core.c optional uart
dev/uart/uart_dbg.c optional uart gdb
dev/uart/uart_dev_ns8250.c optional uart
Index: files.alpha
===================================================================
RCS file: /usr/cvs/src/sys/conf/files.alpha,v
retrieving revision 1.123
diff -u -r1.123 files.alpha
--- files.alpha 27 Nov 2005 21:41:58 -0000 1.123
+++ files.alpha 13 Dec 2005 16:00:09 -0000
@@ -170,7 +170,7 @@
dev/hwpmc/hwpmc_alpha.c optional hwpmc
dev/kbd/kbd.c optional atkbd | sc | ukbd
dev/ppc/ppc.c optional ppc
-dev/ppc/ppc_puc.c optional ppc puc
+dev/ppc/ppc_puc.c optional ppc
dev/sio/sio.c optional sio
dev/sio/sio_isa.c optional sio isa
dev/syscons/schistory.c optional sc
Index: files.i386
===================================================================
RCS file: /usr/cvs/src/sys/conf/files.i386,v
retrieving revision 1.550
diff -u -r1.550 files.i386
--- files.i386 7 Dec 2005 21:30:46 -0000 1.550
+++ files.i386 13 Dec 2005 16:00:15 -0000
@@ -188,7 +188,7 @@
dev/nve/if_nve.c optional nve pci
dev/pcf/pcf_isa.c optional pcf
dev/ppc/ppc.c optional ppc
-dev/ppc/ppc_puc.c optional ppc puc pci
+dev/ppc/ppc_puc.c optional ppc pci
dev/random/nehemiah.c optional random
dev/sbni/if_sbni.c optional sbni
dev/sbni/if_sbni_isa.c optional sbni isa
Index: files.ia64
===================================================================
RCS file: /usr/cvs/src/sys/conf/files.ia64,v
retrieving revision 1.84
diff -u -r1.84 files.ia64
--- files.ia64 27 Nov 2005 21:41:58 -0000 1.84
+++ files.ia64 13 Dec 2005 16:00:28 -0000
@@ -59,7 +59,7 @@
dev/hwpmc/hwpmc_ia64.c optional hwpmc
dev/kbd/kbd.c optional atkbd | sc | ukbd
dev/ppc/ppc.c optional ppc isa
-dev/ppc/ppc_puc.c optional ppc puc
+dev/ppc/ppc_puc.c optional ppc
dev/syscons/schistory.c optional sc
dev/syscons/scmouse.c optional sc
dev/syscons/scterm-dumb.c optional sc
Index: files.pc98
===================================================================
RCS file: /usr/cvs/src/sys/conf/files.pc98,v
retrieving revision 1.334
diff -u -r1.334 files.pc98
--- files.pc98 7 Dec 2005 21:30:46 -0000 1.334
+++ files.pc98 13 Dec 2005 16:00:36 -0000
@@ -107,7 +107,7 @@
dev/mem/memutil.c optional mem
dev/mse/mse.c optional mse
dev/mse/mse_cbus.c optional mse isa
-dev/ppc/ppc_puc.c optional ppc puc pci
+dev/ppc/ppc_puc.c optional ppc pci
dev/sbni/if_sbni.c optional sbni
dev/sbni/if_sbni_pci.c optional sbni pci
dev/snc/dp83932.c optional snc
--
John Baldwin <jhb at FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve" = http://www.FreeBSD.org
More information about the freebsd-current
mailing list