From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mx.groups.io with SMTP id smtpd.web11.12308.1647966075445650787 for ; Tue, 22 Mar 2022 09:21:15 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@linux.microsoft.com header.s=default header.b=pN48/Ug2; spf=pass (domain: linux.microsoft.com, ip: 13.77.154.182, mailfrom: mikuback@linux.microsoft.com) Received: from localhost.localdomain (unknown [47.202.59.224]) by linux.microsoft.com (Postfix) with ESMTPSA id 2687D20B4783; Tue, 22 Mar 2022 09:21:14 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 2687D20B4783 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1647966075; bh=OXfSh8myMvq4Y+4ElL8sL2Txsry6F9LoXqwUdgA7nyo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pN48/Ug2887zKPzq27l2Eq0Qj780FApEZsg0aWg8NlaX5ezd8JttRv37FfnEUiyFx qV3odRvA7zRJaAsoarbTQEZRwY/a+i2TpleGfIGXYWB46xmXCtPNakhRszhtksh9yd N6BxEenXylwM3S+USQ9hanWnmMFiGpQqo/o/lQ2A= From: "Michael Kubacki" To: devel@edk2.groups.io Cc: Andrew Fish , Kang Gao , Michael D Kinney , Michael Kubacki , Leif Lindholm , Benjamin You , Liu Yun , Ankit Sinha , Nate DeSimone Subject: [PATCH v1 13/41] PrmPkg: Publish PRM operation region to support PRM ACPI _DSM invocation Date: Tue, 22 Mar 2022 12:19:19 -0400 Message-Id: <20220322161947.9319-14-mikuback@linux.microsoft.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20220322161947.9319-1-mikuback@linux.microsoft.com> References: <20220322161947.9319-1-mikuback@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Liu A PRM Handler has a 1-to-1 mapping to the corresponding _DSM method. The UUID of the _DSM Method will be passed by the ASL code to the OpRegionHandler which will look up the PRMT Table to extract the pointer of the corresponding PRM Handler. PRM loader pre-builds an SSDT that includes this PRM operation region. In boot time, the PRM loader will load and publish this SSDT, so that in OS runtime ACPI _DSM can invoke the PRM handler by pass the UUID to PRM operation region. The pre-build SSDT also includes a PRMT device as a Sample ACPI _DSM to invoke PRM handler. Cc: Andrew Fish Cc: Kang Gao Cc: Michael D Kinney Cc: Michael Kubacki Cc: Leif Lindholm Cc: Benjamin You Cc: Liu Yun Cc: Ankit Sinha Cc: Nate DeSimone Signed-off-by: Liu Yun --- PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c | 34 ++++++++ PrmPkg/PrmLoaderDxe/Prm.asl | 87 ++++++++++++++++++++ PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf | 4 + 3 files changed, 125 insertions(+) diff --git a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c b/PrmPkg/PrmLoaderDxe/Prm= LoaderDxe.c index 5fda4c1b01da..5e14b8e09dd0 100644 --- a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c +++ b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c @@ -3,6 +3,7 @@ This file contains the implementation for a Platform Runtime Mechanism= (PRM) loader driver. =20 + Copyright (c) 2020, Intel Corporation. All rights reserved.
Copyright (c) Microsoft Corporation SPDX-License-Identifier: BSD-2-Clause-Patent =20 @@ -19,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -809,6 +811,8 @@ PublishPrmAcpiTable ( EFI_STATUS Status; EFI_ACPI_TABLE_PROTOCOL *AcpiTableProtocol; UINTN TableKey; + EFI_ACPI_DESCRIPTION_HEADER *Ssdt; + UINTN SsdtSize; =20 if (PrmAcpiDescriptionTable =3D=3D NULL || PrmAcpiDescriptionTable->He= ader.Signature !=3D PRM_TABLE_SIGNATURE) { return EFI_INVALID_PARAMETER; @@ -832,6 +836,36 @@ PublishPrmAcpiTable ( } ASSERT_EFI_ERROR (Status); =20 + // + // Load SSDT + // + Status =3D GetSectionFromFv ( + &gEfiCallerIdGuid, + EFI_SECTION_RAW, + 0, + (VOID **) &Ssdt, + &SsdtSize + ); + ASSERT_EFI_ERROR (Status); + DEBUG ((DEBUG_INFO, "%a %a: SSDT loaded ...\n", _DBGMSGID_, __FUNCTION= __)); + + // + // Update OEM ID + // + CopyMem (&Ssdt->OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof (Ssdt->= OemId)); + + // + // Publish the SSDT. Table is re-checksumed. + // + TableKey =3D 0; + Status =3D AcpiTableProtocol->InstallAcpiTable ( + AcpiTableProtocol, + Ssdt, + SsdtSize, + &TableKey + ); + ASSERT_EFI_ERROR (Status); + return Status; } =20 diff --git a/PrmPkg/PrmLoaderDxe/Prm.asl b/PrmPkg/PrmLoaderDxe/Prm.asl new file mode 100644 index 000000000000..76b56de732da --- /dev/null +++ b/PrmPkg/PrmLoaderDxe/Prm.asl @@ -0,0 +1,87 @@ +/** @file + The definition block in ACPI table for PRM Operation Region + + Copyright (c) 2020, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +DefinitionBlock ( + "Prm.aml", + "SSDT", + 0x01, + "OEMID", + "PRMOPREG", + 0x3000 + ) +{ + Scope (\_SB) + { + // + // PRM Bridge Device + // + + Device (PRMB) + { + Name (_HID, "80860222") + Name (_CID, "80860222") + Name (_DDN, "PRM Bridge Device") + Name (_STA, 0xF) + OperationRegion (OPR1, 0x80, 0, 16) + Field (OPR1, DWordAcc, NoLock, Preserve) //Make it ByteAcc f= or parameter validation + { + Var0, 128 + } + Method (SETV, 1, Serialized) + { + CopyObject (Arg0, \_SB.PRMB.Var0) + } + } + + // + // PRM Test Device + // + + Device (PRMT) + { + Name (_HID, "80860223") + Name (_CID, "80860223") + Name (_DDN, "PRM Test Device") + Name (_STA, 0xF) + Name (BUF1, Buffer(16) + { + 0x5F, 0xAD, 0xF2, 0xD5, 0x47, 0xA3, 0x3E, 0x4D, //Guid_0 + 0x87, 0xBC, 0xC2, 0xCE, 0x63, 0x02, 0x9C, 0xC8, //Guid_1 + }) + Name (BUF2, Buffer(16) + { + 0xC3, 0xAD, 0xE7, 0xA9, 0xD0, 0x8C, 0x9A, 0x42, //Guid_0 + 0x89, 0x15, 0x10, 0x94, 0x6E, 0xBD, 0xE3, 0x18, //Guid_1 + }) + Name (BUF3, Buffer(16) + { + 0x14, 0xC2, 0x88, 0xB6, 0x81, 0x40, 0xEB, 0x4E, //Guid_0 + 0x8D, 0x26, 0x1E, 0xB5, 0xA3, 0xBC, 0xF1, 0x1A, //Guid_1 + }) + Method (NTST) + { + \_SB.PRMB.SETV (BUF1) + } + Method (TST1) + { + \_SB.PRMB.SETV (BUF1) + } + Method (TST2) + { + \_SB.PRMB.SETV (BUF2) + } + Method (TST3) + { + \_SB.PRMB.SETV (BUF3) + } + } + } + +} // End of Definition Block + + + diff --git a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf b/PrmPkg/PrmLoaderDxe/P= rmLoaderDxe.inf index 643e1a7989f2..016ced4b3732 100644 --- a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf +++ b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf @@ -5,6 +5,7 @@ # PRM handlers within those modules into a PRMT ACPI table such that th= e handlers are # made available for invocation in the OS. # +# Copyright (c) 2020, Intel Corporation. All rights reserved.
# Copyright (c) Microsoft Corporation # # SPDX-License-Identifier: BSD-2-Clause-Patent @@ -23,6 +24,7 @@ [Sources] PrmAcpiTable.h PrmLoader.h PrmLoaderDxe.c + Prm.asl =20 [Packages] MdePkg/MdePkg.dec @@ -42,6 +44,8 @@ [LibraryClasses] UefiBootServicesTableLib UefiDriverEntryPoint UefiLib + DxeServicesLib + PcdLib =20 [Pcd] gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId ## CONSU= MES --=20 2.28.0.windows.1