changeset 14068:2547a41b1162

3814 Support for SATA III Reviewed by: Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.com> Reviewed by: Richard Lowe <richlowe@richlowe.net> Reviewed by: Garrett D'Amore <garrett@damore.org>
author Marcel Telka <Marcel.Telka@nexenta.com>
date Mon, 24 Jun 2013 09:23:31 +0200
parents a847fb624ac7
children 13ecd3583387
files usr/src/common/pci/pci_strings.c usr/src/uts/common/io/sata/impl/sata.c usr/src/uts/common/sys/sata/impl/sata.h usr/src/uts/common/sys/sata/sata_defs.h
diffstat 4 files changed, 23 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- 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)