[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#257684: marked as done (kernel-source-2.6.7: VIA AGP Chipsets not identified correctly)



Your message dated Wed, 18 Aug 2004 01:51:51 -0400
with message-id <1092808311.6866.12.camel@spiral.internal>
and subject line fixed in 2.6.8
has caused the attached Bug report to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what I am
talking about this indicates a serious mail system misconfiguration
somewhere.  Please contact me immediately.)

Debian bug tracking system administrator
(administrator, Debian Bugs database)

--------------------------------------
Received: (at submit) by bugs.debian.org; 5 Jul 2004 10:16:32 +0000
>From voloterreno@tin.it Mon Jul 05 03:16:31 2004
Return-path: <voloterreno@tin.it>
Received: from vsmtp4alice-fr.tin.it (vsmtp4.tin.it) [212.216.176.150] 
	by spohr.debian.org with esmtp (Exim 3.35 1 (Debian))
	id 1BhQWV-00023H-00; Mon, 05 Jul 2004 03:16:31 -0700
Received: from [127.0.0.1] (80.117.50.66) by vsmtp4.tin.it (7.0.027)
        id 40ACC5B100AFD248; Mon, 5 Jul 2004 12:15:57 +0200
Message-ID: <40ACC5B100AFD248@vsmtp4.tin.it> (added by postmaster@virgilio.it)
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
From: Maggioni Marcello <voloterreno@tin.it>
To: Debian Bug Tracking System <submit@bugs.debian.org>
Subject: kernel-source-2.6.7: VIA AGP Chipsets not identified correctly
Bcc: Maggioni Marcello <voloterreno@tin.it>
X-Mailer: reportbug 2.63
Date: Mon, 05 Jul 2004 12:16:00 +0200
Delivered-To: submit@bugs.debian.org
X-Spam-Checker-Version: SpamAssassin 2.60-bugs.debian.org_2004_03_25 
	(1.212-2003-09-23-exp) on spohr.debian.org
X-Spam-Status: No, hits=-5.0 required=4.0 tests=HAS_PACKAGE autolearn=no 
	version=2.60-bugs.debian.org_2004_03_25
X-Spam-Level: 

Package: kernel-source-2.6.7
Version: 2.6.7-2
Severity: normal
Tags: patch

There's a bug n the kernel that doesn't permit the correct 
identification of the chipset used by the AGPGART driver if this is a 
VIA chipset. (fo example KT600 identified as CLE266 )

This bug is solved in a newer version of AGPGART driver , an update that 
solve this problem is included:

Bye

Marcello

agpgart-2004-06-17.diff :

diff -Nru a/drivers/char/agp/Kconfig b/drivers/char/agp/Kconfig
--- a/drivers/char/agp/Kconfig	2004-06-17 00:04:01 +01:00
+++ b/drivers/char/agp/Kconfig	2004-06-17 00:04:01 +01:00
@@ -165,7 +165,7 @@
 	tristate "Transmeta Efficeon support"
 	depends on AGP && X86 && !X86_64
 	help
-	  This option fives you AGP support for the Transmeta Efficeon
+	  This option gives you AGP support for the Transmeta Efficeon
 	  series processors with integrated northbridges.
 
 	  You should say Y here if you use XFree86 3.3.6 or 4.x and want 
to
diff -Nru a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c
--- a/drivers/char/agp/generic.c	2004-06-17 00:04:01 +01:00
+++ b/drivers/char/agp/generic.c	2004-06-17 00:04:01 +01:00
@@ -1,6 +1,6 @@
 /*
  * AGPGART driver.
- * Copyright (C) 2002-2003 Dave Jones.
+ * Copyright (C) 2002-2004 Dave Jones.
  * Copyright (C) 1999 Jeff Hartmann.
  * Copyright (C) 1999 Precision Insight, Inc.
  * Copyright (C) 1999 Xi Graphics, Inc.
@@ -18,12 +18,12 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
EXPRESS
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT 
SHALL
- * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT 
OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
+ * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT 
OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  *
- * TODO: 
+ * TODO:
  * - Allocate more than order 0 pages to avoid too much linear map 
splitting.
  */
 #include <linux/config.h>
@@ -37,7 +37,7 @@
 #include <linux/vmalloc.h>
 #include "agp.h"
 
