commit d948bda3a8d2db3ec661e3c2d93e873b05a30970
parent 4bd1aedd867266f7f05e28b8edbba3ceac9b6d62
Author: Matsuda Kenji <info@mtkn.jp>
Date: Mon, 17 Apr 2023 08:46:12 +0900
read bootrom
Diffstat:
M | mach.s | | | 95 | ++++++++++--------------------------------------------------------------------- |
1 file changed, 11 insertions(+), 84 deletions(-)
diff --git a/mach.s b/mach.s
@@ -134,95 +134,20 @@ pll_lock:
lsl r1, r1, #5
str r1, [r0, #0x2c] // UART0_UARTLCR_H
- ldr r0, =(0 << 21 | 32 << 16 | 3 << 8) // SSI: CTRLR0
- ldr r1, =(0x0 << 24 | 0 << 11 | 0 << 8 | 0 << 2 | 0) // SSI: SPI_CTRLR0
- bl setup_ssi
- bl exit_xip
-
- ldr r4, xip_ssi_base
-
- ldr r0, =(0 << 21 | 32 << 16 | 3 << 8) // SSI: CTRLR0
- ldr r1, =(0x0 << 24 | 0 << 11 | 0 << 8 | 0 << 2 | 0) // SSI: SPI_CTRLR0
- bl setup_ssi
-
- mov r0, #0x03
- lsl r0, r0, #24
- str r0, [r4, #0x60] // SSI: DR0
-
- bl wait_ssi
- bl ssi_print
-
- pop {r4, pc}
-
-exit_xip:
- push {lr}
- mov r1, #0
- str r1, [r3, #0x60] // SSI: DR0
- str r1, [r3, #0x60] // SSI: DR0
- str r1, [r3, #0x60] // SSI: DR0
- str r1, [r3, #0x60] // SSI: DR0
- bl wait_ssi
- bl ssi_drain
- pop {pc}
-
-setup_ssi:
- push {lr}
- ldr r3, xip_ssi_base
- // disable ssi
- mov r2, #0
- str r2, [r3, #0x8] // SSI: SSIENR
- // setup SSI
- str r0, [r3, #0] // SSI: CTRLR0
- mov r2, #0 // NDF
- str r2, [r3, #4] // SSI: CTRLR1
- // setup SPI
- mov r2, #0xf4
- str r1, [r3, r2] // SSI: SPI_CTRLR0
- // reenable SSI
- mov r2, #1
- str r2, [r3, #0x8] // SSI: SSIENR
- pop {pc}
-
-wait_ssi:
- ldr r3, xip_ssi_base
- ldr r1, [r3, #0x28] // SSI: SR
- mov r2, #4 // TFE
- tst r1, r2
- beq wait_ssi
- mov r2, #1 // BUSY
- tst r1, r2
- bne wait_ssi
- bx lr
-
-ssi_print:
- push {r4, lr}
- ldr r4, xip_ssi_base
-ssi_print_loop:
- ldr r1, [r4, #0x28] // SSI: SR
- mov r2, #8 // RFNE
- tst r1, r2
- beq ssi_print_empty
- ldr r0, [r4, #0x60] // SSI: DR0
+ ldr r3, rom_base
+ ldrb r0, [r3, #0x10]
+ bl putchar
+ ldrb r0, [r3, #0x11]
+ bl putchar
+ ldrb r0, [r3, #0x12]
bl printh
mov r0, #'\n'
bl putchar
- b ssi_print_loop
-ssi_print_empty:
+ ldrb r0, [r3, #0x13]
+ bl printh
+
pop {r4, pc}
-ssi_drain:
- push {lr}
- ldr r3, xip_ssi_base
-ssi_drain_loop:
- ldr r1, [r3, #0x28] // SSI: SR
- mov r2, #8 // RFNE
- tst r1, r2
- beq ssi_drain_empty
- ldr r0, [r3, #0x60] // SSI: DR0
- b ssi_drain_loop
-ssi_drain_empty:
- pop {pc}
-
unreset:
// unreset subsystems specified by r0
// args: bit mask to specify the subsystems to unreset
@@ -387,6 +312,8 @@ atomic_set:
.word 0x00002000
atomic_clr:
.word 0x00003000
+rom_base:
+ .word 0x00000000
xip_base:
.word 0x10000000
xip_ssi_base: