Группа :: Система/Ядро и оборудование
Пакет: 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