]> git.hungrycats.org Git - linux/commitdiff
[ARM] Add ARM virtual memory layout documentation.
authorRussell King <rmk@flint.arm.linux.org.uk>
Thu, 1 Apr 2004 21:03:57 +0000 (22:03 +0100)
committerRussell King <rmk@flint.arm.linux.org.uk>
Thu, 1 Apr 2004 21:03:57 +0000 (22:03 +0100)
Documentation/arm/memory.txt [new file with mode: 0644]

diff --git a/Documentation/arm/memory.txt b/Documentation/arm/memory.txt
new file mode 100644 (file)
index 0000000..967ce6c
--- /dev/null
@@ -0,0 +1,74 @@
+               Kernel Memory Layout on ARM Linux
+
+               Russell King <rmk@arm.linux.org.uk>
+                       April 27, 2003 (2.5.68)
+
+This document describes the virtual memory layout which the Linux
+kernel uses for ARM processors.  It indicates which regions are
+free for platforms to use, and which are used by generic code.
+
+The ARM CPU is capable of addressing a maximum of 4GB virtual memory
+space, and this must be shared between user space processes, the
+kernel, and hardware devices.
+
+As the ARM architecture matures, it becomes necessary to reserve
+certain regions of VM space for use for new facilities; therefore
+this document may reserve more VM space over time.
+
+Start          End             Use
+--------------------------------------------------------------------------
+ffff8000       ffffffff        copy_user_page / clear_user_page use.
+                               For SA11xx and Xscale, this is used to
+                               setup a minicache mapping.
+
+ffff1000       ffff7fff        Reserved.
+                               Platforms must not use this address range.
+
+ffff0000       ffff0fff        CPU vector page.
+                               The CPU vectors are mapped here if the
+                               CPU supports vector relocation (control
+                               register V bit.)
+
+ffe00000       fffeffff        Free for platform use, not recommended.
+
+ffc00000       ffdfffff        2MB consistent memory mapping.
+                               Memory returned by the consistent_alloc
+                               low level function will be dynamically
+                               mapped here.
+
+ff000000       ffbfffff        Free for platform use, not recommended.
+
+VMALLOC_END    ff000000        Free for platform use, recommended.
+
+VMALLOC_START  VMALLOC_END     vmalloc() / ioremap() space.
+                               Memory returned by vmalloc/ioremap will
+                               be dynamically placed in this region.
+                               VMALLOC_START may be based upon the value
+                               of the high_memory variable.
+
+PAGE_OFFSET    high_memory     Kernel direct-mapped RAM region.
+                               This maps the platforms RAM, and typically
+                               maps all platform RAM in a 1:1 relationship.
+
+TASK_SIZE      PAGE_OFFSET     Kernel module space
+                               Kernel modules inserted via insmod are
+                               placed here using dynamic mappings.
+
+00001000       TASK_SIZE       User space mappings
+                               Per-thread mappings are placed here via
+                               the mmap() system call.
+
+00000000       00000fff        CPU vector page / null pointer trap
+                               CPUs which do not support vector remapping
+                               place their vector page here.  NULL pointer
+                               dereferences by both the kernel and user
+                               space are also caught via this mapping.
+
+Please note that mappings which collide with the above areas may result
+in a non-bootable kernel, or may cause the kernel to (eventually) panic
+at run time.
+
+Since future CPUs may impact the kernel mapping layout, user programs
+must not access any memory which is not mapped inside their 0x0001000
+to TASK_SIZE address range.  If they wish to access these areas, they
+must set up their own mappings using open() and mmap().