3814 Support for SATA III Reviewed by: Johann 'Myrkraverk' Oskarsson <
[email protected]> Reviewed by: Richard Lowe <
[email protected]> Reviewed by: Garrett D'Amore <
[email protected]>
--- a/usr/src/common/pci/pci_strings.c Mon Jun 24 09:23:02 2013 +0200
+++ b/usr/src/common/pci/pci_strings.c Mon Jun 24 09:23:31 2013 +0200
@@ -23,8 +23,9 @@
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-
-#pragma ident "%Z%%M% %I% %E% SMI"
+/*
+ * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
+ */
#include <sys/types.h>
#include <sys/stat.h>
@@ -42,7 +43,7 @@
1, 5, 0x20, "ATA controller with single DMA", "ata",
1, 5, 0x30, "ATA controller with chained DMA", "ata",
1, 6, 0, "Serial ATA Direct Port Access (DPA)", "sata",
- 1, 6, 1, "SATA AHCI 1.0 Interface", "sata",
+ 1, 6, 1, "SATA AHCI Interface", "sata",
1, 6, 2, "Serial Storage Bus Interface", "sata",
1, 7, 0, "Serial Attached SCSI Controller", "sas",
1, 7, 1, "Serial Storage Bus Interface", "sas",
--- a/usr/src/uts/common/io/sata/impl/sata.c Mon Jun 24 09:23:02 2013 +0200
+++ b/usr/src/uts/common/io/sata/impl/sata.c Mon Jun 24 09:23:31 2013 +0200
@@ -12803,7 +12803,9 @@
(sdinfo->satadrv_id.ai_features87 & SATA_SMART_SELF_TEST_SUPPORTED))
(void) strlcat(msg_buf, ", SMART self-test", MAXPATHLEN);
cmn_err(CE_CONT, "?\t %s\n", msg_buf);
- if (sdinfo->satadrv_features_support & SATA_DEV_F_SATA2)
+ if (sdinfo->satadrv_features_support & SATA_DEV_F_SATA3)
+ cmn_err(CE_CONT, "?\tSATA Gen3 signaling speed (6.0Gbps)\n");
+ else if (sdinfo->satadrv_features_support & SATA_DEV_F_SATA2)
cmn_err(CE_CONT, "?\tSATA Gen2 signaling speed (3.0Gbps)\n");
else if (sdinfo->satadrv_features_support & SATA_DEV_F_SATA1)
cmn_err(CE_CONT, "?\tSATA Gen1 signaling speed (1.5Gbps)\n");
@@ -13764,7 +13766,11 @@
sdinfo->satadrv_features_support |=
SATA_DEV_F_NCQ;
if (sdinfo->satadrv_id.ai_satacap &
- (SATA_1_SPEED | SATA_2_SPEED)) {
+ (SATA_1_SPEED | SATA_2_SPEED | SATA_3_SPEED)) {
+ if (sdinfo->satadrv_id.ai_satacap &
+ SATA_3_SPEED)
+ sdinfo->satadrv_features_support |=
+ SATA_DEV_F_SATA3;
if (sdinfo->satadrv_id.ai_satacap &
SATA_2_SPEED)
sdinfo->satadrv_features_support |=
--- a/usr/src/uts/common/sys/sata/impl/sata.h Mon Jun 24 09:23:02 2013 +0200
+++ b/usr/src/uts/common/sys/sata/impl/sata.h Mon Jun 24 09:23:31 2013 +0200
@@ -376,6 +376,7 @@
#define SATA_DEV_F_SATA1 0x10
#define SATA_DEV_F_SATA2 0x20
#define SATA_DEV_F_TCQ 0x40 /* Non NCQ tagged queuing */
+#define SATA_DEV_F_SATA3 0x80
/*
* Device features enabled (satadrv_features_enabled)
--- a/usr/src/uts/common/sys/sata/sata_defs.h Mon Jun 24 09:23:02 2013 +0200
+++ b/usr/src/uts/common/sys/sata/sata_defs.h Mon Jun 24 09:23:31 2013 +0200
@@ -418,6 +418,7 @@
/* SATA Capabilites bits (word 76) */
#define SATA_NCQ 0x100
+#define SATA_3_SPEED 0x008
#define SATA_2_SPEED 0x004
#define SATA_1_SPEED 0x002
@@ -745,9 +746,10 @@
#define SSTATUS_SET_DET(x, new_val) \
(x = (x & ~SSTATUS_DET) | (new_val & SSTATUS_DET))
-#define SSTATUS_SPD_NOLIMIT 0 /* No speed limit */
-#define SSTATUS_SPD_GEN1 1 /* Limit Gen 1 rate */
-#define SSTATUS_SPD_GEN2 2 /* Limit Gen 2 rate */
+#define SSTATUS_SPD_NODEV 0 /* No device present */
+#define SSTATUS_SPD_GEN1 1 /* Gen 1 rate negotiated */
+#define SSTATUS_SPD_GEN2 2 /* Gen 2 rate negotiated */
+#define SSTATUS_SPD_GEN3 3 /* Gen 3 rate negotiated */
/*
* sstatus IPM values
@@ -794,10 +796,10 @@
#define SCONTROL_IPM_SHIFT 8
#define SCONTROL_SPM_SHIFT 12
-#define SCONTROL_DET (0xf << SSTATUS_DET_SHIFT)
-#define SCONTROL_SPD (0xf << SSTATUS_SPD_SHIFT)
-#define SCONTROL_IPM (0xf << SSTATUS_IPM_SHIFT)
-#define SCONTROL_SPM (0xf << SSTATUS_SPM_SHIFT)
+#define SCONTROL_DET (0xf << SCONTROL_DET_SHIFT)
+#define SCONTROL_SPD (0xf << SCONTROL_SPD_SHIFT)
+#define SCONTROL_IPM (0xf << SCONTROL_IPM_SHIFT)
+#define SCONTROL_SPM (0xf << SCONTROL_SPM_SHIFT)
#define SCONTROL_GET_DET(x) \
(x & SCONTROL_DET)
@@ -812,6 +814,7 @@
#define SCONTROL_SPD_NOLIMIT 0 /* No speed limit */
#define SCONTROL_SPD_GEN1 1 /* Limit Gen 1 rate */
#define SCONTROL_SPD_GEN2 2 /* Limit Gen 2 rate */
+#define SCONTROL_SPD_GEN3 3 /* Limit Gen 3 rate */
#define SCONTROL_GET_IPM(x) \
((x & SCONTROL_IPM) >> SCONTROL_IPM_SHIFT)