summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2009-03-03 06:39:38 +0000
committermav <mav@FreeBSD.org>2009-03-03 06:39:38 +0000
commitac2078c0ef963b22f1777d1d642faaa2da649c8e (patch)
tree2cfe1b5191e9d435115791761ee967f03c5bc3b9 /sys/dev/ata
parentaa26df08afb159237eedff99b058e49190769a90 (diff)
downloadFreeBSD-src-ac2078c0ef963b22f1777d1d642faaa2da649c8e.zip
FreeBSD-src-ac2078c0ef963b22f1777d1d642faaa2da649c8e.tar.gz
Set PortMultiplier port only for SATA2 channels, where it is applicable.
Doing it on old SATA controllers like Promise PDC20375 SATA150 breaks their operation. Tested by: marcus on PDC20375
Diffstat (limited to 'sys/dev/ata')
-rw-r--r--sys/dev/ata/chipsets/ata-promise.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/dev/ata/chipsets/ata-promise.c b/sys/dev/ata/chipsets/ata-promise.c
index 7ed32df..3856535 100644
--- a/sys/dev/ata/chipsets/ata-promise.c
+++ b/sys/dev/ata/chipsets/ata-promise.c
@@ -690,8 +690,11 @@ ata_promise_mio_command(struct ata_request *request)
ATA_OUTL(ctlr->r_res2, (ch->unit + 1) << 2, 0x00000001);
- /* set portmultiplier port */
- ATA_OUTB(ctlr->r_res2, 0x4e8 + (ch->unit << 8), atadev->unit & 0x0f);
+ if ((ctlr->chip->cfg2 == PR_SATA2) ||
+ ((ctlr->chip->cfg2 == PR_CMBO2) && (ch->unit < 2))) {
+ /* set portmultiplier port */
+ ATA_OUTB(ctlr->r_res2, 0x4e8 + (ch->unit << 8), atadev->unit & 0x0f);
+ }
/* XXX SOS add ATAPI commands support later */
switch (request->u.ata.command) {
OpenPOWER on IntegriCloud