[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PULL 30/53] hw/acpi: Fix PM control register access
From: |
Igor Mammedov |
Subject: |
Re: [PULL 30/53] hw/acpi: Fix PM control register access |
Date: |
Mon, 26 Jun 2023 15:20:09 +0200 |
On Mon, 26 Jun 2023 08:29:19 -0400
"Michael S. Tsirkin" <mst@redhat.com> wrote:
> From: BALATON Zoltan <balaton@eik.bme.hu>
>
> On pegasos2 which has ACPI as part of VT8231 south bridge the board
> firmware writes PM control register by accessing the second byte so
> addr will be 1. This wasn't handled correctly and the write went to
> addr 0 instead. Remove the acpi_pm1_cnt_write() function which is used
> only once and does not take addr into account and handle non-zero
> address in acpi_pm_cnt_{read|write}. This fixes ACPI shutdown with
> pegasos2 firmware.
>
> The issue below is possibly related to the same memory core bug.
>
> Link: https://gitlab.com/qemu-project/qemu/-/issues/360
> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
> Message-Id: <20230607200125.A9988746377@zero.eik.bme.hu>
> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Somewhere you lost mine
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> hw/acpi/core.c | 56 +++++++++++++++++++++++++-------------------------
> 1 file changed, 28 insertions(+), 28 deletions(-)
>
> diff --git a/hw/acpi/core.c b/hw/acpi/core.c
> index 6da275c599..00b1e79a30 100644
> --- a/hw/acpi/core.c
> +++ b/hw/acpi/core.c
> @@ -551,8 +551,35 @@ void acpi_pm_tmr_reset(ACPIREGS *ar)
> }
>
> /* ACPI PM1aCNT */
> -static void acpi_pm1_cnt_write(ACPIREGS *ar, uint16_t val)
> +void acpi_pm1_cnt_update(ACPIREGS *ar,
> + bool sci_enable, bool sci_disable)
> {
> + /* ACPI specs 3.0, 4.7.2.5 */
> + if (ar->pm1.cnt.acpi_only) {
> + return;
> + }
> +
> + if (sci_enable) {
> + ar->pm1.cnt.cnt |= ACPI_BITMASK_SCI_ENABLE;
> + } else if (sci_disable) {
> + ar->pm1.cnt.cnt &= ~ACPI_BITMASK_SCI_ENABLE;
> + }
> +}
> +
> +static uint64_t acpi_pm_cnt_read(void *opaque, hwaddr addr, unsigned width)
> +{
> + ACPIREGS *ar = opaque;
> + return ar->pm1.cnt.cnt >> addr * 8;
> +}
> +
> +static void acpi_pm_cnt_write(void *opaque, hwaddr addr, uint64_t val,
> + unsigned width)
> +{
> + ACPIREGS *ar = opaque;
> +
> + if (addr == 1) {
> + val = val << 8 | (ar->pm1.cnt.cnt & 0xff);
> + }
> ar->pm1.cnt.cnt = val & ~(ACPI_BITMASK_SLEEP_ENABLE);
>
> if (val & ACPI_BITMASK_SLEEP_ENABLE) {
> @@ -575,33 +602,6 @@ static void acpi_pm1_cnt_write(ACPIREGS *ar, uint16_t
> val)
> }
> }
>
> -void acpi_pm1_cnt_update(ACPIREGS *ar,
> - bool sci_enable, bool sci_disable)
> -{
> - /* ACPI specs 3.0, 4.7.2.5 */
> - if (ar->pm1.cnt.acpi_only) {
> - return;
> - }
> -
> - if (sci_enable) {
> - ar->pm1.cnt.cnt |= ACPI_BITMASK_SCI_ENABLE;
> - } else if (sci_disable) {
> - ar->pm1.cnt.cnt &= ~ACPI_BITMASK_SCI_ENABLE;
> - }
> -}
> -
> -static uint64_t acpi_pm_cnt_read(void *opaque, hwaddr addr, unsigned width)
> -{
> - ACPIREGS *ar = opaque;
> - return ar->pm1.cnt.cnt;
> -}
> -
> -static void acpi_pm_cnt_write(void *opaque, hwaddr addr, uint64_t val,
> - unsigned width)
> -{
> - acpi_pm1_cnt_write(opaque, val);
> -}
> -
> static const MemoryRegionOps acpi_pm_cnt_ops = {
> .read = acpi_pm_cnt_read,
> .write = acpi_pm_cnt_write,
- [PULL 13/53] softmmu: Introduce qemu_target_page_mask() helper, (continued)
- [PULL 13/53] softmmu: Introduce qemu_target_page_mask() helper, Michael S. Tsirkin, 2023/06/26
- [PULL 15/53] hw/scsi: Rearrange meson.build, Michael S. Tsirkin, 2023/06/26
- [PULL 18/53] hw/virtio/virtio-mem: Use qemu_ram_get_fd() helper, Michael S. Tsirkin, 2023/06/26
- [PULL 14/53] hw/scsi: Introduce VHOST_SCSI_COMMON symbol in Kconfig, Michael S. Tsirkin, 2023/06/26
- [PULL 23/53] vhost: release memory_listener object in error path, Michael S. Tsirkin, 2023/06/26
- [PULL 24/53] vhost: release virtqueue objects in error path, Michael S. Tsirkin, 2023/06/26
- [PULL 25/53] pci: ROM preallocation for incoming migration, Michael S. Tsirkin, 2023/06/26
- [PULL 16/53] hw/scsi: Rename target-specific source set as 'specific_virtio_scsi_ss', Michael S. Tsirkin, 2023/06/26
- [PULL 27/53] vdpa: return errno in vhost_vdpa_get_vring_group error, Michael S. Tsirkin, 2023/06/26
- [PULL 30/53] hw/acpi: Fix PM control register access, Michael S. Tsirkin, 2023/06/26
- Re: [PULL 30/53] hw/acpi: Fix PM control register access,
Igor Mammedov <=
- [PULL 38/53] vdpa: reuse virtio_vdev_has_feature(), Michael S. Tsirkin, 2023/06/26
- [PULL 20/53] hw/virtio/virtio-iommu: Use target-agnostic qemu_target_page_mask(), Michael S. Tsirkin, 2023/06/26
- [PULL 37/53] include/hw/virtio: make some VirtIODevice const, Michael S. Tsirkin, 2023/06/26
- [PULL 21/53] hw/virtio: Remove unnecessary 'virtio-access.h' header, Michael S. Tsirkin, 2023/06/26
- [PULL 26/53] virtio-mem: Simplify bitmap handling and virtio_mem_set_block_state(), Michael S. Tsirkin, 2023/06/26
- [PULL 28/53] vdpa: move CVQ isolation check to net_init_vhost_vdpa, Michael S. Tsirkin, 2023/06/26
- [PULL 29/53] cryptodev: fix memory leak during stats query, Michael S. Tsirkin, 2023/06/26
- [PULL 31/53] hw/i386/pc: Default to use SMBIOS 3.0 for newer machine models, Michael S. Tsirkin, 2023/06/26