FreeCalypso > hg > freecalypso-tools
annotate target-utils/flash-boot-test/uartinit.S @ 921:74d284add54d
fc-fsio: guard against bogus readdir results from the target
If the FFS being operated on contains SE K2x0 extended filenames,
readdir will return strings that are bad for printing. We need to
guard against this possibility, and also against possible other
bogosity that could be sent by other alien firmwares.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 31 Dec 2022 22:55:23 +0000 |
parents | cc6594a7fc7a |
children |
rev | line source |
---|---|
200
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * The UART initialization code in this assembly module has been lifted |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * from the disassembly of the Calypso boot ROM, and slightly adapted |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * for our needs. |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 */ |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 .text |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 .code 32 |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 .globl uart_init |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 uart_init: |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 stmfd sp!, {r4-r11,lr} |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 @ prepare UART init values |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 mov r11, #3 |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 mov r5, #0 |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 mov r10, #7 @ baud rate divisor for 115200 baud |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 mov r9, #0x80 |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 mov r7, #0xbf |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 mov r4, #7 |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 @ UART base address |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 ldr r6, =uart_base |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 ldr r12, [r6] |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 add r3, r12, #8 |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 @ R3 points to register 8 (MDR1) |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 @ write 07 into it: reset mode |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 strb r4, [r3] |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 add r0, r12, #3 |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 @ R0 points to register 3 (LCR) |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 @ write BF into it: map in the extended registers |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 strb r7, [r0] |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 add r1, r12, #2 |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 @ R1 points to register 2: EFR under current mapping |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 @ set bit 4: enable enhanced functions |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 ldrb r8, [r1] |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 orr r8, r8, #0x10 |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 strb r8, [r1] |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 @ write 80 into LCR: map in the baud rate divisor registers |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 strb r9, [r0] |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 @ reg 2 (pointed to by R1) is now IIR/FCR |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 @ write 07 into FCR: FIFOs enabled and cleared, no DMA |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 strb r4, [r1] |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 @ write BF into LCR again |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 strb r7, [r0] |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 @ load baud rate divisor |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 strb r10, [r12] |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 strb r5, [r12, #1] |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 @ write 03 into LCR: restore normal registers, 8N1 |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 strb r11, [r0] |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 @ write 00 into MDR1: plain UART mode |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 strb r5, [r3] |
cc6594a7fc7a
target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 ldmfd sp!, {r4-r11,pc} |