i386/138668: commit references a PR
dfilter service
dfilter at FreeBSD.ORG
Sat Dec 5 10:40:05 UTC 2009
The following reply was made to PR i386/138668; it has been noted by GNATS.
From: dfilter at FreeBSD.ORG (dfilter service)
To: bug-followup at FreeBSD.org
Cc:
Subject: Re: i386/138668: commit references a PR
Date: Sat, 5 Dec 2009 10:31:09 +0000 (UTC)
Author: mav
Date: Sat Dec 5 10:30:54 2009
New Revision: 200117
URL: http://svn.freebsd.org/changeset/base/200117
Log:
On Soft Reset, read device signature from FIS receive area, instead of
PxSIG register. It works better for NVidia chipsets. ahci(4) does the same.
PR: kern/140472, i386/138668
Modified:
head/sys/dev/ata/chipsets/ata-ahci.c
Modified: head/sys/dev/ata/chipsets/ata-ahci.c
==============================================================================
--- head/sys/dev/ata/chipsets/ata-ahci.c Sat Dec 5 09:13:06 2009 (r200116)
+++ head/sys/dev/ata/chipsets/ata-ahci.c Sat Dec 5 10:30:54 2009 (r200117)
@@ -824,11 +824,10 @@ ata_ahci_hardreset(device_t dev, int por
static u_int32_t
ata_ahci_softreset(device_t dev, int port)
{
- struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
struct ata_channel *ch = device_get_softc(dev);
- int offset = ch->unit << 7;
struct ata_ahci_cmd_tab *ctp =
(struct ata_ahci_cmd_tab *)(ch->dma.work + ATA_AHCI_CT_OFFSET);
+ u_int8_t *fis = ch->dma.work + ATA_AHCI_FB_OFFSET + 0x40;
if (bootverbose)
device_printf(dev, "software reset port %d...\n", port);
@@ -865,7 +864,10 @@ ata_ahci_softreset(device_t dev, int por
return (-1);
}
- return ATA_INL(ctlr->r_res2, ATA_AHCI_P_SIG + offset);
+ return (((u_int32_t)fis[6] << 24) |
+ ((u_int32_t)fis[5] << 16) |
+ ((u_int32_t)fis[4] << 8) |
+ (u_int32_t)fis[12]);
}
static void
_______________________________________________
svn-src-all at freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
More information about the freebsd-i386
mailing list