[edk2-devel] [PATCH v8 1/9] MdePkg: Adds AMD SMRAM save state map
Attar, AbdulLateef (Abdul Lateef) via groups.io
AbdulLateef.Attar=amd.com at groups.io
Wed Apr 12 06:44:41 UTC 2023
[AMD Official Use Only - General]
Hi Ray,
I added the prefix "_" to be in align with Intel's SmramSaveStateMap.h,
so that it looks similar and suppose in future if there is any common functionality requires then
we can easily add to the common files.
Thanks
AbduL
-----Original Message-----
From: Ni, Ray <ray.ni at intel.com>
Sent: 11 April 2023 13:08
To: devel at edk2.groups.io; Attar, AbdulLateef (Abdul Lateef) <AbdulLateef.Attar at amd.com>; Kinney, Michael D <michael.d.kinney at intel.com>
Cc: Grimes, Paul <Paul.Grimes at amd.com>; Kirkendall, Garrett <Garrett.Kirkendall at amd.com>; Chang, Abner <Abner.Chang at amd.com>; Gao, Liming <gaoliming at byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu at intel.com>
Subject: RE: [edk2-devel] [PATCH v8 1/9] MdePkg: Adds AMD SMRAM save state map
Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.
The patch looks good in general.
@Kinney, Michael D, I think it's ok to use "SmramSaveStateMap.h" instead of "MmramSaveStateMap.h" because it matches to the CPU spec.
Do you agree?
"MM" is more like a general term that applies to all archs, X86, ARM, etc.
Abdul, just curious why do you add prefix "_" for some of the fields? I am ok if it matches to the AMD CPU spec.
Thanks,
Ray
> -----Original Message-----
> From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of Abdul
> Lateef Attar via groups.io
> Sent: Monday, April 10, 2023 7:10 PM
> To: devel at edk2.groups.io
> Cc: Abdul Lateef Attar <abdattar at amd.com>; Paul Grimes
> <paul.grimes at amd.com>; Garrett Kirkendall
> <garrett.kirkendall at amd.com>; Abner Chang <abner.chang at amd.com>;
> Kinney, Michael D <michael.d.kinney at intel.com>; Gao, Liming
> <gaoliming at byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu at intel.com>
> Subject: [edk2-devel] [PATCH v8 1/9] MdePkg: Adds AMD SMRAM save state
> map
>
> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4182
>
> Adds an SMM SMRAM save-state map for AMD processors.
> SMRAM save state maps for the AMD processor family are now supported.
>
> Save state map structure is added based on
> AMD64 Architecture Programmer's Manual, Volume 2, Section 10.2.
>
> The AMD legacy save state map for 32-bit architecture is defined.
> The AMD64 save state map for 64-bit architecture is defined.
>
> Also added Amd/SmramSaveStateMap.h to IgnoreFiles of EccCheck, because
> structures defined in this file are derived from
> Intel/SmramSaveStateMap.h.
>
> Cc: Paul Grimes <paul.grimes at amd.com>
> Cc: Garrett Kirkendall <garrett.kirkendall at amd.com>
> Cc: Abner Chang <abner.chang at amd.com>
> Cc: Michael D Kinney <michael.d.kinney at intel.com>
> Cc: Liming Gao <gaoliming at byosoft.com.cn>
> Cc: Zhiguang Liu <zhiguang.liu at intel.com>
>
> Signed-off-by: Abdul Lateef Attar <abdattar at amd.com>
> Reviewed-by: Abner Chang <abner.chang at amd.com>
> Reviewed-by: Michael D Kinney <michael.d.kinney at intel.com>
> ---
> .../Include/Register/Amd/SmramSaveStateMap.h | 194
> ++++++++++++++++++
> MdePkg/MdePkg.ci.yaml | 4 +-
> 2 files changed, 197 insertions(+), 1 deletion(-) create mode 100644
> MdePkg/Include/Register/Amd/SmramSaveStateMap.h
>
> diff --git a/MdePkg/Include/Register/Amd/SmramSaveStateMap.h
> b/MdePkg/Include/Register/Amd/SmramSaveStateMap.h
> new file mode 100644
> index 000000000000..0607d2a19145
> --- /dev/null
> +++ b/MdePkg/Include/Register/Amd/SmramSaveStateMap.h
> @@ -0,0 +1,194 @@
> +/** @file
> + AMD SMRAM Save State Map Definitions.
> +
> + SMRAM Save State Map definitions based on contents of the
> + AMD64 Architecture Programmer Manual:
> + Volume 2, System Programming, Section 10.2 SMM Resources
> +
> + Copyright (c) 2015 - 2019, Intel Corporation. All rights
> + reserved.<BR> Copyright (C) 2023 Advanced Micro Devices, Inc. All
> + rights reserved .<BR>
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#ifndef AMD_SMRAM_SAVE_STATE_MAP_H_
> +#define AMD_SMRAM_SAVE_STATE_MAP_H_
> +
> +///
> +/// Default SMBASE address
> +///
> +#define SMM_DEFAULT_SMBASE 0x30000
> +
> +///
> +/// Offset of SMM handler from SMBASE /// #define SMM_HANDLER_OFFSET
> +0x8000
> +
> +// SMM-Revision Identifier for AMD64 Architecture.
> +#define AMD_SMM_MIN_REV_ID_X64 0x30064
> +
> +#pragma pack (1)
> +
> +///
> +/// 32-bit SMRAM Save State Map
> +///
> +typedef struct {
> + // Padded an extra 0x200 bytes to match Intel/EDK2
> + UINT8 Reserved[0x200]; // fc00h
> + // AMD Save State area starts @ 0xfe00
> + UINT8 Reserved1[0xf8]; // fe00h
> + UINT32 SMBASE; // fef8h
> + UINT32 SMMRevId; // fefch
> + UINT16 IORestart; // ff00h
> + UINT16 AutoHALTRestart; // ff02h
> + UINT8 Reserved2[0x84]; // ff04h
> + UINT32 GDTBase; // ff88h
> + UINT64 Reserved3; // ff8ch
> + UINT32 IDTBase; // ff94h
> + UINT8 Reserved4[0x10]; // ff98h
> + UINT32 _ES; // ffa8h
> + UINT32 _CS; // ffach
> + UINT32 _SS; // ffb0h
> + UINT32 _DS; // ffb4h
> + UINT32 _FS; // ffb8h
> + UINT32 _GS; // ffbch
> + UINT32 LDTBase; // ffc0h
> + UINT32 _TR; // ffc4h
> + UINT32 _DR7; // ffc8h
> + UINT32 _DR6; // ffcch
> + UINT32 _EAX; // ffd0h
> + UINT32 _ECX; // ffd4h
> + UINT32 _EDX; // ffd8h
> + UINT32 _EBX; // ffdch
> + UINT32 _ESP; // ffe0h
> + UINT32 _EBP; // ffe4h
> + UINT32 _ESI; // ffe8h
> + UINT32 _EDI; // ffech
> + UINT32 _EIP; // fff0h
> + UINT32 _EFLAGS; // fff4h
> + UINT32 _CR3; // fff8h
> + UINT32 _CR0; // fffch
> +} AMD_SMRAM_SAVE_STATE_MAP32;
> +
> +///
> +/// 64-bit SMRAM Save State Map
> +///
> +typedef struct {
> + // Padded an extra 0x200 bytes to match Intel/EDK2
> + UINT8 Reserved[0x200]; // fc00h
> + // AMD Save State area starts @ 0xfe00
> + UINT16 _ES; // fe00h
> + UINT16 _ESAttributes; // fe02h
> + UINT32 _ESLimit; // fe04h
> + UINT64 _ESBase; // fe08h
> +
> + UINT16 _CS; // fe10h
> + UINT16 _CSAttributes; // fe12h
> + UINT32 _CSLimit; // fe14h
> + UINT64 _CSBase; // fe18h
> +
> + UINT16 _SS; // fe20h
> + UINT16 _SSAttributes; // fe22h
> + UINT32 _SSLimit; // fe24h
> + UINT64 _SSBase; // fe28h
> +
> + UINT16 _DS; // fe30h
> + UINT16 _DSAttributes; // fe32h
> + UINT32 _DSLimit; // fe34h
> + UINT64 _DSBase; // fe38h
> +
> + UINT16 _FS; // fe40h
> + UINT16 _FSAttributes; // fe42h
> + UINT32 _FSLimit; // fe44h
> + UINT64 _FSBase; // fe48h
> +
> + UINT16 _GS; // fe50h
> + UINT16 _GSAttributes; // fe52h
> + UINT32 _GSLimit; // fe54h
> + UINT64 _GSBase; // fe58h
> +
> + UINT32 _GDTRReserved1; // fe60h
> + UINT16 _GDTRLimit; // fe64h
> + UINT16 _GDTRReserved2; // fe66h
> + // UINT64 _GDTRBase; // fe68h
> + UINT32 _GDTRBaseLoDword;
> + UINT32 _GDTRBaseHiDword;
> +
> + UINT16 _LDTR; // fe70h
> + UINT16 _LDTRAttributes; // fe72h
> + UINT32 _LDTRLimit; // fe74h
> + // UINT64 _LDTRBase; // fe78h
> + UINT32 _LDTRBaseLoDword;
> + UINT32 _LDTRBaseHiDword;
> +
> + UINT32 _IDTRReserved1; // fe80h
> + UINT16 _IDTRLimit; // fe84h
> + UINT16 _IDTRReserved2; // fe86h
> + // UINT64 _IDTRBase; // fe88h
> + UINT32 _IDTRBaseLoDword;
> + UINT32 _IDTRBaseHiDword;
> +
> + UINT16 _TR; // fe90h
> + UINT16 _TRAttributes; // fe92h
> + UINT32 _TRLimit; // fe94h
> + UINT64 _TRBase; // fe98h
> +
> + UINT64 IO_RIP; // fea0h
> + UINT64 IO_RCX; // fea8h
> + UINT64 IO_RSI; // feb0h
> + UINT64 IO_RDI; // feb8h
> + UINT32 IO_DWord; // fec0h
> + UINT8 Reserved1[0x04]; // fec4h
> + UINT8 IORestart; // fec8h
> + UINT8 AutoHALTRestart; // fec9h
> + UINT8 Reserved2[0x06]; // fecah
> + UINT64 EFER; // fed0h
> + UINT64 SVM_Guest; // fed8h
> + UINT64 SVM_GuestVMCB; // fee0h
> + UINT64 SVM_GuestVIntr; // fee8h
> + UINT8 Reserved3[0x0c]; // fef0h
> + UINT32 SMMRevId; // fefch
> + UINT32 SMBASE; // ff00h
> + UINT8 Reserved4[0x14]; // ff04h
> + UINT64 SSP; // ff18h
> + UINT64 SVM_GuestPAT; // ff20h
> + UINT64 SVM_HostEFER; // ff28h
> + UINT64 SVM_HostCR4; // ff30h
> + UINT64 SVM_HostCR3; // ff38h
> + UINT64 SVM_HostCR0; // ff40h
> + UINT64 _CR4; // ff48h
> + UINT64 _CR3; // ff50h
> + UINT64 _CR0; // ff58h
> + UINT64 _DR7; // ff60h
> + UINT64 _DR6; // ff68h
> + UINT64 _RFLAGS; // ff70h
> + UINT64 _RIP; // ff78h
> + UINT64 _R15; // ff80h
> + UINT64 _R14; // ff88h
> + UINT64 _R13; // ff90h
> + UINT64 _R12; // ff98h
> + UINT64 _R11; // ffa0h
> + UINT64 _R10; // ffa8h
> + UINT64 _R9; // ffb0h
> + UINT64 _R8; // ffb8h
> + UINT64 _RDI; // ffc0h
> + UINT64 _RSI; // ffc8h
> + UINT64 _RBP; // ffd0h
> + UINT64 _RSP; // ffd8h
> + UINT64 _RBX; // ffe0h
> + UINT64 _RDX; // ffe8h
> + UINT64 _RCX; // fff0h
> + UINT64 _RAX; // fff8h
> +} AMD_SMRAM_SAVE_STATE_MAP64;
> +
> +///
> +/// Union of 32-bit and 64-bit SMRAM Save State Maps /// typedef
> +union {
> + AMD_SMRAM_SAVE_STATE_MAP32 x86;
> + AMD_SMRAM_SAVE_STATE_MAP64 x64;
> +} AMD_SMRAM_SAVE_STATE_MAP;
> +
> +#pragma pack ()
> +
> +#endif
> diff --git a/MdePkg/MdePkg.ci.yaml b/MdePkg/MdePkg.ci.yaml index
> 6ba85ebe6186..27772ab3be0a 100644
> --- a/MdePkg/MdePkg.ci.yaml
> +++ b/MdePkg/MdePkg.ci.yaml
> @@ -5,6 +5,7 @@
> # Copyright (c) 2020, Intel Corporation. All rights reserved.<BR> #
> Copyright (c) 2021, Arm Limited. All rights reserved.<BR> # Copyright
> (c) 2023, Loongson Technology Corporation Limited. All rights
> reserved.<BR>
> +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights
> +reserved.<BR>
> # SPDX-License-Identifier: BSD-2-Clause-Patent ## { @@ -67,7 +68,8
> @@
> "Include/Library/PcdLib.h",
> "Include/Library/SafeIntLib.h",
> "Include/Protocol/DebugSupport.h",
> - "Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLib.c"
> + "Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLib.c",
> + "Include/Register/Amd/SmramSaveStateMap.h"
> ]
> },
> ## options defined ci/Plugin/CompilerPlugin
> --
> 2.25.1
>
>
>
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#102909): https://edk2.groups.io/g/devel/message/102909
Mute This Topic: https://groups.io/mt/98172945/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list