Re: puc fails to attach serial ports

From: Gavin Atkinson <gavin.atkinson_at_ury.york.ac.uk>
Date: Tue, 13 Dec 2005 14:49:27 +0000
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.

Gavin

Gavin
Received on Tue Dec 13 2005 - 13:49:40 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:49 UTC