Репозиторий ALT Linux backports/2.4
Последнее обновление: 9 июля 2008 | Пакетов: 497 | Посещений: 1574769
 поиск   регистрация   авторизация 
 
Группа :: Система/Ядро и оборудование
Пакет: fglrx_glx

 Главная   Изменения   Спек   Патчи   Загрузить   Bugs and FR 

Патч: fglrx-3.7.6-agp-sis-fix.patch


--- kernel-source-fglrx-3.7.6/agpgart_be.c.agp-sis-fix	2004-04-06 15:01:59 +0400
+++ kernel-source-fglrx-3.7.6/agpgart_be.c	2004-04-12 18:49:17 +0400
@@ -834,6 +834,14 @@ int agp_generic_agp_v2_enable(u32 mode)
 			       agp_bridge.capndx + 8,
 			       command);
 
+	if ((agp_bridge.dev->vendor == PCI_VENDOR_ID_SI) &&
+	    ((agp_bridge.dev->device == PCI_DEVICE_ID_SI_648) ||
+	     (agp_bridge.dev->device == PCI_DEVICE_ID_SI_746))) {
+		printk(KERN_INFO PFX "SiS chipset with AGP problems detected. Giving bridge time to recover.\n");
+		set_current_state(TASK_UNINTERRUPTIBLE);
+		schedule_timeout (1+(HZ*10)/1000);	
+	}
+
 	/*
 	 * PASS3: Go throu all AGP devices and update the
 	 *        command registers.
@@ -947,8 +955,18 @@ static int agp_generic_agp_v3_enable(u32
 	/* Go through all AGP devices and update the command registers. */
 	pci_for_each_dev(device) {
 		cap_ptr = pci_find_capability(device, PCI_CAP_ID_AGP);
-		if (cap_ptr != 0x00)
-			pci_write_config_dword(device, cap_ptr + 8, command);
+		if (!cap_ptr)
+			continue;
+
+		pci_write_config_dword(device, cap_ptr + 8, command);
+
+		if ((device->vendor == PCI_VENDOR_ID_SI) &&
+		    ((device->device == PCI_DEVICE_ID_SI_648) ||
+		     (device->device == PCI_DEVICE_ID_SI_746))) {
+			printk(KERN_INFO PFX "SiS chipset with AGP problems detected. Giving bridge time to recover.\n");
+			set_current_state(TASK_UNINTERRUPTIBLE);
+			schedule_timeout (1+(HZ*10)/1000);	
+		}
 	}
 
     return 0; /* success */
--- kernel-source-fglrx-3.7.6/agp3.c.agp-sis-fix	2004-03-04 20:25:44 +0300
+++ kernel-source-fglrx-3.7.6/agp3.c	2004-04-12 18:52:16 +0400
@@ -626,6 +626,14 @@ static int agp_3_0_node_enable(u32 mode,
 
 	pci_write_config_dword(td, agp_bridge.capndx + 0x08, tcmd);
 
+	if ((td->vendor == PCI_VENDOR_ID_SI) &&
+	    ((td->device == PCI_DEVICE_ID_SI_648) ||
+	     (td->device == PCI_DEVICE_ID_SI_746))) {
+		printk(KERN_INFO PFX "SiS chipset with AGP problems detected. Giving bridge time to recover.\n");
+		set_current_state(TASK_UNINTERRUPTIBLE);
+		schedule_timeout (1+(HZ*10)/1000);	
+	}
+
 	/*
 	 * Set the target's advertised arqsz value, the minimum supported
 	 * transfer rate, and the AGP_ENABLE bit in each master's AGPCMD
 
design & coding: Vladimir Lettiev aka crux © 2004-2005