[coreboot] AMD SB800 AHCI: How to enable Staggered Spin-up?

Paul Menzel paulepanter at users.sourceforge.net
Fri Apr 12 14:50:01 CEST 2013


Dear coreboot folks,


Am Freitag, den 12.04.2013, 14:35 +0200 schrieb Paul Menzel:

> investigating, why GRUB is not able to find my SATA drive when the SATA
> controller is in AHCI mode [1], Vladimir pointed out that the controller
> does not advertise support of staggered spin-up as described in section
> 10.10 of the AHCI specification [2].
> 
> Looking at the SeaBIOS serial log with the debug level set to 8, the
> flags are printed as follows.
> 
>         AHCI: cap 0xf332ff05, ports_impl 0x3f
> 
> With the following SeaBIOS code
> 
>         $ nl -ba src/ahci.h
>         […]
>             97  /* global controller registers */
>             98  #define HOST_CAP                  0x00 /* host capabilities */
>         […]
>            109  /* HOST_CAP bits */
>            110  #define HOST_CAP_SSC              (1 << 14) /* Slumber capable */
>            111  #define HOST_CAP_AHCI             (1 << 18) /* AHCI only */
>            112  #define HOST_CAP_CLO              (1 << 24) /* Command List Override support */
>            113  #define HOST_CAP_SSS              (1 << 27) /* Staggered Spin-up */
>         […]
>         $ nl -ba src/ahci.c
>         […]
>            601      ctrl->caps = ahci_ctrl_readl(ctrl, HOST_CAP);
>            602      ctrl->ports = ahci_ctrl_readl(ctrl, HOST_PORTS_IMPL);
>            603      dprintf(2, "AHCI: cap 0x%x, ports_impl 0x%x\n",
>            604              ctrl->caps, ctrl->ports);
>         […]
> 
> this means, that for `HOST_CAP_SSS` we have to look at the 7th digit
> from the right of the hex number 0xf332ff05, which is 3, which is in
> 0011b, and now at the fourth digit from the right which is 0. So this is
> disabled. (SeaBIOS does not seem to care about the flag though.)

I forgot to add, that I looked at the Register Reference Guide (RRG) and
Register Programming Requirements (RPR) [4] and have the impression that
staggered spin-up is supported by the hardware.

> Reading the code in `src/vendorcode/amd/cimx/sb800/SATA.c` [3] I do not
> find where this bit might be set.
> 
> So any idea, why the CIMx code does not allow to enable staggered
> spin-up? Are there known problems with the hardware or is it just not
> implemented in CIMx yet and should simply be added?


Thanks,

Paul


> [1] http://lists.gnu.org/archive/html/grub-devel/2013-04/msg00058.html
> [2] http://www.intel.com/content/www/us/en/io/serial-ata/serial-ata-ahci-spec-rev1_3.html
> [3] http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/vendorcode/amd/cimx/sb800/vendorcode/amd/cimx/sb800/SATA.c;h=b7bbacdbdb84992f8761aeb215e29abd385ff2f7;hb=HEAD#l346
[4] http://www.coreboot.org/Datasheets#AMD_SB800
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20130412/978375bc/attachment.sig>


More information about the coreboot mailing list