diff options
author | Krzysztof Hałasa <khc@pm.waw.pl> | 2009-11-15 12:02:10 -0500 |
---|---|---|
committer | Krzysztof Hałasa <khc@pm.waw.pl> | 2009-12-05 10:58:39 -0500 |
commit | ed5b9fa0d1c5ad1e01ff56b9acd3ff52bc783f66 (patch) | |
tree | d3068a6963c1e15d039323462a399175942fc08c /arch/arm/mach-ixp4xx/include | |
parent | cba362221b12b102dff1f21b291fdc7b93e24a18 (diff) |
IXP4xx: Extend PCI MMIO indirect address space to 1 GB.
IXP4xx CPUs can indirectly access the whole 4 GB PCI MMIO address space (using
the non-prefetch registers). Previously the available space depended on the CPU
variant, since one of the IXP43x platforms needed more than the usual 128 MB.
1 GB should be enough for everyone, and if not, we can trivially increase it.
Signed-off-by: Krzysztof Hałasa <khc@pm.waw.pl>
Diffstat (limited to 'arch/arm/mach-ixp4xx/include')
-rw-r--r-- | arch/arm/mach-ixp4xx/include/mach/hardware.h | 8 | ||||
-rw-r--r-- | arch/arm/mach-ixp4xx/include/mach/io.h | 22 |
2 files changed, 17 insertions, 13 deletions
diff --git a/arch/arm/mach-ixp4xx/include/mach/hardware.h b/arch/arm/mach-ixp4xx/include/mach/hardware.h index f58a43a23966..f822b223b7e0 100644 --- a/arch/arm/mach-ixp4xx/include/mach/hardware.h +++ b/arch/arm/mach-ixp4xx/include/mach/hardware.h | |||
@@ -18,7 +18,13 @@ | |||
18 | #define __ASM_ARCH_HARDWARE_H__ | 18 | #define __ASM_ARCH_HARDWARE_H__ |
19 | 19 | ||
20 | #define PCIBIOS_MIN_IO 0x00001000 | 20 | #define PCIBIOS_MIN_IO 0x00001000 |
21 | #define PCIBIOS_MIN_MEM (cpu_is_ixp43x() ? 0x40000000 : 0x48000000) | 21 | #ifdef CONFIG_IXP4XX_INDIRECT_PCI |
22 | #define PCIBIOS_MIN_MEM 0x10000000 /* 1 GB of indirect PCI MMIO space */ | ||
23 | #define PCIBIOS_MAX_MEM 0x4FFFFFFF | ||
24 | #else | ||
25 | #define PCIBIOS_MIN_MEM 0x48000000 /* 64 MB of PCI MMIO space */ | ||
26 | #define PCIBIOS_MAX_MEM 0x4BFFFFFF | ||
27 | #endif | ||
22 | 28 | ||
23 | /* | 29 | /* |
24 | * We override the standard dma-mask routines for bouncing. | 30 | * We override the standard dma-mask routines for bouncing. |
diff --git a/arch/arm/mach-ixp4xx/include/mach/io.h b/arch/arm/mach-ixp4xx/include/mach/io.h index 0e601fe50162..6ea7e2fb2701 100644 --- a/arch/arm/mach-ixp4xx/include/mach/io.h +++ b/arch/arm/mach-ixp4xx/include/mach/io.h | |||
@@ -26,22 +26,20 @@ extern int ixp4xx_pci_write(u32 addr, u32 cmd, u32 data); | |||
26 | /* | 26 | /* |
27 | * IXP4xx provides two methods of accessing PCI memory space: | 27 | * IXP4xx provides two methods of accessing PCI memory space: |
28 | * | 28 | * |
29 | * 1) A direct mapped window from 0x48000000 to 0x4bffffff (64MB). | 29 | * 1) A direct mapped window from 0x48000000 to 0x4BFFFFFF (64MB). |
30 | * To access PCI via this space, we simply ioremap() the BAR | 30 | * To access PCI via this space, we simply ioremap() the BAR |
31 | * into the kernel and we can use the standard read[bwl]/write[bwl] | 31 | * into the kernel and we can use the standard read[bwl]/write[bwl] |
32 | * macros. This is the preffered method due to speed but it | 32 | * macros. This is the preffered method due to speed but it |
33 | * limits the system to just 64MB of PCI memory. This can be | 33 | * limits the system to just 64MB of PCI memory. This can be |
34 | * problamatic if using video cards and other memory-heavy | 34 | * problematic if using video cards and other memory-heavy targets. |
35 | * targets. | ||
36 | * | ||
37 | * 2) If > 64MB of memory space is required, the IXP4xx can be configured | ||
38 | * to use indirect registers to access PCI (as we do below for I/O | ||
39 | * transactions). This allows for up to 128MB (0x48000000 to 0x4fffffff) | ||
40 | * of memory on the bus. The disadvantage of this is that every | ||
41 | * PCI access requires three local register accesses plus a spinlock, | ||
42 | * but in some cases the performance hit is acceptable. In addition, | ||
43 | * you cannot mmap() PCI devices in this case. | ||
44 | * | 35 | * |
36 | * 2) If > 64MB of memory space is required, the IXP4xx can use indirect | ||
37 | * registers to access the whole 4 GB of PCI memory space (as we do below | ||
38 | * for I/O transactions). This allows currently for up to 1 GB (0x10000000 | ||
39 | * to 0x4FFFFFFF) of memory on the bus. The disadvantage of this is that | ||
40 | * every PCI access requires three local register accesses plus a spinlock, | ||
41 | * but in some cases the performance hit is acceptable. In addition, you | ||
42 | * cannot mmap() PCI devices in this case. | ||
45 | */ | 43 | */ |
46 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 44 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
47 | 45 | ||