--- linux-2.6.5/drivers/char/agp/sis-agp.c 2004-04-06 04:29:51.078851672 +0200 +++ linux/drivers/char/agp/sis-agp.c 2004-04-06 04:29:07.369496504 +0200 @@ -93,10 +93,10 @@ pci_write_config_dword(device, agp + PCI_AGP_COMMAND, command); - if(device->device == PCI_DEVICE_ID_SI_648) { - // weird: on 648 and 648fx chipsets any rate change in the target command register + if(device->device == PCI_DEVICE_ID_SI_648 || device->device == PCI_DEVICE_ID_SI_746) { + // weird: on 746, 648 and 648fx chipsets any rate change in the target command register // triggers a 5ms screwup during which the master cannot be configured - printk(KERN_INFO PFX "sis 648 agp fix - giving bridge time to recover\n"); + printk(KERN_INFO PFX "sis 648/746 agp fix - giving bridge time to recover\n"); set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout (1+(HZ*10)/1000); } @@ -221,7 +221,7 @@ static void __devinit sis_get_driver(struct agp_bridge_data *bridge) { - if (bridge->dev->device == PCI_DEVICE_ID_SI_648) { + if (bridge->dev->device == PCI_DEVICE_ID_SI_648 || bridge->dev->device == PCI_DEVICE_ID_SI_746) { if (agp_bridge->major_version == 3 && agp_bridge->minor_version < 5) { sis_driver.agp_enable=sis_648_enable; } else {