summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2005-06-05 18:37:56 +0000
committersos <sos@FreeBSD.org>2005-06-05 18:37:56 +0000
commit86f5e64b886eb113ffce74b106a891398bd242ec (patch)
tree901accc13672aa502e01a7793ec0a5c4d8371f71 /sys/dev/ata
parent89a1617cdad4c4ac82f1821cc1b4fcda8e8e3acf (diff)
downloadFreeBSD-src-86f5e64b886eb113ffce74b106a891398bd242ec.zip
FreeBSD-src-86f5e64b886eb113ffce74b106a891398bd242ec.tar.gz
Unbreak the ICH6 AHCI support in !48Bit mode.
Diffstat (limited to 'sys/dev/ata')
-rw-r--r--sys/dev/ata/ata-chipset.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/dev/ata/ata-chipset.c b/sys/dev/ata/ata-chipset.c
index 1c0541c..c640fe2 100644
--- a/sys/dev/ata/ata-chipset.c
+++ b/sys/dev/ata/ata-chipset.c
@@ -417,7 +417,11 @@ ata_ahci_setup_fis(u_int8_t *fis, struct ata_request *request)
fis[idx++] = request->u.ata.lba;
fis[idx++] = request->u.ata.lba >> 8;
fis[idx++] = request->u.ata.lba >> 16;
- fis[idx++] = ATA_D_LBA | atadev->unit;
+ fis[idx] = ATA_D_LBA | atadev->unit;
+ if (atadev->flags & ATA_D_48BIT_ACTIVE)
+ idx++;
+ else
+ fis[idx++] |= (request->u.ata.lba >> 24 & 0x0f);
fis[idx++] = request->u.ata.lba >> 24;
fis[idx++] = request->u.ata.lba >> 32;
@@ -1498,7 +1502,8 @@ ata_intel_reset(device_t dev)
/* ICH6 has 4 SATA ports as master/slave on 2 channels so deal with pairs */
if (ctlr->chip->chipid == ATA_I82801FB_S1 ||
- ctlr->chip->chipid == ATA_I82801FB_R1) {
+ ctlr->chip->chipid == ATA_I82801FB_R1 ||
+ ctlr->chip->chipid == ATA_I82801FB_M) {
mask = (0x0005 << ch->unit);
}
else {
OpenPOWER on IntegriCloud