--- 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