diff options
author | mav <mav@FreeBSD.org> | 2009-03-03 06:39:38 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2009-03-03 06:39:38 +0000 |
commit | ac2078c0ef963b22f1777d1d642faaa2da649c8e (patch) | |
tree | 2cfe1b5191e9d435115791761ee967f03c5bc3b9 /sys | |
parent | aa26df08afb159237eedff99b058e49190769a90 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/dev/ata/chipsets/ata-promise.c | 7 |
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) { |