]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - arch/arm/boot/compressed/head-shmobile.S
compiler.h: cast away attributes in WRITE_ONCE magic
[karo-tx-linux.git] / arch / arm / boot / compressed / head-shmobile.S
1 /*
2  * The head-file for SH-Mobile ARM platforms
3  *
4  * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
5  * Simon Horman <horms@verge.net.au>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; version 2 of the License.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19  */
20
21 #ifdef CONFIG_ZBOOT_ROM
22
23         .section        ".start", "ax"
24
25         /* load board-specific initialization code */
26 #include <mach/zboot.h>
27
28         adr     r0, dtb_info
29         ldmia   r0, {r1, r3, r4, r5, r7}
30
31         sub     r0, r0, r1              @ calculate the delta offset
32         add     r5, r5, r0              @ _edata
33
34         ldr     lr, [r5, #0]            @ check if valid DTB is present
35         cmp     lr, r3
36         bne     0f
37
38         add     r9, r7, #31             @ rounded up to a multiple
39         bic     r9, r9, #31             @ ... of 32 bytes
40
41         add     r6, r9, r5              @ copy from _edata
42         add     r9, r9, r4              @ to MEMORY_START
43
44 1:      ldmdb   r6!, {r0 - r3, r10 - r12, lr}
45         cmp     r6, r5
46         stmdb   r9!, {r0 - r3, r10 - r12, lr}
47         bhi     1b
48
49         /* Success: Zero board ID, pointer to start of memory for atag/dtb */
50         mov     r7, #0
51         mov     r8, r4
52         b       2f
53
54         .align  2
55 dtb_info:
56         .word   dtb_info
57 #ifndef __ARMEB__
58         .word   0xedfe0dd0              @ sig is 0xd00dfeed big endian
59 #else
60         .word   0xd00dfeed
61 #endif
62         .word   MEMORY_START
63         .word   _edata
64         .word   0x4000                  @ maximum DTB size
65 0:
66         /* Failure: Zero board ID, NULL atag/dtb */
67         mov     r7, #0
68         mov     r8, #0                  @ pass null pointer as atag
69 2 :
70
71 #endif /* CONFIG_ZBOOT_ROM */