All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v4 0/8] Add system_powerdown support on ARM for ACPI and DT
@ 2015-12-07  7:39 Shannon Zhao
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 1/8] ARM: Virt: Add a GPIO controller Shannon Zhao
                   ` (7 more replies)
  0 siblings, 8 replies; 18+ messages in thread
From: Shannon Zhao @ 2015-12-07  7:39 UTC (permalink / raw)
  To: qemu-arm, peter.maydell, mst, imammedo, wei
  Cc: peter.huangpeng, zhaoshenglong, qemu-devel, graeme.gregory, shannon.zhao

From: Shannon Zhao <shannon.zhao@linaro.org>

ACPI SPEC 5.0 defines GPIO-signaled ACPI Events for Hardware-reduced
platforms(like ARM). It uses GPIO pin to trigger an event to the guest.
For QEMU, here we add PL061 GPIO controller and use PIN 3 for
system_powerdown, reserving PIN 0, 1, 2 for PCI hotplug, CPU hotplug and
memory hotplug.

This patchset adds system_powerdown support on ARM through both ACPI and
DT ways. It adds a GPIO controller(here is PL061) in machine virt and
uses GPIO-singled event for ACPI while gpio-keys for DT. It has been
tested for the guests starting by ACPI or DT while guests use systemd or
acpid.

a) ACPI way. Since Graeme send a patchset to make ACPI on ARM64 support
amba device[1], it could use PL061 directly without modification to its
kernel driver code. In addition, we should use ACPI to start VM,
referring to below script. QEMU_EFI.fd can be fetched from [2]. 

    qemu-system-aarch64 \
    -smp 1 -m 1024 -M virt \
    -cpu cortex-a57 -nographic \
    -monitor telnet::4444,server,nowait \
    -bios QEMU_EFI.fd \
    -kernel Image \
    -initrd guestfs.cpio.gz \
    -append "rdinit=/sbin/init console=ttyAMA0 mem=512M root=/dev/ram 
earlycon=pl011,0x9000000 rw acpi=force"

b) DT way. Start vm as usual.

    qemu-system-aarch64 \
    -smp 1 -m 1024 -M virt \
    -cpu cortex-a57 -nographic \
    -monitor telnet::4444,server,nowait \
    -kernel Image \
    -initrd guestfs.cpio.gz \
    -append "rdinit=/sbin/init console=ttyAMA0 mem=512M root=/dev/ram 
earlycon=pl011,0x9000000 rw"

Guest internal setup:
If your guest FS uses systemd, you should check file
/lib/udev/rules.d/70-power-switch.rules and add the following line in it
if it doesn't exist.

SUBSYSTEM=="input", KERNEL=="event*", SUBSYSTEMS=="platform",
ATTRS{keys}=="116", TAG+="power-switch"

If your guest FS uses acpid, you should check it has
/etc/acpi/powerbtn.sh and /etc/acpi/events/powerbtn. Refer to [3] for
the setup of acpid.

Thanks,
Shannon

[1] https://lkml.org/lkml/2015/9/30/392
[2] http://people.linaro.org/~shannon.zhao/ACPI_ARM/QEMU_EFI.fd
[3] https://wiki.linaro.org/LEG/Engineering/Kernel/ACPI/GPIOPowerButton

Changes since v3:
* address Igor's comments on ACPI part
* drop "autorepeat" for /gpio-keys

Changes since v2:
* rebased on upstream QEMU
* adjust irq signalling for PowerButton of PATCH 7/8 (Peter Maydell)
* Add several Reviewed-bys and Tested-bys from Wei Huang, thanks!

Changes since v1:
* rewrite GPIO Connection Descriptor (Michael)

Shannon Zhao (8):
  ARM: Virt: Add a GPIO controller
  ARM: ACPI: Add GPIO controller in ACPI DSDT table
  ARM: ACPI: Add power button device in ACPI DSDT table
  ACPI: Add GPIO Connection Descriptor
  ACPI: Add aml_gpio_int() wrapper for GPIO Interrupt Connection
  ARM: ACPI: Add _E03 for Power Button
  ARM: Virt: Add QEMU powerdown notifier and hook it to GPIO Pin 3
  ARM: Virt: Add gpio-keys node for Poweroff using DT

 hw/acpi/aml-build.c         | 88 +++++++++++++++++++++++++++++++++++++++++++++
 hw/arm/virt-acpi-build.c    | 44 +++++++++++++++++++++++
 hw/arm/virt.c               | 60 +++++++++++++++++++++++++++++++
 include/hw/acpi/aml-build.h | 27 ++++++++++++++
 include/hw/arm/virt.h       |  1 +
 5 files changed, 220 insertions(+)

-- 
2.0.4

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Qemu-devel] [PATCH v4 1/8] ARM: Virt: Add a GPIO controller
  2015-12-07  7:39 [Qemu-devel] [PATCH v4 0/8] Add system_powerdown support on ARM for ACPI and DT Shannon Zhao
@ 2015-12-07  7:39 ` Shannon Zhao
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 2/8] ARM: ACPI: Add GPIO controller in ACPI DSDT table Shannon Zhao
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 18+ messages in thread
From: Shannon Zhao @ 2015-12-07  7:39 UTC (permalink / raw)
  To: qemu-arm, peter.maydell, mst, imammedo, wei
  Cc: peter.huangpeng, zhaoshenglong, qemu-devel, graeme.gregory, shannon.zhao

From: Shannon Zhao <shannon.zhao@linaro.org>

ACPI 5.0 supports GPIO-signaled ACPI Events. This can be used for
powerdown, hotplug evnets. Add a GPIO controller in machine virt,
to support powerdown, maybe can be used for cpu hotplug. And
here we use pl061.

Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Reviewed-by: Wei Huang <wei@redhat.com>
Tested-by: Wei Huang <wei@redhat.com>
---
 hw/arm/virt.c         | 30 ++++++++++++++++++++++++++++++
 include/hw/arm/virt.h |  1 +
 2 files changed, 31 insertions(+)

diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 9c6792c..7977e3c 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -120,6 +120,7 @@ static const MemMapEntry a15memmap[] = {
     [VIRT_UART] =               { 0x09000000, 0x00001000 },
     [VIRT_RTC] =                { 0x09010000, 0x00001000 },
     [VIRT_FW_CFG] =             { 0x09020000, 0x00000018 },
+    [VIRT_GPIO] =               { 0x09030000, 0x00001000 },
     [VIRT_MMIO] =               { 0x0a000000, 0x00000200 },
     /* ...repeating for a total of NUM_VIRTIO_TRANSPORTS, each of that size */
     [VIRT_PLATFORM_BUS] =       { 0x0c000000, 0x02000000 },
@@ -135,6 +136,7 @@ static const int a15irqmap[] = {
     [VIRT_UART] = 1,
     [VIRT_RTC] = 2,
     [VIRT_PCIE] = 3, /* ... to 6 */
+    [VIRT_GPIO] = 7,
     [VIRT_MMIO] = 16, /* ...to 16 + NUM_VIRTIO_TRANSPORTS - 1 */
     [VIRT_GIC_V2M] = 48, /* ...to 48 + NUM_GICV2M_SPIS - 1 */
     [VIRT_PLATFORM_BUS] = 112, /* ...to 112 + PLATFORM_BUS_NUM_IRQS -1 */
@@ -538,6 +540,32 @@ static void create_rtc(const VirtBoardInfo *vbi, qemu_irq *pic)
     g_free(nodename);
 }
 
+static void create_gpio(const VirtBoardInfo *vbi, qemu_irq *pic)
+{
+    char *nodename;
+    hwaddr base = vbi->memmap[VIRT_GPIO].base;
+    hwaddr size = vbi->memmap[VIRT_GPIO].size;
+    int irq = vbi->irqmap[VIRT_GPIO];
+    const char compat[] = "arm,pl061\0arm,primecell";
+
+    sysbus_create_simple("pl061", base, pic[irq]);
+
+    nodename = g_strdup_printf("/pl061@%" PRIx64, base);
+    qemu_fdt_add_subnode(vbi->fdt, nodename);
+    qemu_fdt_setprop_sized_cells(vbi->fdt, nodename, "reg",
+                                 2, base, 2, size);
+    qemu_fdt_setprop(vbi->fdt, nodename, "compatible", compat, sizeof(compat));
+    qemu_fdt_setprop_cell(vbi->fdt, nodename, "#gpio-cells", 2);
+    qemu_fdt_setprop(vbi->fdt, nodename, "gpio-controller", NULL, 0);
+    qemu_fdt_setprop_cells(vbi->fdt, nodename, "interrupts",
+                           GIC_FDT_IRQ_TYPE_SPI, irq,
+                           GIC_FDT_IRQ_FLAGS_LEVEL_HI);
+    qemu_fdt_setprop_cell(vbi->fdt, nodename, "clocks", vbi->clock_phandle);
+    qemu_fdt_setprop_string(vbi->fdt, nodename, "clock-names", "apb_pclk");
+
+    g_free(nodename);
+}
+
 static void create_virtio_devices(const VirtBoardInfo *vbi, qemu_irq *pic)
 {
     int i;
@@ -1041,6 +1069,8 @@ static void machvirt_init(MachineState *machine)
 
     create_pcie(vbi, pic, vms->highmem);
 
+    create_gpio(vbi, pic);
+
     /* Create mmio transports, so the user can create virtio backends
      * (which will be automatically plugged in to the transports). If
      * no backend is created the transport will just sit harmlessly idle.
diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
index f464586..925faa7 100644
--- a/include/hw/arm/virt.h
+++ b/include/hw/arm/virt.h
@@ -59,6 +59,7 @@ enum {
     VIRT_PCIE_ECAM,
     VIRT_PLATFORM_BUS,
     VIRT_PCIE_MMIO_HIGH,
+    VIRT_GPIO,
 };
 
 typedef struct MemMapEntry {
-- 
2.0.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [Qemu-devel] [PATCH v4 2/8] ARM: ACPI: Add GPIO controller in ACPI DSDT table
  2015-12-07  7:39 [Qemu-devel] [PATCH v4 0/8] Add system_powerdown support on ARM for ACPI and DT Shannon Zhao
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 1/8] ARM: Virt: Add a GPIO controller Shannon Zhao
@ 2015-12-07  7:39 ` Shannon Zhao
  2015-12-10 13:22   ` Igor Mammedov
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 3/8] ARM: ACPI: Add power button device " Shannon Zhao
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 18+ messages in thread
From: Shannon Zhao @ 2015-12-07  7:39 UTC (permalink / raw)
  To: qemu-arm, peter.maydell, mst, imammedo, wei
  Cc: peter.huangpeng, zhaoshenglong, qemu-devel, graeme.gregory, shannon.zhao

From: Shannon Zhao <shannon.zhao@linaro.org>

Add GPIO controller in ACPI DSDT table. It can be used for gpio event.

Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Tested-by: Wei Huang <wei@redhat.com>
---
 hw/arm/virt-acpi-build.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index 3c2c5d6..bf6b934 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -323,6 +323,23 @@ static void acpi_dsdt_add_pci(Aml *scope, const MemMapEntry *memmap, int irq,
     aml_append(scope, dev);
 }
 
+static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry *gpio_memmap,
+                                           int gpio_irq)
+{
+    Aml *dev = aml_device("GPO0");
+    aml_append(dev, aml_name_decl("_HID", aml_string("ARMH0061")));
+    aml_append(dev, aml_name_decl("_ADR", aml_int(0)));
+    aml_append(dev, aml_name_decl("_UID", aml_int(0)));
+
+    Aml *crs = aml_resource_template();
+    aml_append(crs, aml_memory32_fixed(gpio_memmap->base, gpio_memmap->size,
+                                       AML_READ_WRITE));
+    aml_append(crs, aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH,
+                                  AML_EXCLUSIVE, gpio_irq));
+    aml_append(dev, aml_name_decl("_CRS", crs));
+    aml_append(scope, dev);
+}
+
 /* RSDP */
 static GArray *
 build_rsdp(GArray *rsdp_table, GArray *linker, unsigned rsdt)
@@ -539,6 +556,8 @@ build_dsdt(GArray *table_data, GArray *linker, VirtGuestInfo *guest_info)
                     (irqmap[VIRT_MMIO] + ARM_SPI_BASE), NUM_VIRTIO_TRANSPORTS);
     acpi_dsdt_add_pci(scope, memmap, (irqmap[VIRT_PCIE] + ARM_SPI_BASE),
                       guest_info->use_highmem);
+    acpi_dsdt_add_gpio(scope, &memmap[VIRT_GPIO],
+                       (irqmap[VIRT_GPIO] + ARM_SPI_BASE));
 
     aml_append(dsdt, scope);
 
-- 
2.0.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [Qemu-devel] [PATCH v4 3/8] ARM: ACPI: Add power button device in ACPI DSDT table
  2015-12-07  7:39 [Qemu-devel] [PATCH v4 0/8] Add system_powerdown support on ARM for ACPI and DT Shannon Zhao
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 1/8] ARM: Virt: Add a GPIO controller Shannon Zhao
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 2/8] ARM: ACPI: Add GPIO controller in ACPI DSDT table Shannon Zhao
@ 2015-12-07  7:39 ` Shannon Zhao
  2015-12-10 20:23   ` Igor Mammedov
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 4/8] ACPI: Add GPIO Connection Descriptor Shannon Zhao
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 18+ messages in thread
From: Shannon Zhao @ 2015-12-07  7:39 UTC (permalink / raw)
  To: qemu-arm, peter.maydell, mst, imammedo, wei
  Cc: peter.huangpeng, zhaoshenglong, qemu-devel, graeme.gregory, shannon.zhao

From: Shannon Zhao <shannon.zhao@linaro.org>

Add power button device in ACPI DSDT table.

Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Reviewed-by: Wei Huang <wei@redhat.com>
Tested-by: Wei Huang <wei@redhat.com>
---
 hw/arm/virt-acpi-build.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index bf6b934..1424672 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -43,6 +43,7 @@
 #include "hw/pci/pci.h"
 
 #define ARM_SPI_BASE 32
+#define ACPI_POWER_BUTTON_DEVICE "PWRB"
 
 typedef struct VirtAcpiCpuInfo {
     DECLARE_BITMAP(found_cpus, VIRT_ACPI_CPU_ID_LIMIT);
@@ -340,6 +341,15 @@ static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry *gpio_memmap,
     aml_append(scope, dev);
 }
 
+static void acpi_dsdt_add_power_button(Aml *scope)
+{
+    Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE);
+    aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C")));
+    aml_append(dev, aml_name_decl("_ADR", aml_int(0)));
+    aml_append(dev, aml_name_decl("_UID", aml_int(0)));
+    aml_append(scope, dev);
+}
+
 /* RSDP */
 static GArray *
 build_rsdp(GArray *rsdp_table, GArray *linker, unsigned rsdt)
@@ -558,6 +568,7 @@ build_dsdt(GArray *table_data, GArray *linker, VirtGuestInfo *guest_info)
                       guest_info->use_highmem);
     acpi_dsdt_add_gpio(scope, &memmap[VIRT_GPIO],
                        (irqmap[VIRT_GPIO] + ARM_SPI_BASE));
+    acpi_dsdt_add_power_button(scope);
 
     aml_append(dsdt, scope);
 