-__u32 *agp_gatt_table; 
+__u32 *agp_gatt_table;
 int agp_memory_reserved;
 
 /*
@@ -46,7 +46,7 @@
  */
 EXPORT_SYMBOL_GPL(agp_memory_reserved);
 
-/* 
+/*
  * Generic routines for handling agp_memory structures -
  * They use the basic page allocation routines to do the brunt of the 
work.
  */
@@ -142,12 +142,12 @@
  *	agp_allocate_memory  -  allocate a group of pages of a certain 
type.
  *
  *	@page_count:	size_t argument of the number of pages
- *	@type:	u32 argument of the type of memory to be allocated.  
+ *	@type:	u32 argument of the type of memory to be allocated.
  *
  *	Every agp bridge device will allow you to allocate 
AGP_NORMAL_MEMORY which
  *	maps to physical ram.  Any other type is device dependent.
  *
- *	It returns NULL whenever memory is unavailable. 
+ *	It returns NULL whenever memory is unavailable.
  */
 struct agp_memory *agp_allocate_memory(size_t page_count, u32 type)
 {
@@ -311,7 +311,7 @@
 
 /**
  *	agp_bind_memory  -  Bind an agp_memory structure into the GATT.
- * 
+ *
  *	@curr:		agp_memory pointer
  *	@pg_start:	an offset into the graphics aperture translation 
table
  *
@@ -347,9 +347,9 @@
 
 /**
  *	agp_unbind_memory  -  Removes an agp_memory structure from the 
GATT
- * 
+ *
  * @curr:	agp_memory pointer to be removed from the GATT.
- * 
+ *
  * It returns -EINVAL if this piece of agp_memory is not currently 
bound to
  * the graphics aperture translation table or if the agp_memory pointer 
== NULL
  */
@@ -404,12 +404,18 @@
 		*cmd &= ~(AGPSTAT2_1X | AGPSTAT2_4X);	/* 2X */
 
 	if (*cmd & AGPSTAT2_1X)
-		*cmd &= ~(AGPSTAT2_2X | AGPSTAT2_4X);	/* 1Xf */
+		*cmd &= ~(AGPSTAT2_2X | AGPSTAT2_4X);	/* 1X */
 }
 
-
+/*
+ * mode = requested mode.
+ * cmd = PCI_AGP_STATUS from agp bridge.
+ * tmp = PCI_AGP_STATUS from graphic card.
+ */
 static void agp_v3_parse_one(u32 *mode, u32 *cmd, u32 *tmp)
 {
+	u32 origcmd=*cmd, origtmp=*tmp;
+
 	/* ARQSZ - Set the value to the maximum one.
 	 * Don't allow the mode register to override values. */
 	*cmd = ((*cmd & ~AGPSTAT_ARQSZ) |
@@ -452,17 +458,43 @@
 		*mode |= AGPSTAT3_4X;
 	}
 
-	if (!((*cmd & AGPSTAT3_8X) && (*tmp & AGPSTAT3_8X) && (*mode & 
AGPSTAT3_8X)))
-		*cmd &= ~AGPSTAT3_8X;
+	if (*mode & AGPSTAT3_8X) {
+		if (!(*cmd & AGPSTAT3_8X)) {
+			*cmd &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD);
+			*cmd |= ~AGPSTAT3_4X;
+			printk ("%s requested AGPx8 but bridge not 
capable.\n", current->comm);
+			return;
+		}
+		if (!(*tmp & AGPSTAT3_8X)) {
+			*cmd &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD);
+			*cmd |= ~AGPSTAT3_4X;
+			printk ("%s requested AGPx8 but graphic card not 
capable.\n", current->comm);
+			return;
+		}
+		/* All set, bridge & device can do AGP x8*/
+		*cmd &= ~(AGPSTAT3_4X | AGPSTAT3_RSVD);
+		return;
 
-	if (!((*cmd & AGPSTAT3_4X) && (*tmp & AGPSTAT3_4X) && (*mode & 
AGPSTAT3_4X)))
-		*cmd &= ~AGPSTAT3_4X;
+	} else {
 
-	/* Clear out unwanted bits. */
-	if (*cmd & AGPSTAT3_8X)
-		*cmd &= ~(AGPSTAT3_4X | AGPSTAT3_RSVD);
-	if (*cmd & AGPSTAT3_4X)
+		/*
+		 * If we didn't specify AGPx8, we can only do x4.
+		 * If the hardware can't do x4, we're up shit creek, and 
never
+		 *  should have got this far.
+		 */
 		*cmd &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD);
+		if ((*cmd & AGPSTAT3_4X) && (*tmp & AGPSTAT3_4X))
+			*cmd |= ~AGPSTAT3_4X;
+		else {
+			printk (KERN_INFO PFX "Badness. Don't know which 
AGP mode to set. "
+							"[cmd:%x tmp:%x 
fell back to:- cmd:%x tmp:%x]\n",
+							origcmd, 
origtmp, *cmd, *tmp);
+			if (!(*cmd & AGPSTAT3_4X))
+				printk (KERN_INFO PFX "Bridge couldn't 
do AGP x4.\n");
+			if (!(*tmp & AGPSTAT3_4X))
+				printk (KERN_INFO PFX "Graphic card 
couldn't do AGP x4.\n");
+		}
+	}
 }
 
 //FIXME: This doesn't smell right.
