xref: /openbmc/qemu/docs/specs/acpi_mem_hotplug.rst (revision f214d8e0150766c31172e16ef4b17674f549d852)
1*615a5582SPeter MaydellQEMU<->ACPI BIOS memory hotplug interface
2*615a5582SPeter Maydell=========================================
3*615a5582SPeter Maydell
4*615a5582SPeter MaydellACPI BIOS GPE.3 handler is dedicated for notifying OS about memory hot-add
5*615a5582SPeter Maydelland hot-remove events.
6*615a5582SPeter Maydell
7*615a5582SPeter MaydellMemory hot-plug interface (IO port 0xa00-0xa17, 1-4 byte access)
8*615a5582SPeter Maydell----------------------------------------------------------------
9*615a5582SPeter Maydell
10*615a5582SPeter MaydellRead access behavior
11*615a5582SPeter Maydell^^^^^^^^^^^^^^^^^^^^
12*615a5582SPeter Maydell
13*615a5582SPeter Maydell[0x0-0x3]
14*615a5582SPeter Maydell  Lo part of memory device phys address
15*615a5582SPeter Maydell[0x4-0x7]
16*615a5582SPeter Maydell  Hi part of memory device phys address
17*615a5582SPeter Maydell[0x8-0xb]
18*615a5582SPeter Maydell  Lo part of memory device size in bytes
19*615a5582SPeter Maydell[0xc-0xf]
20*615a5582SPeter Maydell  Hi part of memory device size in bytes
21*615a5582SPeter Maydell[0x10-0x13]
22*615a5582SPeter Maydell  Memory device proximity domain
23*615a5582SPeter Maydell[0x14]
24*615a5582SPeter Maydell  Memory device status fields
25*615a5582SPeter Maydell
26*615a5582SPeter Maydell  bits:
27*615a5582SPeter Maydell
28*615a5582SPeter Maydell  0:
29*615a5582SPeter Maydell    Device is enabled and may be used by guest
30*615a5582SPeter Maydell  1:
31*615a5582SPeter Maydell    Device insert event, used to distinguish device for which
32*615a5582SPeter Maydell    no device check event to OSPM was issued.
33*615a5582SPeter Maydell    It's valid only when bit 1 is set.
34*615a5582SPeter Maydell  2:
35*615a5582SPeter Maydell    Device remove event, used to distinguish device for which
36*615a5582SPeter Maydell    no device eject request to OSPM was issued.
37*615a5582SPeter Maydell  3-7:
38*615a5582SPeter Maydell    reserved and should be ignored by OSPM
39*615a5582SPeter Maydell
40*615a5582SPeter Maydell[0x15-0x17]
41*615a5582SPeter Maydell  reserved
42*615a5582SPeter Maydell
43*615a5582SPeter MaydellWrite access behavior
44*615a5582SPeter Maydell^^^^^^^^^^^^^^^^^^^^^
45*615a5582SPeter Maydell
46*615a5582SPeter Maydell
47*615a5582SPeter Maydell[0x0-0x3]
48*615a5582SPeter Maydell  Memory device slot selector, selects active memory device.
49*615a5582SPeter Maydell  All following accesses to other registers in 0xa00-0xa17
50*615a5582SPeter Maydell  region will read/store data from/to selected memory device.
51*615a5582SPeter Maydell[0x4-0x7]
52*615a5582SPeter Maydell  OST event code reported by OSPM
53*615a5582SPeter Maydell[0x8-0xb]
54*615a5582SPeter Maydell  OST status code reported by OSPM
55*615a5582SPeter Maydell[0xc-0x13]
56*615a5582SPeter Maydell  reserved, writes into it are ignored
57*615a5582SPeter Maydell[0x14]
58*615a5582SPeter Maydell  Memory device control fields
59*615a5582SPeter Maydell
60*615a5582SPeter Maydell  bits:
61*615a5582SPeter Maydell
62*615a5582SPeter Maydell  0:
63*615a5582SPeter Maydell    reserved, OSPM must clear it before writing to register.
64*615a5582SPeter Maydell    Due to BUG in versions prior 2.4 that field isn't cleared
65*615a5582SPeter Maydell    when other fields are written. Keep it reserved and don't
66*615a5582SPeter Maydell    try to reuse it.
67*615a5582SPeter Maydell  1:
68*615a5582SPeter Maydell    if set to 1 clears device insert event, set by OSPM
69*615a5582SPeter Maydell    after it has emitted device check event for the
70*615a5582SPeter Maydell    selected memory device
71*615a5582SPeter Maydell  2:
72*615a5582SPeter Maydell    if set to 1 clears device remove event, set by OSPM
73*615a5582SPeter Maydell    after it has emitted device eject request for the
74*615a5582SPeter Maydell    selected memory device
75*615a5582SPeter Maydell  3:
76*615a5582SPeter Maydell    if set to 1 initiates device eject, set by OSPM when it
77*615a5582SPeter Maydell    triggers memory device removal and calls _EJ0 method
78*615a5582SPeter Maydell  4-7:
79*615a5582SPeter Maydell    reserved, OSPM must clear them before writing to register
80*615a5582SPeter Maydell
81*615a5582SPeter MaydellSelecting memory device slot beyond present range has no effect on platform:
82*615a5582SPeter Maydell
83*615a5582SPeter Maydell- write accesses to memory hot-plug registers not documented above are ignored
84*615a5582SPeter Maydell- read accesses to memory hot-plug registers not documented above return
85*615a5582SPeter Maydell  all bits set to 1.
86*615a5582SPeter Maydell
87*615a5582SPeter MaydellMemory hot remove process diagram
88*615a5582SPeter Maydell---------------------------------
89*615a5582SPeter Maydell
90*615a5582SPeter Maydell::
91*615a5582SPeter Maydell
92*615a5582SPeter Maydell   +-------------+     +-----------------------+      +------------------+
93*615a5582SPeter Maydell   |  1. QEMU    |     | 2. QEMU               |      |3. QEMU           |
94*615a5582SPeter Maydell   |  device_del +---->+ device unplug request +----->+Send SCI to guest,|
95*615a5582SPeter Maydell   |             |     |         cb            |      |return control to |
96*615a5582SPeter Maydell   |             |     |                       |      |management        |
97*615a5582SPeter Maydell   +-------------+     +-----------------------+      +------------------+
98*615a5582SPeter Maydell
99*615a5582SPeter Maydell   +---------------------------------------------------------------------+
100*615a5582SPeter Maydell
101*615a5582SPeter Maydell   +---------------------+              +-------------------------+
102*615a5582SPeter Maydell   | OSPM:               | remove event | OSPM:                   |
103*615a5582SPeter Maydell   | send Eject Request, |              | Scan memory devices     |
104*615a5582SPeter Maydell   | clear remove event  +<-------------+ for event flags         |
105*615a5582SPeter Maydell   |                     |              |                         |
106*615a5582SPeter Maydell   +---------------------+              +-------------------------+
107*615a5582SPeter Maydell             |
108*615a5582SPeter Maydell             |
109*615a5582SPeter Maydell   +---------v--------+            +-----------------------+
110*615a5582SPeter Maydell   | Guest OS:        |  success   | OSPM:                 |
111*615a5582SPeter Maydell   | process Ejection +----------->+ Execute _EJ0 method,  |
112*615a5582SPeter Maydell   | request          |            | set eject bit in flags|
113*615a5582SPeter Maydell   +------------------+            +-----------------------+
114*615a5582SPeter Maydell             |failure                         |
115*615a5582SPeter Maydell             v                                v
116*615a5582SPeter Maydell   +------------------------+      +-----------------------+
117*615a5582SPeter Maydell   | OSPM:                  |      | QEMU:                 |
118*615a5582SPeter Maydell   | set OST event & status |      | call device unplug cb |
119*615a5582SPeter Maydell   | fields                 |      |                       |
120*615a5582SPeter Maydell   +------------------------+      +-----------------------+
121*615a5582SPeter Maydell            |                                  |
122*615a5582SPeter Maydell            v                                  v
123*615a5582SPeter Maydell   +------------------+              +-------------------+
124*615a5582SPeter Maydell   |QEMU:             |              |QEMU:              |
125*615a5582SPeter Maydell   |Send OST QMP event|              |Send device deleted|
126*615a5582SPeter Maydell   |                  |              |QMP event          |
127*615a5582SPeter Maydell   +------------------+              |                   |
128*615a5582SPeter Maydell                                     +-------------------+
129