-- 
2.0.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [Qemu-devel] [PATCH v4 4/8] ACPI: Add GPIO Connection Descriptor
  2015-12-07  7:39 [Qemu-devel] [PATCH v4 0/8] Add system_powerdown support on ARM for ACPI and DT Shannon Zhao
                   ` (2 preceding siblings ...)
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 3/8] ARM: ACPI: Add power button device " Shannon Zhao
@ 2015-12-07  7:39 ` Shannon Zhao
  2015-12-10 20:14   ` Igor Mammedov
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 5/8] ACPI: Add aml_gpio_int() wrapper for GPIO Interrupt Connection Shannon Zhao
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 18+ messages in thread
From: Shannon Zhao @ 2015-12-07  7:39 UTC (permalink / raw)
  To: qemu-arm, peter.maydell, mst, imammedo, wei
  Cc: peter.huangpeng, zhaoshenglong, qemu-devel, graeme.gregory, shannon.zhao

From: Shannon Zhao <shannon.zhao@linaro.org>

Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Tested-by: Wei Huang <wei@redhat.com>
---
 hw/acpi/aml-build.c         | 68 +++++++++++++++++++++++++++++++++++++++++++++
 include/hw/acpi/aml-build.h | 20 +++++++++++++
 2 files changed, 88 insertions(+)

diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
index a00a0ab..4e1469a 100644
--- a/hw/acpi/aml-build.c
+++ b/hw/acpi/aml-build.c
@@ -565,6 +565,74 @@ Aml *aml_call4(const char *method, Aml *arg1, Aml *arg2, Aml *arg3, Aml *arg4)
 }
 
 /*
+ * ACPI 5.0: 6.4.3.8.1 GPIO Connection Descriptor
+ * Type 1, Large Item Name 0xC
+ */
+
+static Aml *aml_gpio_connection(AmlGpioConnectionType type,
+                                AmlConsumerAndProducer con_and_pro,
+                                uint8_t flags, AmlPinConfig pin_config,
+                                uint16_t output_drive,
+                                uint16_t debounce_timeout,
+                                const uint32_t pin_list[], uint32_t pin_count,
+                                const char *resource_source_name,
+                                const uint8_t *vendor_data,
+                                uint16_t vendor_data_len)
+{
+    Aml *var = aml_alloc();
+    const uint16_t min_desc_len = 0x16;
+    uint16_t resource_source_name_len, length;
+    uint16_t pin_table_offset, resource_source_name_offset, vendor_data_offset;
+    uint32_t i;
+
+    assert(resource_source_name);
+    resource_source_name_len = strlen(resource_source_name) + 1;
+    length = min_desc_len + resource_source_name_len + vendor_data_len;
+    pin_table_offset = min_desc_len + 1;
+    resource_source_name_offset = pin_table_offset + pin_count * 2;
+    vendor_data_offset = resource_source_name_offset + resource_source_name_len;
+
+    build_append_byte(var->buf, 0x8C);  /* GPIO Connection Descriptor */
+    build_append_int_noprefix(var->buf, length, 2); /* Length */
+    build_append_byte(var->buf, 1);     /* Revision ID */
+    build_append_byte(var->buf, type);  /* GPIO Connection Type */
+    /* General Flags (2 bytes) */
+    build_append_int_noprefix(var->buf, con_and_pro, 2);
+    /* Interrupt and IO Flags (2 bytes) */
+    build_append_int_noprefix(var->buf, flags, 2);
+    /* Pin Configuration 0 = Default 1 = Pull-up 2 = Pull-down 3 = No Pull */
+    build_append_byte(var->buf, pin_config);
+    /* Output Drive Strength (2 bytes) */
+    build_append_int_noprefix(var->buf, output_drive, 2);
+    /* Debounce Timeout (2 bytes) */
+    build_append_int_noprefix(var->buf, debounce_timeout, 2);
+    /* Pin Table Offset (2 bytes) */
+    build_append_int_noprefix(var->buf, pin_table_offset, 2);
+    build_append_byte(var->buf, 0);     /* Resource Source Index */
+    /* Resource Source Name Offset (2 bytes) */
+    build_append_int_noprefix(var->buf, resource_source_name_offset, 2);
+    /* Vendor Data Offset (2 bytes) */
+    build_append_int_noprefix(var->buf, vendor_data_offset, 2);
+    /* Vendor Data Length (2 bytes) */
+    build_append_int_noprefix(var->buf, vendor_data_len, 2);
+    /* Pin Number (2n bytes)*/
+    for (i = 0; i < pin_count; i++) {
+        build_append_int_noprefix(var->buf, pin_list[i], 2);
+    }
+
+    /* Resource Source Name */
+    build_append_namestring(var->buf, "%s", resource_source_name);
+    build_append_byte(var->buf, '\0');
+
+    /* Vendor-defined Data */
+    if (vendor_data != NULL) {
+        g_array_append_vals(var->buf, vendor_data, vendor_data_len);
+    }
+
+    return var;
+}
+
+/*
  * ACPI 1.0b: 6.4.3.4 32-Bit Fixed Location Memory Range Descriptor
  * (Type 1, Large Item Name 0x6)
  */
diff --git a/include/hw/acpi/aml-build.h b/include/hw/acpi/aml-build.h
index 1b632dc..a8dba9e 100644
--- a/include/hw/acpi/aml-build.h
+++ b/include/hw/acpi/aml-build.h
@@ -148,6 +148,26 @@ typedef enum {
     AML_SHARED_AND_WAKE = 3,
 } AmlShared;
 
+/*
+ * ACPI 5.0: Table 6-189 GPIO Connection Descriptor Definition
+ * GPIO Connection Type
+ */
+typedef enum {
+    AML_INTERRUPT_CONNECTION = 0,
+    AML_IO_CONNECTION = 1,
+} AmlGpioConnectionType;
+
+/*
+ * ACPI 5.0: Table 6-189 GPIO Connection Descriptor Definition
+ * _PPI field definition
+ */
+typedef enum {
+    AML_PULL_DEFAULT = 0,
+    AML_PULL_UP = 1,
+    AML_PULL_DOWN = 2,
+    AML_PULL_NONE = 3,
+} AmlPinConfig;
+
 typedef
 struct AcpiBuildTables {
     GArray *table_data;
-- 
2.0.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [Qemu-devel] [PATCH v4 5/8] ACPI: Add aml_gpio_int() wrapper for GPIO Interrupt Connection
  2015-12-07  7:39 [Qemu-devel] [PATCH v4 0/8] Add system_powerdown support on ARM for ACPI and DT Shannon Zhao
                   ` (3 preceding siblings ...)
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 4/8] ACPI: Add GPIO Connection Descriptor Shannon Zhao
@ 2015-12-07  7:39 ` Shannon Zhao
  2015-12-10 20:16   ` Igor Mammedov
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 6/8] ARM: ACPI: Add _E03 for Power Button Shannon Zhao
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 18+ messages in thread
From: Shannon Zhao @ 2015-12-07  7:39 UTC (permalink / raw)
  To: qemu-arm, peter.maydell, mst, imammedo, wei
  Cc: peter.huangpeng, zhaoshenglong, qemu-devel, graeme.gregory, shannon.zhao

From: Shannon Zhao <shannon.zhao@linaro.org>

Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Tested-by: Wei Huang <wei@redhat.com>
---
 hw/acpi/aml-build.c         | 20 ++++++++++++++++++++
 include/hw/acpi/aml-build.h |  7 +++++++
 2 files changed, 27 insertions(+)

diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
index 4e1469a..41ac5db 100644
--- a/hw/acpi/aml-build.c
+++ b/hw/acpi/aml-build.c
@@ -633,6 +633,26 @@ static Aml *aml_gpio_connection(AmlGpioConnectionType type,
 }
 
 /*
+ * ACPI 5.0: 19.5.53
+ * GpioInt(GPIO Interrupt Connection Resource Descriptor Macro)
+ */
+Aml *aml_gpio_int(AmlConsumerAndProducer con_and_pro,
+                  AmlLevelAndEdge edge_level,
+                  AmlActiveHighAndLow active_level, AmlShared shared,
+                  AmlPinConfig pin_config, uint16_t debounce_timeout,
+                  const uint32_t pin_list[], uint32_t pin_count,
+                  const char *resource_source_name,
+                  const uint8_t *vendor_data, uint16_t vendor_data_len)
+{
+    uint8_t flags = edge_level | (active_level << 1) | (shared << 3);
+
+    return aml_gpio_connection(AML_INTERRUPT_CONNECTION, con_and_pro, flags,
+                               pin_config, 0, debounce_timeout, pin_list,
+                               pin_count, resource_source_name, vendor_data,
+                               vendor_data_len);
+}
+
+/*
  * ACPI 1.0b: 6.4.3.4 32-Bit Fixed Location Memory Range Descriptor
  * (Type 1, Large Item Name 0x6)
  */
diff --git a/include/hw/acpi/aml-build.h b/include/hw/acpi/aml-build.h
index a8dba9e..41ffe29 100644
--- a/include/hw/acpi/aml-build.h
+++ b/include/hw/acpi/aml-build.h
@@ -232,6 +232,13 @@ Aml *aml_call1(const char *method, Aml *arg1);
 Aml *aml_call2(const char *method, Aml *arg1, Aml *arg2);
 Aml *aml_call3(const char *method, Aml *arg1, Aml *arg2, Aml *arg3);
 Aml *aml_call4(const char *method, Aml *arg1, Aml *arg2, Aml *arg3, Aml *arg4);
