From owner-freebsd-bugs Sun Oct 28 10:10:27 2001 Delivered-To: freebsd-bugs@hub.freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id D45A037B406 for ; Sun, 28 Oct 2001 10:10:00 -0800 (PST) Received: (from gnats@localhost) by freefall.freebsd.org (8.11.4/8.11.4) id f9SIA0Q27884; Sun, 28 Oct 2001 10:10:00 -0800 (PST) (envelope-from gnats) Received: from pelsia.netmove.co.jp (pelsia.netmove.co.jp [202.241.207.159]) by hub.freebsd.org (Postfix) with ESMTP id BDF8B37B401 for ; Sun, 28 Oct 2001 10:08:22 -0800 (PST) Received: (from nork@localhost) by pelsia.netmove.co.jp (8.11.6/8.11.6) id f9SI8LC97764; Mon, 29 Oct 2001 03:08:21 +0900 (JST) (envelope-from nork) Message-Id: <011029030821.M0197428@pelsia.netmove.co.jp> Date: Mon, 29 Oct 2001 03:08:21 +0900 From: nork@cityfujisawa.ne.jp (Norikatsu Shigemura) Reply-To: nork@cityfujisawa.ne.jp (Norikatsu Shigemura) To: FreeBSD-gnats-submit@freebsd.org X-Send-Pr-Version: 3.113 Subject: kern/31559: agp driver patch for i840/i845/i850/i860 Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org >Number: 31559 >Category: kern >Synopsis: agp driver patch for i840/i845/i850/i860 >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: Sun Oct 28 10:10:00 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 agp driver for i840/i845/i850/i860. I test and My environment is ok(XFree86-DRI). Probably i850 is ok. I refer Linux 2.4.10 about i840/i850. But I refer Intel DataSheet about i845/i860. So I have no confidence in myself about i845/i860. >How-To-Repeat: >Fix: --- sys/pci/agp_intel.c.orig Wed Jul 19 18:48:04 2000 +++ sys/pci/agp_intel.c Sun Oct 28 03:48:09 2001 @@ -74,6 +74,18 @@ case 0x71a18086: return ("Intel 82443GX 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 +114,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 +143,44 @@ 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 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 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 +189,40 @@ 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 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 Sun Oct 28 03:45:05 2001 @@ -57,6 +57,13 @@ #define AGP_INTEL_ATTBASE 0xb8 /* + * Config offsets for Intel i840/i845/i850/i860 AGP chipsets. + */ +#define AGP_INTEL_MCHCFG 0x50 +#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