diff options
Diffstat (limited to 'Documentation/arm/Porting')
-rw-r--r-- | Documentation/arm/Porting | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/Documentation/arm/Porting b/Documentation/arm/Porting new file mode 100644 index 000000000000..a492233931b9 --- /dev/null +++ b/Documentation/arm/Porting | |||
@@ -0,0 +1,135 @@ | |||
1 | Taken from list archive at http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2001-July/004064.html | ||
2 | |||
3 | Initial definitions | ||
4 | ------------------- | ||
5 | |||
6 | The following symbol definitions rely on you knowing the translation that | ||
7 | __virt_to_phys() does for your machine. This macro converts the passed | ||
8 | virtual address to a physical address. Normally, it is simply: | ||
9 | |||
10 | phys = virt - PAGE_OFFSET + PHYS_OFFSET | ||
11 | |||
12 | |||
13 | Decompressor Symbols | ||
14 | -------------------- | ||
15 | |||
16 | ZTEXTADDR | ||
17 | Start address of decompressor. There's no point in talking about | ||
18 | virtual or physical addresses here, since the MMU will be off at | ||
19 | the time when you call the decompressor code. You normally call | ||
20 | the kernel at this address to start it booting. This doesn't have | ||
21 | to be located in RAM, it can be in flash or other read-only or | ||
22 | read-write addressable medium. | ||
23 | |||
24 | ZBSSADDR | ||
25 | Start address of zero-initialised work area for the decompressor. | ||
26 | This must be pointing at RAM. The decompressor will zero initialise | ||
27 | this for you. Again, the MMU will be off. | ||
28 | |||
29 | ZRELADDR | ||
30 | This is the address where the decompressed kernel will be written, | ||
31 | and eventually executed. The following constraint must be valid: | ||
32 | |||
33 | __virt_to_phys(TEXTADDR) == ZRELADDR | ||
34 | |||
35 | The initial part of the kernel is carefully coded to be position | ||
36 | independent. | ||
37 | |||
38 | INITRD_PHYS | ||
39 | Physical address to place the initial RAM disk. Only relevant if | ||
40 | you are using the bootpImage stuff (which only works on the old | ||
41 | struct param_struct). | ||
42 | |||
43 | INITRD_VIRT | ||
44 | Virtual address of the initial RAM disk. The following constraint | ||
45 | must be valid: | ||
46 | |||
47 | __virt_to_phys(INITRD_VIRT) == INITRD_PHYS | ||
48 | |||
49 | PARAMS_PHYS | ||
50 | Physical address of the struct param_struct or tag list, giving the | ||
51 | kernel various parameters about its execution environment. | ||
52 | |||
53 | |||
54 | Kernel Symbols | ||
55 | -------------- | ||
56 | |||
57 | PHYS_OFFSET | ||
58 | Physical start address of the first bank of RAM. | ||
59 | |||
60 | PAGE_OFFSET | ||
61 | Virtual start address of the first bank of RAM. During the kernel | ||
62 | boot phase, virtual address PAGE_OFFSET will be mapped to physical | ||
63 | address PHYS_OFFSET, along with any other mappings you supply. | ||
64 | This should be the same value as TASK_SIZE. | ||
65 | |||
66 | TASK_SIZE | ||
67 | The maximum size of a user process in bytes. Since user space | ||
68 | always starts at zero, this is the maximum address that a user | ||
69 | process can access+1. The user space stack grows down from this | ||
70 | address. | ||
71 | |||
72 | Any virtual address below TASK_SIZE is deemed to be user process | ||
73 | area, and therefore managed dynamically on a process by process | ||
74 | basis by the kernel. I'll call this the user segment. | ||
75 | |||
76 | Anything above TASK_SIZE is common to all processes. I'll call | ||
77 | this the kernel segment. | ||
78 | |||
79 | (In other words, you can't put IO mappings below TASK_SIZE, and | ||
80 | hence PAGE_OFFSET). | ||
81 | |||
82 | TEXTADDR | ||
83 | Virtual start address of kernel, normally PAGE_OFFSET + 0x8000. | ||
84 | This is where the kernel image ends up. With the latest kernels, | ||
85 | it must be located at 32768 bytes into a 128MB region. Previous | ||
86 | kernels placed a restriction of 256MB here. | ||
87 | |||
88 | DATAADDR | ||
89 | Virtual address for the kernel data segment. Must not be defined | ||
90 | when using the decompressor. | ||
91 | |||
92 | VMALLOC_START | ||
93 | VMALLOC_END | ||
94 | Virtual addresses bounding the vmalloc() area. There must not be | ||
95 | any static mappings in this area; vmalloc will overwrite them. | ||
96 | The addresses must also be in the kernel segment (see above). | ||
97 | Normally, the vmalloc() area starts VMALLOC_OFFSET bytes above the | ||
98 | last virtual RAM address (found using variable high_memory). | ||
99 | |||
100 | VMALLOC_OFFSET | ||
101 | Offset normally incorporated into VMALLOC_START to provide a hole | ||
102 | between virtual RAM and the vmalloc area. We do this to allow | ||
103 | out of bounds memory accesses (eg, something writing off the end | ||
104 | of the mapped memory map) to be caught. Normally set to 8MB. | ||
105 | |||
106 | Architecture Specific Macros | ||
107 | ---------------------------- | ||
108 | |||
109 | BOOT_MEM(pram,pio,vio) | ||
110 | `pram' specifies the physical start address of RAM. Must always | ||
111 | be present, and should be the same as PHYS_OFFSET. | ||
112 | |||
113 | `pio' is the physical address of an 8MB region containing IO for | ||
114 | use with the debugging macros in arch/arm/kernel/debug-armv.S. | ||
115 | |||
116 | `vio' is the virtual address of the 8MB debugging region. | ||
117 | |||
118 | It is expected that the debugging region will be re-initialised | ||
119 | by the architecture specific code later in the code (via the | ||
120 | MAPIO function). | ||
121 | |||
122 | BOOT_PARAMS | ||
123 | Same as, and see PARAMS_PHYS. | ||
124 | |||
125 | FIXUP(func) | ||
126 | Machine specific fixups, run before memory subsystems have been | ||
127 | initialised. | ||
128 | |||
129 | MAPIO(func) | ||
130 | Machine specific function to map IO areas (including the debug | ||
131 | region above). | ||
132 | |||
133 | INITIRQ(func) | ||
134 | Machine specific function to initialise interrupts. | ||
135 | |||