+Aml *aml_gpio_int(AmlConsumerAndProducer con_and_pro,
+                  AmlLevelAndEdge edge_level,
+                  AmlActiveHighAndLow active_level, AmlShared shared,
+                  AmlPinConfig pin_config, uint16_t debounce_timeout,
+                  const uint32_t pin_list[], uint32_t pin_count,
+                  const char *resource_source_name,
+                  const uint8_t *vendor_data, uint16_t vendor_data_len);
 Aml *aml_memory32_fixed(uint32_t addr, uint32_t size,
                         AmlReadAndWrite read_and_write);
 Aml *aml_interrupt(AmlConsumerAndProducer con_and_pro,
-- 
2.0.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [Qemu-devel] [PATCH v4 6/8] ARM: ACPI: Add _E03 for Power Button
  2015-12-07  7:39 [Qemu-devel] [PATCH v4 0/8] Add system_powerdown support on ARM for ACPI and DT Shannon Zhao
                   ` (4 preceding siblings ...)
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 5/8] ACPI: Add aml_gpio_int() wrapper for GPIO Interrupt Connection Shannon Zhao
@ 2015-12-07  7:39 ` Shannon Zhao
  2015-12-10 20:09   ` Igor Mammedov
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 7/8] ARM: Virt: Add QEMU powerdown notifier and hook it to GPIO Pin 3 Shannon Zhao
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 8/8] ARM: Virt: Add gpio-keys node for Poweroff using DT Shannon Zhao
  7 siblings, 1 reply; 18+ messages in thread
From: Shannon Zhao @ 2015-12-07  7:39 UTC (permalink / raw)
  To: qemu-arm, peter.maydell, mst, imammedo, wei
  Cc: peter.huangpeng, zhaoshenglong, qemu-devel, graeme.gregory, shannon.zhao

From: Shannon Zhao <shannon.zhao@linaro.org>

Here GPIO pin 3 is used for Power Button, add _E03 in ACPI DSDT table.

Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Tested-by: Wei Huang <wei@redhat.com>
---
 hw/arm/virt-acpi-build.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index 1424672..d693135 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -338,6 +338,20 @@ static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry *gpio_memmap,
     aml_append(crs, aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH,
                                   AML_EXCLUSIVE, gpio_irq));
     aml_append(dev, aml_name_decl("_CRS", crs));
+
+    Aml *aei = aml_resource_template();
+    /* Pin 3 for power button */
+    const uint32_t pin_list[1] = {3};
+    aml_append(aei, aml_gpio_int(AML_CONSUMER_PRODUCER, AML_EDGE,
+                                 AML_ACTIVE_HIGH, AML_EXCLUSIVE, AML_PULL_UP, 0,
+                                 pin_list, 1, "GPO0", NULL, 0));
+    aml_append(dev, aml_name_decl("_AEI", aei));
+
+    /* _E03 is handle for power button */
+    Aml *method = aml_method("_E03", 0);
+    aml_append(method, aml_notify(aml_name(ACPI_POWER_BUTTON_DEVICE),
+                                  aml_int(0x80)));
+    aml_append(dev, method);
     aml_append(scope, dev);
 }
 
-- 
2.0.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [Qemu-devel] [PATCH v4 7/8] ARM: Virt: Add QEMU powerdown notifier and hook it to GPIO Pin 3
  2015-12-07  7:39 [Qemu-devel] [PATCH v4 0/8] Add system_powerdown support on ARM for ACPI and DT Shannon Zhao
                   ` (5 preceding siblings ...)
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 6/8] ARM: ACPI: Add _E03 for Power Button Shannon Zhao
@ 2015-12-07  7:39 ` Shannon Zhao
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 8/8] ARM: Virt: Add gpio-keys node for Poweroff using DT Shannon Zhao
  7 siblings, 0 replies; 18+ messages in thread
From: Shannon Zhao @ 2015-12-07  7:39 UTC (permalink / raw)
  To: qemu-arm, peter.maydell, mst, imammedo, wei
  Cc: peter.huangpeng, zhaoshenglong, qemu-devel, graeme.gregory, shannon.zhao

From: Shannon Zhao <shannon.zhao@linaro.org>

Currently mach-virt model doesn't support powerdown request. Guest VM
doesn't react to system_powerdown from monitor console (or QMP) because
there is no communication mechanism for such requests. This patch registers
GPIO Pin 3 with powerdown notification. So guest VM can receive notification
when such powerdown request is triggered.

Signed-off-by: Wei Huang <wei@redhat.com>
Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Reviewed-by: Wei Huang <wei@redhat.com>
Tested-by: Wei Huang <wei@redhat.com>
---
 hw/arm/virt.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 7977e3c..cb1d45b 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -540,6 +540,17 @@ static void create_rtc(const VirtBoardInfo *vbi, qemu_irq *pic)
     g_free(nodename);
 }
 
+static DeviceState *pl061_dev;
+static void virt_powerdown_req(Notifier *n, void *opaque)
+{
+    /* use gpio Pin 3 for power button event */
+    qemu_set_irq(qdev_get_gpio_in(pl061_dev, 3), 1);
+}
+
+static Notifier virt_system_powerdown_notifier = {
+    .notify = virt_powerdown_req
+};
+
 static void create_gpio(const VirtBoardInfo *vbi, qemu_irq *pic)
 {
     char *nodename;
@@ -548,7 +559,7 @@ static void create_gpio(const VirtBoardInfo *vbi, qemu_irq *pic)
     int irq = vbi->irqmap[VIRT_GPIO];
     const char compat[] = "arm,pl061\0arm,primecell";
 
-    sysbus_create_simple("pl061", base, pic[irq]);
+    pl061_dev = sysbus_create_simple("pl061", base, pic[irq]);
 
     nodename = g_strdup_printf("/pl061@%" PRIx64, base);
     qemu_fdt_add_subnode(vbi->fdt, nodename);
@@ -563,6 +574,9 @@ static void create_gpio(const VirtBoardInfo *vbi, qemu_irq *pic)
     qemu_fdt_setprop_cell(vbi->fdt, nodename, "clocks", vbi->clock_phandle);
     qemu_fdt_setprop_string(vbi->fdt, nodename, "clock-names", "apb_pclk");
 
+    /* connect powerdown request */
+    qemu_register_powerdown_notifier(&virt_system_powerdown_notifier);
+
     g_free(nodename);
 }
 
-- 
2.0.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [Qemu-devel] [PATCH v4 8/8] ARM: Virt: Add gpio-keys node for Poweroff using DT
  2015-12-07  7:39 [Qemu-devel] [PATCH v4 0/8] Add system_powerdown support on ARM for ACPI and DT Shannon Zhao
                   ` (6 preceding siblings ...)
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 7/8] ARM: Virt: Add QEMU powerdown notifier and hook it to GPIO Pin 3 Shannon Zhao
@ 2015-12-07  7:39 ` Shannon Zhao
  7 siblings, 0 replies; 18+ messages in thread
From: Shannon Zhao @ 2015-12-07  7:39 UTC (permalink / raw)
  To: qemu-arm, peter.maydell, mst, imammedo, wei
  Cc: peter.huangpeng, zhaoshenglong, qemu-devel, graeme.gregory, shannon.zhao

From: Shannon Zhao <shannon.zhao@linaro.org>

Add a gpio-keys node. This is used for Poweroff for the systems which
use DT not ACPI.

Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Tested-by: Wei Huang <wei@redhat.com>
---
 hw/arm/virt.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index cb1d45b..bd6781bd 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -52,6 +52,7 @@
 #include "kvm_arm.h"
 #include "hw/smbios/smbios.h"
 #include "qapi/visitor.h"
+#include <linux/input.h>
 
 /* Number of external interrupt lines to configure the GIC with */
 #define NUM_IRQS 256
@@ -561,6 +562,7 @@ static void create_gpio(const VirtBoardInfo *vbi, qemu_irq *pic)
 
     pl061_dev = sysbus_create_simple("pl061", base, pic[irq]);
 
+    uint32_t phandle = qemu_fdt_alloc_phandle(vbi->fdt);
     nodename = g_strdup_printf("/pl061@%" PRIx64, base);
     qemu_fdt_add_subnode(vbi->fdt, nodename);
     qemu_fdt_setprop_sized_cells(vbi->fdt, nodename, "reg",
@@ -573,6 +575,20 @@ static void create_gpio(const VirtBoardInfo *vbi, qemu_irq *pic)
                            GIC_FDT_IRQ_FLAGS_LEVEL_HI);
     qemu_fdt_setprop_cell(vbi->fdt, nodename, "clocks", vbi->clock_phandle);
     qemu_fdt_setprop_string(vbi->fdt, nodename, "clock-names", "apb_pclk");
+    qemu_fdt_setprop_cell(vbi->fdt, nodename, "phandle", phandle);
+
+    qemu_fdt_add_subnode(vbi->fdt, "/gpio-keys");
+    qemu_fdt_setprop_string(vbi->fdt, "/gpio-keys", "compatible", "gpio-keys");
+    qemu_fdt_setprop_cell(vbi->fdt, "/gpio-keys", "#size-cells", 0);
+    qemu_fdt_setprop_cell(vbi->fdt, "/gpio-keys", "#address-cells", 1);
+
+    qemu_fdt_add_subnode(vbi->fdt, "/gpio-keys/poweroff");
+    qemu_fdt_setprop_string(vbi->fdt, "/gpio-keys/poweroff",
+                            "label", "GPIO Key Poweroff");
+    qemu_fdt_setprop_cell(vbi->fdt, "/gpio-keys/poweroff", "linux,code",
+                          KEY_POWER);
+    qemu_fdt_setprop_cells(vbi->fdt, "/gpio-keys/poweroff",
+                           "gpios", phandle, 3, 0);
 
     /* connect powerdown request */
     qemu_register_powerdown_notifier(&virt_system_powerdown_notifier);
-- 
2.0.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [Qemu-devel] [PATCH v4 2/8] ARM: ACPI: Add GPIO controller in ACPI DSDT table
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 2/8] ARM: ACPI: Add GPIO controller in ACPI DSDT table Shannon Zhao
@ 2015-12-10 13:22   ` Igor Mammedov
  2015-12-10 19:16     ` Wei Huang
  0 siblings, 1 reply; 18+ messages in thread
From: Igor Mammedov @ 2015-12-10 13:22 UTC (permalink / raw)
  To: Shannon Zhao
  Cc: wei, peter.maydell, graeme.gregory, mst, qemu-devel,
	peter.huangpeng, qemu-arm, shannon.zhao

On Mon, 7 Dec 2015 15:39:46 +0800
Shannon Zhao <zhaoshenglong@huawei.com> wrote:

> From: Shannon Zhao <shannon.zhao@linaro.org>
> 
> Add GPIO controller in ACPI DSDT table. It can be used for gpio event.
> 
> Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
> Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
> Tested-by: Wei Huang <wei@redhat.com>
> ---
>  hw/arm/virt-acpi-build.c | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
> 
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index 3c2c5d6..bf6b934 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -323,6 +323,23 @@ static void acpi_dsdt_add_pci(Aml *scope, const
> MemMapEntry *memmap, int irq, aml_append(scope, dev);
>  }
>  
> +static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry
> *gpio_memmap,
> +                                           int gpio_irq)
s/int/uint32_t/

> +{
> +    Aml *dev = aml_device("GPO0");
> +    aml_append(dev, aml_name_decl("_HID", aml_string("ARMH0061")));
What spec "ARMH0061" comes from?
Probably it should be mentioned in comment.

> +    aml_append(dev, aml_name_decl("_ADR", aml_int(0)));
> +    aml_append(dev, aml_name_decl("_UID", aml_int(0)));
> +
> +    Aml *crs = aml_resource_template();
> +    aml_append(crs, aml_memory32_fixed(gpio_memmap->base,
> gpio_memmap->size,
> +                                       AML_READ_WRITE));
> +    aml_append(crs, aml_interrupt(AML_CONSUMER, AML_LEVEL,
> AML_ACTIVE_HIGH,
> +                                  AML_EXCLUSIVE, gpio_irq));
that conflicts with
https://github.com/imammedo/qemu/commit/acb34e533bc31fdf3eb6230c93654b0b0ae4e76e
perhaps you could include it in your series and redo this hunk
to take array instead of int.


> +    aml_append(dev, aml_name_decl("_CRS", crs));
> +    aml_append(scope, dev);
> +}
> +
>  /* RSDP */
>  static GArray *
>  build_rsdp(GArray *rsdp_table, GArray *linker, unsigned rsdt)
> @@ -539,6 +556,8 @@ build_dsdt(GArray *table_data, GArray *linker,
> VirtGuestInfo *guest_info) (irqmap[VIRT_MMIO] + ARM_SPI_BASE),
> NUM_VIRTIO_TRANSPORTS); acpi_dsdt_add_pci(scope, memmap,
> (irqmap[VIRT_PCIE] + ARM_SPI_BASE), guest_info->use_highmem);
> +    acpi_dsdt_add_gpio(scope, &memmap[VIRT_GPIO],
> +                       (irqmap[VIRT_GPIO] + ARM_SPI_BASE));
>  
>      aml_append(dsdt, scope);
>  

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Qemu-devel] [PATCH v4 2/8] ARM: ACPI: Add GPIO controller in ACPI DSDT table
  2015-12-10 13:22   ` Igor Mammedov
