GIT adf8a287150667feb5747f8beade62acacc17d4e git+ssh://master.kernel.org/pub/scm/linux/kernel/git/davej/agpgart.git commit adf8a287150667feb5747f8beade62acacc17d4e Author: Dave Jones Date: Wed Jun 28 13:38:43 2006 -0400 [AGPGART] Make AGP depend on PCI Fixes possible compile error in amd64 with pci=n pointed out by Adrian Bunk. Signed-off-by: Dave Jones commit 4280370efe0e9c527ccd6188d6211a10bcb22b1e Author: Adrian Bunk Date: Fri Jun 23 12:55:46 2006 +0200 [AGPGART] remove unused variable This patch removes an unused variable. Signed-off-by: Adrian Bunk Signed-off-by: Dave Jones commit 4092e256ca35e62b431ebad4e0c42c6360acee08 Author: Dave Jones Date: Wed Jun 21 17:36:24 2006 -0400 [AGPGART] Fix pci_register_driver checking in amd64-agp pci_register_driver() never returns a positive number. Signed-off-by: Dave Jones commit b3818ed446fc41db41b5a38d934ac2b69fd2e0aa Author: Dave Jones Date: Wed Jun 21 13:10:26 2006 -0400 [AGPGART] Compile fix for ati-agp Signed-off-by: Andrew Morton Signed-off-by: Dave Jones commit c5f2f261e7a47e4c72723cdcbe99e1bd771a81ea Author: Dave Jones Date: Tue Jun 20 00:44:38 2006 -0400 [AGPGART] Suspend/Resume support for nVidia nForce AGP. Based on a patch from the Ubuntu kernel. Signed-off-by: Ben Collins Signed-off-by: Dave Jones commit a4aec2622340e356e7dcd0e8fd05378dacb71c89 Author: Dave Jones Date: Tue Jun 20 00:42:04 2006 -0400 [AGPGART] Suspend/Resume improvements for ATI AGP Based on patches in the Ubuntu kernel. Signed-off-by: Ben Collins Signed-off-by: Dave Jones commit 89d17b9604ae502392e119dbdbf43f6067745715 Author: Dave Jones Date: Tue Jun 20 00:39:19 2006 -0400 [AGPGART] Whitespace cleanups for ati-agp Signed-off-by: Dave Jones --- Signed-off-by: Andrew Morton --- drivers/char/agp/amd64-agp.c | 2 - drivers/char/agp/ati-agp.c | 33 ++++++++++++++++---------------- drivers/char/agp/nvidia-agp.c | 27 ++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 17 deletions(-) diff -puN drivers/char/agp/amd64-agp.c~git-agpgart drivers/char/agp/amd64-agp.c --- a/drivers/char/agp/amd64-agp.c~git-agpgart +++ a/drivers/char/agp/amd64-agp.c @@ -734,7 +734,7 @@ int __init agp_amd64_init(void) if (agp_off) return -EINVAL; - if (pci_register_driver(&agp_amd64_pci_driver) > 0) { + if (pci_register_driver(&agp_amd64_pci_driver) < 0) { struct pci_dev *dev; if (!agp_try_unsupported && !agp_try_unsupported_boot) { printk(KERN_INFO PFX "No supported AGP bridge found.\n"); diff -puN drivers/char/agp/ati-agp.c~git-agpgart drivers/char/agp/ati-agp.c --- a/drivers/char/agp/ati-agp.c~git-agpgart +++ a/drivers/char/agp/ati-agp.c @@ -41,7 +41,6 @@ static struct gatt_mask ati_generic_mask }; - typedef struct _ati_page_map { unsigned long *real; unsigned long __iomem *remapped; @@ -141,7 +140,8 @@ static int ati_create_gatt_pages(int nr_ ati_generic_private.num_tables = nr_tables; ati_generic_private.gatt_pages = tables; - if (retval != 0) ati_free_gatt_pages(); + if (retval != 0) + ati_free_gatt_pages(); return retval; } @@ -219,16 +219,16 @@ static int ati_configure(void) ati_generic_private.registers = (volatile u8 __iomem *) ioremap(temp, 4096); if (is_r200()) - pci_write_config_dword(agp_bridge->dev, ATI_RS100_IG_AGPMODE, 0x20000); + pci_write_config_dword(agp_bridge->dev, ATI_RS100_IG_AGPMODE, 0x20000); else pci_write_config_dword(agp_bridge->dev, ATI_RS300_IG_AGPMODE, 0x20000); /* address to map too */ - /* + /* pci_read_config_dword(agp_bridge.dev, AGP_APBASE, &temp); agp_bridge.gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK); printk(KERN_INFO PFX "IGP320 gart_bus_addr: %x\n", agp_bridge.gart_bus_addr); - */ + */ writel(0x60000, ati_generic_private.registers+ATI_GART_FEATURE_ID); readl(ati_generic_private.registers+ATI_GART_FEATURE_ID); /* PCI Posting.*/ @@ -245,18 +245,20 @@ static int ati_configure(void) #ifdef CONFIG_PM -static int agp_ati_resume(struct pci_dev *dev) +static int agp_ati_suspend(struct pci_dev *dev, pm_message_t state) { - pci_restore_state(dev); + pci_save_state(dev); + pci_set_power_state(dev, 3); - return ati_configure(); + return 0; } -static int agp_ati_suspend(struct pci_dev *dev, pm_message_t state) +static int agp_ati_resume(struct pci_dev *dev) { - pci_save_state(dev); + pci_set_power_state(dev, 0); + pci_restore_state(dev); - return 0; + return ati_configure(); } #endif @@ -321,9 +323,9 @@ static int ati_remove_memory(struct agp_ unsigned long __iomem *cur_gatt; unsigned long addr; - if (type != 0 || mem->type != 0) { + if (type != 0 || mem->type != 0) return -EINVAL; - } + for (i = pg_start; i < (mem->page_count + pg_start); i++) { addr = (i * PAGE_SIZE) + agp_bridge->gart_bus_addr; cur_gatt = GET_GATT(addr); @@ -502,9 +504,8 @@ found: bridge->dev = pdev; bridge->capndx = cap_ptr; - - bridge->driver = &ati_generic_bridge; + bridge->driver = &ati_generic_bridge; printk(KERN_INFO PFX "Detected Ati %s chipset\n", devs[j].chipset_name); @@ -546,8 +547,8 @@ static struct pci_driver agp_ati_pci_dri .probe = agp_ati_probe, .remove = agp_ati_remove, #ifdef CONFIG_PM - .resume = agp_ati_resume, .suspend = agp_ati_suspend, + .resume = agp_ati_resume, #endif }; diff -puN drivers/char/agp/Kconfig~git-agpgart drivers/char/agp/Kconfig diff -puN drivers/char/agp/nvidia-agp.c~git-agpgart drivers/char/agp/nvidia-agp.c --- a/drivers/char/agp/nvidia-agp.c~git-agpgart +++ a/drivers/char/agp/nvidia-agp.c @@ -376,6 +376,29 @@ static void __devexit agp_nvidia_remove( agp_put_bridge(bridge); } +#ifdef CONFIG_PM +static int agp_nvidia_suspend(struct pci_dev *pdev, pm_message_t state) +{ + pci_save_state (pdev); + pci_set_power_state (pdev, 3); + + return 0; +} + +static int agp_nvidia_resume(struct pci_dev *pdev) +{ + /* set power state 0 and restore PCI space */ + pci_set_power_state (pdev, 0); + pci_restore_state(pdev); + + /* reconfigure AGP hardware again */ + nvidia_configure(); + + return 0; +} +#endif + + static struct pci_device_id agp_nvidia_pci_table[] = { { .class = (PCI_CLASS_BRIDGE_HOST << 8), @@ -403,6 +426,10 @@ static struct pci_driver agp_nvidia_pci_ .id_table = agp_nvidia_pci_table, .probe = agp_nvidia_probe, .remove = agp_nvidia_remove, +#ifdef CONFIG_PM + .suspend = agp_nvidia_suspend, + .resume = agp_nvidia_resume, +#endif }; static int __init agp_nvidia_init(void) _