aboutsummaryrefslogtreecommitdiffstats
path: root/examples/device_tree.pack
blob: 0d54554b1fc1f30a4e1e39c8b516a3fe16460f88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
== code 0x80400000
# main:
# print device tree info.
# OpenSBI calls us with a1 set to the start of the DTB
# load 0x10000000 (UART0) into a0
37 05 00 10

93 8a 05 00

# check magic == 0xd00dfeed
37 13 fe ed
13 03 03 dd
83 a2 0a 00
63 9c 62 02

b7 05 50 80
93 85 45 01
ef 00 80 08

83 a5 4a 00
ef 00 40 03
ef 00 00 0a
ef 00 00 06

# exit:
# system reset (via SBI extension SRST)
# a7 = ext id, a6 = fid, a0 = 0, a1 = 0
b7 58 52 53
93 88 48 35
33 08 00 00
33 05 00 00
b3 05 00 00
# ECALL
73 00 00 00

# err_magic:
b7 05 50 80
93 85 05 00
ef 00 40 05
6f f0 df fd

# bswapw:
# byte-order-swap word in a1
# srli    a1, a0, 8
# lui     a2, 16
# addi    a2, a2, -256
# and     a1, a1, a2
93 d2 85 00
37 63 01 00
13 03 03 f0
b3 f2 62 00
#  srli    a2, a0, 24
#  or      a1, a1, a2
13 d3 85 01
b3 e2 62 00
# slli    a2, a0, 8
# lui     a3, 4080
# and     a2, a2, a3
13 93 85 00
b7 03 ff 00
33 73 73 00
# slli    a0, a0, 24
# or      a0, a0, a2
# or      a0, a0, a1
93 95 85 01
b3 e5 65 00
b3 e5 55 00
# ret
67 80 00 00

# printnl:
13 03 a0 00
# printnl:spin:
# spin if FIFO is full (thr_emtpy = UART+5 & 0x20)
83 43 55 00
93 f3 03 02
e3 8c 03 fe
# print char
23 20 65 00
# return
67 80 00 00

# print:
# print:loop:
# load unsigned byte at a1
03 c3 05 00
# break loop if zero
63 0e 03 00
# print:spin:
# spin if FIFO is full (thr_emtpy = UART+5 & 0x20)
83 43 55 00
93 f3 03 02
e3 8c 03 fe
# print char
23 20 65 00
# increment a1
93 85 15 00
# jump back up
6f f0 5f fe
# print:break:
# return
67 80 00 00

# print_hex_word:
13 84 05 00
93 04 c0 01
13 89 00 00
# print_hex_word:loop:
# shift
b3 55 94 00
ef 00 40 01

# break if last shift
63 86 04 00

# subtract shift count, loop
93 84 c4 ff
6f f0 1f ff
# print_hex_word:break:
# return
67 00 09 00

# print_hex_dgt:
# a1 = a1 & 0xf
93 f5 f5 00
# t1 = 0x40
13 03 00 04

# add 0x30 (ascii '0') / 0x61 (ascii 'a')
93 85 05 03
63 c4 65 00
93 85 75 02

# print_hex_dgt:spin:
# spin if FIFO is full (thr_emtpy = UART+5 & 0x20)
83 43 55 00
93 f3 03 02
e3 8c 03 fe

# print char
23 20 b5 00

# return
67 80 00 00

== data 0x80500000
# E_MAGIC:
# "Invalid DTB magic!\n\0"
49 6e 76 61
6c 69 64 20
44 54 42 20
6d 61 67 69
63 21 0a 00
# S_TOTALSZ:
54 6f 74 61
6c 20 53 69
7a 65 3a 20

00