@@ -479,8 +511,10 @@
 		if (!cap_ptr)
 			continue;
 
+		//FIXME: We should probably skip anything here that
+		// isn't an AGP graphic card.
 		/*
-		 * Ok, here we have a AGP device. Disable impossible 
+		 * Ok, here we have a AGP device. Disable impossible
 		 * settings, and adjust the readqueue to the minimum.
 		 */
 		pci_read_config_dword(device, cap_ptr+PCI_AGP_STATUS, 
&tmp);
@@ -489,7 +523,7 @@
 		cmd = ((cmd & ~AGPSTAT_RQ_DEPTH) |
 		     min_t(u32, (mode & AGPSTAT_RQ_DEPTH),
 			 min_t(u32, (cmd & AGPSTAT_RQ_DEPTH), (tmp & 
AGPSTAT_RQ_DEPTH))));
-		
+
 		/* disable FW if it's not supported */
 		if (!((cmd & AGPSTAT_FW) && (tmp & AGPSTAT_FW) && (mode 
& AGPSTAT_FW)))
 			cmd &= ~AGPSTAT_FW;
@@ -663,7 +697,7 @@
 					    agp_bridge->current_size;
 					break;
 				}
-				temp = agp_bridge->current_size;	
+				temp = agp_bridge->current_size;
 			} else {
 				agp_bridge->aperture_size_idx = i;
 			}
@@ -684,7 +718,7 @@
 		SetPageReserved(page);
 
 	agp_bridge->gatt_table_real = (u32 *) table;
