From: Igor Mammedov <imammedo@redhat.com>
To: Marcel Apfelbaum <marcel@redhat.com>
Cc: qemu-devel@nongnu.org, "Michael S. Tsirkin" <mst@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>
Subject: Re: [Qemu-devel] [PATCH for-2.9 04/10] memhp: move build_memory_devices() into memory_hotplug.c
Date: Tue, 20 Dec 2016 17:24:25 +0100 [thread overview]
Message-ID: <20161220172425.118db13c@Igors-MacBook-Pro.local> (raw)
In-Reply-To: <ada80dce-9b7f-8cab-408d-4b1a05f34cd6@redhat.com>
On Tue, 20 Dec 2016 12:44:22 +0200
Marcel Apfelbaum <marcel@redhat.com> wrote:
> On 12/06/2016 01:32 AM, Igor Mammedov wrote:
> > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > ---
> > include/hw/acpi/memory_hotplug.h | 2 +
> > hw/acpi/memory_hotplug.c | 124 +++++++++++++++++++++++++++++++++++++++
> > hw/i386/acpi-build.c | 124 ---------------------------------------
> > 3 files changed, 126 insertions(+), 124 deletions(-)
> >
> > diff --git a/include/hw/acpi/memory_hotplug.h b/include/hw/acpi/memory_hotplug.h
> > index d2c7452..964c244 100644
> > --- a/include/hw/acpi/memory_hotplug.h
> > +++ b/include/hw/acpi/memory_hotplug.h
> > @@ -54,4 +54,6 @@ void acpi_memory_ospm_status(MemHotplugState *mem_st, ACPIOSTInfoList ***list);
> >
> > void build_memory_hotplug_aml(Aml *ctx, uint32_t nr_mem,
> > uint16_t io_base, uint16_t io_len);
> > +void build_memory_devices(Aml *sb_scope, int nr_mem,
> > + uint16_t io_base, uint16_t io_len);
>
>
> We add an extra function to the header file, but if it can be used
> by the ARM machines is worth it.
it's temporary for purpose of clean small/atocmic movement
and it's removed in 6/10
>
> Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>
>
> Thanks,
> Marcel
>
> > #endif
> > diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c
> > index 57ac4fc..67dd3f8 100644
> > --- a/hw/acpi/memory_hotplug.c
> > +++ b/hw/acpi/memory_hotplug.c
> > @@ -553,3 +553,127 @@ void build_memory_hotplug_aml(Aml *ctx, uint32_t nr_mem,
> > aml_append(pci_scope, mem_ctrl_dev);
> > aml_append(ctx, pci_scope);
> > }
> > +
> > +void build_memory_devices(Aml *sb_scope, int nr_mem,
> > + uint16_t io_base, uint16_t io_len)
> > +{
> > + int i;
> > + Aml *scope;
> > + Aml *crs;
> > + Aml *field;
> > + Aml *dev;
> > + Aml *method;
> > + Aml *ifctx;
> > +
> > + /* build memory devices */
> > + assert(nr_mem <= ACPI_MAX_RAM_SLOTS);
> > + scope = aml_scope("\\_SB.PCI0." MEMORY_HOTPLUG_DEVICE);
> > + aml_append(scope,
> > + aml_name_decl(MEMORY_SLOTS_NUMBER, aml_int(nr_mem))
> > + );
> > +
> > + crs = aml_resource_template();
> > + aml_append(crs,
> > + aml_io(AML_DECODE16, io_base, io_base, 0, io_len)
> > + );
> > + aml_append(scope, aml_name_decl("_CRS", crs));
> > +
> > + aml_append(scope, aml_operation_region(
> > + MEMORY_HOTPLUG_IO_REGION, AML_SYSTEM_IO,
> > + aml_int(io_base), io_len)
> > + );
> > +
> > + field = aml_field(MEMORY_HOTPLUG_IO_REGION, AML_DWORD_ACC,
> > + AML_NOLOCK, AML_PRESERVE);
> > + aml_append(field, /* read only */
> > + aml_named_field(MEMORY_SLOT_ADDR_LOW, 32));
> > + aml_append(field, /* read only */
> > + aml_named_field(MEMORY_SLOT_ADDR_HIGH, 32));
> > + aml_append(field, /* read only */
> > + aml_named_field(MEMORY_SLOT_SIZE_LOW, 32));
> > + aml_append(field, /* read only */
> > + aml_named_field(MEMORY_SLOT_SIZE_HIGH, 32));
> > + aml_append(field, /* read only */
> > + aml_named_field(MEMORY_SLOT_PROXIMITY, 32));
> > + aml_append(scope, field);
> > +
> > + field = aml_field(MEMORY_HOTPLUG_IO_REGION, AML_BYTE_ACC,
> > + AML_NOLOCK, 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(MEMORY_SLOT_ENABLED, 1));
> > + aml_append(field,
> > + /*(read) 1 if has a insert event. (write) 1 to clear event */
> > + aml_named_field(MEMORY_SLOT_INSERT_EVENT, 1));
> > + aml_append(field,
> > + /* (read) 1 if has a remove event. (write) 1 to clear event */
> > + aml_named_field(MEMORY_SLOT_REMOVE_EVENT, 1));
> > + aml_append(field,
> > + /* initiates device eject, write only */
> > + aml_named_field(MEMORY_SLOT_EJECT, 1));
> > + aml_append(scope, field);
> > +
> > + field = aml_field(MEMORY_HOTPLUG_IO_REGION, AML_DWORD_ACC,
> > + AML_NOLOCK, AML_PRESERVE);
> > + aml_append(field, /* DIMM selector, write only */
> > + aml_named_field(MEMORY_SLOT_SLECTOR, 32));
> > + aml_append(field, /* _OST event code, write only */
> > + aml_named_field(MEMORY_SLOT_OST_EVENT, 32));
> > + aml_append(field, /* _OST status code, write only */
> > + aml_named_field(MEMORY_SLOT_OST_STATUS, 32));
> > + aml_append(scope, field);
> > + aml_append(sb_scope, scope);
> > +
> > + for (i = 0; i < nr_mem; i++) {
> > + #define BASEPATH "\\_SB.PCI0." MEMORY_HOTPLUG_DEVICE "."
> > + const char *s;
> > +
> > + dev = aml_device("MP%02X", i);
> > + aml_append(dev, aml_name_decl("_UID", aml_string("0x%02X", i)));
> > + aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0C80")));
> > +
> > + method = aml_method("_CRS", 0, AML_NOTSERIALIZED);
> > + s = BASEPATH MEMORY_SLOT_CRS_METHOD;
> > + aml_append(method, aml_return(aml_call1(s, aml_name("_UID"))));
> > + aml_append(dev, method);
> > +
> > + method = aml_method("_STA", 0, AML_NOTSERIALIZED);
> > + s = BASEPATH MEMORY_SLOT_STATUS_METHOD;
> > + aml_append(method, aml_return(aml_call1(s, aml_name("_UID"))));
> > + aml_append(dev, method);
> > +
> > + method = aml_method("_PXM", 0, AML_NOTSERIALIZED);
> > + s = BASEPATH MEMORY_SLOT_PROXIMITY_METHOD;
> > + aml_append(method, aml_return(aml_call1(s, aml_name("_UID"))));
> > + aml_append(dev, method);
> > +
> > + method = aml_method("_OST", 3, AML_NOTSERIALIZED);
> > + s = BASEPATH MEMORY_SLOT_OST_METHOD;
> > +
> > + aml_append(method, aml_return(aml_call4(
> > + s, aml_name("_UID"), aml_arg(0), aml_arg(1), aml_arg(2)
> > + )));
> > + aml_append(dev, method);
> > +
> > + method = aml_method("_EJ0", 1, AML_NOTSERIALIZED);
> > + s = BASEPATH MEMORY_SLOT_EJECT_METHOD;
> > + aml_append(method, aml_return(aml_call2(
> > + s, aml_name("_UID"), aml_arg(0))));
> > + aml_append(dev, method);
> > +
> > + aml_append(sb_scope, dev);
> > + }
> > +
> > + /* build Method(MEMORY_SLOT_NOTIFY_METHOD, 2) {
> > + * If (LEqual(Arg0, 0x00)) {Notify(MP00, Arg1)} ... }
> > + */
> > + method = aml_method(MEMORY_SLOT_NOTIFY_METHOD, 2, AML_NOTSERIALIZED);
> > + for (i = 0; i < nr_mem; i++) {
> > + ifctx = aml_if(aml_equal(aml_arg(0), aml_int(i)));
> > + aml_append(ifctx,
> > + aml_notify(aml_name("MP%.02X", i), aml_arg(1))
> > + );
> > + aml_append(method, ifctx);
> > + }
> > + aml_append(sb_scope, method);
> > +}
> > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> > index 9708cdc..38dcac7 100644
> > --- a/hw/i386/acpi-build.c
> > +++ b/hw/i386/acpi-build.c
> > @@ -1038,130 +1038,6 @@ static Aml *build_crs(PCIHostState *host, CrsRangeSet *range_set)
> > return crs;
> > }
> >
> > -static void build_memory_devices(Aml *sb_scope, int nr_mem,
> > - uint16_t io_base, uint16_t io_len)
> > -{
> > - int i;
> > - Aml *scope;
> > - Aml *crs;
> > - Aml *field;
> > - Aml *dev;
> > - Aml *method;
> > - Aml *ifctx;
> > -
> > - /* build memory devices */
> > - assert(nr_mem <= ACPI_MAX_RAM_SLOTS);
> > - scope = aml_scope("\\_SB.PCI0." MEMORY_HOTPLUG_DEVICE);
> > - aml_append(scope,
> > - aml_name_decl(MEMORY_SLOTS_NUMBER, aml_int(nr_mem))
> > - );
> > -
> > - crs = aml_resource_template();
> > - aml_append(crs,
> > - aml_io(AML_DECODE16, io_base, io_base, 0, io_len)
> > - );
> > - aml_append(scope, aml_name_decl("_CRS", crs));
> > -
> > - aml_append(scope, aml_operation_region(
> > - MEMORY_HOTPLUG_IO_REGION, AML_SYSTEM_IO,
> > - aml_int(io_base), io_len)
> > - );
> > -
> > - field = aml_field(MEMORY_HOTPLUG_IO_REGION, AML_DWORD_ACC,
> > - AML_NOLOCK, AML_PRESERVE);
> > - aml_append(field, /* read only */
> > - aml_named_field(MEMORY_SLOT_ADDR_LOW, 32));
> > - aml_append(field, /* read only */
> > - aml_named_field(MEMORY_SLOT_ADDR_HIGH, 32));
> > - aml_append(field, /* read only */
> > - aml_named_field(MEMORY_SLOT_SIZE_LOW, 32));
> > - aml_append(field, /* read only */
> > - aml_named_field(MEMORY_SLOT_SIZE_HIGH, 32));
> > - aml_append(field, /* read only */
> > - aml_named_field(MEMORY_SLOT_PROXIMITY, 32));
> > - aml_append(scope, field);
> > -
> > - field = aml_field(MEMORY_HOTPLUG_IO_REGION, AML_BYTE_ACC,
> > - AML_NOLOCK, 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(MEMORY_SLOT_ENABLED, 1));
> > - aml_append(field,
> > - /*(read) 1 if has a insert event. (write) 1 to clear event */
> > - aml_named_field(MEMORY_SLOT_INSERT_EVENT, 1));
> > - aml_append(field,
> > - /* (read) 1 if has a remove event. (write) 1 to clear event */
> > - aml_named_field(MEMORY_SLOT_REMOVE_EVENT, 1));
> > - aml_append(field,
> > - /* initiates device eject, write only */
> > - aml_named_field(MEMORY_SLOT_EJECT, 1));
> > - aml_append(scope, field);
> > -
> > - field = aml_field(MEMORY_HOTPLUG_IO_REGION, AML_DWORD_ACC,
> > - AML_NOLOCK, AML_PRESERVE);
> > - aml_append(field, /* DIMM selector, write only */
> > - aml_named_field(MEMORY_SLOT_SLECTOR, 32));
> > - aml_append(field, /* _OST event code, write only */
> > - aml_named_field(MEMORY_SLOT_OST_EVENT, 32));
> > - aml_append(field, /* _OST status code, write only */
> > - aml_named_field(MEMORY_SLOT_OST_STATUS, 32));
> > - aml_append(scope, field);
> > - aml_append(sb_scope, scope);
> > -
> > - for (i = 0; i < nr_mem; i++) {
> > - #define BASEPATH "\\_SB.PCI0." MEMORY_HOTPLUG_DEVICE "."
> > - const char *s;
> > -
> > - dev = aml_device("MP%02X", i);
> > - aml_append(dev, aml_name_decl("_UID", aml_string("0x%02X", i)));
> > - aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0C80")));
> > -
> > - method = aml_method("_CRS", 0, AML_NOTSERIALIZED);
> > - s = BASEPATH MEMORY_SLOT_CRS_METHOD;
> > - aml_append(method, aml_return(aml_call1(s, aml_name("_UID"))));
> > - aml_append(dev, method);
> > -
> > - method = aml_method("_STA", 0, AML_NOTSERIALIZED);
> > - s = BASEPATH MEMORY_SLOT_STATUS_METHOD;
> > - aml_append(method, aml_return(aml_call1(s, aml_name("_UID"))));
> > - aml_append(dev, method);
> > -
> > - method = aml_method("_PXM", 0, AML_NOTSERIALIZED);
> > - s = BASEPATH MEMORY_SLOT_PROXIMITY_METHOD;
> > - aml_append(method, aml_return(aml_call1(s, aml_name("_UID"))));
> > - aml_append(dev, method);
> > -
> > - method = aml_method("_OST", 3, AML_NOTSERIALIZED);
> > - s = BASEPATH MEMORY_SLOT_OST_METHOD;
> > -
> > - aml_append(method, aml_return(aml_call4(
> > - s, aml_name("_UID"), aml_arg(0), aml_arg(1), aml_arg(2)
> > - )));
> > - aml_append(dev, method);
> > -
> > - method = aml_method("_EJ0", 1, AML_NOTSERIALIZED);
> > - s = BASEPATH MEMORY_SLOT_EJECT_METHOD;
> > - aml_append(method, aml_return(aml_call2(
> > - s, aml_name("_UID"), aml_arg(0))));
> > - aml_append(dev, method);
> > -
> > - aml_append(sb_scope, dev);
> > - }
> > -
> > - /* build Method(MEMORY_SLOT_NOTIFY_METHOD, 2) {
> > - * If (LEqual(Arg0, 0x00)) {Notify(MP00, Arg1)} ... }
> > - */
> > - method = aml_method(MEMORY_SLOT_NOTIFY_METHOD, 2, AML_NOTSERIALIZED);
> > - for (i = 0; i < nr_mem; i++) {
> > - ifctx = aml_if(aml_equal(aml_arg(0), aml_int(i)));
> > - aml_append(ifctx,
> > - aml_notify(aml_name("MP%.02X", i), aml_arg(1))
> > - );
> > - aml_append(method, ifctx);
> > - }
> > - aml_append(sb_scope, method);
> > -}
> > -
> > static void build_hpet_aml(Aml *table)
> > {
> > Aml *crs;
> >
>
>
next prev parent reply other threads:[~2016-12-20 16:24 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-05 23:32 [Qemu-devel] [PATCH for-2.9 00/10] pc: acpi: memory hotplug cleanup/consolidation Igor Mammedov
2016-12-05 23:32 ` [Qemu-devel] [PATCH for-2.9 01/10] tests: pc: add memory hotplug acpi tables tests Igor Mammedov
2016-12-20 10:40 ` Marcel Apfelbaum
2016-12-20 16:17 ` Igor Mammedov
2016-12-20 17:00 ` Marcel Apfelbaum
2016-12-05 23:32 ` [Qemu-devel] [PATCH for-2.9 02/10] tests: pc: acpi: add SRAT and DSDT blobs for memory hotplug variant Igor Mammedov
2016-12-05 23:32 ` [Qemu-devel] [PATCH for-2.9 03/10] memhp: move build_memory_hotplug_aml() into memory_hotplug.c Igor Mammedov
2016-12-20 10:42 ` Marcel Apfelbaum
2016-12-05 23:32 ` [Qemu-devel] [PATCH for-2.9 04/10] memhp: move build_memory_devices() " Igor Mammedov
2016-12-20 10:44 ` Marcel Apfelbaum
2016-12-20 16:24 ` Igor Mammedov [this message]
2016-12-05 23:32 ` [Qemu-devel] [PATCH for-2.9 05/10] memhp: consolidate scattered MHPD device declaration Igor Mammedov
2016-12-20 11:00 ` Marcel Apfelbaum
2016-12-20 16:34 ` Igor Mammedov
2016-12-21 11:54 ` Marcel Apfelbaum
2016-12-05 23:32 ` [Qemu-devel] [PATCH for-2.9 06/10] memhp: merge build_memory_devices() into build_memory_hotplug_aml() Igor Mammedov
2016-12-21 12:10 ` Marcel Apfelbaum
2016-12-21 12:54 ` Igor Mammedov
2016-12-05 23:32 ` [Qemu-devel] [PATCH for-2.9 07/10] memhp: move GPE handler_E03 " Igor Mammedov
2016-12-21 12:31 ` Marcel Apfelbaum
2016-12-21 13:39 ` Igor Mammedov
2016-12-22 10:45 ` Marcel Apfelbaum
2016-12-22 15:10 ` [Qemu-devel] [PATCH for-2.9 v2 " Igor Mammedov
2016-12-05 23:32 ` [Qemu-devel] [PATCH for-2.9 08/10] memhp: move memory hotplug only defines to memory_hotplug.c Igor Mammedov
2016-12-21 12:32 ` Marcel Apfelbaum
2016-12-05 23:32 ` [Qemu-devel] [PATCH for-2.9 09/10] memhp: don't generate memory hotplug AML if it's not enabled/supported Igor Mammedov
2016-12-22 10:55 ` Marcel Apfelbaum
2016-12-05 23:32 ` [Qemu-devel] [PATCH for-2.9 10/10] memhp: move DIMM devices into dedicated scope with related common methods Igor Mammedov
2016-12-22 12:31 ` Marcel Apfelbaum
2016-12-22 13:31 ` Igor Mammedov
2016-12-22 13:53 ` Marcel Apfelbaum
2016-12-22 14:10 ` Igor Mammedov
2016-12-16 9:07 ` [Qemu-devel] [PATCH for-2.9 00/10] pc: acpi: memory hotplug cleanup/consolidation Igor Mammedov
2017-01-09 14:22 ` Igor Mammedov
2017-01-09 14:39 ` Michael S. Tsirkin
2017-01-10 5:08 ` Michael S. Tsirkin
2017-01-10 12:29 ` Igor Mammedov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161220172425.118db13c@Igors-MacBook-Pro.local \
--to=imammedo@redhat.com \
--cc=ehabkost@redhat.com \
--cc=marcel@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.