* [PATCH v3 0/2] Add FDT table support with acpi ged pm register
@ 2024-09-18 1:42 Bibo Mao
2024-09-18 1:42 ` [PATCH v3 1/2] acpi: ged: Add macro for acpi sleep control register Bibo Mao
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Bibo Mao @ 2024-09-18 1:42 UTC (permalink / raw)
To: Michael S . Tsirkin, Igor Mammedov, Song Gao
Cc: Ani Sinha, Jiaxun Yang, Jason A . Donenfeld,
Thomas Weißschuh, qemu-devel
ACPI ged is used for power management on LoongArch virt platform, in
general it is parsed from acpi table. However if system boot directly from
elf kernel, no UEFI bios is provided and acpi table cannot be used also.
Here acpi ged pm register is exposed with FDT table, it is compatbile
with syscon method in FDT table, only that acpi ged pm register is accessed
with 8-bit mode, rather with 32-bit mode.
---
v2 ... v3:
1. Keep orginal macro name ACPI_GED_SLP_TYP_S5 unchanged, renaming
ACPI_GED_SLP_TYPx_y with ACPI_GED_SLP_TYP_y
2. Add acpi chapter reference with notation
v1 ... v2:
1. Modify name of macro for acpi ged register from ACPI spec, and also add
comments for macro definition.
---
Bibo Mao (2):
acpi: ged: Add macro for acpi sleep control register
hw/loongarch/virt: Add FDT table support with acpi ged pm register
hw/acpi/generic_event_device.c | 6 ++--
hw/loongarch/virt.c | 39 ++++++++++++++++++++++++++
include/hw/acpi/generic_event_device.h | 7 +++--
3 files changed, 47 insertions(+), 5 deletions(-)
base-commit: 2b81c046252fbfb375ad30632362fc16e6e22bd5
--
2.39.3
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3 1/2] acpi: ged: Add macro for acpi sleep control register
2024-09-18 1:42 [PATCH v3 0/2] Add FDT table support with acpi ged pm register Bibo Mao
@ 2024-09-18 1:42 ` Bibo Mao
2024-09-18 12:21 ` Igor Mammedov
2024-09-18 1:42 ` [PATCH v3 2/2] hw/loongarch/virt: Add FDT table support with acpi ged pm register Bibo Mao
2024-09-29 7:45 ` [PATCH v3 0/2] " gaosong
2 siblings, 1 reply; 6+ messages in thread
From: Bibo Mao @ 2024-09-18 1:42 UTC (permalink / raw)
To: Michael S . Tsirkin, Igor Mammedov, Song Gao
Cc: Ani Sinha, Jiaxun Yang, Jason A . Donenfeld,
Thomas Weißschuh, qemu-devel
Macro definition is added for acpi sleep control register, ged emulation
driver can use the macro , also it can be used in FDT table if ged is
exposed with FDT table.
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
---
hw/acpi/generic_event_device.c | 6 +++---
include/hw/acpi/generic_event_device.h | 7 +++++--
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c
index 15b4c3ebbf..d00f5a6c1c 100644
--- a/hw/acpi/generic_event_device.c
+++ b/hw/acpi/generic_event_device.c
@@ -201,9 +201,9 @@ static void ged_regs_write(void *opaque, hwaddr addr, uint64_t data,
switch (addr) {
case ACPI_GED_REG_SLEEP_CTL:
- slp_typ = (data >> 2) & 0x07;
- slp_en = (data >> 5) & 0x01;
- if (slp_en && slp_typ == 5) {
+ slp_typ = (data >> ACPI_GED_SLP_TYP_POS) & ACPI_GED_SLP_TYP_MASK;
+ slp_en = !!(data & ACPI_GED_SLP_EN);
+ if (slp_en && slp_typ == ACPI_GED_SLP_TYP_S5) {
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
}
return;
diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h
index 40af3550b5..d2dac87b4a 100644
--- a/include/hw/acpi/generic_event_device.h
+++ b/include/hw/acpi/generic_event_device.h
@@ -81,8 +81,11 @@ OBJECT_DECLARE_SIMPLE_TYPE(AcpiGedState, ACPI_GED)
/* ACPI_GED_REG_RESET value for reset*/
#define ACPI_GED_RESET_VALUE 0x42
-/* ACPI_GED_REG_SLEEP_CTL.SLP_TYP value for S5 (aka poweroff) */
-#define ACPI_GED_SLP_TYP_S5 0x05
+/* [ACPI 5.0 Chapter 4.8.3.7] Sleep Control and Status Register */
+#define ACPI_GED_SLP_TYP_POS 0x2 /* SLP_TYPx Bit Offset */
+#define ACPI_GED_SLP_TYP_MASK 0x07 /* SLP_TYPx 3-bit mask */
+#define ACPI_GED_SLP_TYP_S5 0x05 /* System _S5 State (Soft Off) */
+#define ACPI_GED_SLP_EN 0x20 /* SLP_EN write-only bit */
#define GED_DEVICE "GED"
#define AML_GED_EVT_REG "EREG"
--
2.39.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 2/2] hw/loongarch/virt: Add FDT table support with acpi ged pm register
2024-09-18 1:42 [PATCH v3 0/2] Add FDT table support with acpi ged pm register Bibo Mao
2024-09-18 1:42 ` [PATCH v3 1/2] acpi: ged: Add macro for acpi sleep control register Bibo Mao
@ 2024-09-18 1:42 ` Bibo Mao
2024-09-29 7:45 ` gaosong
2024-09-29 7:45 ` [PATCH v3 0/2] " gaosong
2 siblings, 1 reply; 6+ messages in thread
From: Bibo Mao @ 2024-09-18 1:42 UTC (permalink / raw)
To: Michael S . Tsirkin, Igor Mammedov, Song Gao
Cc: Ani Sinha, Jiaxun Yang, Jason A . Donenfeld,
Thomas Weißschuh, qemu-devel
ACPI ged is used for power management on LoongArch virt platform, in
general it is parsed from acpi table. However if system boot directly from
elf kernel, no UEFI bios is provided and acpi table cannot be used also.
Here acpi ged pm register is exposed with FDT table, it is compatbile
with syscon method in FDT table, only that acpi ged pm register is accessed
with 8-bit mode, rather with 32-bit mode.
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
---
hw/loongarch/virt.c | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c
index 81b1f9486f..1b85ba80c9 100644
--- a/hw/loongarch/virt.c
+++ b/hw/loongarch/virt.c
@@ -280,6 +280,44 @@ static void fdt_add_rtc_node(LoongArchVirtMachineState *lvms,
g_free(nodename);
}
+static void fdt_add_ged_reset(LoongArchVirtMachineState *lvms)
+{
+ char *name;
+ uint32_t ged_handle;
+ MachineState *ms = MACHINE(lvms);
+ hwaddr base = VIRT_GED_REG_ADDR;
+ hwaddr size = ACPI_GED_REG_COUNT;
+
+ ged_handle = qemu_fdt_alloc_phandle(ms->fdt);
+ name = g_strdup_printf("/ged@%" PRIx64, base);
+ qemu_fdt_add_subnode(ms->fdt, name);
+ qemu_fdt_setprop_string(ms->fdt, name, "compatible", "syscon");
+ qemu_fdt_setprop_cells(ms->fdt, name, "reg", 0x0, base, 0x0, size);
+ /* 8 bit registers */
+ qemu_fdt_setprop_cell(ms->fdt, name, "reg-shift", 0);
+ qemu_fdt_setprop_cell(ms->fdt, name, "reg-io-width", 1);
+ qemu_fdt_setprop_cell(ms->fdt, name, "phandle", ged_handle);
+ ged_handle = qemu_fdt_get_phandle(ms->fdt, name);
+ g_free(name);
+
+ name = g_strdup_printf("/reboot");
+ qemu_fdt_add_subnode(ms->fdt, name);
+ qemu_fdt_setprop_string(ms->fdt, name, "compatible", "syscon-reboot");
+ qemu_fdt_setprop_cell(ms->fdt, name, "regmap", ged_handle);
+ qemu_fdt_setprop_cell(ms->fdt, name, "offset", ACPI_GED_REG_RESET);
+ qemu_fdt_setprop_cell(ms->fdt, name, "value", ACPI_GED_RESET_VALUE);
+ g_free(name);
+
+ name = g_strdup_printf("/poweroff");
+ qemu_fdt_add_subnode(ms->fdt, name);
+ qemu_fdt_setprop_string(ms->fdt, name, "compatible", "syscon-poweroff");
+ qemu_fdt_setprop_cell(ms->fdt, name, "regmap", ged_handle);
+ qemu_fdt_setprop_cell(ms->fdt, name, "offset", ACPI_GED_REG_SLEEP_CTL);
+ qemu_fdt_setprop_cell(ms->fdt, name, "value", ACPI_GED_SLP_EN |
+ (ACPI_GED_SLP_TYP_S5 << ACPI_GED_SLP_TYP_POS));
+ g_free(name);
+}
+
static void fdt_add_uart_node(LoongArchVirtMachineState *lvms,
uint32_t *pch_pic_phandle, hwaddr base,
int irq, bool chosen)
@@ -737,6 +775,7 @@ static void virt_devices_init(DeviceState *pch_pic,
qdev_get_gpio_in(pch_pic,
VIRT_RTC_IRQ - VIRT_GSI_BASE));
fdt_add_rtc_node(lvms, pch_pic_phandle);
+ fdt_add_ged_reset(lvms);
/* acpi ged */
lvms->acpi_ged = create_acpi_ged(pch_pic, lvms);
--
2.39.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/2] acpi: ged: Add macro for acpi sleep control register
2024-09-18 1:42 ` [PATCH v3 1/2] acpi: ged: Add macro for acpi sleep control register Bibo Mao
@ 2024-09-18 12:21 ` Igor Mammedov
0 siblings, 0 replies; 6+ messages in thread
From: Igor Mammedov @ 2024-09-18 12:21 UTC (permalink / raw)
To: Bibo Mao
Cc: Michael S . Tsirkin, Song Gao, Ani Sinha, Jiaxun Yang,
Jason A . Donenfeld, Thomas Weißschuh, qemu-devel
On Wed, 18 Sep 2024 09:42:05 +0800
Bibo Mao <maobibo@loongson.cn> wrote:
> Macro definition is added for acpi sleep control register, ged emulation
> driver can use the macro , also it can be used in FDT table if ged is
> exposed with FDT table.
>
> Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> hw/acpi/generic_event_device.c | 6 +++---
> include/hw/acpi/generic_event_device.h | 7 +++++--
> 2 files changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c
> index 15b4c3ebbf..d00f5a6c1c 100644
> --- a/hw/acpi/generic_event_device.c
> +++ b/hw/acpi/generic_event_device.c
> @@ -201,9 +201,9 @@ static void ged_regs_write(void *opaque, hwaddr addr, uint64_t data,
>
> switch (addr) {
> case ACPI_GED_REG_SLEEP_CTL:
> - slp_typ = (data >> 2) & 0x07;
> - slp_en = (data >> 5) & 0x01;
> - if (slp_en && slp_typ == 5) {
> + slp_typ = (data >> ACPI_GED_SLP_TYP_POS) & ACPI_GED_SLP_TYP_MASK;
> + slp_en = !!(data & ACPI_GED_SLP_EN);
> + if (slp_en && slp_typ == ACPI_GED_SLP_TYP_S5) {
> qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
> }
> return;
> diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h
> index 40af3550b5..d2dac87b4a 100644
> --- a/include/hw/acpi/generic_event_device.h
> +++ b/include/hw/acpi/generic_event_device.h
> @@ -81,8 +81,11 @@ OBJECT_DECLARE_SIMPLE_TYPE(AcpiGedState, ACPI_GED)
> /* ACPI_GED_REG_RESET value for reset*/
> #define ACPI_GED_RESET_VALUE 0x42
>
> -/* ACPI_GED_REG_SLEEP_CTL.SLP_TYP value for S5 (aka poweroff) */
> -#define ACPI_GED_SLP_TYP_S5 0x05
> +/* [ACPI 5.0 Chapter 4.8.3.7] Sleep Control and Status Register */
> +#define ACPI_GED_SLP_TYP_POS 0x2 /* SLP_TYPx Bit Offset */
> +#define ACPI_GED_SLP_TYP_MASK 0x07 /* SLP_TYPx 3-bit mask */
> +#define ACPI_GED_SLP_TYP_S5 0x05 /* System _S5 State (Soft Off) */
> +#define ACPI_GED_SLP_EN 0x20 /* SLP_EN write-only bit */
>
> #define GED_DEVICE "GED"
> #define AML_GED_EVT_REG "EREG"
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 2/2] hw/loongarch/virt: Add FDT table support with acpi ged pm register
2024-09-18 1:42 ` [PATCH v3 2/2] hw/loongarch/virt: Add FDT table support with acpi ged pm register Bibo Mao
@ 2024-09-29 7:45 ` gaosong
0 siblings, 0 replies; 6+ messages in thread
From: gaosong @ 2024-09-29 7:45 UTC (permalink / raw)
To: Bibo Mao, Michael S . Tsirkin, Igor Mammedov
Cc: Ani Sinha, Jiaxun Yang, Jason A . Donenfeld,
Thomas Weißschuh, qemu-devel
在 2024/9/18 上午9:42, Bibo Mao 写道:
> ACPI ged is used for power management on LoongArch virt platform, in
> general it is parsed from acpi table. However if system boot directly from
> elf kernel, no UEFI bios is provided and acpi table cannot be used also.
>
> Here acpi ged pm register is exposed with FDT table, it is compatbile
> with syscon method in FDT table, only that acpi ged pm register is accessed
> with 8-bit mode, rather with 32-bit mode.
>
> Signed-off-by: Bibo Mao <maobibo@loongson.cn>
> ---
> hw/loongarch/virt.c | 39 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 39 insertions(+)
Reviewed-by: Song Gao <gaosong@loongson.cn>
Tested-by: Song Gao <gaosong@loongson.cn>
Thanks.
Song Gao
> diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c
> index 81b1f9486f..1b85ba80c9 100644
> --- a/hw/loongarch/virt.c
> +++ b/hw/loongarch/virt.c
> @@ -280,6 +280,44 @@ static void fdt_add_rtc_node(LoongArchVirtMachineState *lvms,
> g_free(nodename);
> }
>
> +static void fdt_add_ged_reset(LoongArchVirtMachineState *lvms)
> +{
> + char *name;
> + uint32_t ged_handle;
> + MachineState *ms = MACHINE(lvms);
> + hwaddr base = VIRT_GED_REG_ADDR;
> + hwaddr size = ACPI_GED_REG_COUNT;
> +
> + ged_handle = qemu_fdt_alloc_phandle(ms->fdt);
> + name = g_strdup_printf("/ged@%" PRIx64, base);
> + qemu_fdt_add_subnode(ms->fdt, name);
> + qemu_fdt_setprop_string(ms->fdt, name, "compatible", "syscon");
> + qemu_fdt_setprop_cells(ms->fdt, name, "reg", 0x0, base, 0x0, size);
> + /* 8 bit registers */
> + qemu_fdt_setprop_cell(ms->fdt, name, "reg-shift", 0);
> + qemu_fdt_setprop_cell(ms->fdt, name, "reg-io-width", 1);
> + qemu_fdt_setprop_cell(ms->fdt, name, "phandle", ged_handle);
> + ged_handle = qemu_fdt_get_phandle(ms->fdt, name);
> + g_free(name);
> +
> + name = g_strdup_printf("/reboot");
> + qemu_fdt_add_subnode(ms->fdt, name);
> + qemu_fdt_setprop_string(ms->fdt, name, "compatible", "syscon-reboot");
> + qemu_fdt_setprop_cell(ms->fdt, name, "regmap", ged_handle);
> + qemu_fdt_setprop_cell(ms->fdt, name, "offset", ACPI_GED_REG_RESET);
> + qemu_fdt_setprop_cell(ms->fdt, name, "value", ACPI_GED_RESET_VALUE);
> + g_free(name);
> +
> + name = g_strdup_printf("/poweroff");
> + qemu_fdt_add_subnode(ms->fdt, name);
> + qemu_fdt_setprop_string(ms->fdt, name, "compatible", "syscon-poweroff");
> + qemu_fdt_setprop_cell(ms->fdt, name, "regmap", ged_handle);
> + qemu_fdt_setprop_cell(ms->fdt, name, "offset", ACPI_GED_REG_SLEEP_CTL);
> + qemu_fdt_setprop_cell(ms->fdt, name, "value", ACPI_GED_SLP_EN |
> + (ACPI_GED_SLP_TYP_S5 << ACPI_GED_SLP_TYP_POS));
> + g_free(name);
> +}
> +
> static void fdt_add_uart_node(LoongArchVirtMachineState *lvms,
> uint32_t *pch_pic_phandle, hwaddr base,
> int irq, bool chosen)
> @@ -737,6 +775,7 @@ static void virt_devices_init(DeviceState *pch_pic,
> qdev_get_gpio_in(pch_pic,
> VIRT_RTC_IRQ - VIRT_GSI_BASE));
> fdt_add_rtc_node(lvms, pch_pic_phandle);
> + fdt_add_ged_reset(lvms);
>
> /* acpi ged */
> lvms->acpi_ged = create_acpi_ged(pch_pic, lvms);
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 0/2] Add FDT table support with acpi ged pm register
2024-09-18 1:42 [PATCH v3 0/2] Add FDT table support with acpi ged pm register Bibo Mao
2024-09-18 1:42 ` [PATCH v3 1/2] acpi: ged: Add macro for acpi sleep control register Bibo Mao
2024-09-18 1:42 ` [PATCH v3 2/2] hw/loongarch/virt: Add FDT table support with acpi ged pm register Bibo Mao
@ 2024-09-29 7:45 ` gaosong
2 siblings, 0 replies; 6+ messages in thread
From: gaosong @ 2024-09-29 7:45 UTC (permalink / raw)
To: Bibo Mao, Michael S . Tsirkin, Igor Mammedov
Cc: Ani Sinha, Jiaxun Yang, Jason A . Donenfeld,
Thomas Weißschuh, qemu-devel
在 2024/9/18 上午9:42, Bibo Mao 写道:
> ACPI ged is used for power management on LoongArch virt platform, in
> general it is parsed from acpi table. However if system boot directly from
> elf kernel, no UEFI bios is provided and acpi table cannot be used also.
>
> Here acpi ged pm register is exposed with FDT table, it is compatbile
> with syscon method in FDT table, only that acpi ged pm register is accessed
> with 8-bit mode, rather with 32-bit mode.
>
> ---
> v2 ... v3:
> 1. Keep orginal macro name ACPI_GED_SLP_TYP_S5 unchanged, renaming
> ACPI_GED_SLP_TYPx_y with ACPI_GED_SLP_TYP_y
> 2. Add acpi chapter reference with notation
>
> v1 ... v2:
> 1. Modify name of macro for acpi ged register from ACPI spec, and also add
> comments for macro definition.
> ---
> Bibo Mao (2):
> acpi: ged: Add macro for acpi sleep control register
> hw/loongarch/virt: Add FDT table support with acpi ged pm register
>
> hw/acpi/generic_event_device.c | 6 ++--
> hw/loongarch/virt.c | 39 ++++++++++++++++++++++++++
> include/hw/acpi/generic_event_device.h | 7 +++--
> 3 files changed, 47 insertions(+), 5 deletions(-)
>
>
> base-commit: 2b81c046252fbfb375ad30632362fc16e6e22bd5
Applied to loongarch-next
Thanks.
Song Gao
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-09-29 7:45 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-18 1:42 [PATCH v3 0/2] Add FDT table support with acpi ged pm register Bibo Mao
2024-09-18 1:42 ` [PATCH v3 1/2] acpi: ged: Add macro for acpi sleep control register Bibo Mao
2024-09-18 12:21 ` Igor Mammedov
2024-09-18 1:42 ` [PATCH v3 2/2] hw/loongarch/virt: Add FDT table support with acpi ged pm register Bibo Mao
2024-09-29 7:45 ` gaosong
2024-09-29 7:45 ` [PATCH v3 0/2] " gaosong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).