Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Sep 2009 17:28:21 +0300
From:      Andriy Gapon <avg@freebsd.org>
To:        John Baldwin <jhb@freebsd.org>
Cc:        freebsd-current@freebsd.org, freebsd-usb@freebsd.org, Hans Petter Selasky <hselasky@c2i.net>
Subject:   Re: sb600/sb700 ohci experimental patch
Message-ID:  <4AC0C805.6070909@freebsd.org>
In-Reply-To: <200909281010.50427.jhb@FreeBSD.org>
References:  <4ABA36B1.9070706@icyb.net.ua> <200909280748.45528.john@baldwin.cx> <4AC0C060.20109@freebsd.org> <200909281010.50427.jhb@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4AC0C805.6070909>