@ 2015-12-10 19:16     ` Wei Huang
  2015-12-10 20:13       ` Igor Mammedov
  0 siblings, 1 reply; 18+ messages in thread
From: Wei Huang @ 2015-12-10 19:16 UTC (permalink / raw)
  To: Igor Mammedov, Shannon Zhao
  Cc: peter.maydell, graeme.gregory, mst, qemu-devel, peter.huangpeng,
	qemu-arm, shannon.zhao



On 12/10/2015 07:22 AM, Igor Mammedov wrote:
> On Mon, 7 Dec 2015 15:39:46 +0800
> Shannon Zhao <zhaoshenglong@huawei.com> wrote:
> 
>> From: Shannon Zhao <shannon.zhao@linaro.org>
>>
>> Add GPIO controller in ACPI DSDT table. It can be used for gpio event.
>>
>> Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
>> Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
>> Tested-by: Wei Huang <wei@redhat.com>
>> ---
>>  hw/arm/virt-acpi-build.c | 19 +++++++++++++++++++
>>  1 file changed, 19 insertions(+)
>>
>> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
>> index 3c2c5d6..bf6b934 100644
>> --- a/hw/arm/virt-acpi-build.c
>> +++ b/hw/arm/virt-acpi-build.c
>> @@ -323,6 +323,23 @@ static void acpi_dsdt_add_pci(Aml *scope, const
>> MemMapEntry *memmap, int irq, aml_append(scope, dev);
>>  }
>>  
>> +static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry
>> *gpio_memmap,
>> +                                           int gpio_irq)
> s/int/uint32_t/
> 
>> +{
>> +    Aml *dev = aml_device("GPO0");
>> +    aml_append(dev, aml_name_decl("_HID", aml_string("ARMH0061")));
> What spec "ARMH0061" comes from?
> Probably it should be mentioned in comment.

I tried to find the official source for this definition several weeks
ago, but failed. Later, in private, Al Stone confirmed with me that
ARMH0061 is the right one. Maybe ARM or Linaro should push this
definition into ACPI spec or somewhere else in a formal way.

> 
>> +    aml_append(dev, aml_name_decl("_ADR", aml_int(0)));
>> +    aml_append(dev, aml_name_decl("_UID", aml_int(0)));
>> +
>> +    Aml *crs = aml_resource_template();
>> +    aml_append(crs, aml_memory32_fixed(gpio_memmap->base,
>> gpio_memmap->size,
>> +                                       AML_READ_WRITE));
>> +    aml_append(crs, aml_interrupt(AML_CONSUMER, AML_LEVEL,
>> AML_ACTIVE_HIGH,
>> +                                  AML_EXCLUSIVE, gpio_irq));
> that conflicts with
> https://github.com/imammedo/qemu/commit/acb34e533bc31fdf3eb6230c93654b0b0ae4e76e
> perhaps you could include it in your series and redo this hunk
> to take array instead of int.
> 
> 
>> +    aml_append(dev, aml_name_decl("_CRS", crs));
>> +    aml_append(scope, dev);
>> +}
>> +
>>  /* RSDP */
>>  static GArray *
>>  build_rsdp(GArray *rsdp_table, GArray *linker, unsigned rsdt)
>> @@ -539,6 +556,8 @@ build_dsdt(GArray *table_data, GArray *linker,
>> VirtGuestInfo *guest_info) (irqmap[VIRT_MMIO] + ARM_SPI_BASE),
>> NUM_VIRTIO_TRANSPORTS); acpi_dsdt_add_pci(scope, memmap,
>> (irqmap[VIRT_PCIE] + ARM_SPI_BASE), guest_info->use_highmem);
>> +    acpi_dsdt_add_gpio(scope, &memmap[VIRT_GPIO],
>> +                       (irqmap[VIRT_GPIO] + ARM_SPI_BASE));
>>  
>>      aml_append(dsdt, scope);
>>  
> 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Qemu-devel] [PATCH v4 6/8] ARM: ACPI: Add _E03 for Power Button
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 6/8] ARM: ACPI: Add _E03 for Power Button Shannon Zhao
@ 2015-12-10 20:09   ` Igor Mammedov
  2015-12-11  1:52     ` Shannon Zhao
  0 siblings, 1 reply; 18+ messages in thread
From: Igor Mammedov @ 2015-12-10 20:09 UTC (permalink / raw)
  To: Shannon Zhao
  Cc: wei, peter.maydell, graeme.gregory, mst, qemu-devel,
	peter.huangpeng, qemu-arm, shannon.zhao

On Mon, 7 Dec 2015 15:39:50 +0800
Shannon Zhao <zhaoshenglong@huawei.com> wrote:

