From f7841f3ce2d9fcb2ed0239da0f3088983d102f56 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Tue, 9 Dec 2003 19:40:56 +0000 Subject: [PATCH] This patch adds a bunch of stuff from FreeBSD5. It consistantly makes vendor specific drivers depend on agp, consistantly checks the gart size != 0, changes agp_generic_enable to the FreeBSD5 function, initializing the device as v2 or v3 accordingly, syncs up agpio.h, and adds a couple PCI Ids from FreeBSD5. Submitted-by: Craig Dooley --- share/man/man4/agp.4 | 19 +++--- sys/dev/agp/agp.c | 128 ++++++++++++++++++++++++++++++++++----- sys/dev/agp/agp_ali.c | 8 ++- sys/dev/agp/agp_amd.c | 8 ++- sys/dev/agp/agp_i810.c | 8 ++- sys/dev/agp/agp_intel.c | 20 +++++- sys/dev/agp/agp_nvidia.c | 6 +- sys/dev/agp/agp_sis.c | 10 ++- sys/dev/agp/agp_via.c | 14 ++++- sys/dev/agp/agpreg.h | 28 ++++++++- 10 files changed, 218 insertions(+), 31 deletions(-) diff --git a/share/man/man4/agp.4 b/share/man/man4/agp.4 index afed55a0d9..3351b0363b 100644 --- a/share/man/man4/agp.4 +++ b/share/man/man4/agp.4 @@ -23,7 +23,7 @@ .\" SUCH DAMAGE. .\" .\" $FreeBSD: src/share/man/man4/agp.4,v 1.2.2.3 2003/02/25 15:27:32 trhodes Exp $ -.\" $DragonFly: src/share/man/man4/agp.4,v 1.2 2003/06/17 04:36:58 dillon Exp $ +.\" $DragonFly: src/share/man/man4/agp.4,v 1.3 2003/12/09 19:40:54 dillon Exp $ .\" .Dd October 5, 2001 .Dt AGP 4 @@ -42,16 +42,21 @@ the following devices: .It Ali M1541 host-to-AGP bridge .It -.\" 761 not in -stable -AMD 751 host-to-AGP bridge +AMD 751, 761, 762 host-to-AGP bridge .It -Intel i820, i840, i845, i850, and i860 host-to-AGP bridge +Intel 440 LX, 440 BX, 440 GX, i815, and i820 host-to-AGP bridge .It -Intel i810, i810-DC100, i810E, and i815 SVGA controllers +Intel i830, i840, i845, i850, and i855 host-to-AGP bridge .It -Intel 82443GX host-to-AGP bridge +Intel i860, i865, and i875 host-to-AGP bridge .It -SiS 5591 host-to-AGP bridge +Intel i810, i810-DC100, i810E, i815, i830, and i845 SVGA controllers +.It +NVIDIA nForce, and nForce2 host-to-AGP bridge +.It +SiS 5591, and 648 host-to-AGP bridge +.It +Via Apollo KT133A, MVP4, VP3, MVP3, Pro 133A, and Pro host-to-AGP bridge .El .Pp The most common application of diff --git a/sys/dev/agp/agp.c b/sys/dev/agp/agp.c index 2c40a910a4..3b5557e7d5 100644 --- a/sys/dev/agp/agp.c +++ b/sys/dev/agp/agp.c @@ -24,7 +24,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/pci/agp.c,v 1.3.2.4 2002/08/11 19:58:12 alc Exp $ - * $DragonFly: src/sys/dev/agp/agp.c,v 1.7 2003/08/07 21:16:48 dillon Exp $ + * $DragonFly: src/sys/dev/agp/agp.c,v 1.8 2003/12/09 19:40:56 dillon Exp $ */ #include "opt_bus.h" @@ -177,6 +177,11 @@ agp_alloc_gatt(device_t dev) "allocating GATT for aperture of size %dM\n", apsize / (1024*1024)); + if (entries == 0) { + device_printf(dev, "bad aperture size\n"); + return NULL; + } + gatt = malloc(sizeof(struct agp_gatt), M_AGP, M_NOWAIT); if (!gatt) return 0; @@ -279,18 +284,83 @@ agp_generic_detach(device_t dev) return 0; } -int -agp_generic_enable(device_t dev, u_int32_t mode) +/* + * This does the enable logic for v3, with the same topology + * restrictions as in place for v2 -- one bus, one device on the bus. + */ +static int +agp_v3_enable(device_t dev, device_t mdev, u_int32_t mode) { - device_t mdev = agp_find_display(); u_int32_t tstatus, mstatus; u_int32_t command; - int rq, sba, fw, rate;; + int rq, sba, fw, rate, arqsz, cal; - if (!mdev) { - AGP_DPF("can't find display\n"); - return ENXIO; - } + tstatus = pci_read_config(dev, agp_find_caps(dev) + AGP_STATUS, 4); + mstatus = pci_read_config(mdev, agp_find_caps(mdev) + AGP_STATUS, 4); + + /* Set RQ to the min of mode, tstatus and mstatus */ + rq = AGP_MODE_GET_RQ(mode); + if (AGP_MODE_GET_RQ(tstatus) < rq) + rq = AGP_MODE_GET_RQ(tstatus); + if (AGP_MODE_GET_RQ(mstatus) < rq) + rq = AGP_MODE_GET_RQ(mstatus); + + /* + * ARQSZ - Set the value to the maximum one. + * Don't allow the mode register to override values. + */ + arqsz = AGP_MODE_GET_ARQSZ(mode); + if (AGP_MODE_GET_ARQSZ(tstatus) > rq) + rq = AGP_MODE_GET_ARQSZ(tstatus); + if (AGP_MODE_GET_ARQSZ(mstatus) > rq) + rq = AGP_MODE_GET_ARQSZ(mstatus); + + /* Calibration cycle - don't allow override by mode register */ + cal = AGP_MODE_GET_CAL(tstatus); + if (AGP_MODE_GET_CAL(mstatus) < cal) + cal = AGP_MODE_GET_CAL(mstatus); + + /* SBA must be supported for AGP v3. */ + sba = 1; + + /* Set FW if all three support it. */ + fw = (AGP_MODE_GET_FW(tstatus) + & AGP_MODE_GET_FW(mstatus) + & AGP_MODE_GET_FW(mode)); + + /* Figure out the max rate */ + rate = (AGP_MODE_GET_RATE(tstatus) + & AGP_MODE_GET_RATE(mstatus) + & AGP_MODE_GET_RATE(mode)); + if (rate & AGP_MODE_V3_RATE_8x) + rate = AGP_MODE_V3_RATE_8x; + else + rate = AGP_MODE_V3_RATE_4x; + if (bootverbose) + device_printf(dev, "Setting AGP v3 mode %d\n", rate * 4); + + pci_write_config(dev, agp_find_caps(dev) + AGP_COMMAND, 0, 4); + + /* Construct the new mode word and tell the hardware */ + command = AGP_MODE_SET_RQ(0, rq); + command = AGP_MODE_SET_ARQSZ(command, arqsz); + command = AGP_MODE_SET_CAL(command, cal); + command = AGP_MODE_SET_SBA(command, sba); + command = AGP_MODE_SET_FW(command, fw); + command = AGP_MODE_SET_RATE(command, rate); + command = AGP_MODE_SET_AGP(command, 1); + pci_write_config(dev, agp_find_caps(dev) + AGP_COMMAND, command, 4); + pci_write_config(mdev, agp_find_caps(mdev) + AGP_COMMAND, command, 4); + + return 0; +} + +static int +agp_v2_enable(device_t dev, device_t mdev, u_int32_t mode) +{ + u_int32_t tstatus, mstatus; + u_int32_t command; + int rq, sba, fw, rate; tstatus = pci_read_config(dev, agp_find_caps(dev) + AGP_STATUS, 4); mstatus = pci_read_config(mdev, agp_find_caps(mdev) + AGP_STATUS, 4); @@ -316,12 +386,14 @@ agp_generic_enable(device_t dev, u_int32_t mode) rate = (AGP_MODE_GET_RATE(tstatus) & AGP_MODE_GET_RATE(mstatus) & AGP_MODE_GET_RATE(mode)); - if (rate & AGP_MODE_RATE_4x) - rate = AGP_MODE_RATE_4x; - else if (rate & AGP_MODE_RATE_2x) - rate = AGP_MODE_RATE_2x; + if (rate & AGP_MODE_V2_RATE_4x) + rate = AGP_MODE_V2_RATE_4x; + else if (rate & AGP_MODE_V2_RATE_2x) + rate = AGP_MODE_V2_RATE_2x; else - rate = AGP_MODE_RATE_1x; + rate = AGP_MODE_V2_RATE_1x; + if (bootverbose) + device_printf(dev, "Setting AGP v2 mode %d\n", rate); /* Construct the new mode word and tell the hardware */ command = AGP_MODE_SET_RQ(0, rq); @@ -335,6 +407,34 @@ agp_generic_enable(device_t dev, u_int32_t mode) return 0; } +int +agp_generic_enable(device_t dev, u_int32_t mode) +{ + device_t mdev = agp_find_display(); + u_int32_t tstatus, mstatus; + + if (!mdev) { + AGP_DPF("can't find display\n"); + return ENXIO; + } + + tstatus = pci_read_config(dev, agp_find_caps(dev) + AGP_STATUS, 4); + mstatus = pci_read_config(mdev, agp_find_caps(mdev) + AGP_STATUS, 4); + + /* + * Check display and bridge for AGP v3 support. AGP v3 allows + * more variety in topology than v2, e.g. multiple AGP devices + * attached to one bridge, or multiple AGP bridges in one + * system. This doesn't attempt to address those situations, + * but should work fine for a classic single AGP slot system + * with AGP v3. + */ + if (AGP_MODE_GET_MODE_3(tstatus) && AGP_MODE_GET_MODE_3(mstatus)) + return (agp_v3_enable(dev, mdev, mode)); + else + return (agp_v2_enable(dev, mdev, mode)); +} + struct agp_memory * agp_generic_alloc_memory(device_t dev, int type, vm_size_t size) { diff --git a/sys/dev/agp/agp_ali.c b/sys/dev/agp/agp_ali.c index 29b09056d8..69fca19b02 100644 --- a/sys/dev/agp/agp_ali.c +++ b/sys/dev/agp/agp_ali.c @@ -24,7 +24,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/pci/agp_ali.c,v 1.1.2.1 2000/07/19 09:48:04 ru Exp $ - * $DragonFly: src/sys/dev/agp/agp_ali.c,v 1.3 2003/08/07 21:16:48 dillon Exp $ + * $DragonFly: src/sys/dev/agp/agp_ali.c,v 1.4 2003/12/09 19:40:56 dillon Exp $ */ #include "opt_bus.h" @@ -100,6 +100,10 @@ agp_ali_attach(device_t dev) return error; sc->initial_aperture = AGP_GET_APERTURE(dev); + if (sc->initial_aperture == 0) { + device_printf(dev, "bad initial aperture size, disabling\n"); + return ENXIO; + } for (;;) { gatt = agp_alloc_gatt(dev); @@ -263,3 +267,5 @@ static driver_t agp_ali_driver = { static devclass_t agp_devclass; DRIVER_MODULE(agp_ali, pci, agp_ali_driver, agp_devclass, 0, 0); +MODULE_DEPEND(agp_ali, agp, 1, 1, 1); +MODULE_DEPEND(agp_ali, pci, 1, 1, 1); diff --git a/sys/dev/agp/agp_amd.c b/sys/dev/agp/agp_amd.c index 8d8d9de6b4..01c5b56ee9 100644 --- a/sys/dev/agp/agp_amd.c +++ b/sys/dev/agp/agp_amd.c @@ -24,7 +24,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/pci/agp_amd.c,v 1.3.2.4 2002/04/25 23:41:36 cokane Exp $ - * $DragonFly: src/sys/dev/agp/agp_amd.c,v 1.3 2003/08/07 21:16:48 dillon Exp $ + * $DragonFly: src/sys/dev/agp/agp_amd.c,v 1.4 2003/12/09 19:40:56 dillon Exp $ */ #include "opt_bus.h" @@ -238,6 +238,10 @@ agp_amd_attach(device_t dev) sc->bsh = rman_get_bushandle(sc->regs); sc->initial_aperture = AGP_GET_APERTURE(dev); + if (sc->initial_aperture == 0) { + device_printf(dev, "bad initial aperture size, disabling\n"); + return ENXIO; + } for (;;) { gatt = agp_amd_alloc_gatt(dev); @@ -416,3 +420,5 @@ static driver_t agp_amd_driver = { static devclass_t agp_devclass; DRIVER_MODULE(agp_amd, pci, agp_amd_driver, agp_devclass, 0, 0); +MODULE_DEPEND(agp_amd, agp, 1, 1, 1); +MODULE_DEPEND(agp_amd, pci, 1, 1, 1); diff --git a/sys/dev/agp/agp_i810.c b/sys/dev/agp/agp_i810.c index fd555e9060..74c0d45dca 100644 --- a/sys/dev/agp/agp_i810.c +++ b/sys/dev/agp/agp_i810.c @@ -25,7 +25,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/pci/agp_i810.c,v 1.1.2.5 2002/09/15 08:45:41 anholt Exp $ - * $DragonFly: src/sys/dev/agp/agp_i810.c,v 1.3 2003/08/07 21:16:48 dillon Exp $ + * $DragonFly: src/sys/dev/agp/agp_i810.c,v 1.4 2003/12/09 19:40:56 dillon Exp $ */ /* @@ -239,6 +239,10 @@ agp_i810_attach(device_t dev) sc->bsh = rman_get_bushandle(sc->regs); sc->initial_aperture = AGP_GET_APERTURE(dev); + if (sc->initial_aperture == 0) { + device_printf(dev, "bad initial aperture size, disabling\n"); + return ENXIO; + } gatt = malloc( sizeof(struct agp_gatt), M_AGP, M_NOWAIT); if (!gatt) { @@ -629,3 +633,5 @@ static driver_t agp_i810_driver = { static devclass_t agp_devclass; DRIVER_MODULE(agp_i810, pci, agp_i810_driver, agp_devclass, 0, 0); +MODULE_DEPEND(agp_i810, agp, 1, 1, 1); +MODULE_DEPEND(agp_i810, pci, 1, 1, 1); diff --git a/sys/dev/agp/agp_intel.c b/sys/dev/agp/agp_intel.c index 5c5b42bc85..38ddcdb4c6 100644 --- a/sys/dev/agp/agp_intel.c +++ b/sys/dev/agp/agp_intel.c @@ -24,7 +24,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/pci/agp_intel.c,v 1.1.2.5 2003/06/02 17:38:19 jhb Exp $ - * $DragonFly: src/sys/dev/agp/agp_intel.c,v 1.3 2003/08/07 21:16:48 dillon Exp $ + * $DragonFly: src/sys/dev/agp/agp_intel.c,v 1.4 2003/12/09 19:40:56 dillon Exp $ */ #include "opt_bus.h" @@ -98,11 +98,17 @@ agp_intel_match(device_t dev) case 0x25308086: return ("Intel 82850 host to AGP bridge"); + case 0x33408086: + return ("Intel 82855 host to AGP bridge"); + case 0x25318086: return ("Intel 82860 host to AGP bridge"); case 0x25708086: return ("Intel 82865 host to AGP bridge"); + + case 0x25788086: + return ("Intel 82875P host to AGP bridge"); }; if (pci_get_vendor(dev) == 0x8086) @@ -146,6 +152,10 @@ agp_intel_attach(device_t dev) MAX_APSIZE; pci_write_config(dev, AGP_INTEL_APSIZE, value, 1); sc->initial_aperture = AGP_GET_APERTURE(dev); + if (sc->initial_aperture == 0) { + device_printf(dev, "bad initial aperture size, disabling\n"); + return ENXIO; + } for (;;) { gatt = agp_alloc_gatt(dev); @@ -201,7 +211,9 @@ agp_intel_attach(device_t dev) break; case 0x1a308086: /* i845 */ + case 0x33408086: /* i855 */ case 0x25708086: /* i865 */ + case 0x25788086: /* i875P */ pci_write_config(dev, AGP_INTEL_I845_MCHCFG, (pci_read_config(dev, AGP_INTEL_I845_MCHCFG, 1) | (1 << 1)), 1); @@ -222,8 +234,10 @@ agp_intel_attach(device_t dev) case 0x25018086: /* i820 */ case 0x1a308086: /* i845 */ case 0x25308086: /* i850 */ + case 0x33408086: /* i855 */ case 0x25318086: /* i860 */ case 0x25708086: /* i865 */ + case 0x25788086: /* i875P */ pci_write_config(dev, AGP_INTEL_I8XX_ERRSTS, 0x00ff, 2); break; @@ -266,7 +280,9 @@ agp_intel_detach(device_t dev) & ~(1 << 1)), 1); case 0x1a308086: /* i845 */ + case 0x33408086: /* i855 */ case 0x25708086: /* i865 */ + case 0x25788086: /* i875P */ printf("%s: set MCHCFG to %x\n", __FUNCTION__, (unsigned) (pci_read_config(dev, AGP_INTEL_I845_MCHCFG, 1) & ~(1 << 1))); @@ -396,3 +412,5 @@ static driver_t agp_intel_driver = { static devclass_t agp_devclass; DRIVER_MODULE(agp_intel, pci, agp_intel_driver, agp_devclass, 0, 0); +MODULE_DEPEND(agp_intel, agp, 1, 1, 1); +MODULE_DEPEND(agp_intel, pci, 1, 1, 1); diff --git a/sys/dev/agp/agp_nvidia.c b/sys/dev/agp/agp_nvidia.c index 4e2910839a..da1fd45058 100644 --- a/sys/dev/agp/agp_nvidia.c +++ b/sys/dev/agp/agp_nvidia.c @@ -24,7 +24,7 @@ * SUCH DAMAGE. * * Based on FreeBSD v1.2. - * $DragonFly: src/sys/dev/agp/agp_nvidia.c,v 1.1 2003/10/31 21:49:23 asmodai Exp $ + * $DragonFly: src/sys/dev/agp/agp_nvidia.c,v 1.2 2003/12/09 19:40:56 dillon Exp $ */ /* @@ -173,6 +173,10 @@ agp_nvidia_attach (device_t dev) return (error); sc->initial_aperture = AGP_GET_APERTURE(dev); + if (sc->initial_aperture == 0) { + device_printf(dev, "bad initial aperture size, disabling\n"); + return ENXIO; + } for (;;) { gatt = agp_alloc_gatt(dev); diff --git a/sys/dev/agp/agp_sis.c b/sys/dev/agp/agp_sis.c index 41911f5b5a..40776bb080 100644 --- a/sys/dev/agp/agp_sis.c +++ b/sys/dev/agp/agp_sis.c @@ -24,7 +24,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/pci/agp_sis.c,v 1.1.2.1 2000/07/19 09:48:04 ru Exp $ - * $DragonFly: src/sys/dev/agp/agp_sis.c,v 1.3 2003/08/07 21:16:48 dillon Exp $ + * $DragonFly: src/sys/dev/agp/agp_sis.c,v 1.4 2003/12/09 19:40:56 dillon Exp $ */ #include "opt_bus.h" @@ -65,6 +65,8 @@ agp_sis_match(device_t dev) switch (pci_get_devid(dev)) { case 0x00011039: return ("SiS 5591 host to AGP bridge"); + case 0x06481039: + return ("SiS 648 host to AGP bridge"); }; if (pci_get_vendor(dev) == 0x1039) @@ -100,6 +102,10 @@ agp_sis_attach(device_t dev) return error; sc->initial_aperture = AGP_GET_APERTURE(dev); + if (sc->initial_aperture == 0) { + device_printf(dev, "bad initial aperture size, disabling\n"); + return ENXIO; + } for (;;) { gatt = agp_alloc_gatt(dev); @@ -255,3 +261,5 @@ static driver_t agp_sis_driver = { static devclass_t agp_devclass; DRIVER_MODULE(agp_sis, pci, agp_sis_driver, agp_devclass, 0, 0); +MODULE_DEPEND(agp_sis, agp, 1, 1, 1); +MODULE_DEPEND(agp_sis, pci, 1, 1, 1); diff --git a/sys/dev/agp/agp_via.c b/sys/dev/agp/agp_via.c index 0c2cd0f22c..d40b1bc656 100644 --- a/sys/dev/agp/agp_via.c +++ b/sys/dev/agp/agp_via.c @@ -24,7 +24,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/pci/agp_via.c,v 1.1.2.2 2001/10/04 09:53:04 ru Exp $ - * $DragonFly: src/sys/dev/agp/agp_via.c,v 1.3 2003/08/07 21:16:48 dillon Exp $ + * $DragonFly: src/sys/dev/agp/agp_via.c,v 1.4 2003/12/09 19:40:56 dillon Exp $ */ #include "opt_bus.h" @@ -63,16 +63,18 @@ agp_via_match(device_t dev) return NULL; switch (pci_get_devid(dev)) { + case 0x03051106: + return ("VIA 82C8363 (Apollo KT133A) host to PCI bridge"); case 0x05011106: return ("VIA 8501 (Apollo MVP4) host to PCI bridge"); case 0x05971106: return ("VIA 82C597 (Apollo VP3) host to PCI bridge"); case 0x05981106: return ("VIA 82C598 (Apollo MVP3) host to PCI bridge"); + case 0x06051106: + return ("VIA 82C694X (Apollo Pro 133A) host to PCI bridge"); case 0x06911106: return ("VIA 82C691 (Apollo Pro) host to PCI bridge"); - case 0x03051106: - return ("VIA 82C8363 (Apollo KT133A) host to PCI bridge"); }; if (pci_get_vendor(dev) == 0x1106) @@ -108,6 +110,10 @@ agp_via_attach(device_t dev) return error; sc->initial_aperture = AGP_GET_APERTURE(dev); + if (sc->initial_aperture == 0) { + device_printf(dev, "bad initial aperture size, disabling\n"); + return ENXIO; + } for (;;) { gatt = agp_alloc_gatt(dev); @@ -254,3 +260,5 @@ static driver_t agp_via_driver = { static devclass_t agp_devclass; DRIVER_MODULE(agp_via, pci, agp_via_driver, agp_devclass, 0, 0); +MODULE_DEPEND(agp_via, agp, 1, 1, 1); +MODULE_DEPEND(agp_via, pci, 1, 1, 1); diff --git a/sys/dev/agp/agpreg.h b/sys/dev/agp/agpreg.h index 9155be4961..75f73ed6cd 100644 --- a/sys/dev/agp/agpreg.h +++ b/sys/dev/agp/agpreg.h @@ -24,7 +24,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/pci/agpreg.h,v 1.3.2.5 2003/06/02 17:38:19 jhb Exp $ - * $DragonFly: src/sys/dev/agp/agpreg.h,v 1.3 2003/10/31 21:49:23 asmodai Exp $ + * $DragonFly: src/sys/dev/agp/agpreg.h,v 1.4 2003/12/09 19:40:56 dillon Exp $ */ #ifndef _PCI_AGPREG_H_ @@ -177,6 +177,32 @@ #define AGP_I830_GCC1_GMASIZE_64 0x01 #define AGP_I830_GCC1_GMASIZE_128 0x00 +/* + * Config registers for 852GM/855GM/865G device 0 + */ +#define AGP_I855_GCC1 0x52 +#define AGP_I855_GCC1_DEV2 0x08 +#define AGP_I855_GCC1_DEV2_ENABLED 0x00 +#define AGP_I855_GCC1_DEV2_DISABLED 0x08 +#define AGP_I855_GCC1_GMS 0x70 +#define AGP_I855_GCC1_GMS_STOLEN_0M 0x00 +#define AGP_I855_GCC1_GMS_STOLEN_1M 0x10 +#define AGP_I855_GCC1_GMS_STOLEN_4M 0x20 +#define AGP_I855_GCC1_GMS_STOLEN_8M 0x30 +#define AGP_I855_GCC1_GMS_STOLEN_16M 0x40 +#define AGP_I855_GCC1_GMS_STOLEN_32M 0x50 + +/* + * 852GM/855GM variant identification + */ +#define AGP_I85X_CAPID 0x44 +#define AGP_I85X_VARIANT_MASK 0x7 +#define AGP_I85X_VARIANT_SHIFT 5 +#define AGP_I855_GME 0x0 +#define AGP_I855_GM 0x4 +#define AGP_I852_GME 0x2 +#define AGP_I852_GM 0x5 + /* * NVIDIA nForce/nForce2 registers */ -- 2.41.0