Merge master.kernel.org:/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog
[linux-2.6] / include / asm-arm / arch-ixp23xx / memory.h
1 /*
2  * include/asm-arm/arch-ixp23xx/memory.h
3  *
4  * Copyright (c) 2003-2004 Intel Corp.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License as published by the
8  * Free Software Foundation; either version 2 of the License, or (at your
9  * option) any later version.
10  */
11
12 #ifndef __ASM_ARCH_MEMORY_H
13 #define __ASM_ARCH_MEMORY_H
14
15 #include <asm/hardware.h>
16
17 /*
18  * Physical DRAM offset.
19  */
20 #define PHYS_OFFSET             (0x00000000)
21
22
23 /*
24  * Virtual view <-> DMA view memory address translations
25  * virt_to_bus: Used to translate the virtual address to an
26  *              address suitable to be passed to set_dma_addr
27  * bus_to_virt: Used to convert an address for DMA operations
28  *              to an address that the kernel can use.
29  */
30 #ifndef __ASSEMBLY__
31 #include <asm/mach-types.h>
32
33 #define __virt_to_bus(v)                                                \
34         ({ unsigned int ret;                                            \
35         ret = ((__virt_to_phys(v) - 0x00000000) +                       \
36          (*((volatile int *)IXP23XX_PCI_SDRAM_BAR) & 0xfffffff0));      \
37         ret; })
38
39 #define __bus_to_virt(b)                                                \
40         ({ unsigned int data;                                           \
41         data = *((volatile int *)IXP23XX_PCI_SDRAM_BAR);                \
42          __phys_to_virt((((b - (data & 0xfffffff0)) + 0x00000000))); })
43
44 /*
45  * Coherency support.  Only supported on A2 CPUs or on A1
46  * systems that have the cache coherency workaround.
47  */
48 static inline int __ixp23xx_arch_is_coherent(void)
49 {
50         extern unsigned int processor_id;
51
52         if (((processor_id & 15) >= 4) || machine_is_roadrunner())
53                 return 1;
54
55         return 0;
56 }
57
58 #define arch_is_coherent()      __ixp23xx_arch_is_coherent()
59
60 #endif
61
62
63 #endif