From nobody Tue Feb 10 01:14:53 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+80230+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+80230+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1630673774; cv=none; d=zohomail.com; s=zohoarc; b=FeWG7gIN85l9PotBd7nBlsqDDrcxM8tzrOX0zQi7t1iqwc0k+8Er7wdxzFDC7V1N2liRQXdr979m36w2KFvKRDzKAGzGa+fRBag5sXlmclr6zNrnOM6Oc56p6JHGm3m4H7uDBdK86I2AUswMDY3XNM20XsB7Pn1a9gpVnC3h5bI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630673774; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=CJ8eEdVdjfMTuBCK+Hbp7VEMToDB/0LRmM0D9DrqH5A=; b=m7n8/Zy47SHEgYCjw8zj7VE7YVgEPExNBgSyCzhKpUM1AyVD8/h86Op1Xi8NOFHzBGye5AnNsefWhHFVL2VYpkYlchbroPcJq1c0RoMiP6lrN9D98k4JFImgTPU3HHxTA20jzk7XcOEttFCP2LOxv3Jzl9Abin7/2RvhMFl1ubE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+80230+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1630673774180934.5295762331107; Fri, 3 Sep 2021 05:56:14 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id s0krYY1788612xldeII1H4HU; Fri, 03 Sep 2021 05:56:13 -0700 X-Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.groups.io with SMTP id smtpd.web12.3902.1630673773066532805 for ; Fri, 03 Sep 2021 05:56:13 -0700 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-189-RuvS5ZRYOvKXZSrH_UTbkg-1; Fri, 03 Sep 2021 08:56:11 -0400 X-MC-Unique: RuvS5ZRYOvKXZSrH_UTbkg-1 X-Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E7F32802C87; Fri, 3 Sep 2021 12:56:09 +0000 (UTC) X-Received: from sirius.home.kraxel.org (unknown [10.39.192.91]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8CF4E60BF1; Fri, 3 Sep 2021 12:56:02 +0000 (UTC) X-Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 2882818009C1; Fri, 3 Sep 2021 14:55:33 +0200 (CEST) From: "Gerd Hoffmann" To: devel@edk2.groups.io Cc: Gerd Hoffmann , Jiewen Yao Subject: [edk2-devel] [PATCH v2 14/19] OvmfPkg/ResetSystemLib: add driver for microvm Date: Fri, 3 Sep 2021 14:55:27 +0200 Message-Id: <20210903125532.393574-15-kraxel@redhat.com> In-Reply-To: <20210903125532.393574-1-kraxel@redhat.com> References: <20210903125532.393574-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: 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,kraxel@redhat.com X-Gm-Message-State: wq9phEpotJj2wrjtGnMtxujEx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1630673773; bh=adX2pdftfDDdCQVRBkd1FCJ45r8tBPcufioZB66UqQo=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=JNynkrFSMUhujBl+Qxsd+sz6Vk6h181h3gzn+fu/aaI/gmH/N0VESo6CXdhUvk7W88Z IQj9K9zSR6ZGZkzjvbILIfsuWozn7Wx/xvRE2o0uOpdsbJPA53zjhfCw8yGKFELMtP8P/ Sdzs1959VU+qfLFb2yFdA8q8S/e3Iv/5ILM= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1630673775012100001 Content-Type: text/plain; charset="utf-8" Uses the generic event device to reset and poweroff. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3599 Signed-off-by: Gerd Hoffmann Acked-by: Jiewen Yao --- OvmfPkg/Microvm/MicrovmX64.dsc | 14 +-- .../BaseResetSystemLibMicrovm.inf | 37 ++++++++ .../DxeResetSystemLibMicrovm.inf | 40 +++++++++ OvmfPkg/Include/IndustryStandard/Microvm.h | 7 ++ OvmfPkg/Include/OvmfPlatforms.h | 1 + .../ResetSystemLib/DxeResetSystemLibMicrovm.c | 49 ++++++++++ .../ResetSystemLib/ResetSystemLibMicrovm.c | 89 +++++++++++++++++++ OvmfPkg/PlatformPei/Platform.c | 1 + 8 files changed, 231 insertions(+), 7 deletions(-) create mode 100644 OvmfPkg/Library/ResetSystemLib/BaseResetSystemLibMicrov= m.inf create mode 100644 OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm= .inf create mode 100644 OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm= .c create mode 100644 OvmfPkg/Library/ResetSystemLib/ResetSystemLibMicrovm.c diff --git a/OvmfPkg/Microvm/MicrovmX64.dsc b/OvmfPkg/Microvm/MicrovmX64.dsc index 019b50de7d8f..3cc951f0d985 100644 --- a/OvmfPkg/Microvm/MicrovmX64.dsc +++ b/OvmfPkg/Microvm/MicrovmX64.dsc @@ -128,7 +128,7 @@ [SkuIds] [LibraryClasses] PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf TimerLib|MdePkg/Library/SecPeiDxeTimerLibCpu/SecPeiDxeTimerLibCpu.inf - ResetSystemLib|OvmfPkg/Library/ResetSystemLib/BaseResetSystemLib.inf + ResetSystemLib|OvmfPkg/Library/ResetSystemLib/BaseResetSystemLibMicrovm.= inf PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr.inf BaseLib|MdePkg/Library/BaseLib/BaseLib.inf @@ -318,7 +318,7 @@ [LibraryClasses.common.DXE_CORE] =20 [LibraryClasses.common.DXE_RUNTIME_DRIVER] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf - ResetSystemLib|OvmfPkg/Library/ResetSystemLib/DxeResetSystemLib.inf + ResetSystemLib|OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.i= nf HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAll= ocationLib.inf @@ -336,7 +336,7 @@ [LibraryClasses.common.DXE_RUNTIME_DRIVER] =20 [LibraryClasses.common.UEFI_DRIVER] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf - ResetSystemLib|OvmfPkg/Library/ResetSystemLib/DxeResetSystemLib.inf + ResetSystemLib|OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.i= nf HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAll= ocationLib.inf @@ -351,7 +351,7 @@ [LibraryClasses.common.UEFI_DRIVER] =20 [LibraryClasses.common.DXE_DRIVER] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf - ResetSystemLib|OvmfPkg/Library/ResetSystemLib/DxeResetSystemLib.inf + ResetSystemLib|OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.i= nf HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAll= ocationLib.inf ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeRepor= tStatusCodeLib.inf @@ -376,7 +376,7 @@ [LibraryClasses.common.DXE_DRIVER] =20 [LibraryClasses.common.UEFI_APPLICATION] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf - ResetSystemLib|OvmfPkg/Library/ResetSystemLib/DxeResetSystemLib.inf + ResetSystemLib|OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.i= nf HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAll= ocationLib.inf ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeRepor= tStatusCodeLib.inf @@ -389,7 +389,7 @@ [LibraryClasses.common.UEFI_APPLICATION] =20 [LibraryClasses.common.DXE_SMM_DRIVER] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf - ResetSystemLib|OvmfPkg/Library/ResetSystemLib/DxeResetSystemLib.inf + ResetSystemLib|OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.i= nf MemoryAllocationLib|MdePkg/Library/SmmMemoryAllocationLib/SmmMemoryAlloc= ationLib.inf ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeRepor= tStatusCodeLib.inf HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf @@ -410,7 +410,7 @@ [LibraryClasses.common.DXE_SMM_DRIVER] =20 [LibraryClasses.common.SMM_CORE] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf - ResetSystemLib|OvmfPkg/Library/ResetSystemLib/DxeResetSystemLib.inf + ResetSystemLib|OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.i= nf SmmCorePlatformHookLib|MdeModulePkg/Library/SmmCorePlatformHookLibNull/S= mmCorePlatformHookLibNull.inf MemoryAllocationLib|MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/Pi= SmmCoreMemoryAllocationLib.inf ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeRepor= tStatusCodeLib.inf diff --git a/OvmfPkg/Library/ResetSystemLib/BaseResetSystemLibMicrovm.inf b= /OvmfPkg/Library/ResetSystemLib/BaseResetSystemLibMicrovm.inf new file mode 100644 index 000000000000..564b1d3022a6 --- /dev/null +++ b/OvmfPkg/Library/ResetSystemLib/BaseResetSystemLibMicrovm.inf @@ -0,0 +1,37 @@ +## @file +# DXE library instance for ResetSystem library class for OVMF +# +# Copyright (C) 2020, Red Hat, Inc. +# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 1.29 + BASE_NAME =3D ResetSystemLibMicrovm + FILE_GUID =3D 7cd630bb-f581-4d1a-97ca-9dbc900e26a4 + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D ResetSystemLib|SEC PEI_CORE PEIM DXE_= CORE + +# +# The following information is for reference only and not required by the = build +# tools. +# +# VALID_ARCHITECTURES =3D IA32 X64 +# + +[Sources] + ResetSystemLibMicrovm.c + +[Packages] + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + OvmfPkg/OvmfPkg.dec + +[LibraryClasses] + BaseLib + DebugLib + IoLib + TimerLib diff --git a/OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.inf b/= OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.inf new file mode 100644 index 000000000000..ac9c2599642c --- /dev/null +++ b/OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.inf @@ -0,0 +1,40 @@ +## @file +# DXE library instance for ResetSystem library class for OVMF +# +# Copyright (C) 2020, Red Hat, Inc. +# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 1.29 + BASE_NAME =3D ResetSystemLibMicrovm + FILE_GUID =3D 3d6faf60-804a-4ca9-a36a-1a92416919d0 + MODULE_TYPE =3D DXE_RUNTIME_DRIVER + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D ResetSystemLib|DXE_DRIVER DXE_RUNTIME= _DRIVER SMM_CORE DXE_SMM_DRIVER UEFI_DRIVER UEFI_APPLICATION + CONSTRUCTOR =3D DxeResetSystemLibMicrovmConstructor + +# +# The following information is for reference only and not required by the = build +# tools. +# +# VALID_ARCHITECTURES =3D IA32 X64 +# + +[Sources] + ResetSystemLibMicrovm.c + DxeResetSystemLibMicrovm.c + +[Packages] + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + OvmfPkg/OvmfPkg.dec + +[LibraryClasses] + BaseLib + DebugLib + DxeServicesTableLib + IoLib + TimerLib diff --git a/OvmfPkg/Include/IndustryStandard/Microvm.h b/OvmfPkg/Include/I= ndustryStandard/Microvm.h index ec1e1e0cab1d..6b715099ff21 100644 --- a/OvmfPkg/Include/IndustryStandard/Microvm.h +++ b/OvmfPkg/Include/IndustryStandard/Microvm.h @@ -3,4 +3,11 @@ =20 #define MICROVM_PSEUDO_DEVICE_ID 0xfff1 =20 +/* generic event device */ +#define MICROVM_GED_MMIO_BASE 0xfea00000 +#define MICROVM_GED_MMIO_BASE_REGS (MICROVM_GED_MMIO_BASE + 0x200) +#define MICROVM_ACPI_GED_REG_SLEEP_CTL 0x00 +#define MICROVM_ACPI_GED_REG_RESET 0x02 +#define MICROVM_ACPI_GED_RESET_VALUE 0x42 + #endif // __MICROVM_H__ diff --git a/OvmfPkg/Include/OvmfPlatforms.h b/OvmfPkg/Include/OvmfPlatform= s.h index 77dd818e3002..3b85593b7063 100644 --- a/OvmfPkg/Include/OvmfPlatforms.h +++ b/OvmfPkg/Include/OvmfPlatforms.h @@ -15,6 +15,7 @@ #include #include #include +#include =20 // // OVMF Host Bridge DID Address diff --git a/OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.c b/Ov= mfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.c new file mode 100644 index 000000000000..0de8b39f5408 --- /dev/null +++ b/OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.c @@ -0,0 +1,49 @@ +/** @file + Reset System Library functions for OVMF + + Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include // BIT1 +#include + +#include // CpuDeadLoop() +#include // ASSERT() +#include +#include // IoWrite8() +#include // ResetCold() +#include // MicroSecondDelay() +#include // EfiGoneVirtual() +#include // PIIX4_PMBA_VALUE + +EFI_STATUS +EFIAPI +DxeResetSystemLibMicrovmConstructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + UINTN Address =3D MICROVM_GED_MMIO_BASE; + EFI_STATUS Status; + EFI_GCD_MEMORY_SPACE_DESCRIPTOR Descriptor; + + DEBUG ((DEBUG_INFO, "%a: start\n", __FUNCTION__)); + + Status =3D gDS->GetMemorySpaceDescriptor (Address, &Descriptor); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_INFO, "%a: GetMemorySpaceDescriptor failed\n", __FUNCTIO= N__)); + return RETURN_UNSUPPORTED; + } + + Status =3D gDS->SetMemorySpaceAttributes (Address, SIZE_4KB, + Descriptor.Attributes | EFI_MEMO= RY_RUNTIME); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_INFO, "%a: SetMemorySpaceAttributes failed\n", __FUNCTIO= N__)); + return RETURN_UNSUPPORTED; + } + + DEBUG ((DEBUG_INFO, "%a: done\n", __FUNCTION__)); + return EFI_SUCCESS; +} diff --git a/OvmfPkg/Library/ResetSystemLib/ResetSystemLibMicrovm.c b/OvmfP= kg/Library/ResetSystemLib/ResetSystemLibMicrovm.c new file mode 100644 index 000000000000..5c714cf06a54 --- /dev/null +++ b/OvmfPkg/Library/ResetSystemLib/ResetSystemLibMicrovm.c @@ -0,0 +1,89 @@ +/** @file + Reset System Library functions for OVMF + + Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include // BIT1 + +#include // CpuDeadLoop() +#include // ASSERT() +#include // IoWrite8() +#include // ResetCold() +#include // MicroSecondDelay() +#include // EfiGoneVirtual() +#include // PIIX4_PMBA_VALUE + +static UINTN MicrovmGedBase (VOID) +{ + VOID *Address =3D (VOID*) MICROVM_GED_MMIO_BASE_REGS; + + if (EfiGoneVirtual ()) { + EfiConvertPointer (0, &Address); + DEBUG ((DEBUG_INFO, "%a: virtual -> 0x%x\n", __FUNCTION__, Address)); + } else { + DEBUG ((DEBUG_INFO, "%a: physical -> 0x%x\n", __FUNCTION__, Address)); + } + + return (UINTN) Address; +} + +static VOID MicrovmReset (VOID) +{ + UINTN Address =3D MicrovmGedBase(); + + DEBUG ((DEBUG_INFO, "%a: microvm reset via ged\n", __FUNCTION__)); + MmioWrite8 (Address + MICROVM_ACPI_GED_REG_RESET, + MICROVM_ACPI_GED_RESET_VALUE); + CpuDeadLoop (); +} + +static VOID MicrovmShutdown (VOID) +{ + UINTN Address =3D MicrovmGedBase(); + + DEBUG ((DEBUG_INFO, "%a: microvm poweroff via ged\n", __FUNCTION__)); + MmioWrite8 (Address + MICROVM_ACPI_GED_REG_SLEEP_CTL, + (1 << 5) /* enable bit */ | + (5 << 2) /* typ =3D=3D S5 */); + CpuDeadLoop (); +} + +VOID EFIAPI ResetCold (VOID) +{ + MicrovmReset(); +} + +VOID EFIAPI ResetWarm (VOID) +{ + MicrovmReset(); +} + +VOID +EFIAPI +ResetPlatformSpecific ( + IN UINTN DataSize, + IN VOID *ResetData + ) +{ + MicrovmReset(); +} + +VOID +EFIAPI +ResetSystem ( + IN EFI_RESET_TYPE ResetType, + IN EFI_STATUS ResetStatus, + IN UINTN DataSize, + IN VOID *ResetData OPTIONAL + ) +{ + MicrovmReset(); +} + +VOID EFIAPI ResetShutdown (VOID) +{ + MicrovmShutdown(); +} diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c index aeb39595aa28..df2d9ad015aa 100644 --- a/OvmfPkg/PlatformPei/Platform.c +++ b/OvmfPkg/PlatformPei/Platform.c @@ -161,6 +161,7 @@ MemMapInitialization ( AddIoMemoryRangeHob (0x0A0000, BASE_1MB); =20 if (mHostBridgeDevId =3D=3D 0xffff /* microvm */) { + AddIoMemoryBaseSizeHob (MICROVM_GED_MMIO_BASE, SIZE_4KB); AddIoMemoryBaseSizeHob (0xFEC00000, SIZE_4KB); /* ioapic #1 */ AddIoMemoryBaseSizeHob (0xFEC10000, SIZE_4KB); /* ioapic #2 */ return; --=20 2.31.1 -=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 (#80230): https://edk2.groups.io/g/devel/message/80230 Mute This Topic: https://groups.io/mt/85350776/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-