From 20dd6390506057a9bf6bcaf7af535ad525ad2b12 Mon Sep 17 00:00:00 2001 From: Michael Neumann Date: Sat, 12 Jul 2008 16:38:10 +0000 Subject: [PATCH] * Add support for the nVidia MCP61, MCP65, MCP67, MCP73 and MCP77 series chipsets. Obtained-from: FreeBSD (ata-chipset.c rev 1.198 and parts of 1.204) (ata-pci.h rev 1.77 and 1.82) * Fix clearing of nVidia interrupts. Obtained-from: FreeBSD (ata-chipset.c rev 1.214) * Add support for MCP67 (revision 0xa2) not found in FreeBSD. --- sys/dev/disk/nata/ata-chipset.c | 25 +++++++++++++++++++++---- sys/dev/disk/nata/ata-pci.h | 11 ++++++++++- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/sys/dev/disk/nata/ata-chipset.c b/sys/dev/disk/nata/ata-chipset.c index c19c867c49..9d7307a1c9 100644 --- a/sys/dev/disk/nata/ata-chipset.c +++ b/sys/dev/disk/nata/ata-chipset.c @@ -24,7 +24,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * $FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.196 2007/04/08 19:18:51 sos Exp $ - * $DragonFly: src/sys/dev/disk/nata/ata-chipset.c,v 1.14 2008/04/05 20:13:04 dillon Exp $ + * $DragonFly: src/sys/dev/disk/nata/ata-chipset.c,v 1.15 2008/07/12 16:38:10 mneumann Exp $ */ #include "opt_ata.h" @@ -3164,6 +3164,15 @@ ata_nvidia_ident(device_t dev) { ATA_NFORCE_MCP55, 0, AMDNVIDIA, NVIDIA, ATA_UDMA6, "nForce MCP55" }, { ATA_NFORCE_MCP55_S1, 0, 0, NV4|NVQ, ATA_SA300, "nForce MCP55" }, { ATA_NFORCE_MCP55_S2, 0, 0, NV4|NVQ, ATA_SA300, "nForce MCP55" }, + { ATA_NFORCE_MCP61, 0, AMDNVIDIA, NVIDIA, ATA_UDMA6, "nForce MCP61" }, + { ATA_NFORCE_MCP61_S1, 0, 0, NV4|NVQ, ATA_SA300, "nForce MCP61" }, + { ATA_NFORCE_MCP61_S2, 0, 0, NV4|NVQ, ATA_SA300, "nForce MCP61" }, + { ATA_NFORCE_MCP61_S3, 0, 0, NV4|NVQ, ATA_SA300, "nForce MCP61" }, + { ATA_NFORCE_MCP65, 0, AMDNVIDIA, NVIDIA, ATA_UDMA6, "nForce MCP65" }, + { ATA_NFORCE_MCP67, 0, AMDNVIDIA, NVIDIA, ATA_UDMA6, "nForce MCP67" }, + { ATA_NFORCE_MCP67_S2, 0, 0, NV4|NVQ, ATA_SA300, "nForce MCP67" }, + { ATA_NFORCE_MCP73, 0, AMDNVIDIA, NVIDIA, ATA_UDMA6, "nForce MCP73" }, + { ATA_NFORCE_MCP77, 0, AMDNVIDIA, NVIDIA, ATA_UDMA6, "nForce MCP77" }, { 0, 0, 0, 0, 0, 0}} ; char buffer[64] ; @@ -3266,15 +3275,23 @@ ata_nvidia_status(device_t dev) struct ata_channel *ch = device_get_softc(dev); int offset = ctlr->chip->cfg2 & NV4 ? 0x0440 : 0x0010; int shift = ch->unit << (ctlr->chip->cfg2 & NVQ ? 4 : 2); - u_int32_t istatus = ATA_INL(ctlr->r_res2, offset); + u_int32_t istatus; + + /* get interrupt status */ + if (ctlr->chip->cfg2 & NVQ) + istatus = ATA_INL(ctlr->r_res2, offset); + else + istatus = ATA_INB(ctlr->r_res2, offset); /* do we have any PHY events ? */ if (istatus & (0x0c << shift)) ata_sata_phy_check_events(dev); /* clear interrupt(s) */ - ATA_OUTB(ctlr->r_res2, offset, - (0x0f << shift) | (ctlr->chip->cfg2 & NVQ ? 0x00f000f0 : 0)); + if (ctlr->chip->cfg2 & NVQ) + ATA_OUTL(ctlr->r_res2, offset, (0x0f << shift) | 0x00f000f0); + else + ATA_OUTB(ctlr->r_res2, offset, (0x0f << shift)); /* do we have any device action ? */ return (istatus & (0x01 << shift)); diff --git a/sys/dev/disk/nata/ata-pci.h b/sys/dev/disk/nata/ata-pci.h index 6b3580ae17..5640fe96be 100644 --- a/sys/dev/disk/nata/ata-pci.h +++ b/sys/dev/disk/nata/ata-pci.h @@ -24,7 +24,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * $FreeBSD: src/sys/dev/ata/ata-pci.h,v 1.76 2007/03/09 22:23:39 sos Exp $ - * $DragonFly: src/sys/dev/disk/nata/ata-pci.h,v 1.8 2008/03/24 06:41:56 dillon Exp $ + * $DragonFly: src/sys/dev/disk/nata/ata-pci.h,v 1.9 2008/07/12 16:38:10 mneumann Exp $ */ #include @@ -237,6 +237,15 @@ struct ata_connect_task { #define ATA_NFORCE_MCP55 0x036e10de #define ATA_NFORCE_MCP55_S1 0x037e10de #define ATA_NFORCE_MCP55_S2 0x037f10de +#define ATA_NFORCE_MCP61 0x03ec10de +#define ATA_NFORCE_MCP61_S1 0x03e710de +#define ATA_NFORCE_MCP61_S2 0x03f610de +#define ATA_NFORCE_MCP61_S3 0x03f710de +#define ATA_NFORCE_MCP65 0x044810de +#define ATA_NFORCE_MCP67 0x056010de +#define ATA_NFORCE_MCP67_S2 0x055810de +#define ATA_NFORCE_MCP73 0x056c10de +#define ATA_NFORCE_MCP77 0x075910de #define ATA_PROMISE_ID 0x105a #define ATA_PDC20246 0x4d33105a -- 2.11.4.GIT