> From: Shannon Zhao <shannon.zhao@linaro.org>
> 
> Here GPIO pin 3 is used for Power Button, add _E03 in ACPI DSDT table.
> 
> Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
> Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
> Tested-by: Wei Huang <wei@redhat.com>
> ---
>  hw/arm/virt-acpi-build.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index 1424672..d693135 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -338,6 +338,20 @@ static void acpi_dsdt_add_gpio(Aml *scope, const
> MemMapEntry *gpio_memmap, aml_append(crs, aml_interrupt(AML_CONSUMER,
> AML_LEVEL, AML_ACTIVE_HIGH, AML_EXCLUSIVE, gpio_irq));
>      aml_append(dev, aml_name_decl("_CRS", crs));
> +
> +    Aml *aei = aml_resource_template();
> +    /* Pin 3 for power button */
> +    const uint32_t pin_list[1] = {3};
> +    aml_append(aei, aml_gpio_int(AML_CONSUMER_PRODUCER, AML_EDGE,
looks like AML_CONSUMER_PRODUCER is wrong, ACPI6 spec says:
"ResourceUsage is an optional argument and is assumed to be
ResourceConsumer for this revision."


> +                                 AML_ACTIVE_HIGH, AML_EXCLUSIVE,
> AML_PULL_UP, 0,
> +                                 pin_list, 1, "GPO0", NULL, 0));
> +    aml_append(dev, aml_name_decl("_AEI", aei));
> +
> +    /* _E03 is handle for power button */
> +    Aml *method = aml_method("_E03", 0);
> +    aml_append(method, aml_notify(aml_name(ACPI_POWER_BUTTON_DEVICE),
> +                                  aml_int(0x80)));
could you include commit
https://github.com/imammedo/qemu/commit/1b647d5534e8c8c8434574d1c0fe4c442b66c6b0
in your series and rebase this patch to use a new am_method() signature.

> +    aml_append(dev, method);
>      aml_append(scope, dev);
>  }
>  

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Qemu-devel] [PATCH v4 2/8] ARM: ACPI: Add GPIO controller in ACPI DSDT table
  2015-12-10 19:16     ` Wei Huang
@ 2015-12-10 20:13       ` Igor Mammedov
  2015-12-11  1:35         ` Shannon Zhao
  0 siblings, 1 reply; 18+ messages in thread
From: Igor Mammedov @ 2015-12-10 20:13 UTC (permalink / raw)
  To: Wei Huang
  Cc: peter.maydell, graeme.gregory, mst, qemu-devel, peter.huangpeng,
	qemu-arm, shannon.zhao, Shannon Zhao

On Thu, 10 Dec 2015 13:16:22 -0600
Wei Huang <wei@redhat.com> wrote:

> 
> 
> On 12/10/2015 07:22 AM, Igor Mammedov wrote:
> > On Mon, 7 Dec 2015 15:39:46 +0800
> > Shannon Zhao <zhaoshenglong@huawei.com> wrote:
> > 
> >> From: Shannon Zhao <shannon.zhao@linaro.org>
> >>
> >> Add GPIO controller in ACPI DSDT table. It can be used for gpio
> >> event.
> >>
> >> Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
> >> Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
> >> Tested-by: Wei Huang <wei@redhat.com>
> >> ---
> >>  hw/arm/virt-acpi-build.c | 19 +++++++++++++++++++
> >>  1 file changed, 19 insertions(+)
> >>
> >> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> >> index 3c2c5d6..bf6b934 100644
> >> --- a/hw/arm/virt-acpi-build.c
> >> +++ b/hw/arm/virt-acpi-build.c
> >> @@ -323,6 +323,23 @@ static void acpi_dsdt_add_pci(Aml *scope,
> >> const MemMapEntry *memmap, int irq, aml_append(scope, dev);
> >>  }
> >>  
> >> +static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry
> >> *gpio_memmap,
> >> +                                           int gpio_irq)
> > s/int/uint32_t/
> > 
> >> +{
> >> +    Aml *dev = aml_device("GPO0");
> >> +    aml_append(dev, aml_name_decl("_HID",
> >> aml_string("ARMH0061")));
> > What spec "ARMH0061" comes from?
> > Probably it should be mentioned in comment.
> 
> I tried to find the official source for this definition several weeks
> ago, but failed. Later, in private, Al Stone confirmed with me that
> ARMH0061 is the right one. Maybe ARM or Linaro should push this
> definition into ACPI spec or somewhere else in a formal way.
I've also tried and only saw it on lkml in mentioned patchset,
which wasn't warmly met.
Given that and lack of spec where it's allocated perhaps we should wait
on it till ARM puts in in some their spec formally.

> 
> > 
> >> +    aml_append(dev, aml_name_decl("_ADR", aml_int(0)));
> >> +    aml_append(dev, aml_name_decl("_UID", aml_int(0)));
> >> +
> >> +    Aml *crs = aml_resource_template();
> >> +    aml_append(crs, aml_memory32_fixed(gpio_memmap->base,
> >> gpio_memmap->size,
> >> +                                       AML_READ_WRITE));
> >> +    aml_append(crs, aml_interrupt(AML_CONSUMER, AML_LEVEL,
> >> AML_ACTIVE_HIGH,
> >> +                                  AML_EXCLUSIVE, gpio_irq));
> > that conflicts with
> > https://github.com/imammedo/qemu/commit/acb34e533bc31fdf3eb6230c93654b0b0ae4e76e
> > perhaps you could include it in your series and redo this hunk
> > to take array instead of int.
> > 
> > 
> >> +    aml_append(dev, aml_name_decl("_CRS", crs));
> >> +    aml_append(scope, dev);
> >> +}
> >> +
> >>  /* RSDP */
> >>  static GArray *
> >>  build_rsdp(GArray *rsdp_table, GArray *linker, unsigned rsdt)
> >> @@ -539,6 +556,8 @@ build_dsdt(GArray *table_data, GArray *linker,
> >> VirtGuestInfo *guest_info) (irqmap[VIRT_MMIO] + ARM_SPI_BASE),
> >> NUM_VIRTIO_TRANSPORTS); acpi_dsdt_add_pci(scope, memmap,
> >> (irqmap[VIRT_PCIE] + ARM_SPI_BASE), guest_info->use_highmem);
> >> +    acpi_dsdt_add_gpio(scope, &memmap[VIRT_GPIO],
> >> +                       (irqmap[VIRT_GPIO] + ARM_SPI_BASE));
> >>  
> >>      aml_append(dsdt, scope);
> >>  
> > 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Qemu-devel] [PATCH v4 4/8] ACPI: Add GPIO Connection Descriptor
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 4/8] ACPI: Add GPIO Connection Descriptor Shannon Zhao
@ 2015-12-10 20:14   ` Igor Mammedov
  0 siblings, 0 replies; 18+ messages in thread
From: Igor Mammedov @ 2015-12-10 20:14 UTC (permalink / raw)
  To: Shannon Zhao
  Cc: wei, peter.maydell, graeme.gregory, mst, qemu-devel,
	peter.huangpeng, qemu-arm, shannon.zhao

On Mon, 7 Dec 2015 15:39:48 +0800
Shannon Zhao <zhaoshenglong@huawei.com> wrote:

