PERFORCE change 167851 for review
Alexander Motin
mav at FreeBSD.org
Wed Aug 26 18:45:37 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=167851
Change 167851 by mav at mav_mavbook on 2009/08/26 18:44:46
Read CAP2 register only for AHCI 1.2.
Affected files ...
.. //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#56 edit
Differences ...
==== //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#56 (text+ko) ====
@@ -122,7 +122,7 @@
struct ahci_controller *ctlr = device_get_softc(dev);
device_t child;
int error, unit, speed;
- u_int32_t version, caps, caps2;
+ u_int32_t version;
ctlr->dev = dev;
resource_int_value(device_get_name(dev),
@@ -163,46 +163,49 @@
}
/* Announce HW capabilities. */
version = ATA_INL(ctlr->r_mem, AHCI_VS);
- caps = ATA_INL(ctlr->r_mem, AHCI_CAP);
- caps2 = ATA_INL(ctlr->r_mem, AHCI_CAP2);
- speed = (caps & AHCI_CAP_ISS) >> AHCI_CAP_ISS_SHIFT;
+ ctlr->caps = ATA_INL(ctlr->r_mem, AHCI_CAP);
+ if (version >= 0x00010020)
+ ctlr->caps2 = ATA_INL(ctlr->r_mem, AHCI_CAP2);
+ speed = (ctlr->caps & AHCI_CAP_ISS) >> AHCI_CAP_ISS_SHIFT;
device_printf(dev,
"AHCI v%x.%02x with %d %sGbps ports, Port Multiplier %s\n",
((version >> 20) & 0xf0) + ((version >> 16) & 0x0f),
((version >> 4) & 0xf0) + (version & 0x0f),
- (caps & AHCI_CAP_NPMASK) + 1,
+ (ctlr->caps & AHCI_CAP_NPMASK) + 1,
((speed == 1) ? "1.5":((speed == 2) ? "3":
((speed == 3) ? "6":"?"))),
- (caps & AHCI_CAP_SPM) ?
+ (ctlr->caps & AHCI_CAP_SPM) ?
"supported" : "not supported");
if (bootverbose) {
device_printf(dev, "Caps:%s%s%s%s%s%s%s%s %sGbps",
- (caps & AHCI_CAP_64BIT) ? " 64bit":"",
- (caps & AHCI_CAP_SNCQ) ? " NCQ":"",
- (caps & AHCI_CAP_SSNTF) ? " SNTF":"",
- (caps & AHCI_CAP_SMPS) ? " MPS":"",
- (caps & AHCI_CAP_SSS) ? " SS":"",
- (caps & AHCI_CAP_SALP) ? " ALP":"",
- (caps & AHCI_CAP_SAL) ? " AL":"",
- (caps & AHCI_CAP_SCLO) ? " CLO":"",
+ (ctlr->caps & AHCI_CAP_64BIT) ? " 64bit":"",
+ (ctlr->caps & AHCI_CAP_SNCQ) ? " NCQ":"",
+ (ctlr->caps & AHCI_CAP_SSNTF) ? " SNTF":"",
+ (ctlr->caps & AHCI_CAP_SMPS) ? " MPS":"",
+ (ctlr->caps & AHCI_CAP_SSS) ? " SS":"",
+ (ctlr->caps & AHCI_CAP_SALP) ? " ALP":"",
+ (ctlr->caps & AHCI_CAP_SAL) ? " AL":"",
+ (ctlr->caps & AHCI_CAP_SCLO) ? " CLO":"",
((speed == 1) ? "1.5":((speed == 2) ? "3":
((speed == 3) ? "6":"?"))));
printf("%s%s%s%s%s%s %dcmd%s%s%s %dports\n",
- (caps & AHCI_CAP_SAM) ? " AM":"",
- (caps & AHCI_CAP_SPM) ? " PM":"",
- (caps & AHCI_CAP_FBSS) ? " FBS":"",
- (caps & AHCI_CAP_PMD) ? " PMD":"",
- (caps & AHCI_CAP_SSC) ? " SSC":"",
- (caps & AHCI_CAP_PSC) ? " PSC":"",
- ((caps & AHCI_CAP_NCS) >> AHCI_CAP_NCS_SHIFT) + 1,
- (caps & AHCI_CAP_CCCS) ? " CCC":"",
- (caps & AHCI_CAP_EMS) ? " EM":"",
- (caps & AHCI_CAP_SXS) ? " eSATA":"",
- (caps & AHCI_CAP_NPMASK) + 1);
+ (ctlr->caps & AHCI_CAP_SAM) ? " AM":"",
+ (ctlr->caps & AHCI_CAP_SPM) ? " PM":"",
+ (ctlr->caps & AHCI_CAP_FBSS) ? " FBS":"",
+ (ctlr->caps & AHCI_CAP_PMD) ? " PMD":"",
+ (ctlr->caps & AHCI_CAP_SSC) ? " SSC":"",
+ (ctlr->caps & AHCI_CAP_PSC) ? " PSC":"",
+ ((ctlr->caps & AHCI_CAP_NCS) >> AHCI_CAP_NCS_SHIFT) + 1,
+ (ctlr->caps & AHCI_CAP_CCCS) ? " CCC":"",
+ (ctlr->caps & AHCI_CAP_EMS) ? " EM":"",
+ (ctlr->caps & AHCI_CAP_SXS) ? " eSATA":"",
+ (ctlr->caps & AHCI_CAP_NPMASK) + 1);
+ }
+ if (bootverbose && version >= 0x00010020) {
device_printf(dev, "Caps2:%s%s%s\n",
- (caps2 & AHCI_CAP2_APST) ? " APST":"",
- (caps2 & AHCI_CAP2_NVMP) ? " NVMP":"",
- (caps2 & AHCI_CAP2_BOH) ? " BOH":"");
+ (ctlr->caps2 & AHCI_CAP2_APST) ? " APST":"",
+ (ctlr->caps2 & AHCI_CAP2_NVMP) ? " NVMP":"",
+ (ctlr->caps2 & AHCI_CAP2_BOH) ? " BOH":"");
}
/* Attach all channels on this controller */
for (unit = 0; unit < ctlr->channels; unit++) {
@@ -552,8 +555,8 @@
ch->dev = dev;
ch->unit = (intptr_t)device_get_ivars(dev);
- ch->caps = ATA_INL(ctlr->r_mem, AHCI_CAP);
- ch->caps2 = ATA_INL(ctlr->r_mem, AHCI_CAP2);
+ ch->caps = ctlr->caps;
+ ch->caps2 = ctlr->caps2;
ch->numslots = ((ch->caps & AHCI_CAP_NCS) >> AHCI_CAP_NCS_SHIFT) + 1,
mtx_init(&ch->mtx, "AHCI channel lock", NULL, MTX_DEF);
resource_int_value(device_get_name(dev),
More information about the p4-projects
mailing list