[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH v2 03/21][SeaBIOS] acpi-dsdt: Implement func
From: |
Wen Congyang |
Subject: |
Re: [Qemu-devel] [RFC PATCH v2 03/21][SeaBIOS] acpi-dsdt: Implement functions for memory hotplug |
Date: |
Tue, 17 Jul 2012 15:23:00 +0800 |
User-agent: |
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100413 Fedora/3.0.4-2.fc13 Thunderbird/3.0.4 |
At 07/11/2012 06:31 PM, Vasilis Liaskovitis Wrote:
> Extend the DSDT to include methods for handling memory hot-add and hot-remove
> notifications and memory device status requests. These functions are called
> from the memory device SSDT methods.
>
> Signed-off-by: Vasilis Liaskovitis <address@hidden>
> ---
> src/acpi-dsdt.dsl | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++-
> 1 files changed, 68 insertions(+), 2 deletions(-)
>
> diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl
> index 2060686..5d3e92b 100644
> --- a/src/acpi-dsdt.dsl
> +++ b/src/acpi-dsdt.dsl
> @@ -737,6 +737,71 @@ DefinitionBlock (
> }
> Return(One)
> }
> + /* Objects filled in by run-time generated SSDT */
> + External(MTFY, MethodObj)
> + External(MEON, PkgObj)
> +
> + Method (CMST, 1, NotSerialized) {
> + // _STA method - return ON status of memdevice
> + // Local0 = MEON flag for this cpu
> + Store(DerefOf(Index(MEON, Arg0)), Local0)
> + If (Local0) { Return(0xF) } Else { Return(0x0) }
> + }
> +
> + /* Memory hotplug notify array */
> + OperationRegion(MEST, SystemIO, 0xaf80, 32)
> + Field (MEST, ByteAcc, NoLock, Preserve)
> + {
> + MES, 256
> + }
> +
> + /* Memory eject byte */
> + OperationRegion(MEMJ, SystemIO, 0xafa0, 1)
> + Field (MEMJ, ByteAcc, NoLock, Preserve)
> + {
> + MPE, 8
> + }
> +
> + Method(MESC, 0) {
> + // Local5 = active memdevice bitmap
> + Store (MES, Local5)
> + // Local2 = last read byte from bitmap
> + Store (Zero, Local2)
> + // Local0 = memory device iterator
> + Store (Zero, Local0)
> + While (LLess(Local0, SizeOf(MEON))) {
> + // Local1 = MEON flag for this memory device
> + Store(DerefOf(Index(MEON, Local0)), Local1)
> + If (And(Local0, 0x07)) {
> + // Shift down previously read bitmap byte
> + ShiftRight(Local2, 1, Local2)
> + } Else {
> + // Read next byte from memdevice bitmap
> + Store(DerefOf(Index(Local5, ShiftRight(Local0, 3))),
> Local2)
> + }
> + // Local3 = active state for this memory device
> + Store(And(Local2, 1), Local3)
> +
> + If (LNotEqual(Local1, Local3)) {
There are two ways to hot remove a memory device:
1. dimm_del
2. echo 1 >/sys/bus/acpi/devices/PNP0C80:XX/eject
In the 2nd case, we cannot hotplug this memory device again,
because both Local1 and Local3 are 1.
So, I think MEON flag for this meory device should be set to 0 in method _EJ0
or implement method _PS3 for memory device.
Thanks
Wen Congyang
> + // State change - update MEON with new state
> + Store(Local3, Index(MEON, Local0))
> + // Do MEM notify
> + If (LEqual(Local3, 1)) {
> + MTFY(Local0, 1)
> + } Else {
> + MTFY(Local0, 3)
> + }
> + }
> + Increment(Local0)
> + }
> + Return(One)
> + }
> +
> + Method (MPEJ, 2, NotSerialized) {
> + // _EJ0 method - eject callback
> + Store(Arg0, MPE)
> + Sleep(200)
> + }
> }
>
>
> @@ -759,8 +824,9 @@ DefinitionBlock (
> // CPU hotplug event
> Return(\_SB.PRSC())
> }
> - Method(_L03) {
> - Return(0x01)
> + Method(_E03) {
> + // Memory hotplug event
> + Return(\_SB.MESC())
> }
> Method(_L04) {
> Return(0x01)
- [Qemu-devel] [RFC PATCH v2 04/21][SeaBIOS] acpi: generate hotplug memory devices, (continued)
- [Qemu-devel] [RFC PATCH v2 04/21][SeaBIOS] acpi: generate hotplug memory devices, Vasilis Liaskovitis, 2012/07/11
- [Qemu-devel] [RFC PATCH v2 02/21][SeaBIOS] Add SSDT memory device support, Vasilis Liaskovitis, 2012/07/11
- [Qemu-devel] [RFC PATCH v2 14/21][SeaBIOS] acpi_dsdt: Support _OST dimm method, Vasilis Liaskovitis, 2012/07/11
- [Qemu-devel] [RFC PATCH v2 17/21][SeaBIOS] acpi_dsdt: Revert internal dimm state on _OST failure, Vasilis Liaskovitis, 2012/07/11
- [Qemu-devel] [RFC PATCH v2 06/21] dimm: Implement memory device abstraction, Vasilis Liaskovitis, 2012/07/11
- [Qemu-devel] [RFC PATCH v2 03/21][SeaBIOS] acpi-dsdt: Implement functions for memory hotplug, Vasilis Liaskovitis, 2012/07/11
- Re: [Qemu-devel] [RFC PATCH v2 03/21][SeaBIOS] acpi-dsdt: Implement functions for memory hotplug,
Wen Congyang <=
- [Qemu-devel] [RFC PATCH v2 12/21] fix live-migration when "populated=on" is missing, Vasilis Liaskovitis, 2012/07/11
- [Qemu-devel] [RFC PATCH v2 10/21] Implement "-dimm" command line option, Vasilis Liaskovitis, 2012/07/11
- [Qemu-devel] [RFC PATCH v2 09/21] pc: Add dimm paravirt SRAT info, Vasilis Liaskovitis, 2012/07/11
- [Qemu-devel] [RFC PATCH v2 11/21] Implement dimm_add and dimm_del hmp/qmp commands, Vasilis Liaskovitis, 2012/07/11
- [Qemu-devel] [RFC PATCH v2 07/21] acpi_piix4: Implement memory device hotplug registers, Vasilis Liaskovitis, 2012/07/11
- [Qemu-devel] [RFC PATCH v2 16/21] acpi_piix4: Update dimm state on VM reboot, Vasilis Liaskovitis, 2012/07/11
- [Qemu-devel] [RFC PATCH v2 13/21] Implement memory hotplug notification lists, Vasilis Liaskovitis, 2012/07/11