On Fri, Jun 24, 2011 at 12:34 AM, Mark Kettenis <mark.kette...@xs4all.nl>
wrote:
>> From: David Gwynne <l...@animata.net>
>> Date: Thu, 23 Jun 2011 23:04:27 +1000
>>
>> you dawe,
>>
>> you could point both chips at the same function...
>
> Which shows how badly the chosen name for that function really is.
>
> I did some digging into the issue.  If you look at 3400 docs, you'll
> see that description of the AHCI_REG_CAP registers says that the BIOS
> should set the BIOS should set the AHCI_REG_CAP_SPM bit (the port
> multiplier capability bit) to 0.  The documented default value for
> this register has the bit set to 1 though.  Also, the revision history
> mentions the removal of port multiplier functionality.  I guess what's
> happened here is that Intel tried to support port multipliers,
> discovered that it didn't work properly and told BIOS developers to
> disable it.  Unsurprisingly some BIOS developers didn't get the memo
> and left the bit in its default state.  So it's obvious that all
> 3400/5-Series chipset AHCI variants are affected, and we should apply
> the same fix to all of them.
>
> I looked at other chipsets as well, and the documentation strongly
> suggests that the older (ICH) chipsets have the same issue.  The
> specified default value has the bit turned on, but the bit is either
> undocumented or is documented as "set to 0 by the BIOS".  And even the
> new 6-series PCH seems to be affected.  On the other hand Intel still
> claims that port multipliers are supported by some of the ICH10
> variants.  I'm really curious wether there are any machines where port
> multipliers work on the Intel AHCI controller ports.  If not, perhaps
> we should blacklist all of the Intel chipsets.

The only mentions I can see on Intel's website of port multipliers
being supported are on overview pages for 3400 and ICH9, and when you
look at the data sheets for those, the revision history says it was
removed. For all the other chipsets I looked at, they don't mention it
on the overview page and say "port multipliers not supported" in the
data sheet. I'm not sure what to make of the default values for the
AHCI capabilities register - several of the other bits don't seem to
match up with the descriptions, even in cases where they haven't
withdrawn support for a feature.

So, I think we should blacklist at least 3400 and ICH9, since that's
where the BIOS is likely to set things up wrong. I'll post a diff that
does this shortly. Blacklisting all Intel devices seems a bit much,
but on the other hand Intel doesn't seem at all interested in
supporting port multipliers.

Where are you seeing references to port multiplier support in ICH10? I
don't think I've seen anything like that.

> Arguably, the chosen fix (the AHCI_F_IPMS_PROBE quirk) isn't quite
> right.  It is clear that (some) Intel AHCI variants simply don't
> support port multipliers, so we should just skip the probe.  On the
> other hand, as long as this quirk works, we don't need to introduce
> another one.

The quirk was introduced for ATI SB600 and SB700 AHCIs where port
multipliers do actually work, so I don't really like using it to fix
devices where they don't. I just didn't realise that's what I was
doing until now.

thanks,
-jonathan

Reply via email to