PERFORCE change 164327 for review

Alexander Motin mav at FreeBSD.org
Sun Jun 14 11:01:20 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=164327

Change 164327 by mav at mav_mavbook on 2009/06/14 11:00:31

	Allow maximum speed to be controlled via loader tunable.
	Limit default for for my onboard JMicron HBA's external port,
	which is not really eSATA capable.

Affected files ...

.. //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#28 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.h#13 edit

Differences ...

==== //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#28 (text+ko) ====

@@ -510,6 +510,15 @@
 	ch->numslots = ((ch->caps & AHCI_CAP_NCS) >> AHCI_CAP_NCS_SHIFT) + 1,
 	resource_int_value(device_get_name(dev),
 	    device_get_unit(dev), "pm_level", &ch->pm_level);
+	/* Limit speed for my onboard JMicron external port.
+	 * It is not eSATA really. */
+	if (pci_get_devid(ctlr->dev) == 0x2363197b &&
+	    pci_get_subvendor(ctlr->dev) == 0x1043 &&
+	    pci_get_subdevice(ctlr->dev) == 0x81e4 &&
+	    ch->unit == 0)
+		ch->sata_rev = 1;
+	resource_int_value(device_get_name(dev),
+	    device_get_unit(dev), "sata_rev", &ch->sata_rev);
 	mtx_init(&ch->mtx, "AHCI channel lock", NULL, MTX_DEF);
 	rid = ch->unit;
 	if (!(ch->r_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
@@ -1517,8 +1526,16 @@
 	ATA_OUTL(ch->r_mem, AHCI_P_SCTL, ATA_SC_IPM_DIS_PARTIAL |
 	    ATA_SC_IPM_DIS_SLUMBER | ATA_SC_DET_RESET);
 	DELAY(50000);
+	if (ch->sata_rev == 1)
+		val = ATA_SC_SPD_SPEED_GEN1;
+	else if (ch->sata_rev == 2)
+		val = ATA_SC_SPD_SPEED_GEN2;
+	else if (ch->sata_rev == 3)
+		val = ATA_SC_SPD_SPEED_GEN3;
+	else
+		val = 0;
 	ATA_OUTL(ch->r_mem, AHCI_P_SCTL,
-	    ATA_SC_DET_IDLE | ATA_SC_SPD_SPEED_GEN1 | ((ch->pm_level > 0) ? 0 :
+	    ATA_SC_DET_IDLE | val | ((ch->pm_level > 0) ? 0 :
 	    (ATA_SC_IPM_DIS_PARTIAL | ATA_SC_IPM_DIS_SLUMBER)));
 	DELAY(50000);
 	return (ahci_sata_connect(ch));

==== //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.h#13 (text+ko) ====

@@ -338,6 +338,7 @@
 	uint32_t		caps;		/* Controller capabilities */
 	int			numslots;	/* Number of present slots */
 	int			pm_level;	/* power management level */
+	int			sata_rev;	/* Maximum allowed SATA generation */
 
 	struct ahci_slot	slot[AHCI_MAX_SLOTS];
 	struct mtx		mtx;		/* state lock */


More information about the p4-projects mailing list