# HG changeset patch # User Marcel Telka # Date 1372058611 -7200 # Node ID 2547a41b11621f274f39a44192da7f1422f0db39 # Parent a847fb624ac73331b33f245256e3c9d02f543b15 3814 Support for SATA III Reviewed by: Johann 'Myrkraverk' Oskarsson Reviewed by: Richard Lowe Reviewed by: Garrett D'Amore diff -r a847fb624ac7 -r 2547a41b1162 usr/src/common/pci/pci_strings.c --- 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 #include @@ -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", diff -r a847fb624ac7 -r 2547a41b1162 usr/src/uts/common/io/sata/impl/sata.c --- 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 |= diff -r a847fb624ac7 -r 2547a41b1162 usr/src/uts/common/sys/sata/impl/sata.h --- 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) diff -r a847fb624ac7 -r 2547a41b1162 usr/src/uts/common/sys/sata/sata_defs.h --- 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)