From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mx.groups.io with SMTP id smtpd.web11.291.1654644164113588265 for ; Tue, 07 Jun 2022 16:22:45 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=ONVOMf0H; spf=pass (domain: intel.com, ip: 134.134.136.24, mailfrom: nathaniel.l.desimone@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1654644164; x=1686180164; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=jt5b8n8XywPfskgZ2s0fk6urbcWP5foSseZTKmV3QXE=; b=ONVOMf0HmAkj7VOrTdwN9TLadXNZTgJgOExsACZTFMsxhDGlnLA7xK47 A3yvPUWNjrs4q0UGHpCGMDooY5cXzQL+QjhRfhBVk0oaC8RwV9YAspWoh qOx70np2PqUKZAurfEHUhUibh+sCX7FjsetWIcpFDNzWu/MqBxE0P1OcC U0bX4n06t9UAXVnh1vzOQcv8udtS2xbiphRsZ2gxPklIH8xGQ4GWGaEGg wj5wMPV8xUNHMZQlBG+ap/DcZ2ntGlVlfcD6Zd/p1BWfs+4gu26wyjiG4 IYvxmTg1QoHUxGHpboma5Zbv/inOLNbx1g4waX1HFz3dr35QfMT7B77Zf Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10371"; a="277480311" X-IronPort-AV: E=Sophos;i="5.91,284,1647327600"; d="scan'208";a="277480311" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jun 2022 16:22:43 -0700 X-IronPort-AV: E=Sophos;i="5.91,284,1647327600"; d="scan'208";a="609410703" Received: from nldesimo-desk1.amr.corp.intel.com ([10.7.159.54]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jun 2022 16:22:43 -0700 From: "Nate DeSimone" To: devel@edk2.groups.io Cc: Ankit Sinha , Chasel Chiu , Liming Gao , Eric Dong , Michael Kubacki Subject: [PATCH V2 1/1] MinPlatformPkg: Add PCDs to update FADT entries from board package Date: Tue, 7 Jun 2022 16:22:39 -0700 Message-Id: <20220607232239.4250-1-nathaniel.l.desimone@intel.com> X-Mailer: git-send-email 2.27.0.windows.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Ankit Sinha Adds new PCDs to allow entries in FADT to be customized during platform integration. Board packages will can update these PCDs during boot. Cc: Chasel Chiu Cc: Nate DeSimone Cc: Liming Gao Cc: Eric Dong Cc: Michael Kubacki Signed-off-by: Ankit Sinha --- Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c | 84 ++++++++++++-------- Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf | 23 ++++++ Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec | 43 +++++++--- 3 files changed, 106 insertions(+), 44 deletions(-) diff --git a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c index 508de9101306..3c9f79de5c6c 100644 --- a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c +++ b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c @@ -1165,6 +1165,11 @@ PlatformUpdateTables ( // Update the creator revision // TableHeader->CreatorRevision = PcdGet32(PcdAcpiDefaultCreatorRevision); + + // + // Update the oem revision + // + TableHeader->OemRevision = PcdGet32(PcdAcpiDefaultOemRevision); } } @@ -1187,44 +1192,53 @@ PlatformUpdateTables ( case EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE: FadtHeader = (EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE *) Table; - FadtHeader->PreferredPmProfile = PcdGet8 (PcdFadtPreferredPmProfile); - FadtHeader->IaPcBootArch = PcdGet16 (PcdFadtIaPcBootArch); - FadtHeader->Flags = PcdGet32 (PcdFadtFlags); + FadtHeader->PreferredPmProfile = PcdGet8 (PcdFadtPreferredPmProfile); + FadtHeader->IaPcBootArch = PcdGet16 (PcdFadtIaPcBootArch); + FadtHeader->Flags = PcdGet32 (PcdFadtFlags); + FadtHeader->AcpiEnable = PcdGet8 (PcdAcpiEnableSwSmi); + FadtHeader->AcpiDisable = PcdGet8 (PcdAcpiDisableSwSmi); + FadtHeader->Pm1aEvtBlk = PcdGet16 (PcdAcpiPm1AEventBlockAddress); + FadtHeader->Pm1bEvtBlk = PcdGet16 (PcdAcpiPm1BEventBlockAddress); + FadtHeader->Pm1aCntBlk = PcdGet16 (PcdAcpiPm1AControlBlockAddress); + FadtHeader->Pm1bCntBlk = PcdGet16 (PcdAcpiPm1BControlBlockAddress); + FadtHeader->Pm2CntBlk = PcdGet16 (PcdAcpiPm2ControlBlockAddress); + FadtHeader->PmTmrBlk = PcdGet16 (PcdAcpiPmTimerBlockAddress); + FadtHeader->Gpe0Blk = PcdGet16 (PcdAcpiGpe0BlockAddress); + FadtHeader->Gpe0BlkLen = PcdGet8 (PcdAcpiGpe0BlockLength); + FadtHeader->Gpe1Blk = PcdGet16 (PcdAcpiGpe1BlockAddress); + FadtHeader->Gpe1Base = PcdGet8 (PcdAcpiGpe1Base); - FadtHeader->AcpiEnable = PcdGet8 (PcdAcpiEnableSwSmi); - FadtHeader->AcpiDisable = PcdGet8 (PcdAcpiDisableSwSmi); + FadtHeader->XPm1aEvtBlk.Address = PcdGet16 (PcdAcpiPm1AEventBlockAddress); + FadtHeader->XPm1aCntBlk.Address = PcdGet16 (PcdAcpiPm1AControlBlockAddress); + FadtHeader->XPm1bCntBlk.Address = PcdGet16 (PcdAcpiPm1BControlBlockAddress); + FadtHeader->XPm2CntBlk.Address = PcdGet16 (PcdAcpiPm2ControlBlockAddress); + FadtHeader->XPmTmrBlk.Address = PcdGet16 (PcdAcpiPmTimerBlockAddress); + FadtHeader->XGpe0Blk.Address = PcdGet16 (PcdAcpiGpe0BlockAddress); + FadtHeader->XGpe1Blk.Address = PcdGet16 (PcdAcpiGpe1BlockAddress); - FadtHeader->Pm1aEvtBlk = PcdGet16 (PcdAcpiPm1AEventBlockAddress); - FadtHeader->Pm1bEvtBlk = PcdGet16 (PcdAcpiPm1BEventBlockAddress); - FadtHeader->Pm1aCntBlk = PcdGet16 (PcdAcpiPm1AControlBlockAddress); - FadtHeader->Pm1bCntBlk = PcdGet16 (PcdAcpiPm1BControlBlockAddress); - FadtHeader->Pm2CntBlk = PcdGet16 (PcdAcpiPm2ControlBlockAddress); - FadtHeader->PmTmrBlk = PcdGet16 (PcdAcpiPmTimerBlockAddress); - FadtHeader->Gpe0Blk = PcdGet16 (PcdAcpiGpe0BlockAddress); - FadtHeader->Gpe0BlkLen = 0x20; - FadtHeader->Gpe1Blk = PcdGet16 (PcdAcpiGpe1BlockAddress); + FadtHeader->ResetReg.AccessSize = PcdGet8 (PcdAcpiResetRegAccessSize); + FadtHeader->XPm1aEvtBlk.AccessSize = PcdGet8 (PcdAcpiXPm1aEvtBlkAccessSize); + FadtHeader->XPm1bEvtBlk.AccessSize = PcdGet8 (PcdAcpiXPm1bEvtBlkAccessSize); + FadtHeader->XPm1aCntBlk.AccessSize = PcdGet8 (PcdAcpiXPm1aCntBlkAccessSize); + FadtHeader->XPm1bCntBlk.AccessSize = PcdGet8 (PcdAcpiXPm1bCntBlkAccessSize); + FadtHeader->XPm2CntBlk.AccessSize = PcdGet8 (PcdAcpiXPm2CntBlkAccessSize); + FadtHeader->XPmTmrBlk.AccessSize = PcdGet8 (PcdAcpiXPmTmrBlkAccessSize); + FadtHeader->XGpe0Blk.AccessSize = PcdGet8 (PcdAcpiXGpe0BlkAccessSize); + FadtHeader->XGpe1Blk.AccessSize = PcdGet8 (PcdAcpiXGpe1BlkAccessSize); - FadtHeader->XPm1aEvtBlk.Address = PcdGet16 (PcdAcpiPm1AEventBlockAddress); - FadtHeader->XPm1bEvtBlk.Address = PcdGet16 (PcdAcpiPm1BEventBlockAddress); - if (FadtHeader->XPm1bEvtBlk.Address == 0) { - FadtHeader->XPm1bEvtBlk.AccessSize = 0; - } - FadtHeader->XPm1aCntBlk.Address = PcdGet16 (PcdAcpiPm1AControlBlockAddress); - FadtHeader->XPm1bCntBlk.Address = PcdGet16 (PcdAcpiPm1BControlBlockAddress); - if (FadtHeader->XPm1bCntBlk.Address == 0) { - FadtHeader->XPm1bCntBlk.AccessSize = 0; - } - FadtHeader->XPm2CntBlk.Address = PcdGet16 (PcdAcpiPm2ControlBlockAddress); - //if (FadtHeader->XPm2CntBlk.Address == 0) { - FadtHeader->XPm2CntBlk.AccessSize = 0; - //} - FadtHeader->XPmTmrBlk.Address = PcdGet16 (PcdAcpiPmTimerBlockAddress); - FadtHeader->XGpe0Blk.Address = PcdGet16 (PcdAcpiGpe0BlockAddress); - FadtHeader->XGpe1Blk.Address = PcdGet16 (PcdAcpiGpe1BlockAddress); - if (FadtHeader->XGpe1Blk.Address == 0) { - FadtHeader->XGpe1Blk.AddressSpaceId = 0; - FadtHeader->XGpe1Blk.AccessSize = 0; - } + FadtHeader->SleepControlReg.AddressSpaceId = PcdGet8 (PcdAcpiSleepControlRegAddressSpaceId); + FadtHeader->SleepControlReg.RegisterBitOffset = PcdGet8 (PcdAcpiSleepControlRegRegisterBitOffset); + FadtHeader->SleepControlReg.AccessSize = PcdGet8 (PcdAcpiSleepControlRegAccessSize); + FadtHeader->SleepControlReg.Address = PcdGet64 (PcdAcpiSleepControlRegAddress); + FadtHeader->SleepStatusReg.AddressSpaceId = PcdGet8 (PcdAcpiSleepStatusRegAddressSpaceId); + FadtHeader->SleepStatusReg.RegisterBitWidth = PcdGet8 (PcdAcpiSleepStatusRegRegisterBitWidth); + FadtHeader->SleepStatusReg.RegisterBitOffset = PcdGet8 (PcdAcpiSleepStatusRegRegisterBitOffset); + FadtHeader->SleepStatusReg.AccessSize = PcdGet8 (PcdAcpiSleepStatusRegAccessSize); + FadtHeader->SleepStatusReg.Address = PcdGet64 (PcdAcpiSleepStatusRegAddress); + + FadtHeader->S4BiosReq = PcdGet8 (PcdAcpiS4BiosReq); + FadtHeader->XPm1aEvtBlk.Address = PcdGet16 (PcdAcpiPm1AEventBlockAddress); + FadtHeader->XPm1bEvtBlk.Address = PcdGet16 (PcdAcpiPm1BEventBlockAddress); FadtHeader->DutyOffset = PcdGet8 (PcdFadtDutyOffset); FadtHeader->DutyWidth = PcdGet8 (PcdFadtDutyWidth); diff --git a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf index 59ef5e2e544e..119212d2216b 100644 --- a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf +++ b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf @@ -62,6 +62,7 @@ gMinPlatformPkgTokenSpaceGuid.PcdMaxCpuSocketCount gMinPlatformPkgTokenSpaceGuid.PcdFadtPreferredPmProfile + gMinPlatformPkgTokenSpaceGuid.PcdAcpiGpe1Base gMinPlatformPkgTokenSpaceGuid.PcdFadtIaPcBootArch gMinPlatformPkgTokenSpaceGuid.PcdFadtFlags gMinPlatformPkgTokenSpaceGuid.PcdFadtDutyOffset @@ -79,7 +80,29 @@ gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm2ControlBlockAddress gMinPlatformPkgTokenSpaceGuid.PcdAcpiPmTimerBlockAddress gMinPlatformPkgTokenSpaceGuid.PcdAcpiGpe0BlockAddress + gMinPlatformPkgTokenSpaceGuid.PcdAcpiGpe0BlockLength gMinPlatformPkgTokenSpaceGuid.PcdAcpiGpe1BlockAddress + gMinPlatformPkgTokenSpaceGuid.PcdAcpiResetRegAccessSize + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXPm1aEvtBlkAccessSize + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXPm1bEvtBlkAccessSize + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXPm1aCntBlkAccessSize + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXPm1bCntBlkAccessSize + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXPm2CntBlkAccessSize + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXPmTmrBlkAccessSize + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXGpe0BlkAccessSize + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXGpe1BlkAccessSize + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepControlRegAddressSpaceId + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepControlRegRegisterBitWidth + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepControlRegRegisterBitOffset + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepControlRegAccessSize + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepControlRegAddress + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepStatusRegAddressSpaceId + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepStatusRegRegisterBitWidth + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepStatusRegRegisterBitOffset + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepStatusRegAccessSize + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepStatusRegAddress + gMinPlatformPkgTokenSpaceGuid.PcdAcpiS4BiosReq + gMinPlatformPkgTokenSpaceGuid.PcdLocalApicAddress gMinPlatformPkgTokenSpaceGuid.PcdIoApicAddress diff --git a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec index 22f371ee1ec8..68ab1d702d6a 100644 --- a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec +++ b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec @@ -115,6 +115,40 @@ gMinPlatformPkgTokenSpaceGuid.PcdFadtPreferredPmProfile|0x02|UINT8|0x90000025 gMinPlatformPkgTokenSpaceGuid.PcdFadtIaPcBootArch|0x0001|UINT16|0x90000026 gMinPlatformPkgTokenSpaceGuid.PcdFadtFlags|0x000086A5|UINT32|0x90000027 + + gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm1AEventBlockAddress|0x1800|UINT16|0x00010035 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm1BEventBlockAddress|0x0000|UINT16|0x00010036 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm1AControlBlockAddress|0x1804|UINT16|0x0001037 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm1BControlBlockAddress|0x0000|UINT16|0x00010038 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm2ControlBlockAddress|0x1850|UINT16|0x00010039 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiPmTimerBlockAddress|0x1808|UINT16|0x0001003A + gMinPlatformPkgTokenSpaceGuid.PcdAcpiGpe0BlockAddress|0x1880|UINT16|0x0001003B + gMinPlatformPkgTokenSpaceGuid.PcdAcpiGpe0BlockLength|0x00|UINT8|0x0001003C + gMinPlatformPkgTokenSpaceGuid.PcdAcpiGpe1BlockAddress|0x0000|UINT16|0x0001003D + gMinPlatformPkgTokenSpaceGuid.PcdAcpiGpe1Base|0x00|UINT8|0x00010040 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiResetRegAccessSize|0x00|UINT8|0x00010042 + + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXPm1aEvtBlkAccessSize|0x00|UINT8|0x00010043 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXPm1bEvtBlkAccessSize|0x00|UINT8|0x00010044 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXPm1aCntBlkAccessSize|0x00|UINT8|0x00010045 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXPm1bCntBlkAccessSize|0x00|UINT8|0x00010046 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXPm2CntBlkAccessSize|0x00|UINT8|0x00010047 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXPmTmrBlkAccessSize|0x00|UINT8|0x00010048 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXGpe0BlkAccessSize|0x00|UINT8|0x00010049 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiXGpe1BlkAccessSize|0x00|UINT8|0x0001004A + + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepControlRegAddressSpaceId|0x00|UINT8|0x0001004B + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepControlRegRegisterBitWidth|0x00|UINT8|0x0001004C + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepControlRegRegisterBitOffset|0x00|UINT8|0x0001004D + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepControlRegAccessSize|0x00|UINT8|0x0001004E + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepControlRegAddress|0x0000000000000000|UINT64|0x0001004F + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepStatusRegAddressSpaceId|0x00|UINT8|0x00010050 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepStatusRegRegisterBitWidth|0x00|UINT8|0x00010051 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepStatusRegRegisterBitOffset|0x00|UINT8|0x00010052 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepStatusRegAccessSize|0x00|UINT8|0x00010053 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiSleepStatusRegAddress|0x0000000000000000|UINT64|0x00010054 + gMinPlatformPkgTokenSpaceGuid.PcdAcpiS4BiosReq|0x0000|UINT8|0x00010055 + # # FADT Duty Offset - The zero-based index of where the processor's duty cycle # setting is within the processor's P_CNT register. @@ -260,15 +294,6 @@ gMinPlatformPkgTokenSpaceGuid.PcdPciSegmentCount |0x1 |UINT8|0x4001004E gMinPlatformPkgTokenSpaceGuid.PcdRandomizePlatformHierarchy |TRUE |BOOLEAN|0x4001004F - gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm1AEventBlockAddress|0x1800|UINT16|0x00010035 - gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm1BEventBlockAddress|0x0000|UINT16|0x00010036 - gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm1AControlBlockAddress|0x1804|UINT16|0x0001037 - gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm1BControlBlockAddress|0x0000|UINT16|0x00010038 - gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm2ControlBlockAddress|0x1850|UINT16|0x00010039 - gMinPlatformPkgTokenSpaceGuid.PcdAcpiPmTimerBlockAddress|0x1808|UINT16|0x0001003A - gMinPlatformPkgTokenSpaceGuid.PcdAcpiGpe0BlockAddress|0x1880|UINT16|0x0001003B - gMinPlatformPkgTokenSpaceGuid.PcdAcpiGpe1BlockAddress|0x0000|UINT16|0x0001003C - gMinPlatformPkgTokenSpaceGuid.PcdPciExpressRegionLength|0x10000000|UINT32|0x0010004 gMinPlatformPkgTokenSpaceGuid.PcdFspCpuPeiApWakeupBufferAddr|0x9f000|UINT32|0x30000008 -- 2.27.0.windows.1