Bug 108733

Summary: No AGP support on Tyan 2885 K8W
Product: Red Hat Enterprise Linux 3 Reporter: Mark Langsdorf <mark.langsdorf>
Component: kernelAssignee: Arjan van de Ven <arjanv>
Status: CLOSED DUPLICATE QA Contact: Brian Brock <bbrock>
Severity: medium Docs Contact:
Priority: medium    
Version: 3.0CC: petrides, riel
Target Milestone: ---   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2006-02-21 18:59:36 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Mark Langsdorf 2003-10-31 17:16:15 UTC
Description of problem:
SMP Opteron systems do not have to have the AGP controller assigned to PCI 
position 0:0.0.  The Tyan 2885 K8W is a system that has the 8151 AGP controller 
assigned to PCI position 4:0.0.  Changes made to the 2.4.21 kernel prevent the 
AGP controller from being discovered.

Version-Release number of selected component (if applicable):


How reproducible:
Boot RHEL3 AS on the Tyan 2885 K8W.  `dmesg | grep agpgart`.  The kernel should 
create an AGP aperture.

Steps to Reproduce:
1.  Install and boot RHEL3 AS on a Tyan 2885 K8W.
2.  Open a System Terminal as root
3.  Run `dmesg | grep agpgart`
    
Actual results:
agpgart: Maximum main memory to use for agp memory: 2423M
agpgart: No supported devices found

Expected results:
agpgart: Maximum main memory to use for agp memory: 2423M
agpgart: Detected AMD 8151 chipset
agpgart: AGP aperture is 512M @ 0xc0000000

Additional info:

Following patch should fix the problem:
diff -u -u -r1.39 agpgart_be.c
--- linux/drivers/char/agp/agpgart_be.c	2003/10/28 23:20:20	1.39
+++ linux/drivers/char/agp/agpgart_be.c	2003/10/28 23:26:02
@@ -67,6 +67,7 @@
 EXPORT_SYMBOL(agp_backend_release);
 
 static void flush_cache(void);
+static int agp_init_one(struct pci_dev *dev);
 
 static struct agp_bridge_data agp_bridge;
 static int agp_try_unsupported __initdata = 0;
@@ -6490,15 +6491,24 @@
 static int __init agp_find_supported_device(void)
 {
 	struct pci_dev *dev = NULL;
-	u8 cap_ptr = 0x00;
+	int ret = -ENODEV;
 
 #ifdef CONFIG_AGP_HP_ZX1
 	if (hp_zx1_gart_init() == 0)
 		return 0;
 #endif
 
-	if ((dev = pci_find_class(PCI_CLASS_BRIDGE_HOST << 8, NULL)) == NULL)
-		return -ENODEV;
+	while ((dev = pci_find_class(PCI_CLASS_BRIDGE_HOST << 8, dev)) != NULL) 
{
+		ret = agp_init_one(dev);
+		if (ret != -ENODEV)
+			break;
+	} 
+	return ret;
+}	
+
+static int __init agp_init_one(struct pci_dev *dev)
+{
+	u8 cap_ptr = 0x00;
 
 	agp_bridge.dev = dev;

Comment 1 Bill Nottingham 2003-10-31 21:38:36 UTC

*** This bug has been marked as a duplicate of 108648 ***

Comment 2 Red Hat Bugzilla 2006-02-21 18:59:36 UTC
Changed to 'CLOSED' state since 'RESOLVED' has been deprecated.