> From: Shannon Zhao <shannon.zhao@linaro.org>
> 
> Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
> Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
> Tested-by: Wei Huang <wei@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  hw/acpi/aml-build.c         | 68
> +++++++++++++++++++++++++++++++++++++++++++++
> include/hw/acpi/aml-build.h | 20 +++++++++++++ 2 files changed, 88
> insertions(+)
> 
> diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
> index a00a0ab..4e1469a 100644
> --- a/hw/acpi/aml-build.c
> +++ b/hw/acpi/aml-build.c
> @@ -565,6 +565,74 @@ Aml *aml_call4(const char *method, Aml *arg1,
> Aml *arg2, Aml *arg3, Aml *arg4) }
>  
>  /*
> + * ACPI 5.0: 6.4.3.8.1 GPIO Connection Descriptor
> + * Type 1, Large Item Name 0xC
> + */
> +
> +static Aml *aml_gpio_connection(AmlGpioConnectionType type,
> +                                AmlConsumerAndProducer con_and_pro,
> +                                uint8_t flags, AmlPinConfig
> pin_config,
> +                                uint16_t output_drive,
> +                                uint16_t debounce_timeout,
> +                                const uint32_t pin_list[], uint32_t
> pin_count,
> +                                const char *resource_source_name,
> +                                const uint8_t *vendor_data,
> +                                uint16_t vendor_data_len)
> +{
> +    Aml *var = aml_alloc();
> +    const uint16_t min_desc_len = 0x16;
> +    uint16_t resource_source_name_len, length;
> +    uint16_t pin_table_offset, resource_source_name_offset,
> vendor_data_offset;
> +    uint32_t i;
> +
> +    assert(resource_source_name);
> +    resource_source_name_len = strlen(resource_source_name) + 1;
> +    length = min_desc_len + resource_source_name_len +
> vendor_data_len;
> +    pin_table_offset = min_desc_len + 1;
> +    resource_source_name_offset = pin_table_offset + pin_count * 2;
> +    vendor_data_offset = resource_source_name_offset +
> resource_source_name_len; +
> +    build_append_byte(var->buf, 0x8C);  /* GPIO Connection
> Descriptor */
> +    build_append_int_noprefix(var->buf, length, 2); /* Length */
> +    build_append_byte(var->buf, 1);     /* Revision ID */
> +    build_append_byte(var->buf, type);  /* GPIO Connection Type */
> +    /* General Flags (2 bytes) */
> +    build_append_int_noprefix(var->buf, con_and_pro, 2);
> +    /* Interrupt and IO Flags (2 bytes) */
> +    build_append_int_noprefix(var->buf, flags, 2);
> +    /* Pin Configuration 0 = Default 1 = Pull-up 2 = Pull-down 3 =
> No Pull */
> +    build_append_byte(var->buf, pin_config);
> +    /* Output Drive Strength (2 bytes) */
> +    build_append_int_noprefix(var->buf, output_drive, 2);
> +    /* Debounce Timeout (2 bytes) */
> +    build_append_int_noprefix(var->buf, debounce_timeout, 2);
> +    /* Pin Table Offset (2 bytes) */
> +    build_append_int_noprefix(var->buf, pin_table_offset, 2);
> +    build_append_byte(var->buf, 0);     /* Resource Source Index */
> +    /* Resource Source Name Offset (2 bytes) */
> +    build_append_int_noprefix(var->buf, resource_source_name_offset,
> 2);
> +    /* Vendor Data Offset (2 bytes) */
> +    build_append_int_noprefix(var->buf, vendor_data_offset, 2);
> +    /* Vendor Data Length (2 bytes) */
> +    build_append_int_noprefix(var->buf, vendor_data_len, 2);
> +    /* Pin Number (2n bytes)*/
> +    for (i = 0; i < pin_count; i++) {
> +        build_append_int_noprefix(var->buf, pin_list[i], 2);
> +    }
> +
> +    /* Resource Source Name */
> +    build_append_namestring(var->buf, "%s", resource_source_name);
> +    build_append_byte(var->buf, '\0');
> +
> +    /* Vendor-defined Data */
> +    if (vendor_data != NULL) {
> +        g_array_append_vals(var->buf, vendor_data, vendor_data_len);
> +    }
> +
> +    return var;
> +}
> +
> +/*
>   * ACPI 1.0b: 6.4.3.4 32-Bit Fixed Location Memory Range Descriptor
>   * (Type 1, Large Item Name 0x6)
>   */
> diff --git a/include/hw/acpi/aml-build.h b/include/hw/acpi/aml-build.h
> index 1b632dc..a8dba9e 100644
> --- a/include/hw/acpi/aml-build.h
> +++ b/include/hw/acpi/aml-build.h
> @@ -148,6 +148,26 @@ typedef enum {
>      AML_SHARED_AND_WAKE = 3,
>  } AmlShared;
>  
> +/*
> + * ACPI 5.0: Table 6-189 GPIO Connection Descriptor Definition
> + * GPIO Connection Type
> + */
> +typedef enum {
> +    AML_INTERRUPT_CONNECTION = 0,
> +    AML_IO_CONNECTION = 1,
> +} AmlGpioConnectionType;
> +
> +/*
> + * ACPI 5.0: Table 6-189 GPIO Connection Descriptor Definition
> + * _PPI field definition
> + */
> +typedef enum {
> +    AML_PULL_DEFAULT = 0,
> +    AML_PULL_UP = 1,
> +    AML_PULL_DOWN = 2,
> +    AML_PULL_NONE = 3,
> +} AmlPinConfig;
> +
>  typedef
>  struct AcpiBuildTables {
>      GArray *table_data;

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Qemu-devel] [PATCH v4 5/8] ACPI: Add aml_gpio_int() wrapper for GPIO Interrupt Connection
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 5/8] ACPI: Add aml_gpio_int() wrapper for GPIO Interrupt Connection Shannon Zhao
@ 2015-12-10 20:16   ` Igor Mammedov
  0 siblings, 0 replies; 18+ messages in thread
From: Igor Mammedov @ 2015-12-10 20:16 UTC (permalink / raw)
  To: Shannon Zhao
  Cc: wei, peter.maydell, graeme.gregory, mst, qemu-devel,
	peter.huangpeng, qemu-arm, shannon.zhao

On Mon, 7 Dec 2015 15:39:49 +0800
Shannon Zhao <zhaoshenglong@huawei.com> wrote:

> From: Shannon Zhao <shannon.zhao@linaro.org>
> 
> Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
> Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
> Tested-by: Wei Huang <wei@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  hw/acpi/aml-build.c         | 20 ++++++++++++++++++++
>  include/hw/acpi/aml-build.h |  7 +++++++
>  2 files changed, 27 insertions(+)
> 
> diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
> index 4e1469a..41ac5db 100644
> --- a/hw/acpi/aml-build.c
> +++ b/hw/acpi/aml-build.c
> @@ -633,6 +633,26 @@ static Aml
> *aml_gpio_connection(AmlGpioConnectionType type, }
>  
>  /*
> + * ACPI 5.0: 19.5.53
> + * GpioInt(GPIO Interrupt Connection Resource Descriptor Macro)
> + */
> +Aml *aml_gpio_int(AmlConsumerAndProducer con_and_pro,
> +                  AmlLevelAndEdge edge_level,
> +                  AmlActiveHighAndLow active_level, AmlShared shared,
> +                  AmlPinConfig pin_config, uint16_t debounce_timeout,
> +                  const uint32_t pin_list[], uint32_t pin_count,
> +                  const char *resource_source_name,
> +                  const uint8_t *vendor_data, uint16_t
> vendor_data_len) +{
> +    uint8_t flags = edge_level | (active_level << 1) | (shared << 3);
> +
> +    return aml_gpio_connection(AML_INTERRUPT_CONNECTION,
> con_and_pro, flags,
> +                               pin_config, 0, debounce_timeout,
> pin_list,
> +                               pin_count, resource_source_name,
> vendor_data,
> +                               vendor_data_len);
> +}
> +
> +/*
>   * ACPI 1.0b: 6.4.3.4 32-Bit Fixed Location Memory Range Descriptor
>   * (Type 1, Large Item Name 0x6)
>   */
> diff --git a/include/hw/acpi/aml-build.h b/include/hw/acpi/aml-build.h
> index a8dba9e..41ffe29 100644
> --- a/include/hw/acpi/aml-build.h
> +++ b/include/hw/acpi/aml-build.h
> @@ -232,6 +232,13 @@ Aml *aml_call1(const char *method, Aml *arg1);
>  Aml *aml_call2(const char *method, Aml *arg1, Aml *arg2);
>  Aml *aml_call3(const char *method, Aml *arg1, Aml *arg2, Aml *arg3);
>  Aml *aml_call4(const char *method, Aml *arg1, Aml *arg2, Aml *arg3,
> Aml *arg4); +Aml *aml_gpio_int(AmlConsumerAndProducer con_and_pro,
> +                  AmlLevelAndEdge edge_level,
> +                  AmlActiveHighAndLow active_level, AmlShared shared,
> +                  AmlPinConfig pin_config, uint16_t debounce_timeout,
> +                  const uint32_t pin_list[], uint32_t pin_count,
> +                  const char *resource_source_name,
> +                  const uint8_t *vendor_data, uint16_t
> vendor_data_len); Aml *aml_memory32_fixed(uint32_t addr, uint32_t
> size, AmlReadAndWrite read_and_write);
>  Aml *aml_interrupt(AmlConsumerAndProducer con_and_pro,

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Qemu-devel] [PATCH v4 3/8] ARM: ACPI: Add power button device in ACPI DSDT table
  2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 3/8] ARM: ACPI: Add power button device " Shannon Zhao
@ 2015-12-10 20:23   ` Igor Mammedov
  0 siblings, 0 replies; 18+ messages in thread
From: Igor Mammedov @ 2015-12-10 20:23 UTC (permalink / raw)
  To: Shannon Zhao
  Cc: wei, peter.maydell, graeme.gregory, mst, qemu-devel,
	peter.huangpeng, qemu-arm, shannon.zhao

On Mon, 7 Dec 2015 15:39:47 +0800
Shannon Zhao <zhaoshenglong@huawei.com> wrote:

> From: Shannon Zhao <shannon.zhao@linaro.org>
> 
> Add power button device in ACPI DSDT table.
> 
> Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
> Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
> Reviewed-by: Wei Huang <wei@redhat.com>
> Tested-by: Wei Huang <wei@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  hw/arm/virt-acpi-build.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index bf6b934..1424672 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -43,6 +43,7 @@
>  #include "hw/pci/pci.h"
>  
>  #define ARM_SPI_BASE 32
> +#define ACPI_POWER_BUTTON_DEVICE "PWRB"
>  
>  typedef struct VirtAcpiCpuInfo {
>      DECLARE_BITMAP(found_cpus, VIRT_ACPI_CPU_ID_LIMIT);
> @@ -340,6 +341,15 @@ static void acpi_dsdt_add_gpio(Aml *scope, const
> MemMapEntry *gpio_memmap, aml_append(scope, dev);
>  }
>  
> +static void acpi_dsdt_add_power_button(Aml *scope)
> +{
> +    Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE);
> +    aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C")));
> +    aml_append(dev, aml_name_decl("_ADR", aml_int(0)));
> +    aml_append(dev, aml_name_decl("_UID", aml_int(0)));
> +    aml_append(scope, dev);
> +}
> +
>  /* RSDP */
>  static GArray *
>  build_rsdp(GArray *rsdp_table, GArray *linker, unsigned rsdt)
> @@ -558,6 +568,7 @@ build_dsdt(GArray *table_data, GArray *linker,
> VirtGuestInfo *guest_info) guest_info->use_highmem);
>      acpi_dsdt_add_gpio(scope, &memmap[VIRT_GPIO],
>                         (irqmap[VIRT_GPIO] + ARM_SPI_BASE));
> +    acpi_dsdt_add_power_button(scope);
>  
>      aml_append(dsdt, scope);
>  

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Qemu-devel] [PATCH v4 2/8] ARM: ACPI: Add GPIO controller in ACPI DSDT table
  2015-12-10 20:13       ` Igor Mammedov
@ 2015-12-11  1:35         ` Shannon Zhao
  0 siblings, 0 replies; 18+ messages in thread
From: Shannon Zhao @ 2015-12-11  1:35 UTC (permalink / raw)
  To: Igor Mammedov, Wei Huang
  Cc: peter.maydell, graeme.gregory, mst, peter.huangpeng, qemu-devel,
	qemu-arm, shannon.zhao

Hi,

