Reviewed-by: Ray Ni <ray...@intel.com>

> -----Original Message-----
> From: Wu, Jiaxin <jiaxin...@intel.com>
> Sent: Thursday, February 16, 2023 2:17 PM
> To: devel@edk2.groups.io
> Cc: Dong, Eric <eric.d...@intel.com>; Ni, Ray <ray...@intel.com>; Zeng, Star
> <star.z...@intel.com>; Laszlo Ersek <ler...@redhat.com>; Gerd Hoffmann
> <kra...@redhat.com>; Kumar, Rahul R <rahul.r.ku...@intel.com>
> Subject: [PATCH v9 3/6] UefiCpuPkg/SmmBaseHob.h: Add SMM Base HOB
> Data
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4337
> 
> The default SMBASE for the x86 processor is 0x30000. When
> SMI happens, processor runs the SMI handler at SMBASE+0x8000.
> Also, the SMM save state area is within SMBASE+0x10000.
> 
> One of the SMM initialization from processor perspective is to
> relocate and program the new SMBASE (in TSEG range) for each
> processor. When the SMBASE relocation happens in a PEI module,
> the PEI module shall produce the SMM_BASE_HOB in HOB database
> which tells the PiSmmCpuDxeSmm driver (runs at a later phase)
> about the new SMBASE for each processor. PiSmmCpuDxeSmm driver
> installs the SMI handler at the SMM_BASE_HOB.SmBase[Index]+0x8000
> for processor Index. When the HOB doesn't exist, PiSmmCpuDxeSmm
> driver shall relocate and program the new SMBASE itself.
> 
> This patch adds the SMM Base HOB for any PEI module to do
> the SmBase relocation ahead of PiSmmCpuDxeSmm driver and
> store the relocated SmBase address in array for each
> processor.
> 
> Cc: Eric Dong <eric.d...@intel.com>
> Cc: Ray Ni <ray...@intel.com>
> Cc: Zeng Star <star.z...@intel.com>
> Cc: Laszlo Ersek <ler...@redhat.com>
> Cc: Gerd Hoffmann <kra...@redhat.com>
> Cc: Rahul Kumar <rahul1.ku...@intel.com>
> Signed-off-by: Jiaxin Wu <jiaxin...@intel.com>
> ---
>  UefiCpuPkg/Include/Guid/SmmBaseHob.h | 75
> ++++++++++++++++++++++++++++++++++++
>  UefiCpuPkg/UefiCpuPkg.dec            |  5 ++-
>  2 files changed, 79 insertions(+), 1 deletion(-)
>  create mode 100644 UefiCpuPkg/Include/Guid/SmmBaseHob.h
> 
> diff --git a/UefiCpuPkg/Include/Guid/SmmBaseHob.h
> b/UefiCpuPkg/Include/Guid/SmmBaseHob.h
> new file mode 100644
> index 0000000000..115e749348
> --- /dev/null
> +++ b/UefiCpuPkg/Include/Guid/SmmBaseHob.h
> @@ -0,0 +1,75 @@
> +/** @file
> +  The Smm Base HOB is used to store the information of:
> +  * The relocated SmBase address in array for each processor.
> +
> +  The default Smbase for the x86 processor is 0x30000. When SMI happens,
> processor
> +  runs the SMI handler at Smbase+0x8000. Also, the SMM save state area is
> within
> +  Smbase+0x10000. Since it's the start address to store the processor save
> state
> +  and code for the SMI entry point, those info are tiled within an SMRAM
> allocated
> +  or reserved buffer. This tile size shall be enough to cover 3 parts:
> +  1. Processor SMRAM Save State Map starts at Smbase + 0xfc00
> +  2. Extra processor specific context start starts at Smbase + 0xfb00
> +  3. SMI entry point starts at Smbase + 0x8000.
> +  Besides, This size should be rounded up to nearest power of 2. The Smm
> Base HOB
> +  producer should be responsible for reserving enough size.
> +
> +  One of the SMM initialization from processor perspective is to relocate and
> program
> +  the new Smbase (in TSEG range) for each processor thread. When the
> Smbase relocation
> +  happens in a PEI module, the PEI module shall produce the
> SMM_BASE_HOB in HOB database
> +  which tells the PiSmmCpuDxeSmm driver (which runs at a later phase)
> about the new
> +  Smbase for each processor. PiSmmCpuDxeSmm driver installs the SMI
> handler at the
> +  SMM_BASE_HOB.Smbase[Index]+0x8000 for processor index. When the
> HOB doesn't exist,
> +  PiSmmCpuDxeSmm driver shall relocate and program the new Smbase
> itself.
> +
> +  Note:
> +  1. Smbase relocation process needs to program the vender specific
> hardware
> +  interface to set Smbase, it might be in the thread scope. It's doable to
> +  program the hardware interface using DXE MP service protocol in
> PiSmmCpuDxeSmm
> +  entry point. But, considering the standalone MM environment where the
> CpuMm
> +  driver runs in a isolated environment and it cannot invoke any DXE or PEI
> MP
> +  service, we recommend to put the hardware interface programming in a
> separate
> +  PEI module instead of in the PiSmmCpuDxeSmm driver.
> +
> +  2. There is the hard requirement that SMI Entry Size <= 0x1000, data Size
> <=
> +  0x1000 in PiSmmCpuDxeSmm. So, this require the allocated or reserved
> buffer in
> +  SMRAM should be >= 0x2000.
> +
> +  Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#ifndef SMM_BASE_HOB_H_
> +#define SMM_BASE_HOB_H_
> +
> +#define SMM_BASE_HOB_DATA_GUID \
> +  { \
> +    0xc2217ba7, 0x03bb, 0x4f63, {0xa6, 0x47, 0x7c, 0x25, 0xc5, 0xfc, 0x9d, 
> 0x73}
> \
> +  }
> +
> +#pragma pack(1)
> +typedef struct {
> +  ///
> +  /// ProcessorIndex tells which processor range this specific HOB instance
> described.
> +  /// If ProcessorIndex is set to 0, it indicats the HOB describes the 
> processor
> from
> +  /// 0 to NumberOfProcessors - 1. The HOB list may contains multiple this
> HOB
> +  /// instances. Each HOB instances describe the information for processor
> from
> +  /// ProcessorIndex to ProcessorIndex + NumberOfProcessors - 1. The
> instance order in
> +  /// the HOB list is random so consumer can not assume the ProcessorIndex
> of first
> +  /// instance is 0.
> +  ///
> +  UINT32    ProcessorIndex;
> +  ///
> +  /// Describes the Number of all max supported processors.
> +  ///
> +  UINT32    NumberOfProcessors;
> +  ///
> +  /// Pointer to SmBase address for each processor.
> +  ///
> +  UINT64    SmBase[];
> +} SMM_BASE_HOB_DATA;
> +#pragma pack()
> +
> +extern EFI_GUID  gSmmBaseHobGuid;
> +
> +#endif
> diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec
> index cff239d528..7003a2ba77 100644
> --- a/UefiCpuPkg/UefiCpuPkg.dec
> +++ b/UefiCpuPkg/UefiCpuPkg.dec
> @@ -1,9 +1,9 @@
>  ## @file  UefiCpuPkg.dec
>  # This Package provides UEFI compatible CPU modules and libraries.
>  #
> -# Copyright (c) 2007 - 2022, Intel Corporation. All rights reserved.<BR>
> +# Copyright (c) 2007 - 2023, Intel Corporation. All rights reserved.<BR>
>  #
>  # SPDX-License-Identifier: BSD-2-Clause-Patent
>  #
>  ##
> 
> @@ -76,10 +76,13 @@
>    gEdkiiCpuFeaturesInitDoneGuid  = { 0xc77c3a41, 0x61ab, 0x4143, { 0x98,
> 0x3e, 0x33, 0x39, 0x28, 0x6, 0x28, 0xe5 }}
> 
>    ## Include/Guid/MicrocodePatchHob.h
>    gEdkiiMicrocodePatchHobGuid    = { 0xd178f11d, 0x8716, 0x418e, { 0xa1,
> 0x31, 0x96, 0x7d, 0x2a, 0xc4, 0x28, 0x43 }}
> 
> +  ## Include/Guid/SmmBaseHob.h
> +  gSmmBaseHobGuid      = { 0xc2217ba7, 0x03bb, 0x4f63, {0xa6, 0x47, 0x7c,
> 0x25, 0xc5, 0xfc, 0x9d, 0x73 }}
> +
>  [Protocols]
>    ## Include/Protocol/SmmCpuService.h
>    gEfiSmmCpuServiceProtocolGuid   = { 0x1d202cab, 0xc8ab, 0x4d5c, { 0x94,
> 0xf7, 0x3c, 0xfc, 0xc0, 0xd3, 0xd3, 0x35 }}
>    gEdkiiSmmCpuRendezvousProtocolGuid = { 0xaa00d50b, 0x4911, 0x428f,
> { 0xb9, 0x1a, 0xa5, 0x9d, 0xdb, 0x13, 0xe2, 0x4c }}
> 
> --
> 2.16.2.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#100281): https://edk2.groups.io/g/devel/message/100281
Mute This Topic: https://groups.io/mt/97001113/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: 
https://edk2.groups.io/g/devel/leave/9847357/21656/1706620634/xyzzy 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to