-	agp_gatt_table = (void *)table; 
+	agp_gatt_table = (void *)table;
 
 	agp_bridge->driver->cache_flush();
 	agp_bridge->gatt_table = ioremap_nocache(virt_to_phys(table),
@@ -870,9 +904,9 @@
 EXPORT_SYMBOL(agp_generic_free_by_type);
 
 
-/* 
+/*
  * Basic Page Allocation Routines -
- * These routines handle page allocation and by default they reserve 
the allocated 
+ * These routines handle page allocation and by default they reserve 
the allocated
  * memory.  They also handle incrementing the current_memory_agp value, 
Which is checked
  * against a maximum value.
  */
@@ -914,9 +948,9 @@
 /* End Basic Page Allocation Routines */
 
 
-/** 
+/**
  * agp_enable  -  initialise the agp point-to-point connection.
- * 
+ *
  * @mode:	agp mode register value to configure with.
  */
 void agp_enable(u32 mode)
diff -Nru a/drivers/char/agp/sworks-agp.c 
b/drivers/char/agp/sworks-agp.c
--- a/drivers/char/agp/sworks-agp.c	2004-06-17 00:04:01 +01:00
+++ b/drivers/char/agp/sworks-agp.c	2004-06-17 00:04:01 +01:00
@@ -447,6 +447,7 @@
 	struct agp_bridge_data *bridge;
 	struct pci_dev *bridge_dev;
 	u32 temp, temp2;
+	u8 cap_ptr = 0;
 
 	/* Everything is on func 1 here so we are hardcoding function 
one */
 	bridge_dev = pci_find_slot((unsigned int)pdev->bus->number,
@@ -457,6 +458,8 @@
 		return -ENODEV;
 	}
 
+	cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
+
 	switch (pdev->device) {
 	case 0x0006:
 		/* ServerWorks CNB20HE
@@ -470,14 +473,15 @@
 		break;
 
 	default:
-		printk(KERN_ERR PFX "Unsupported Serverworks chipset "
-				"(device id: %04x)\n", pdev->device);
+		if (cap_ptr)
+			printk(KERN_ERR PFX "Unsupported Serverworks 
chipset "
+					"(device id: %04x)\n", 
pdev->device);
 		return -ENODEV;
 	}
 
 	serverworks_private.svrwrks_dev = bridge_dev;
 	serverworks_private.gart_addr_ofs = 0x10;
-	
+
 	pci_read_config_dword(pdev, SVWRKS_APSIZE, &temp);
 	if (temp & PCI_BASE_ADDRESS_MEM_TYPE_64) {
 		pci_read_config_dword(pdev, SVWRKS_APSIZE + 4, &temp2);
diff -Nru a/drivers/char/agp/via-agp.c b/drivers/char/agp/via-agp.c
--- a/drivers/char/agp/via-agp.c	2004-06-17 00:04:01 +01:00
+++ b/drivers/char/agp/via-agp.c	2004-06-17 00:04:01 +01:00
@@ -434,6 +434,7 @@
 	.subvendor	= PCI_ANY_ID,			\
 	.subdevice	= PCI_ANY_ID,			\
 	}
+	ID(PCI_DEVICE_ID_VIA_82C597_0),
 	ID(PCI_DEVICE_ID_VIA_82C598_0),
 	ID(PCI_DEVICE_ID_VIA_8501_0),
 	ID(PCI_DEVICE_ID_VIA_8601_0),




-- System Information:
Debian Release: testing/unstable
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.6.7
Locale: LANG=it_IT@euro, LC_CTYPE=it_IT@euro

Versions of packages kernel-source-2.6.7 depends on:
ii  binutils                   2.14.90.0.7-8 The GNU assembler, linker and bina
ii  bzip2                      1.0.2-1       A high-quality block-sorting file 
ii  coreutils [fileutils]      5.0.91-2      The GNU core utilities
ii  fileutils                  5.0.91-2      The GNU file management utilities 

-- no debconf information

---------------------------------------
Received: (at 257684-done) by bugs.debian.org; 18 Aug 2004 05:51:53 +0000
>From dilinger@voxel.net Tue Aug 17 22:51:53 2004
Return-path: <dilinger@voxel.net>
Received: from zero.voxel.net [209.123.232.253] (postfix)
	by spohr.debian.org with esmtp (Exim 3.35 1 (Debian))
	id 1BxJMX-0004J9-00; Tue, 17 Aug 2004 22:51:53 -0700
Received: from [192.168.1.100] (alb-24-194-62-26.nycap.rr.com [24.194.62.26])
	by zero.voxel.net (Postfix) with ESMTP id 12A1224ADFD
	for <257684-done@bugs.debian.org>; Wed, 18 Aug 2004 01:51:52 -0400 (EDT)
Subject: fixed in 2.6.8
From: Andres Salomon <dilinger@voxel.net>
To: 257684-done@bugs.debian.org
Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-PdpqkDnIRG2Z2LuezMuG"
Date: Wed, 18 Aug 2004 01:51:51 -0400
Message-Id: <1092808311.6866.12.camel@spiral.internal>
Mime-Version: 1.0
X-Mailer: Evolution 1.5.90 
Delivered-To: 257684-done@bugs.debian.org
X-Spam-Checker-Version: SpamAssassin 2.60-bugs.debian.org_2004_03_25 
	(1.212-2003-09-23-exp) on spohr.debian.org
X-Spam-Status: No, hits=-3.0 required=4.0 tests=BAYES_00 autolearn=no 
	version=2.60-bugs.debian.org_2004_03_25
X-Spam-Level: 


--=-PdpqkDnIRG2Z2LuezMuG
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

Hi,

This patch is included in 2.6.8 (which is now in unstable).  So,
presumably this bug is fixed.  If you find that it's not, please reopen
this bug.


--=20
Andres Salomon <dilinger@voxel.net>

--=-PdpqkDnIRG2Z2LuezMuG
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)

iD4DBQBBIu5378o9R9NraMQRApIWAJ0V9MYrkG4SAix1BBpWbIhKPp75cgCYoXl0
nyhpJfDNVJJQiWxO7H42WA==
=zEck
-----END PGP SIGNATURE-----

--=-PdpqkDnIRG2Z2LuezMuG--



Reply to: