[oi-dev] AMD Hudson SATA
Jim Klimov
jimklimov at cos.ru
Thu Aug 30 10:07:23 UTC 2012
Hi all,
I am struggling to get AHCI working with my new Thinkpad E335 notebook.
According to OI Device Driver utility, it includes an "AMD Hudson SATA
Controller" when it is BIOS-enabled into SATA (AHCI) mode.
However, only twice of a dozen bootups did it see the HDD behind it,
once was in the shop when I was testing the notebook for compatibility ;)
The system did install and work stably with the controller in
"Compatibility mode" (seeing the disk as CMDK IDE), but I'd prefer
SATA working in a stable manner. Apparently, some port-reset hints,
etc. are in order as for some other controllers in the driver.
I'm trying to give a spin to recent bug report on similar issue,
but I'd take into account that my box has a different devid
(mine is pci1022,7804):
https://www.illumos.org/issues/3099
Do I understand correctly that it is enough to patch ahci.c and build
the driver and replace one on the laptop?
# gdiff -Nabur usr/src/uts/common/io/sata/adapters/ahci/ahci.c.orig
usr/src/uts/common/io/sata/adapters/ahci/ahci.c
--- usr/src/uts/common/io/sata/adapters/ahci/ahci.c.orig
2012-04-19 02:17:42.110503288 +0400
+++ usr/src/uts/common/io/sata/adapters/ahci/ahci.c 2012-08-30
13:57:09.358521233 +0400
@@ -4118,6 +4118,31 @@
"is set 0xf and no port multiplier is attached", NULL);
}
+ /* AMD Hudson D3 AHCI 0x1002 : 0x7801, reportedly similar to
SB700/750
+ * See: https://www.illumos.org/issues/3099
+ * I'll also try 0x7804 as on my box
+ */
+ if (ahci_ctlp->ahcictl_venid == 0x1002 &&
+ ( ahci_ctlp->ahcictl_devid == 0x7801 ||
+ ahci_ctlp->ahcictl_devid == 0x7804 ) ) {
+ ahci_ctlp->ahcictl_cap |= AHCI_CAP_COMMU_32BIT_DMA;
+// ahci_ctlp->ahcictl_cap |= AHCI_CAP_INIT_PORT_RESET;
+ ahci_ctlp->ahcictl_cap |= AHCI_CAP_SRST_NO_HOSTPORT;
+
+ AHCIDBG(AHCIDBG_INIT, ahci_ctlp,
+ "AMD Hudson D3 cannot do 64-bit DMA for communication "
+ "memory descriptors though CAP indicates support, "
+ "so force it to use 32-bit DMA", NULL);
+// AHCIDBG(AHCIDBG_INIT, ahci_ctlp,
+// "AMD Hudson D3 need to do a port reset during
initialization",
+// NULL);
+ AHCIDBG(AHCIDBG_INIT, ahci_ctlp,
+ "AMD Hudson D3 will get software reset failure if
pmport "
+ "is set 0xf and no port multiplier is attached", NULL);
+ }
+
+
+
/*
* Check if capabilities list is supported and if so,
* get initial capabilities pointer and clear bits 0,1.
Thanks for suggestions,
//Jim Klimov
More information about the oi-dev
mailing list