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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
|
.. SPDX-License-Identifier: GPL-2.0+:
.. index::
single: acpi (command)
acpi command
============
Synopsis
--------
::
acpi list
acpi items [-d]
acpi dump <name>
acpi set <address>
Description
-----------
The *acpi* command is used to dump the ACPI tables generated by U-Boot for
passing to the operating systems. It allows manually setting the address to take
a look at existing ACPI tables.
ACPI tables can be generated by various output functions and even devices can
output material to include in the Differentiated System Description Table (DSDT)
and SSDT tables (Secondary System Description Table). U-Boot keeps track of
which device or table-writer produced each piece of the ACPI tables.
The ACPI tables are stored contiguously in memory.
acpi list
~~~~~~~~~
List the ACPI tables that have been generated. Each table has a 4-character
table name (e.g. SSDT, FACS) and has a format defined by the
`ACPI specification`_.
U-Boot does not currently support decoding the tables. Unlike devicetree, ACPI
tables have no regular schema and also some include bytecode, so decoding the
tables requires a lot of code.
The table shows the following information:
Name
Table name, e.g. `MCFG`
Base
Base address of table in memory
Size
Size of table in bytes
Detail
More information depending on the table type
Revision
Table revision number (two decimal digits)
OEM ID
ID for the Original Equipment Manufacturer. Typically this is "U-BOOT".
OEM Table ID
Table ID for the Original Equipment Manufacturer. Typically this is
"U-BOOTBL" (U-Boot bootloader)
OEM Revision
Revision string for the Original Equipment Manufacturer. Typically this
is the U-Boot release number, e.g. 20220101 (meaning v2022.01 since the
final 01 is not used). For DSDT, this is set by the source code in
the parameters of DefinitionBlock().
ACPI compiler-vendor ID
This is normally `INTL` for Intel
ACPI compiler revision
This is the compiler revision. It is set to the version string for the
DSDT table but other tables just use the value 0 or 1, since U-Boot does
not actually use the compiler in these cases. It generates the code
itself.
acpi items
~~~~~~~~~~
List the ACPI data that was generated, broken down by item. An item is either
an ACPI table generated by a writer function, or the part of a table that was
generated by a particular device.
The `-d` flag also shows a binary dump of the table.
The table shows the following information about each item:
Seq
Sequence number in hex
Type
Type of item
===== ============================================================
Type Meaning
===== ============================================================
dsdt Fragment of a DSDT table, as generated by a device
ssdt Fragment of a SSDT table, as generated by a device
other A whole table of a particular type. as generated by a writer
===== ============================================================
Base
Base address of table in memory
Size
Size of table in bytes
Device / Writer
Name of device (for ssdt/dsdt) that wrong this fragment of the table, or
name of the registered writer function (otherwise) that wrote the table.
acpi dump
~~~~~~~~~
Dump a paticular ACPI table in binary format. This can be used to read the table
if you have the specification handy.
Example
-------
::
=> acpi list
Name Base Size Detail
---- -------- ----- ------
RSDP 79925000 24 v02 U-BOOT
RSDT 79925030 48 v01 U-BOOT U-BOOTBL 20220101 INTL 0
XSDT 799250e0 6c v01 U-BOOT U-BOOTBL 20220101 INTL 0
FACP 79929570 f4 v04 U-BOOT U-BOOTBL 20220101 INTL 1
DSDT 79925280 32ea v02 U-BOOT U-BOOTBL 20110725 INTL 20180105
FACS 79925240 40
MCFG 79929670 2c v01 U-BOOT U-BOOTBL 20220101 INTL 0
SPCR 799296a0 50 v02 U-BOOT U-BOOTBL 20220101 INTL 0
TPM2 799296f0 4c v04 U-BOOT U-BOOTBL 20220101 INTL 0
APIC 79929740 6c v02 U-BOOT U-BOOTBL 20220101 INTL 0
SSDT 799297b0 1523 v02 U-BOOT U-BOOTBL 20220101 INTL 1
NHLT 7992ace0 e60 v05 coral coral 3 INTL 0
DBG2 7992db40 61 v00 U-BOOT U-BOOTBL 20220101 INTL 0
HPET 7992dbb0 38 v01 U-BOOT U-BOOTBL 20220101 INTL 0
=> acpi items
Seq Type Base Size Device/Writer
--- ----- -------- ---- -------------
0 other 79925000 240 0base
1 other 79925240 40 1facs
2 dsdt 799252a4 58 board
3 dsdt 799252fc 10 lpc
4 other 79925280 32f0 3dsdt
5 other 79928570 1000 4gnvs
6 other 79929570 100 5fact
7 other 79929670 30 5mcfg
8 other 799296a0 50 5spcr
9 other 799296f0 50 5tpm2
a other 79929740 70 5x86
b ssdt 799297d4 fe maxim-codec
c ssdt 799298d2 28 i2c2@16,0
d ssdt 799298fa 270 da-codec
e ssdt 79929b6a 28 i2c2@16,1
f ssdt 79929b92 28 i2c2@16,2
10 ssdt 79929bba 83 tpm@50
11 ssdt 79929c3d 28 i2c2@16,3
12 ssdt 79929c65 282 elan-touchscreen@10
13 ssdt 79929ee7 285 raydium-touchscreen@39
14 ssdt 7992a16c 28 i2c2@17,0
15 ssdt 7992a194 d8 elan-touchpad@15
16 ssdt 7992a26c 163 synaptics-touchpad@2c
17 ssdt 7992a3cf 28 i2c2@17,1
18 ssdt 7992a3f7 111 wacom-digitizer@9
19 ssdt 7992a508 8f sdmmc@1b,0
1a ssdt 7992a597 4b wifi
1b ssdt 7992a5e2 1a0 cpu@0
1c ssdt 7992a782 1a0 cpu@1
1d ssdt 7992a922 1a0 cpu@2
1e ssdt 7992aac2 211 cpu@3
1f other 799297b0 1530 6ssdt
20 other 7992ace0 2f10 8dev
=> acpi dump mcfg
MCFG @ 79929670
00000000: 4d 43 46 47 2c 00 00 00 01 41 55 2d 42 4f 4f 54 MCFG,....AU-BOOT
00000010: 55 2d 42 4f 4f 54 42 4c 01 01 22 20 49 4e 54 4c U-BOOTBL.." INTL
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 ............
=> acpi items -d
Seq Type Base Size Device/Writer
--- ----- -------- ---- -------------
0 other 79925000 240 0base
00000000: 52 53 44 20 50 54 52 20 9e 55 2d 42 4f 4f 54 02 RSD PTR .U-BOOT.
00000010: 30 50 92 79 24 00 00 00 e0 50 92 79 00 00 00 00 0P.y$....P.y....
00000020: a1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000030: 52 53 44 54 48 00 00 00 01 8b 55 2d 42 4f 4f 54 RSDTH.....U-BOOT
00000040: 55 2d 42 4f 4f 54 42 4c 01 01 22 20 49 4e 54 4c U-BOOTBL.." INTL
00000050: 00 00 00 00 70 95 92 79 70 96 92 79 a0 96 92 79 ....p..yp..y...y
00000060: f0 96 92 79 40 97 92 79 b0 97 92 79 e0 ac 92 79 ...y@..y...y...y
00000070: 40 db 92 79 b0 db 92 79 00 00 00 00 00 00 00 00 @..y...y........
00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000e0: 58 53 44 54 6c 00 00 00 01 61 55 2d 42 4f 4f 54 XSDTl....aU-BOOT
000000f0: 55 2d 42 4f 4f 54 42 4c 01 01 22 20 49 4e 54 4c U-BOOTBL.." INTL
00000100: 00 00 00 00 70 95 92 79 00 00 00 00 70 96 92 79 ....p..y....p..y
00000110: 00 00 00 00 a0 96 92 79 00 00 00 00 f0 96 92 79 .......y.......y
00000120: 00 00 00 00 40 97 92 79 00 00 00 00 b0 97 92 79 ....@..y.......y
00000130: 00 00 00 00 e0 ac 92 79 00 00 00 00 40 db 92 79 .......y....@..y
00000140: 00 00 00 00 b0 db 92 79 00 00 00 00 00 00 00 00 .......y........
00000150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
...
1 other 79925240 40 1facs
00000000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@...........
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2 dsdt 799252a4 58 board
00000000: 10 87 05 00 5c 00 08 4f 49 50 47 12 8c 04 00 03 ....\..OIPG.....
00000010: 12 8b 01 00 04 01 01 0e ff ff ff ff ff ff ff ff ................
00000020: 0d 49 4e 54 33 34 35 32 3a 30 31 00 12 85 01 00 .INT3452:01.....
00000030: 04 0a 03 01 0a 23 0d 49 4e 54 33 34 35 32 3a 30 .....#.INT3452:0
00000040: 31 00 12 85 01 00 04 0a 04 01 0a 0a 0d 49 4e 54 1............INT
00000050: 33 34 35 32 3a 30 30 00 3452:00.
3 dsdt 799252fc 10 lpc
00000000: 10 8f 00 00 5c 00 08 4e 56 53 41 0c 10 50 93 79 ....\..NVSA..P.y
4 other 79925280 32f0 3dsdt
00000000: 44 53 44 54 ea 32 00 00 02 eb 55 2d 42 4f 4f 54 DSDT.2....U-BOOT
00000010: 55 2d 42 4f 4f 54 42 4c 25 07 11 20 49 4e 54 4c U-BOOTBL%.. INTL
This shows searching for tables in a known area of memory, then setting the
pointer::
=> acpi list
No ACPI tables present
=> ms.s bff00000 80000 "RSD PTR"
bff75000: 52 53 44 20 50 54 52 20 cf 42 4f 43 48 53 20 00 RSD PTR .BOCHS .
1 match
=> acpi set bff75000
Setting ACPI pointer to bff75000
=> acpi list
Name Base Size Detail
---- -------- ----- ------
RSDP bff75000 0 v00 BOCHS
RSDT bff76a63 38 v01 BOCHS BXPC 1 BXPC 1
FACP bff768ff 74 v01 BOCHS BXPC 1 BXPC 1
DSDT bff75080 187f v01 BOCHS BXPC 1 BXPC 1
FACS bff75040 40
APIC bff76973 90 v01 BOCHS BXPC 1 BXPC 1
HPET bff76a03 38 v01 BOCHS BXPC 1 BXPC 1
WAET bff76a3b 28 v01 BOCHS BXPC 1 BXPC 1
SSDT bff95040 c5 v02 COREv4 COREBOOT 2a CORE 20221020
.. _`ACPI specification`: https://uefi.org/sites/default/files/resources/ACPI_6_3_final_Jan30.pdf
|