Commit 162d1fd2 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://linux-dj.bkbits.net/agpgart

into home.osdl.org:/home/torvalds/v2.5/linux
parents bcf41bfd 0d0823fc
...@@ -718,7 +718,7 @@ CONFIG_AGP=y ...@@ -718,7 +718,7 @@ CONFIG_AGP=y
# CONFIG_AGP_ALI is not set # CONFIG_AGP_ALI is not set
# CONFIG_AGP_ATI is not set # CONFIG_AGP_ATI is not set
# CONFIG_AGP_AMD is not set # CONFIG_AGP_AMD is not set
# CONFIG_AGP_AMD_8151 is not set # CONFIG_AGP_AMD64 is not set
CONFIG_AGP_INTEL=y CONFIG_AGP_INTEL=y
# CONFIG_AGP_NVIDIA is not set # CONFIG_AGP_NVIDIA is not set
# CONFIG_AGP_SIS is not set # CONFIG_AGP_SIS is not set
......
...@@ -561,7 +561,7 @@ CONFIG_RTC=y ...@@ -561,7 +561,7 @@ CONFIG_RTC=y
# #
# CONFIG_FTAPE is not set # CONFIG_FTAPE is not set
CONFIG_AGP=y CONFIG_AGP=y
CONFIG_AGP_AMD_8151=y CONFIG_AGP_AMD64=y
# CONFIG_DRM is not set # CONFIG_DRM is not set
# CONFIG_MWAVE is not set # CONFIG_MWAVE is not set
CONFIG_RAW_DRIVER=y CONFIG_RAW_DRIVER=y
......
...@@ -675,7 +675,7 @@ static __init int init_k8_gatt(struct agp_kern_info *info) ...@@ -675,7 +675,7 @@ static __init int init_k8_gatt(struct agp_kern_info *info)
return -1; return -1;
} }
extern int agp_amdk8_init(void); extern int agp_amd64_init(void);
static int __init pci_iommu_init(void) static int __init pci_iommu_init(void)
{ {
...@@ -690,7 +690,7 @@ static int __init pci_iommu_init(void) ...@@ -690,7 +690,7 @@ static int __init pci_iommu_init(void)
/* Makefile puts PCI initialization via subsys_initcall first. */ /* Makefile puts PCI initialization via subsys_initcall first. */
/* Add other K8 AGP bridge drivers here */ /* Add other K8 AGP bridge drivers here */
no_agp = no_agp || no_agp = no_agp ||
(agp_amdk8_init() < 0) || (agp_amd64_init() < 0) ||
(agp_copy_info(&info) < 0); (agp_copy_info(&info) < 0);
#endif #endif
......
...@@ -63,8 +63,7 @@ config AGP_AMD ...@@ -63,8 +63,7 @@ config AGP_AMD
You should say Y here if you use XFree86 3.3.6 or 4.x and want to You should say Y here if you use XFree86 3.3.6 or 4.x and want to
use GLX or DRI. If unsure, say N. use GLX or DRI. If unsure, say N.
# RED-PEN this option is misnamed, it's not 8151 specific config AGP_AMD64
config AGP_AMD_8151
tristate "AMD Opteron/Athlon64 on-CPU GART support" if !GART_IOMMU tristate "AMD Opteron/Athlon64 on-CPU GART support" if !GART_IOMMU
depends on AGP && X86 depends on AGP && X86
default y if GART_IOMMU default y if GART_IOMMU
......
...@@ -4,7 +4,7 @@ obj-$(CONFIG_AGP) += agpgart.o ...@@ -4,7 +4,7 @@ obj-$(CONFIG_AGP) += agpgart.o
obj-$(CONFIG_AGP_ALI) += ali-agp.o obj-$(CONFIG_AGP_ALI) += ali-agp.o
obj-$(CONFIG_AGP_ATI) += ati-agp.o obj-$(CONFIG_AGP_ATI) += ati-agp.o
obj-$(CONFIG_AGP_AMD) += amd-k7-agp.o obj-$(CONFIG_AGP_AMD) += amd-k7-agp.o
obj-$(CONFIG_AGP_AMD_8151) += amd-k8-agp.o obj-$(CONFIG_AGP_AMD64) += amd64-agp.o
obj-$(CONFIG_AGP_ALPHA_CORE) += alpha-agp.o obj-$(CONFIG_AGP_ALPHA_CORE) += alpha-agp.o
obj-$(CONFIG_AGP_HP_ZX1) += hp-agp.o obj-$(CONFIG_AGP_HP_ZX1) += hp-agp.o
obj-$(CONFIG_AGP_I460) += i460-agp.o obj-$(CONFIG_AGP_I460) += i460-agp.o
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
#include <linux/agp_backend.h> #include <linux/agp_backend.h>
#include "agp.h" #include "agp.h"
/* Will need to be increased if hammer ever goes >8-way. */ /* Will need to be increased if AMD64 ever goes >8-way. */
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
#define MAX_HAMMER_GARTS 8 #define MAX_HAMMER_GARTS 8
#else #else
...@@ -42,7 +42,7 @@ static int __initdata agp_try_unsupported; ...@@ -42,7 +42,7 @@ static int __initdata agp_try_unsupported;
static int gart_iterator; static int gart_iterator;
#define for_each_nb() for(gart_iterator=0;gart_iterator<nr_garts;gart_iterator++) #define for_each_nb() for(gart_iterator=0;gart_iterator<nr_garts;gart_iterator++)
static void flush_x86_64_tlb(struct pci_dev *dev) static void flush_amd64_tlb(struct pci_dev *dev)
{ {
u32 tmp; u32 tmp;
...@@ -51,13 +51,13 @@ static void flush_x86_64_tlb(struct pci_dev *dev) ...@@ -51,13 +51,13 @@ static void flush_x86_64_tlb(struct pci_dev *dev)
pci_write_config_dword (dev, AMD64_GARTCACHECTL, tmp); pci_write_config_dword (dev, AMD64_GARTCACHECTL, tmp);
} }
static void amd_x86_64_tlbflush(struct agp_memory *temp) static void amd64_tlbflush(struct agp_memory *temp)
{ {
for_each_nb() for_each_nb()
flush_x86_64_tlb(hammers[gart_iterator]); flush_amd64_tlb(hammers[gart_iterator]);
} }
static int x86_64_insert_memory(struct agp_memory *mem, off_t pg_start, int type) static int amd64_insert_memory(struct agp_memory *mem, off_t pg_start, int type)
{ {
int i, j, num_entries; int i, j, num_entries;
long tmp; long tmp;
...@@ -97,7 +97,7 @@ static int x86_64_insert_memory(struct agp_memory *mem, off_t pg_start, int type ...@@ -97,7 +97,7 @@ static int x86_64_insert_memory(struct agp_memory *mem, off_t pg_start, int type
agp_bridge->gatt_table[j] = pte; agp_bridge->gatt_table[j] = pte;
} }
amd_x86_64_tlbflush(mem); amd64_tlbflush(mem);
return 0; return 0;
} }
...@@ -106,7 +106,7 @@ static int x86_64_insert_memory(struct agp_memory *mem, off_t pg_start, int type ...@@ -106,7 +106,7 @@ static int x86_64_insert_memory(struct agp_memory *mem, off_t pg_start, int type
* to the size of a long. It sucks. I totally disown this, even * to the size of a long. It sucks. I totally disown this, even
* though it does appear to work for the most part. * though it does appear to work for the most part.
*/ */
static struct aper_size_info_32 x86_64_aperture_sizes[7] = static struct aper_size_info_32 amd64_aperture_sizes[7] =
{ {
{32, 8192, 3+(sizeof(long)/8), 0 }, {32, 8192, 3+(sizeof(long)/8), 0 },
{64, 16384, 4+(sizeof(long)/8), 1<<1 }, {64, 16384, 4+(sizeof(long)/8), 1<<1 },
...@@ -124,7 +124,7 @@ static struct aper_size_info_32 x86_64_aperture_sizes[7] = ...@@ -124,7 +124,7 @@ static struct aper_size_info_32 x86_64_aperture_sizes[7] =
* the value from the first one we find. The set_size functions * the value from the first one we find. The set_size functions
* keep the rest coherent anyway. Or at least should do. * keep the rest coherent anyway. Or at least should do.
*/ */
static int amd_x86_64_fetch_size(void) static int amd64_fetch_size(void)
{ {
struct pci_dev *dev; struct pci_dev *dev;
int i; int i;
...@@ -137,7 +137,7 @@ static int amd_x86_64_fetch_size(void) ...@@ -137,7 +137,7 @@ static int amd_x86_64_fetch_size(void)
pci_read_config_dword(dev, AMD64_GARTAPERTURECTL, &temp); pci_read_config_dword(dev, AMD64_GARTAPERTURECTL, &temp);
temp = (temp & 0xe); temp = (temp & 0xe);
values = A_SIZE_32(x86_64_aperture_sizes); values = A_SIZE_32(amd64_aperture_sizes);
for (i = 0; i < agp_bridge->driver->num_aperture_sizes; i++) { for (i = 0; i < agp_bridge->driver->num_aperture_sizes; i++) {
if (temp == values[i].size_value) { if (temp == values[i].size_value) {
...@@ -155,7 +155,7 @@ static int amd_x86_64_fetch_size(void) ...@@ -155,7 +155,7 @@ static int amd_x86_64_fetch_size(void)
* In a multiprocessor x86-64 system, this function gets * In a multiprocessor x86-64 system, this function gets
* called once for each CPU. * called once for each CPU.
*/ */
static u64 amd_x86_64_configure (struct pci_dev *hammer, u64 gatt_table) static u64 amd64_configure (struct pci_dev *hammer, u64 gatt_table)
{ {
u64 aperturebase; u64 aperturebase;
u32 tmp; u32 tmp;
...@@ -180,7 +180,7 @@ static u64 amd_x86_64_configure (struct pci_dev *hammer, u64 gatt_table) ...@@ -180,7 +180,7 @@ static u64 amd_x86_64_configure (struct pci_dev *hammer, u64 gatt_table)
pci_write_config_dword(hammer, AMD64_GARTAPERTURECTL, tmp); pci_write_config_dword(hammer, AMD64_GARTAPERTURECTL, tmp);
/* keep CPU's coherent. */ /* keep CPU's coherent. */
flush_x86_64_tlb (hammer); flush_amd64_tlb (hammer);
return aper_base; return aper_base;
} }
...@@ -204,13 +204,13 @@ static int amd_8151_configure(void) ...@@ -204,13 +204,13 @@ static int amd_8151_configure(void)
/* Configure AGP regs in each x86-64 host bridge. */ /* Configure AGP regs in each x86-64 host bridge. */
for_each_nb() { for_each_nb() {
agp_bridge->gart_bus_addr = agp_bridge->gart_bus_addr =
amd_x86_64_configure(hammers[gart_iterator],gatt_bus); amd64_configure(hammers[gart_iterator],gatt_bus);
} }
return 0; return 0;
} }
static void amd_8151_cleanup(void) static void amd64_cleanup(void)
{ {
u32 tmp; u32 tmp;
...@@ -229,16 +229,16 @@ struct agp_bridge_driver amd_8151_driver = { ...@@ -229,16 +229,16 @@ struct agp_bridge_driver amd_8151_driver = {
.size_type = U32_APER_SIZE, .size_type = U32_APER_SIZE,
.num_aperture_sizes = 7, .num_aperture_sizes = 7,
.configure = amd_8151_configure, .configure = amd_8151_configure,
.fetch_size = amd_x86_64_fetch_size, .fetch_size = amd64_fetch_size,
.cleanup = amd_8151_cleanup, .cleanup = amd64_cleanup,
.tlb_flush = amd_x86_64_tlbflush, .tlb_flush = amd64_tlbflush,
.mask_memory = agp_generic_mask_memory, .mask_memory = agp_generic_mask_memory,
.masks = NULL, .masks = NULL,
.agp_enable = agp_generic_enable, .agp_enable = agp_generic_enable,
.cache_flush = global_cache_flush, .cache_flush = global_cache_flush,
.create_gatt_table = agp_generic_create_gatt_table, .create_gatt_table = agp_generic_create_gatt_table,
.free_gatt_table = agp_generic_free_gatt_table, .free_gatt_table = agp_generic_free_gatt_table,
.insert_memory = x86_64_insert_memory, .insert_memory = amd64_insert_memory,
.remove_memory = agp_generic_remove_memory, .remove_memory = agp_generic_remove_memory,
.alloc_by_type = agp_generic_alloc_by_type, .alloc_by_type = agp_generic_alloc_by_type,
.free_by_type = agp_generic_free_by_type, .free_by_type = agp_generic_free_by_type,
...@@ -364,13 +364,13 @@ static __init int cache_nbs (struct pci_dev *pdev, u32 cap_ptr) ...@@ -364,13 +364,13 @@ static __init int cache_nbs (struct pci_dev *pdev, u32 cap_ptr)
return i == 0 ? -1 : 0; return i == 0 ? -1 : 0;
} }
static int __init agp_amdk8_probe(struct pci_dev *pdev, static int __init agp_amd64_probe(struct pci_dev *pdev,
const struct pci_device_id *ent) const struct pci_device_id *ent)
{ {
struct agp_bridge_data *bridge; struct agp_bridge_data *bridge;
u8 rev_id; u8 rev_id;
u8 cap_ptr; u8 cap_ptr;
char *revstring=" "; char *revstring=NULL;
cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP); cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
if (!cap_ptr) if (!cap_ptr)
...@@ -431,17 +431,17 @@ static int __init agp_amdk8_probe(struct pci_dev *pdev, ...@@ -431,17 +431,17 @@ static int __init agp_amdk8_probe(struct pci_dev *pdev,
return agp_add_bridge(bridge); return agp_add_bridge(bridge);
} }
static void __devexit agp_amdk8_remove(struct pci_dev *pdev) static void __devexit agp_amd64_remove(struct pci_dev *pdev)
{ {
struct agp_bridge_data *bridge = pci_get_drvdata(pdev); struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
release_mem_region(virt_to_phys(bridge->gatt_table_real), release_mem_region(virt_to_phys(bridge->gatt_table_real),
x86_64_aperture_sizes[bridge->aperture_size_idx].size); amd64_aperture_sizes[bridge->aperture_size_idx].size);
agp_remove_bridge(bridge); agp_remove_bridge(bridge);
agp_put_bridge(bridge); agp_put_bridge(bridge);
} }
static struct pci_device_id agp_amdk8_pci_table[] = { static struct pci_device_id agp_amd64_pci_table[] = {
{ {
.class = (PCI_CLASS_BRIDGE_HOST << 8), .class = (PCI_CLASS_BRIDGE_HOST << 8),
.class_mask = ~0, .class_mask = ~0,
...@@ -479,23 +479,23 @@ static struct pci_device_id agp_amdk8_pci_table[] = { ...@@ -479,23 +479,23 @@ static struct pci_device_id agp_amdk8_pci_table[] = {
{ } { }
}; };
MODULE_DEVICE_TABLE(pci, agp_amdk8_pci_table); MODULE_DEVICE_TABLE(pci, agp_amd64_pci_table);
static struct pci_driver agp_amdk8_pci_driver = { static struct pci_driver agp_amd64_pci_driver = {
.name = "agpgart-amd-k8", .name = "agpgart-amd64",
.id_table = agp_amdk8_pci_table, .id_table = agp_amd64_pci_table,
.probe = agp_amdk8_probe, .probe = agp_amd64_probe,
.remove = agp_amdk8_remove, .remove = agp_amd64_remove,
}; };
/* Not static due to IOMMU code calling it early. */ /* Not static due to IOMMU code calling it early. */
int __init agp_amdk8_init(void) int __init agp_amd64_init(void)
{ {
int err = 0; int err = 0;
if (agp_off) if (agp_off)
return -EINVAL; return -EINVAL;
if (pci_module_init(&agp_amdk8_pci_driver) == 0) { if (pci_module_init(&agp_amd64_pci_driver) == 0) {
struct pci_dev *dev; struct pci_dev *dev;
if (!agp_try_unsupported && !agp_try_unsupported_boot) { if (!agp_try_unsupported && !agp_try_unsupported_boot) {
printk(KERN_INFO "No supported AGP bridge found.\n"); printk(KERN_INFO "No supported AGP bridge found.\n");
...@@ -507,7 +507,7 @@ int __init agp_amdk8_init(void) ...@@ -507,7 +507,7 @@ int __init agp_amdk8_init(void)
return -ENODEV; return -ENODEV;
} }
/* First check that we have at least one K8 NB */ /* First check that we have at least one AMD64 NB */
if (!pci_find_device(PCI_VENDOR_ID_AMD, 0x1103, NULL)) if (!pci_find_device(PCI_VENDOR_ID_AMD, 0x1103, NULL))
return -ENODEV; return -ENODEV;
...@@ -518,7 +518,7 @@ int __init agp_amdk8_init(void) ...@@ -518,7 +518,7 @@ int __init agp_amdk8_init(void)
if (!pci_find_capability(dev, PCI_CAP_ID_AGP)) if (!pci_find_capability(dev, PCI_CAP_ID_AGP))
continue; continue;
/* Only one bridge supported right now */ /* Only one bridge supported right now */
if (agp_amdk8_probe(dev, NULL) == 0) { if (agp_amd64_probe(dev, NULL) == 0) {
err = 0; err = 0;
break; break;
} }
...@@ -527,16 +527,16 @@ int __init agp_amdk8_init(void) ...@@ -527,16 +527,16 @@ int __init agp_amdk8_init(void)
return err; return err;
} }
static void __exit agp_amdk8_cleanup(void) static void __exit agp_amd64_cleanup(void)
{ {
pci_unregister_driver(&agp_amdk8_pci_driver); pci_unregister_driver(&agp_amd64_pci_driver);
} }
/* On x86-64 the PCI driver needs to initialize this driver early /* On AMD64 the PCI driver needs to initialize this driver early
for the IOMMU, so it has to be called via a backdoor. */ for the IOMMU, so it has to be called via a backdoor. */
#ifndef CONFIG_GART_IOMMU #ifndef CONFIG_GART_IOMMU
module_init(agp_amdk8_init); module_init(agp_amd64_init);
module_exit(agp_amdk8_cleanup); module_exit(agp_amd64_cleanup);
#endif #endif
MODULE_AUTHOR("Dave Jones <davej@codemonkey.org.uk>, Andi Kleen"); MODULE_AUTHOR("Dave Jones <davej@codemonkey.org.uk>, Andi Kleen");
......
...@@ -128,7 +128,7 @@ static int i460_fetch_size (void) ...@@ -128,7 +128,7 @@ static int i460_fetch_size (void)
if (temp & I460_BAPBASE_ENABLE) if (temp & I460_BAPBASE_ENABLE)
i460.dynamic_apbase = INTEL_I460_BAPBASE; i460.dynamic_apbase = INTEL_I460_BAPBASE;
else else
i460.dynamic_apbase = INTEL_I460_APBASE; i460.dynamic_apbase = AGP_APBASE;
for (i = 0; i < agp_bridge->driver->num_aperture_sizes; i++) { for (i = 0; i < agp_bridge->driver->num_aperture_sizes; i++) {
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment