FreeCalypso > hg > freecalypso-sw
annotate target-utils/libcommon/uartsel.c @ 992:a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
The new implementation should work with both the familiar Calypso C035
boot ROM version found in our regular targets as well as the older
Calypso F741979B version found on the vintage D-Sample board.
author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
---|---|
date | Wed, 30 Dec 2015 21:28:41 +0000 |
parents | 40f607bb0a2c |
children |
rev | line source |
---|---|
11
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 /* |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 * uart_select_init() figures out which UART was used to load us |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 * through the boot ROM, and sets things up for us to use the same |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 * UART for our communication. |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 */ |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 #include "types.h" |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 #include "romvars.h" |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 #include "ns16550.h" |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 #include "halt.h" |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 |
992
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
12 extern struct ns16550_regs *uart_base; |
11
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 |
992
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
14 static u16 rom_version; |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
15 static struct boot_rom_vars *rom_vars; |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
16 static char *uart_name; |
11
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 uart_select_init() |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 { |
992
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
20 rom_version = *(u16 *)0x1FFE; |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
21 |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
22 switch (rom_version) { |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
23 case 0x0200: |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
24 rom_vars = (struct boot_rom_vars *) 0x800504; |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
25 break; |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
26 case 0x0300: |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
27 rom_vars = (struct boot_rom_vars *) 0x800518; |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
28 break; |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
29 default: |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
30 _exit(HALTCODE_BOOTROMVER); |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
31 } |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
32 |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
33 switch (rom_vars->uart_id) { |
11
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 case 0: |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 uart_base = (struct ns16550_regs *) 0xFFFF5800; |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 uart_name = "MODEM"; |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
37 break; |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
38 case 1: |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
39 uart_base = (struct ns16550_regs *) 0xFFFF5000; |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
40 uart_name = "IrDA"; |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
41 break; |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
42 default: |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
43 _exit(HALTCODE_INVALIDUART); |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
44 } |
40f607bb0a2c
target-utils refactored
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
45 } |
992
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
46 |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
47 print_boot_rom_info() |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
48 { |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
49 printf("Loaded via boot ROM v%04X, UART %d (%s) at baud rate #%d\n", |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
50 rom_version, rom_vars->uart_id, uart_name, |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
51 rom_vars->baud_rate_code); |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
52 printf("CLKTCXO input autodetected to be %d MHz\n", |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
53 rom_vars->clktcxo_13mhz ? 13 : 26); |
a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
11
diff
changeset
|
54 } |