From nobody Sat Feb 7 05:14:46 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+54949+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+54949+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1582755147; cv=none; d=zohomail.com; s=zohoarc; b=EXhRfqnb5DwuCMkCf48LaG8IyMQjpaNv4hsdkiU2RKklweYzlHqfELXi21FTZ4mzGZHKTFco8zNX3x6zCeIAfIx5JkPWwMKcG/iEXj7ycojELKAWpCZBpfF5USxAu0+aOdeMdRKeH9cWQYdh2ROBd1HUTWjN+DKU+0OClts5/3w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1582755147; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=mFos/MUUhMcMU+Q1SqgbFRLWCEtms0XI2wJccA8ooaE=; b=Ac6TgVCbu1Bt1dM4gy8EaT6fjGNazujw9N71UPJBFxEQ+jaDgYlt/lR52hjZpfr84S654tQWKaU/wsk5M4XV9W7J7wCjc6sGnHOd0sedh0wwFoBDXs5H33s4qH94S5eLhjVnffDCvDhiUGvqKiXyLh7YP/qwp+XJRVpM623a2cM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+54949+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1582755147174258.45883527168496; Wed, 26 Feb 2020 14:12:27 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id 7cSVYY1788612xqtJTxiq9jr; Wed, 26 Feb 2020 14:12:26 -0800 X-Received: from us-smtp-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.81]) by mx.groups.io with SMTP id smtpd.web12.230.1582755145497386887 for ; Wed, 26 Feb 2020 14:12:25 -0800 X-Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-41-05awsdj3N_OrkE670A0_Qg-1; Wed, 26 Feb 2020 17:12:20 -0500 X-MC-Unique: 05awsdj3N_OrkE670A0_Qg-1 X-Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 52786DB61; Wed, 26 Feb 2020 22:12:19 +0000 (UTC) X-Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-185.ams2.redhat.com [10.36.116.185]) by smtp.corp.redhat.com (Postfix) with ESMTP id 93C63909E9; Wed, 26 Feb 2020 22:12:17 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Ard Biesheuvel , Igor Mammedov , Jiewen Yao , Jordan Justen , Michael Kinney , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [edk2-devel] [PATCH v2 07/16] OvmfPkg/CpuHotplugSmm: add hotplug register block helper functions Date: Wed, 26 Feb 2020 23:11:47 +0100 Message-Id: <20200226221156.29589-8-lersek@redhat.com> In-Reply-To: <20200226221156.29589-1-lersek@redhat.com> References: <20200226221156.29589-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,lersek@redhat.com X-Gm-Message-State: HgHC6TyV1yOKKH63fi7z1Jmhx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1582755146; bh=mFos/MUUhMcMU+Q1SqgbFRLWCEtms0XI2wJccA8ooaE=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=NIzdxOc4wX0THw/nNrvkqsoofW7bA3aais/ywXDt9k49gN6yOA4/iuNj2nPk7z2Swgy M+fQIZ2/PRWqJMYRAjQtzVJDn5zaxIqsXkDL5n/UIVoOsEuU10IA2qvvAmL0YzqywAj4H 7F6TLNbqW/UKKV5P9Fk1Al6MtCRtJ9YSmXc= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Add a handful of simple functions for accessing QEMU's hotplug registers more conveniently. These functions thinly wrap some of the registers described in "docs/specs/acpi_cpu_hotplug.txt" in the QEMU tree. The functions hang (by design) if they encounter an internal failure. Cc: Ard Biesheuvel Cc: Igor Mammedov Cc: Jiewen Yao Cc: Jordan Justen Cc: Michael Kinney Cc: Philippe Mathieu-Daud=C3=A9 Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1512 Signed-off-by: Laszlo Ersek Acked-by: Ard Biesheuvel Reviewed-by: Ard Biesheuvel Reviewed-by: Philippe Mathieu-Daude --- Notes: v2: =20 - Pick up Ard's Acked-by, which is conditional on approval from Intel reviewers on Cc. (I'd like to save Ard the churn of re-acking unmodified patches.) OvmfPkg/CpuHotplugSmm/CpuHotplugSmm.inf | 2 + OvmfPkg/CpuHotplugSmm/QemuCpuhp.h | 47 +++++++ OvmfPkg/CpuHotplugSmm/QemuCpuhp.c | 136 ++++++++++++++++++++ 3 files changed, 185 insertions(+) diff --git a/OvmfPkg/CpuHotplugSmm/CpuHotplugSmm.inf b/OvmfPkg/CpuHotplugSm= m/CpuHotplugSmm.inf index fa70858a8dab..ac4ca4c1f4f2 100644 --- a/OvmfPkg/CpuHotplugSmm/CpuHotplugSmm.inf +++ b/OvmfPkg/CpuHotplugSmm/CpuHotplugSmm.inf @@ -4,44 +4,46 @@ # Copyright (c) 2020, Red Hat, Inc. # # SPDX-License-Identifier: BSD-2-Clause-Patent ## =20 [Defines] INF_VERSION =3D 1.29 PI_SPECIFICATION_VERSION =3D 0x00010046 # P= I-1.7.0 BASE_NAME =3D CpuHotplugSmm FILE_GUID =3D 84EEA114-C6BE-4445-8F90-51D97863E363 MODULE_TYPE =3D DXE_SMM_DRIVER ENTRY_POINT =3D CpuHotplugEntry =20 # # The following information is for reference only and not required by the = build # tools. # # VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] CpuHotplug.c + QemuCpuhp.c + QemuCpuhp.h =20 [Packages] MdePkg/MdePkg.dec OvmfPkg/OvmfPkg.dec =20 [LibraryClasses] BaseLib DebugLib MmServicesTableLib PcdLib UefiDriverEntryPoint =20 [Protocols] gEfiMmCpuIoProtocolGuid ## CON= SUMES =20 [Pcd] gUefiOvmfPkgTokenSpaceGuid.PcdQ35SmramAtDefaultSmbase ## CON= SUMES =20 [FeaturePcd] gUefiOvmfPkgTokenSpaceGuid.PcdSmmSmramRequire ## CON= SUMES =20 [Depex] diff --git a/OvmfPkg/CpuHotplugSmm/QemuCpuhp.h b/OvmfPkg/CpuHotplugSmm/Qemu= Cpuhp.h new file mode 100644 index 000000000000..82f88f0b73bb --- /dev/null +++ b/OvmfPkg/CpuHotplugSmm/QemuCpuhp.h @@ -0,0 +1,47 @@ +/** @file + Simple wrapper functions that access QEMU's modern CPU hotplug register + block. + + These functions thinly wrap some of the registers described in + "docs/specs/acpi_cpu_hotplug.txt" in the QEMU source. IO Ports are acces= sed + via EFI_MM_CPU_IO_PROTOCOL. If a protocol call fails, these functions do= n't + return. + + Copyright (c) 2020, Red Hat, Inc. + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef QEMU_CPUHP_H_ +#define QEMU_CPUHP_H_ + +#include // EFI_MM_CPU_IO_PROTOCOL + +UINT32 +QemuCpuhpReadCommandData2 ( + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo + ); + +UINT8 +QemuCpuhpReadCpuStatus ( + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo + ); + +UINT32 +QemuCpuhpReadCommandData ( + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo + ); + +VOID +QemuCpuhpWriteCpuSelector ( + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, + IN UINT32 Selector + ); + +VOID +QemuCpuhpWriteCommand ( + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, + IN UINT8 Command + ); + +#endif // QEMU_CPUHP_H_ diff --git a/OvmfPkg/CpuHotplugSmm/QemuCpuhp.c b/OvmfPkg/CpuHotplugSmm/Qemu= Cpuhp.c new file mode 100644 index 000000000000..31e46f51934a --- /dev/null +++ b/OvmfPkg/CpuHotplugSmm/QemuCpuhp.c @@ -0,0 +1,136 @@ +/** @file + Simple wrapper functions that access QEMU's modern CPU hotplug register + block. + + These functions thinly wrap some of the registers described in + "docs/specs/acpi_cpu_hotplug.txt" in the QEMU source. IO Ports are acces= sed + via EFI_MM_CPU_IO_PROTOCOL. If a protocol call fails, these functions do= n't + return. + + Copyright (c) 2020, Red Hat, Inc. + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include // ICH9_CPU_HOTPLUG_BASE +#include // QEMU_CPUHP_R_CMD_DATA2 +#include // CpuDeadLoop() +#include // DEBUG() + +#include "QemuCpuhp.h" + +UINT32 +QemuCpuhpReadCommandData2 ( + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo + ) +{ + UINT32 CommandData2; + EFI_STATUS Status; + + CommandData2 =3D 0; + Status =3D MmCpuIo->Io.Read ( + MmCpuIo, + MM_IO_UINT32, + ICH9_CPU_HOTPLUG_BASE + QEMU_CPUHP_R_CMD_DATA2, + 1, + &CommandData2 + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: %r\n", __FUNCTION__, Status)); + ASSERT (FALSE); + CpuDeadLoop (); + } + return CommandData2; +} + +UINT8 +QemuCpuhpReadCpuStatus ( + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo + ) +{ + UINT8 CpuStatus; + EFI_STATUS Status; + + CpuStatus =3D 0; + Status =3D MmCpuIo->Io.Read ( + MmCpuIo, + MM_IO_UINT8, + ICH9_CPU_HOTPLUG_BASE + QEMU_CPUHP_R_CPU_STAT, + 1, + &CpuStatus + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: %r\n", __FUNCTION__, Status)); + ASSERT (FALSE); + CpuDeadLoop (); + } + return CpuStatus; +} + +UINT32 +QemuCpuhpReadCommandData ( + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo + ) +{ + UINT32 CommandData; + EFI_STATUS Status; + + CommandData =3D 0; + Status =3D MmCpuIo->Io.Read ( + MmCpuIo, + MM_IO_UINT32, + ICH9_CPU_HOTPLUG_BASE + QEMU_CPUHP_RW_CMD_DATA, + 1, + &CommandData + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: %r\n", __FUNCTION__, Status)); + ASSERT (FALSE); + CpuDeadLoop (); + } + return CommandData; +} + +VOID +QemuCpuhpWriteCpuSelector ( + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, + IN UINT32 Selector + ) +{ + EFI_STATUS Status; + + Status =3D MmCpuIo->Io.Write ( + MmCpuIo, + MM_IO_UINT32, + ICH9_CPU_HOTPLUG_BASE + QEMU_CPUHP_W_CPU_SEL, + 1, + &Selector + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: %r\n", __FUNCTION__, Status)); + ASSERT (FALSE); + CpuDeadLoop (); + } +} + +VOID +QemuCpuhpWriteCommand ( + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, + IN UINT8 Command + ) +{ + EFI_STATUS Status; + + Status =3D MmCpuIo->Io.Write ( + MmCpuIo, + MM_IO_UINT8, + ICH9_CPU_HOTPLUG_BASE + QEMU_CPUHP_W_CMD, + 1, + &Command + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: %r\n", __FUNCTION__, Status)); + ASSERT (FALSE); + CpuDeadLoop (); + } +} --=20 2.19.1.3.g30247aa5d201 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#54949): https://edk2.groups.io/g/devel/message/54949 Mute This Topic: https://groups.io/mt/71575178/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-