|
1 | 1 | #include "linux_config.h" |
2 | 2 | #include "scu.h" |
3 | 3 |
|
4 | | -@ LCD Frambuffers stuff (Physical Addresses) |
5 | | -#define LCD_FB_PDC0 (0x10400400) |
6 | | -#define LCD_FB_PDC1 (0x10400500) |
7 | | -#define LCD_FB_A_ADDR_OFFSET (0x68) |
8 | | -#define LCD_FB_FORMAT_OFFSET (0x70) |
9 | | -#define LCD_FB_PDC0_FORMAT (0x80341) |
10 | | -#define LCD_FB_SELECT_OFFSET (0x78) |
11 | | -#define LCD_FB_STRIDE_OFFSET (0x90) |
12 | | -#define LCD_FB_PDC0_STRIDE (0x2D0) |
13 | | -#define LCD_FB_B_ADDR_OFFSET (0x94) |
14 | | -#define FB_TOP_SIZE (400 * 240 * 3) |
15 | | -#define FB_BOT_SIZE (320 * 240 * 3) |
16 | | -#define FB_BASE_PA (VRAM_BASE) |
17 | | -#define FB_TOP_LEFT1 (FB_BASE_PA) |
18 | | -#define FB_TOP_LEFT2 (FB_TOP_LEFT1 + FB_TOP_SIZE) |
19 | | -#define FB_TOP_RIGHT1 (FB_TOP_LEFT2 + FB_TOP_SIZE) |
20 | | -#define FB_TOP_RIGHT2 (FB_TOP_RIGHT1 + FB_TOP_SIZE) |
21 | | -#define FB_BOT_1 (FB_TOP_RIGHT2 + FB_TOP_SIZE) |
22 | | -#define FB_BOT_2 (FB_BOT_1 + FB_BOT_SIZE) |
23 | | - |
24 | 4 | .arm |
25 | 5 | .section .text.start |
26 | 6 | .cpu mpcore |
27 | 7 |
|
28 | 8 | .global _start |
29 | 9 | _start: |
| 10 | + @ Initialize RAM value used to sync with arm9 |
| 11 | + ldr r0, =SYNC_ADDR |
| 12 | + mov r1, #SYNC_INIT |
| 13 | + str r1, [r0] |
| 14 | + |
30 | 15 | @ Disable FIQs, IRQs, imprecise aborts |
31 | 16 | @ and enter SVC mode |
32 | 17 | cpsid aif, #0x13 |
@@ -91,6 +76,32 @@ _start: |
91 | 76 |
|
92 | 77 | @@@@@ Map Framebuffers @@@@@ |
93 | 78 |
|
| 79 | + @@@ Zero framebuffer region @@@ |
| 80 | + ldr r0, =FB_TOP_LEFT1 @ address of buffer |
| 81 | + mov r1, #0 @ value to set |
| 82 | + ldr r2, =FB_TOP_SIZE @ number of bytes |
| 83 | + bl memset |
| 84 | + ldr r0, =FB_TOP_LEFT2 |
| 85 | + mov r1, #0 |
| 86 | + ldr r2, =FB_TOP_SIZE |
| 87 | + bl memset |
| 88 | + ldr r0, =FB_TOP_RIGHT1 |
| 89 | + mov r1, #0 |
| 90 | + ldr r2, =FB_TOP_SIZE |
| 91 | + bl memset |
| 92 | + ldr r0, =FB_TOP_RIGHT2 |
| 93 | + mov r1, #0 |
| 94 | + ldr r2, =FB_TOP_SIZE |
| 95 | + bl memset |
| 96 | + ldr r0, =FB_BOT_1 |
| 97 | + mov r1, #0 |
| 98 | + ldr r2, =FB_BOT_SIZE |
| 99 | + bl memset |
| 100 | + ldr r0, =FB_BOT_2 |
| 101 | + mov r1, #0 |
| 102 | + ldr r2, =FB_BOT_SIZE |
| 103 | + bl memset |
| 104 | + |
94 | 105 | @@@ Top screen @@@ |
95 | 106 | ldr r0, =LCD_FB_PDC0 |
96 | 107 |
|
@@ -125,15 +136,19 @@ _start: |
125 | 136 | @ Select framebuffer 0 |
126 | 137 | mov r1, #0 |
127 | 138 | str r1, [r0, #LCD_FB_SELECT_OFFSET] |
| 139 | + |
| 140 | + ldr r0, =SYNC_ADDR |
| 141 | + mov r1, #SYNC_FB_RDY |
| 142 | + str r1, [r0] |
128 | 143 |
|
129 | 144 | @@@@@ Jump to the kernel @@@@@ |
130 | | - |
| 145 | + |
131 | 146 | @ Wait until ARM9 tells Linux address... |
132 | 147 | ldr r0, =SYNC_ADDR |
133 | 148 | wait_arm9: |
134 | 149 | ldr r1, [r0] |
135 | | - cmp r1, #0 |
136 | | - beq wait_arm9 |
| 150 | + cmp r1, #SYNC_BOOT_RDY |
| 151 | + bne wait_arm9 |
137 | 152 |
|
138 | 153 | @ Setup the registers before |
139 | 154 | @ jumping to the kernel entry |
|
0 commit comments