@@ -31,7 +31,10 @@ Memory hot-plug interface (IO port 0xa00-0xa17, 1-4 byte access):
[0xc-0x13] reserved, writes into it are ignored
[0x14] Memory device control fields
bits:
- 0: reserved, OSPM must clear it before writing to register
+ 0: reserved, OSPM must clear it before writing to register.
+ Due to BUG in versions prior 2.4 that field isn't cleared
+ when other fields are written. Keep it reserved and don't
+ try to reuse it.
1: if set to 1 clears device insert event, set by OSPM
after it has emitted device check event for the
selected memory device
@@ -924,7 +924,7 @@ build_ssdt(GArray *table_data, GArray *linker,
aml_append(scope, field);
field = aml_field(stringify(MEMORY_HOTPLUG_IO_REGION), aml_byte_acc,
- aml_preserve);
+ aml_write_as_zeros);
aml_append(field, aml_reserved_field(160 /* bits, Offset(20) */));
aml_append(field, /* 1 if enabled, read only */
aml_named_field(stringify(MEMORY_SLOT_ENABLED), 1));
acpi_mem_hotplug.txt states that 0 bit in Memory device control fields must be cleared before writing to register. Now "Memory device control fields" is declared with "Preserve" update rule, so 0 bit isn't cleared when other fields are written. To solve this bug, This patch fixes UpdateRule to WriteAsZeros in "Memory device control fields" register. Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com> --- docs/specs/acpi_mem_hotplug.txt | 5 ++++- hw/i386/acpi-build.c | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-)