> From: Jonathan Matthew
> Date: Fri, 24 Jun 2011 16:49:50 +1000
> 
> > 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.

But the default value, and the language describing the SPM bit really
is very similar across ICH7, ICH8, ICH10, 3400/5-Series and
C200/6-Series.  For all these chipsets the datasheet says that the
BIOS should set the bit to 0.  That is no accident.  It is the same
piece of VHDL (or whatever Intel uses to design the logic) that's
simply evolving a bit from generation to generation.  But the port
multiplier functionality stays non-functional.  People have reported
issues with ICH7, ICH9 and 3400.  So really, all ICH and PCH variants
are affected and we should quirk them all.

> 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.

The following page:

http://www.intel.com/design/chipsets/matrixstorage_sb.htm

mentions that the ICH10R, ICH9R and ICH9DO have port multiplier
support.  That's probably just the marketing people being out of touch
tough, since at least for the ICH10R the data sheet explicitly says
that port multipliers are not supported.

> > 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.

Hmm, well, the SB600 databook says that port multipliers are supported
on ASIC revision A13 and above.  So I wonder if the workaround is only
necessary for the older revisions whithout port multiplier support.

Reply via email to