diff options
Diffstat (limited to 'Documentation/arm/memory.rst')
| -rw-r--r-- | Documentation/arm/memory.rst | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/Documentation/arm/memory.rst b/Documentation/arm/memory.rst new file mode 100644 index 000000000000..0521b4ce5c96 --- /dev/null +++ b/Documentation/arm/memory.rst | |||
| @@ -0,0 +1,93 @@ | |||
| 1 | ================================= | ||
| 2 | Kernel Memory Layout on ARM Linux | ||
| 3 | ================================= | ||
| 4 | |||
| 5 | Russell King <rmk@arm.linux.org.uk> | ||
| 6 | |||
| 7 | November 17, 2005 (2.6.15) | ||
| 8 | |||
| 9 | This document describes the virtual memory layout which the Linux | ||
| 10 | kernel uses for ARM processors. It indicates which regions are | ||
| 11 | free for platforms to use, and which are used by generic code. | ||
| 12 | |||
| 13 | The ARM CPU is capable of addressing a maximum of 4GB virtual memory | ||
| 14 | space, and this must be shared between user space processes, the | ||
| 15 | kernel, and hardware devices. | ||
| 16 | |||
| 17 | As the ARM architecture matures, it becomes necessary to reserve | ||
| 18 | certain regions of VM space for use for new facilities; therefore | ||
| 19 | this document may reserve more VM space over time. | ||
| 20 | |||
| 21 | =============== =============== =============================================== | ||
| 22 | Start End Use | ||
| 23 | =============== =============== =============================================== | ||
| 24 | ffff8000 ffffffff copy_user_page / clear_user_page use. | ||
| 25 | For SA11xx and Xscale, this is used to | ||
| 26 | setup a minicache mapping. | ||
| 27 | |||
| 28 | ffff4000 ffffffff cache aliasing on ARMv6 and later CPUs. | ||
| 29 | |||
| 30 | ffff1000 ffff7fff Reserved. | ||
| 31 | Platforms must not use this address range. | ||
| 32 | |||
| 33 | ffff0000 ffff0fff CPU vector page. | ||
| 34 | The CPU vectors are mapped here if the | ||
| 35 | CPU supports vector relocation (control | ||
| 36 | register V bit.) | ||
| 37 | |||
| 38 | fffe0000 fffeffff XScale cache flush area. This is used | ||
| 39 | in proc-xscale.S to flush the whole data | ||
| 40 | cache. (XScale does not have TCM.) | ||
| 41 | |||
| 42 | fffe8000 fffeffff DTCM mapping area for platforms with | ||
| 43 | DTCM mounted inside the CPU. | ||
| 44 | |||
| 45 | fffe0000 fffe7fff ITCM mapping area for platforms with | ||
| 46 | ITCM mounted inside the CPU. | ||
| 47 | |||
| 48 | ffc00000 ffefffff Fixmap mapping region. Addresses provided | ||
| 49 | by fix_to_virt() will be located here. | ||
| 50 | |||
| 51 | fee00000 feffffff Mapping of PCI I/O space. This is a static | ||
| 52 | mapping within the vmalloc space. | ||
| 53 | |||
| 54 | VMALLOC_START VMALLOC_END-1 vmalloc() / ioremap() space. | ||
| 55 | Memory returned by vmalloc/ioremap will | ||
| 56 | be dynamically placed in this region. | ||
| 57 | Machine specific static mappings are also | ||
| 58 | located here through iotable_init(). | ||
| 59 | VMALLOC_START is based upon the value | ||
| 60 | of the high_memory variable, and VMALLOC_END | ||
| 61 | is equal to 0xff800000. | ||
| 62 | |||
| 63 | PAGE_OFFSET high_memory-1 Kernel direct-mapped RAM region. | ||
| 64 | This maps the platforms RAM, and typically | ||
| 65 | maps all platform RAM in a 1:1 relationship. | ||
| 66 | |||
| 67 | PKMAP_BASE PAGE_OFFSET-1 Permanent kernel mappings | ||
| 68 | One way of mapping HIGHMEM pages into kernel | ||
| 69 | space. | ||
| 70 | |||
| 71 | MODULES_VADDR MODULES_END-1 Kernel module space | ||
| 72 | Kernel modules inserted via insmod are | ||
| 73 | placed here using dynamic mappings. | ||
| 74 | |||
| 75 | 00001000 TASK_SIZE-1 User space mappings | ||
| 76 | Per-thread mappings are placed here via | ||
| 77 | the mmap() system call. | ||
| 78 | |||
| 79 | 00000000 00000fff CPU vector page / null pointer trap | ||
| 80 | CPUs which do not support vector remapping | ||
| 81 | place their vector page here. NULL pointer | ||
| 82 | dereferences by both the kernel and user | ||
| 83 | space are also caught via this mapping. | ||
| 84 | =============== =============== =============================================== | ||
| 85 | |||
| 86 | Please note that mappings which collide with the above areas may result | ||
| 87 | in a non-bootable kernel, or may cause the kernel to (eventually) panic | ||
| 88 | at run time. | ||
| 89 | |||
| 90 | Since future CPUs may impact the kernel mapping layout, user programs | ||
| 91 | must not access any memory which is not mapped inside their 0x0001000 | ||
| 92 | to TASK_SIZE address range. If they wish to access these areas, they | ||
| 93 | must set up their own mappings using open() and mmap(). | ||