On 2015/12/11 4:13, Igor Mammedov wrote:
> On Thu, 10 Dec 2015 13:16:22 -0600
> Wei Huang <wei@redhat.com> wrote:
> 
>> > 
>> > 
>> > On 12/10/2015 07:22 AM, Igor Mammedov wrote:
>>> > > On Mon, 7 Dec 2015 15:39:46 +0800
>>> > > Shannon Zhao <zhaoshenglong@huawei.com> wrote:
>>> > > 
>>>> > >> From: Shannon Zhao <shannon.zhao@linaro.org>
>>>> > >>
>>>> > >> Add GPIO controller in ACPI DSDT table. It can be used for gpio
>>>> > >> event.
>>>> > >>
>>>> > >> Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
>>>> > >> Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
>>>> > >> Tested-by: Wei Huang <wei@redhat.com>
>>>> > >> ---
>>>> > >>  hw/arm/virt-acpi-build.c | 19 +++++++++++++++++++
>>>> > >>  1 file changed, 19 insertions(+)
>>>> > >>
>>>> > >> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
>>>> > >> index 3c2c5d6..bf6b934 100644
>>>> > >> --- a/hw/arm/virt-acpi-build.c
>>>> > >> +++ b/hw/arm/virt-acpi-build.c
>>>> > >> @@ -323,6 +323,23 @@ static void acpi_dsdt_add_pci(Aml *scope,
>>>> > >> const MemMapEntry *memmap, int irq, aml_append(scope, dev);
>>>> > >>  }
>>>> > >>  
>>>> > >> +static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry
>>>> > >> *gpio_memmap,
>>>> > >> +                                           int gpio_irq)
>>> > > s/int/uint32_t/
>>> > > 
>>>> > >> +{
>>>> > >> +    Aml *dev = aml_device("GPO0");
>>>> > >> +    aml_append(dev, aml_name_decl("_HID",
>>>> > >> aml_string("ARMH0061")));
>>> > > What spec "ARMH0061" comes from?
>>> > > Probably it should be mentioned in comment.
>> > 
>> > I tried to find the official source for this definition several weeks
>> > ago, but failed. Later, in private, Al Stone confirmed with me that
>> > ARMH0061 is the right one. Maybe ARM or Linaro should push this
>> > definition into ACPI spec or somewhere else in a formal way.
> I've also tried and only saw it on lkml in mentioned patchset,
> which wasn't warmly met.
> Given that and lack of spec where it's allocated perhaps we should wait
> on it till ARM puts in in some their spec formally.
> 
We discussed this at previous patchset with Peter Maydell and Al Stone.
I think ARM should publish a list of ACPI ID for its own devices. Al
also confirmed the _HID of PL061 is ARMH0061.

>> > 
>>> > > 
>>>> > >> +    aml_append(dev, aml_name_decl("_ADR", aml_int(0)));
>>>> > >> +    aml_append(dev, aml_name_decl("_UID", aml_int(0)));
>>>> > >> +
>>>> > >> +    Aml *crs = aml_resource_template();
>>>> > >> +    aml_append(crs, aml_memory32_fixed(gpio_memmap->base,
>>>> > >> gpio_memmap->size,
>>>> > >> +                                       AML_READ_WRITE));
>>>> > >> +    aml_append(crs, aml_interrupt(AML_CONSUMER, AML_LEVEL,
>>>> > >> AML_ACTIVE_HIGH,
>>>> > >> +                                  AML_EXCLUSIVE, gpio_irq));
>>> > > that conflicts with
>>> > > https://github.com/imammedo/qemu/commit/acb34e533bc31fdf3eb6230c93654b0b0ae4e76e
>>> > > perhaps you could include it in your series and redo this hunk
>>> > > to take array instead of int.
>>> > > 
sure

>>> > > 
>>>> > >> +    aml_append(dev, aml_name_decl("_CRS", crs));
>>>> > >> +    aml_append(scope, dev);
>>>> > >> +}
>>>> > >> +
>>>> > >>  /* RSDP */
>>>> > >>  static GArray *
>>>> > >>  build_rsdp(GArray *rsdp_table, GArray *linker, unsigned rsdt)
>>>> > >> @@ -539,6 +556,8 @@ build_dsdt(GArray *table_data, GArray *linker,
>>>> > >> VirtGuestInfo *guest_info) (irqmap[VIRT_MMIO] + ARM_SPI_BASE),
>>>> > >> NUM_VIRTIO_TRANSPORTS); acpi_dsdt_add_pci(scope, memmap,
>>>> > >> (irqmap[VIRT_PCIE] + ARM_SPI_BASE), guest_info->use_highmem);
>>>> > >> +    acpi_dsdt_add_gpio(scope, &memmap[VIRT_GPIO],
>>>> > >> +                       (irqmap[VIRT_GPIO] + ARM_SPI_BASE));
>>>> > >>  
>>>> > >>      aml_append(dsdt, scope);
>>>> > >>  
>>> > > 

-- 
Shannon

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Qemu-devel] [PATCH v4 6/8] ARM: ACPI: Add _E03 for Power Button
  2015-12-10 20:09   ` Igor Mammedov
@ 2015-12-11  1:52     ` Shannon Zhao
  0 siblings, 0 replies; 18+ messages in thread
From: Shannon Zhao @ 2015-12-11  1:52 UTC (permalink / raw)
  To: Igor Mammedov
  Cc: wei, peter.maydell, graeme.gregory, mst, qemu-devel,
	peter.huangpeng, qemu-arm, shannon.zhao



On 2015/12/11 4:09, Igor Mammedov wrote:
> On Mon, 7 Dec 2015 15:39:50 +0800
> Shannon Zhao <zhaoshenglong@huawei.com> wrote:
> 
>> > From: Shannon Zhao <shannon.zhao@linaro.org>
>> > 
>> > Here GPIO pin 3 is used for Power Button, add _E03 in ACPI DSDT table.
>> > 
>> > Signed-off-by: Shannon Zhao <zhaoshenglong@huawei.com>
>> > Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
>> > Tested-by: Wei Huang <wei@redhat.com>
>> > ---
>> >  hw/arm/virt-acpi-build.c | 14 ++++++++++++++
>> >  1 file changed, 14 insertions(+)
>> > 
>> > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
>> > index 1424672..d693135 100644
>> > --- a/hw/arm/virt-acpi-build.c
>> > +++ b/hw/arm/virt-acpi-build.c
>> > @@ -338,6 +338,20 @@ static void acpi_dsdt_add_gpio(Aml *scope, const
>> > MemMapEntry *gpio_memmap, aml_append(crs, aml_interrupt(AML_CONSUMER,
>> > AML_LEVEL, AML_ACTIVE_HIGH, AML_EXCLUSIVE, gpio_irq));
>> >      aml_append(dev, aml_name_decl("_CRS", crs));
>> > +
>> > +    Aml *aei = aml_resource_template();
>> > +    /* Pin 3 for power button */
>> > +    const uint32_t pin_list[1] = {3};
>> > +    aml_append(aei, aml_gpio_int(AML_CONSUMER_PRODUCER, AML_EDGE,
> looks like AML_CONSUMER_PRODUCER is wrong, ACPI6 spec says:
> "ResourceUsage is an optional argument and is assumed to be
> ResourceConsumer for this revision."
> 
Oh, yes. Will fix this later.
> 
>> > +                                 AML_ACTIVE_HIGH, AML_EXCLUSIVE,
>> > AML_PULL_UP, 0,
>> > +                                 pin_list, 1, "GPO0", NULL, 0));
>> > +    aml_append(dev, aml_name_decl("_AEI", aei));
>> > +
>> > +    /* _E03 is handle for power button */
>> > +    Aml *method = aml_method("_E03", 0);
>> > +    aml_append(method, aml_notify(aml_name(ACPI_POWER_BUTTON_DEVICE),
>> > +                                  aml_int(0x80)));
> could you include commit
> https://github.com/imammedo/qemu/commit/1b647d5534e8c8c8434574d1c0fe4c442b66c6b0
> in your series and rebase this patch to use a new am_method() signature.
> 
Sure
>> > +    aml_append(dev, method);
>> >      aml_append(scope, dev);
>> >  }
>> >  

-- 
Shannon

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2015-12-11  1:53 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-12-07  7:39 [Qemu-devel] [PATCH v4 0/8] Add system_powerdown support on ARM for ACPI and DT Shannon Zhao
2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 1/8] ARM: Virt: Add a GPIO controller Shannon Zhao
2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 2/8] ARM: ACPI: Add GPIO controller in ACPI DSDT table Shannon Zhao
2015-12-10 13:22   ` Igor Mammedov
2015-12-10 19:16     ` Wei Huang
2015-12-10 20:13       ` Igor Mammedov
2015-12-11  1:35         ` Shannon Zhao
2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 3/8] ARM: ACPI: Add power button device " Shannon Zhao
2015-12-10 20:23   ` Igor Mammedov
2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 4/8] ACPI: Add GPIO Connection Descriptor Shannon Zhao
2015-12-10 20:14   ` Igor Mammedov
2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 5/8] ACPI: Add aml_gpio_int() wrapper for GPIO Interrupt Connection Shannon Zhao
2015-12-10 20:16   ` Igor Mammedov
2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 6/8] ARM: ACPI: Add _E03 for Power Button Shannon Zhao
2015-12-10 20:09   ` Igor Mammedov
2015-12-11  1:52     ` Shannon Zhao
2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 7/8] ARM: Virt: Add QEMU powerdown notifier and hook it to GPIO Pin 3 Shannon Zhao
2015-12-07  7:39 ` [Qemu-devel] [PATCH v4 8/8] ARM: Virt: Add gpio-keys node for Poweroff using DT Shannon Zhao

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.