2005-05-28 00:35:05

by Parag Warudkar

[permalink] [raw]
Subject: PCI: How to find if BIOS has already enabled the device

I am trying to trace the root cause of an annoying problem with a USB Storage
device -

My laptop's BIOS supports booting from USB devices. I have attached an
external USB HDD to a USB 2.0 port. If I boot Linux with the HDD attached and
powered on, load of OHCI-HCD module hangs the machine for around 2 minutes -
after that it recovers and all is fine. I have tried different distros
without luck, but while installing debian, I figured out that the hang
happens after ohci-hcd calls pci_enable_device() for the USB controller.

This does not happen when the boot is complete. I.e. if I attach the HDD after
boot is complete (BIOS did not get a chance to enable it beforehand) load of
ohci-hcd (during and after boot) does not hang the machine.

I think since the machine supports booting from USB HDD, the BIOS must be
enabling the USB controller and attached device early during boot, and when
ohci-hcd tries to re-enable it, it doesn't like it and leads to a hang.

My question - Is it possible to detect if the USB controller is already
enabled and skip enabling it second time?

Thanks

Parag