Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 8 Nov 2001 01:21:40 +0900
From:      Norikatsu Shigemura <nork@cityfujisawa.ne.jp>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   kern/31825: agp driver for i820/i840/i845/i850/i860 chipsets
Message-ID:  <011108012140.M0149913@pelsia.netmove.co.jp>

next in thread | raw e-mail | index | archive | help

>Number:         31825
>Category:       kern
>Synopsis:       agp driver for i820/i840/i845/i850/i860 chipsets
>Confidential:   no
>Severity:       non-critical
>Priority:       high
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Nov 07 08:30:02 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Norikatsu Shigemura
>Release:        FreeBSD 4.4-STABLE i386
>Organization:
Personal
>Environment:
System: FreeBSD sakura.ninth-nine.com 4.4-STABLE FreeBSD 4.4-STABLE #53: Sun Oct 28 04:18:12 JST 2001 nork@sakura.ninth-nine.com:/usr/obj/usr/src/sys/SAKURA i386
CPU: Intel PentiumIII 800EBMHz x 2
MotherBoard: SUPERMICRO PIIIDM3
Chipset: i840
GraphicsCard: Matrox Millenium G400SH(16MB)
>Description:
	I write extra agp driver for i820 from kern/31559.  But no test.
>How-To-Repeat:
>Fix:
--- sys/pci/agp_intel.c.orig	Wed Jul 19 18:48:04 2000
+++ sys/pci/agp_intel.c	Thu Nov  8 00:27:19 2001
@@ -74,6 +74,21 @@
 
  	case 0x71a18086:
  		return ("Intel 82443GX host to AGP bridge");
+
+	case 0x25008086:
+ 		return ("Intel 82820 host to AGP bridge");
+
+	case 0x1a218086:
+ 		return ("Intel 82840 host to AGP bridge");
+
+	case 0x1a308086:
+ 		return ("Intel 82845 host to AGP bridge");
+
+	case 0x25308086:
+ 		return ("Intel 82850 host to AGP bridge");
+
+	case 0x25318086:
+ 		return ("Intel 82860 host to AGP bridge");
 	};
 
 	if (pci_get_vendor(dev) == 0x8086)
@@ -102,6 +117,7 @@
 {
 	struct agp_intel_softc *sc = device_get_softc(dev);
 	struct agp_gatt *gatt;
+	u_int32_t type = pci_get_devid(dev);
 	int error;
 
 	error = agp_generic_attach(dev);
@@ -130,11 +146,52 @@
 	pci_write_config(dev, AGP_INTEL_ATTBASE, gatt->ag_physical, 4);
 	
 	/* Enable things, clear errors etc. */
-	pci_write_config(dev, AGP_INTEL_AGPCTRL, 0x2280, 4);
-	pci_write_config(dev, AGP_INTEL_NBXCFG,
-			 (pci_read_config(dev, AGP_INTEL_NBXCFG, 4)
-			  & ~(1 << 10)) | (1 << 9), 4);
-	pci_write_config(dev, AGP_INTEL_ERRSTS + 1, 7, 1);
+	switch (type) {
+	case 0x1a218086: /* i840 */
+	case 0x25308086: /* i850 */
+	case 0x25318086: /* i860 */
+		pci_write_config(dev, AGP_INTEL_AGPCTRL, 0x0000, 4);
+		pci_write_config(dev, AGP_INTEL_MCHCFG,
+				 (pci_read_config(dev, AGP_INTEL_MCHCFG, 2)
+				  | (1 << 9)), 2);
+		break;
+
+	case 0x25008086: /* i820 */
+		pci_write_config(dev, AGP_INTEL_AGPCTRL, 0x0000, 4);
+		pci_write_config(dev, AGP_INTEL_I820_RDCR,
+				 (pci_read_config(dev, AGP_INTEL_I820_RDCR, 1)
+				  | (1 << 1)), 1);
+		break;
+
+	case 0x1a308086: /* i845 */
+		pci_write_config(dev, AGP_INTEL_AGPCTRL, 0x0000, 4);
+		pci_write_config(dev, AGP_INTEL_I845_MCHCFG,
+				 (pci_read_config(dev, AGP_INTEL_I845_MCHCFG, 1)
+				  | (1 << 1)), 1);
+		break;
+
+	default: /* Intel Generic (maybe) */
+		pci_write_config(dev, AGP_INTEL_AGPCTRL, 0x2280, 4);
+		pci_write_config(dev, AGP_INTEL_NBXCFG,
+				 (pci_read_config(dev, AGP_INTEL_NBXCFG, 4)
+				  & ~(1 << 10)) | (1 << 9), 4);
+	}
+
+	switch (type) {
+	case 0x1a218086: /* i840 */
+		pci_write_config(dev, AGP_INTEL_I8XX_ERRSTS, 0xc000, 2);
+		break;
+
+	case 0x25008086: /* i820 */
+	case 0x1a308086: /* i845 */
+	case 0x25308086: /* i850 */
+	case 0x25318086: /* i860 */
+		pci_write_config(dev, AGP_INTEL_I8XX_ERRSTS, 0x001c, 2);
+		break;
+
+	default: /* Intel Generic (maybe) */
+		pci_write_config(dev, AGP_INTEL_ERRSTS + 1, 7, 1);
+	}
 
 	return 0;
 }
@@ -143,18 +200,48 @@
 agp_intel_detach(device_t dev)
 {
 	struct agp_intel_softc *sc = device_get_softc(dev);
+	u_int32_t type = pci_get_devid(dev);
 	int error;
 
 	error = agp_generic_detach(dev);
 	if (error)
 		return error;
 
-	printf("%s: set NBXCFG to %x\n", __FUNCTION__,
-			 (pci_read_config(dev, AGP_INTEL_NBXCFG, 4)
-			  & ~(1 << 9)));
-	pci_write_config(dev, AGP_INTEL_NBXCFG,
-			 (pci_read_config(dev, AGP_INTEL_NBXCFG, 4)
-			  & ~(1 << 9)), 4);
+	switch (type) {
+	case 0x1a218086: /* i840 */
+	case 0x25308086: /* i850 */
+	case 0x25318086: /* i860 */
+		printf("%s: set MCHCFG to %x\n", __FUNCTION__, (unsigned)
+				(pci_read_config(dev, AGP_INTEL_MCHCFG, 2)
+				& ~(1 << 9)));
+		pci_write_config(dev, AGP_INTEL_MCHCFG,
+				(pci_read_config(dev, AGP_INTEL_MCHCFG, 2)
+				& ~(1 << 9)), 2);
+
+	case 0x25008086: /* i820 */
+		printf("%s: set RDCR to %x\n", __FUNCTION__, (unsigned)
+				(pci_read_config(dev, AGP_INTEL_I820_RDCR, 1)
+				& ~(1 << 1)));
+		pci_write_config(dev, AGP_INTEL_I820_RDCR,
+				(pci_read_config(dev, AGP_INTEL_I820_RDCR, 1)
+				& ~(1 << 1)), 1);
+
+	case 0x1a308086: /* i845 */
+		printf("%s: set MCHCFG to %x\n", __FUNCTION__, (unsigned)
+				(pci_read_config(dev, AGP_INTEL_I845_MCHCFG, 1)
+				& ~(1 << 1)));
+		pci_write_config(dev, AGP_INTEL_MCHCFG,
+				(pci_read_config(dev, AGP_INTEL_I845_MCHCFG, 1)
+				& ~(1 << 1)), 1);
+
+	default: /* Intel Generic (maybe) */
+		printf("%s: set NBXCFG to %x\n", __FUNCTION__,
+				 (pci_read_config(dev, AGP_INTEL_NBXCFG, 4)
+				  & ~(1 << 9)));
+		pci_write_config(dev, AGP_INTEL_NBXCFG,
+				 (pci_read_config(dev, AGP_INTEL_NBXCFG, 4)
+				  & ~(1 << 9)), 4);
+	}
 	pci_write_config(dev, AGP_INTEL_ATTBASE, 0, 4);
 	AGP_SET_APERTURE(dev, sc->initial_aperture);
 	agp_free_gatt(sc->gatt);
--- sys/pci/agpreg.h.orig	Wed Jul 19 18:48:04 2000
+++ sys/pci/agpreg.h	Thu Nov  8 00:27:41 2001
@@ -57,6 +57,14 @@
 #define AGP_INTEL_ATTBASE	0xb8
 
 /*
+ * Config offsets for Intel i820/i840/i845/i850/i860 AGP chipsets.
+ */
+#define AGP_INTEL_MCHCFG	0x50
+#define AGP_INTEL_I820_RDCR	0x51
+#define AGP_INTEL_I845_MCHCFG	0x51
+#define AGP_INTEL_I8XX_ERRSTS	0xc8
+
+/*
  * Config offsets for VIA AGP chipsets.
  */
 #define AGP_VIA_GARTCTRL	0x80
>Release-Note:
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?011108012140.M0149913>