Re: sb600/sb700 ohci experimental patch

From: Andriy Gapon <avg_at_freebsd.org>
Date: Mon, 28 Sep 2009 17:28:21 +0300
on 28/09/2009 17:10 John Baldwin said the following:
> On Monday 28 September 2009 9:55:44 am Andriy Gapon wrote:
>> on 28/09/2009 14:48 John Baldwin said the following:
>>> I don't think you can do this because it is a "feature" to not disable SMM if 
>>> ohci(4) is not loaded so that a USB keyboard works when the USB driver isn't 
>>> loaded via PS/2 emulation, even when the OS is running.
>> Very good point.
>>
>>> I am curious if we 
>>> really need to do the handover for each controller or if disabling it for 
>>> ohci0 effectively disables it for all controllers?  What do other OS's do?
>>>
>> Don't have an answer about other OSes.
>> But OHCI controllers have individual "used by SMM" bits and taking over one
>> controller doesn't affect the bits of the other controllers - they remain set.
>> Not that it means that SMM code actually keeps on controlling them.
>>
>> Actually, just checked - Linux also does it per controller:
>> http://lxr.linux.no/#linux+v2.6.31/drivers/usb/host/ohci-hcd.c#L495
> 
> Hmm, it seems Linux now disables SMM for USB controllers (ohci, ehci, and uhci)
> via PCI quirks rather than doing it in the device drivers themselves, which
> matches your original suggestion.  I'm not sure how best to fix that while also
> allowing USB to work w/o drivers loaded.
> 

I looked at the quirk code (for OHCI only) and they don't disable SMI - they do
exactly the same takeover dance, only earlier:
http://lxr.linux.no/#linux+v2.6.31/drivers/usb/host/pci-quirks.c#L169

I.e. this actually matches what Hans suggested before - first early takeover of
all controllers, then probe/attach pass.
Not sure how to implement this best in our architecture - also using quirks or
perhaps something along the lines of multi-pass? :-)

-- 
Andriy Gapon
Received on Mon Sep 28 2009 - 12:28:25 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:56 UTC