public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator
@ 2019-10-01  1:15 Kubacki, Michael A
  2019-10-01  1:15 ` [edk2-platforms][PATCH V1 1/3] IntelSiliconPkg/FirmwareBootMediaLib: Add library Kubacki, Michael A
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Kubacki, Michael A @ 2019-10-01  1:15 UTC (permalink / raw)
  To: devel; +Cc: Sai Chaganty, Eric Dong, Liming Gao, Ray Ni

This patch series introduces a mechanism for determining the firmware
boot media device. This allows the firmware boot media to be discovered
through a standardized API.

Traditionally, most systems have only supported firmware storage on SPI
flash. Presently, several other storage technologies are being used to
store boot system firmware such as eMMC, UFS, and NVMe.

The API for all board, platform, and silicon code to consume the
firmware boot media device is provided by the FirmwareBootMediaLib
in IntelSiliconPkg.

A driver (FirmwareBootMediaInfoPei) is added to BoardModulePkg to
serve as a consistent location for reporting the firmware boot device
information. In order to abstract the potentially hardware-specific
details to determine the boot media (for platforms that support
multiple firmware boot media devices), the driver retrieves the
boot media information using a new library class introduced called
FirmwareBootMediaInfoLib. A default instance of this library class
is provided in BoardModulePkg that always returns SPI flash. This
is intended to serve as a default implementation of the library for
the most common scenario and to easily allow a board package to
substitute the logic required to determine the boot media in more
complex scenarios. Ultimately, FirmwareBootMediaInfoPei produces a
HOB containing the firmware boot media device information so it can
be used in the HOB consumer phase.

Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Michael Kubacki <michael.a.kubacki@intel.com>

Michael Kubacki (3):
  IntelSiliconPkg/FirmwareBootMediaLib: Add library
  BoardModulePkg/FirmwareBootMediaInfoLib: Add library
  BoardModulePkg/FirmwareBootMediaInfoPei: Add module

 Platform/Intel/BoardModulePkg/BoardModulePkg.dec                                                  |   3 +
 Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec                                                 |   4 +-
 Platform/Intel/BoardModulePkg/BoardModulePkg.dsc                                                  |   5 +
 Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc                                                 |   4 +-
 Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.inf                  |  46 +++++++++
 Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.inf |  35 +++++++
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.inf        |  43 ++++++++
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.inf           |  38 +++++++
 Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLib.h                          |  26 +++++
 Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h                              | 106 +++++++++++++++++++
 Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.c                    |  76 ++++++++++++++
 Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.c   |  24 +++++
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.c          | 107 +++++++++++++++++++
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBootMediaLib.c                | 109 ++++++++++++++++++++
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.c             |  82 +++++++++++++++
 15 files changed, 706 insertions(+), 2 deletions(-)
 create mode 100644 Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.inf
 create mode 100644 Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.inf
 create mode 100644 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.inf
 create mode 100644 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.inf
 create mode 100644 Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLib.h
 create mode 100644 Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h
 create mode 100644 Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.c
 create mode 100644 Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.c
 create mode 100644 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.c
 create mode 100644 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBootMediaLib.c
 create mode 100644 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.c

-- 
2.16.2.windows.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [edk2-platforms][PATCH V1 1/3] IntelSiliconPkg/FirmwareBootMediaLib: Add library
  2019-10-01  1:15 [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator Kubacki, Michael A
@ 2019-10-01  1:15 ` Kubacki, Michael A
  2019-10-01  1:15 ` [edk2-platforms][PATCH V1 2/3] BoardModulePkg/FirmwareBootMediaInfoLib: " Kubacki, Michael A
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 10+ messages in thread
From: Kubacki, Michael A @ 2019-10-01  1:15 UTC (permalink / raw)
  To: devel; +Cc: Sai Chaganty, Ray Ni

REF:https://bugzilla.tianocore.org/show_bug.cgi?id=2229

Adds a new library that is used to make system initialization
decisions in the boot flow dependent upon firmware boot media.
Note that the firmware boot media is the storage media that
the boot firmware is stored on. It is not the OS storage media
which may be stored upon a different non-volatile storage device.

Any Intel board, platform, or silicon code that must take action
conditionally based on the firmware boot media must use this
library API.

Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Michael Kubacki <michael.a.kubacki@intel.com>
---
 Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec                                          |   4 +-
 Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc                                          |   4 +-
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.inf |  43 ++++++++
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.inf    |  38 +++++++
 Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h                       | 106 +++++++++++++++++++
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.c   | 107 +++++++++++++++++++
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBootMediaLib.c         | 109 ++++++++++++++++++++
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.c      |  82 +++++++++++++++
 8 files changed, 491 insertions(+), 2 deletions(-)

diff --git a/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec b/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec
index fe5bfa0dc6..8ae0223f35 100644
--- a/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec
+++ b/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec
@@ -3,7 +3,7 @@
 #
 # This package provides common open source Intel silicon modules.
 #
-# Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
 # SPDX-License-Identifier: BSD-2-Clause-Patent
 #
 ##
@@ -35,6 +35,8 @@
   ## Include/Guid/MicrocodeFmp.h
   gMicrocodeFmpImageTypeIdGuid      = { 0x96d4fdcd, 0x1502, 0x424d, { 0x9d, 0x4c, 0x9b, 0x12, 0xd2, 0xdc, 0xae, 0x5c } }
 
+  gFirmwareBootMediaHobGuid = { 0x8c7340ea, 0xde8b, 0x4e06, {0xa4, 0x78, 0xec, 0x8b, 0x62, 0xd7, 0xa, 0x8b } }
+
 [Ppis]
   gEdkiiVTdInfoPpiGuid = { 0x8a59fcb3, 0xf191, 0x400c, { 0x97, 0x67, 0x67, 0xaf, 0x2b, 0x25, 0x68, 0x4a } }
 
diff --git a/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc b/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc
index 58b5b656ef..2b4a525404 100644
--- a/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc
+++ b/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc
@@ -1,7 +1,7 @@
 ## @file
 # This package provides common open source Intel silicon modules.
 #
-# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
 #
 #    SPDX-License-Identifier: BSD-2-Clause-Patent
 #
@@ -42,6 +42,7 @@
 
   MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
   HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
+  FirmwareBootMediaLib|IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.inf
 
 [LibraryClasses.common.DXE_DRIVER]
   UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
@@ -52,6 +53,7 @@
 
   HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
   MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
+  FirmwareBootMediaLib|IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.inf
 
 ###################################################################################################
 #
diff --git a/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.inf b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.inf
new file mode 100644
index 0000000000..83ed5f04af
--- /dev/null
+++ b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.inf
@@ -0,0 +1,43 @@
+## @file
+# Firmware Boot Media Library
+#
+# The firmware boot media device is used to make system initialization decisions in the boot flow dependent
+# upon firmware boot media. Note that the firmware boot media is the storage media that the boot firmware is stored on.
+# It is not the OS storage media which may be stored upon a different non-volatile storage device.
+#
+# This library contains an implementation for the DXE and SMM boot phases.
+#
+# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = DxeSmmFirmwareBootMediaLib
+  FILE_GUID                      = 72F07B0B-54F5-47FD-9EDB-D796BE2B87E9
+  MODULE_TYPE                    = DXE_DRIVER
+  VERSION_STRING                 = 1.0
+  PI_SPECIFICATION_VERSION       = 0x0001000A
+  LIBRARY_CLASS                  = FirmwareBootMediaLib|DXE_DRIVER DXE_SMM_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION UEFI_DRIVER
+  CONSTRUCTOR                    = DxeSmmFirmwareBootMediaLibInit
+#
+#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
+#
+
+[Sources]
+  FirmwareBootMediaLib.c
+  DxeSmmFirmwareBootMediaLib.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  IntelSiliconPkg/IntelSiliconPkg.dec
+
+[LibraryClasses]
+  BaseLib
+  DebugLib
+  HobLib
+
+[Guids]
+  gFirmwareBootMediaHobGuid       ## CONSUMES
diff --git a/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.inf b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.inf
new file mode 100644
index 0000000000..063c4027d3
--- /dev/null
+++ b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.inf
@@ -0,0 +1,38 @@
+## @file
+# Firmware Boot Media Library
+#
+# The firmware boot media device is used to make system initialization decisions in the boot flow dependent
+# upon firmware boot media. Note that the firmware boot media is the storage media that the boot firmware is stored on.
+# It is not the OS storage media which may be stored upon a different non-volatile storage device.
+#
+# This library contains an implementation for the PEI boot phase.
+#
+# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  INF_VERSION          = 0x00010005
+  BASE_NAME            = PeiFirmwareBootMediaLib
+  FILE_GUID            = D3F7BD0B-3539-4F2D-AF98-EE32DBE7971F
+  MODULE_TYPE          = PEIM
+  VERSION_STRING       = 1.0
+  LIBRARY_CLASS        = FirmwareBootMediaLib
+
+[Sources]
+  FirmwareBootMediaLib.c
+  PeiFirmwareBootMediaLib.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  IntelSiliconPkg/IntelSiliconPkg.dec
+
+[LibraryClasses]
+  BaseLib
+  DebugLib
+  HobLib
+
+[Guids]
+  gFirmwareBootMediaHobGuid       ## PRODUCES CONSUMES
diff --git a/Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h b/Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h
new file mode 100644
index 0000000000..aca9593a84
--- /dev/null
+++ b/Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h
@@ -0,0 +1,106 @@
+/** @file
+  This library identifies the firmware boot media device.
+
+  The firmware boot media device is used to make system initialization decisions in the boot flow dependent
+  upon firmware boot media. Note that the firmware boot media is the storage media that the boot firmware is stored on.
+  It is not the OS storage media which may be stored upon a different non-volatile storage device.
+
+Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef _FIRMWARE_BOOT_MEDIA_LIB_H_
+#define _FIRMWARE_BOOT_MEDIA_LIB_H_
+
+#include <Uefi.h>
+
+typedef enum {
+  FwBootMediaSpi,
+  FwBootMediaUfs,
+  FwBootMediaEmmc,
+  FwBootMediaNvme,
+  FwBootMediaMax
+} FW_BOOT_MEDIA_TYPE;
+
+typedef struct {
+  FW_BOOT_MEDIA_TYPE BootMedia;
+} FW_BOOT_MEDIA_HOB_DATA;
+
+/**
+  Determines the current platform firmware boot media device.
+
+  @param[out] FwBootMediaType The current platform Boot Media type.
+
+  @retval     EFI_SUCCESS     The operation completed successfully.
+  @retval     EFI_NOT_FOUND   The boot media type could not be found.
+**/
+EFI_STATUS
+EFIAPI
+GetFirmwareBootMediaType (
+  OUT FW_BOOT_MEDIA_TYPE   *FwBootMediaType
+  );
+
+/**
+  Indicates whether the boot media is presently known.
+
+  Note: Very early in boot this data may not be available.
+
+  @retval TRUE        Boot media is known
+  @retval FALSE       Boot media is not known
+**/
+BOOLEAN
+EFIAPI
+FirmwareBootMediaIsKnown (
+  VOID
+  );
+
+/**
+  Determines if the platform firmware is booting from SPI.
+
+  @retval TRUE        Platform firmware is booting from SPI
+  @retval FALSE       Platform firmware is booting from a non-SPI device or the boot media is unknown
+**/
+BOOLEAN
+EFIAPI
+FirmwareBootMediaIsSpi (
+  VOID
+  );
+
+/**
+  Determines if the platform firmware is booting from UFS.
+
+  @retval TRUE        Platform firmware is booting from UFS
+  @retval FALSE       Platform firmware is booting from a non-UFS device or the boot media is unknown
+**/
+BOOLEAN
+EFIAPI
+FirmwareBootMediaIsUfs (
+  VOID
+  );
+
+/**
+  Determines if the platform firmware is booting from eMMC.
+
+  @retval TRUE        Platform firmware is booting from eMMC
+  @retval FALSE       Platform firmware is booting from a non-eMMC device or the boot media is unknown
+**/
+BOOLEAN
+EFIAPI
+FirmwareBootMediaIsEmmc (
+  VOID
+  );
+
+/**
+  Determines if the platform firmware is booting from NVMe.
+
+  @retval TRUE        Platform firmware is booting from NVMe.
+  @retval FALSE       Platform firmware is booting from a non-NVMe device or the boot media is unknown
+**/
+BOOLEAN
+EFIAPI
+FirmwareBootMediaIsNvme (
+  VOID
+  );
+
+#endif
diff --git a/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.c b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.c
new file mode 100644
index 0000000000..1e3876afb3
--- /dev/null
+++ b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.c
@@ -0,0 +1,107 @@
+/** @file
+  This library identifies the firmware boot media device.
+
+  The firmware boot media device is used to make system initialization decisions in the boot flow dependent
+  upon firmware boot media. Note that the firmware boot media is the storage media that the boot firmware is stored on.
+  It is not the OS storage media which may be stored upon a different non-volatile storage device.
+
+  This file contains implementation specific to the DXE and SMM boot phases.
+
+Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/FirmwareBootMediaLib.h>
+#include <Library/HobLib.h>
+
+STATIC FW_BOOT_MEDIA_TYPE mFwBootMedia = FwBootMediaMax;
+
+/**
+  Determines the current platform firmware boot media device.
+
+  @param[out] FwBootMediaType The current platform Boot Media type.
+
+  @retval     EFI_SUCCESS     The operation completed successfully.
+  @retval     EFI_NOT_FOUND   The boot media type could not be found.
+**/
+EFI_STATUS
+EFIAPI
+GetFirmwareBootMediaType (
+  OUT FW_BOOT_MEDIA_TYPE   *FwBootMediaType
+  )
+{
+  if (mFwBootMedia == FwBootMediaMax) {
+    return EFI_NOT_FOUND;
+  }
+
+  *FwBootMediaType = mFwBootMedia;
+  return EFI_SUCCESS;
+}
+
+/**
+  Determines if the boot media is presently known.
+
+  Note: Very early in boot this data may not be available.
+
+  @retval TRUE        Boot media is known
+  @retval FALSE       Boot media is not known
+**/
+BOOLEAN
+EFIAPI
+FirmwareBootMediaIsKnown (
+  VOID
+  )
+{
+  return mFwBootMedia != FwBootMediaMax;
+}
+
+/**
+  The library constructor.
+
+  This constructor depends upon gFirmwareBootMediaHobGuid.
+  It should be produced by the platform in the HOB producer phase.
+
+  @param[in]  ImageHandle           The firmware allocated handle for the UEFI image.
+  @param[in]  SystemTable           A pointer to the EFI system table.
+
+  @retval     EFI_SUCCESS           The constructor executed successfully.
+  @retval     EFI_NOT_FOUND         The gFirmwareBootMediaHobGuid HOB could not be located
+                                    or the boot media type is invalid.
+**/
+EFI_STATUS
+EFIAPI
+DxeSmmFirmwareBootMediaLibInit (
+  IN EFI_HANDLE         ImageHandle,
+  IN EFI_SYSTEM_TABLE   *SystemTable
+  )
+{
+  FW_BOOT_MEDIA_HOB_DATA    *BootMediaHobData;
+  FW_BOOT_MEDIA_TYPE        BootMediaType;
+  EFI_HOB_GUID_TYPE         *GuidHobPtr;
+
+  GuidHobPtr  = GetFirstGuidHob (&gFirmwareBootMediaHobGuid);
+  if (GuidHobPtr == NULL) {
+    DEBUG ((DEBUG_ERROR, "The firmware boot media HOB does not exist!\n"));
+    ASSERT (GuidHobPtr != NULL);
+    return EFI_NOT_FOUND;
+  }
+
+  BootMediaHobData = (FW_BOOT_MEDIA_HOB_DATA *) GET_GUID_HOB_DATA (GuidHobPtr);
+  if (BootMediaHobData == NULL) {
+    return EFI_NOT_FOUND;
+  }
+
+  BootMediaType = BootMediaHobData->BootMedia;
+
+  if (BootMediaType >= FwBootMediaMax) {
+    DEBUG ((DEBUG_ERROR, "The firmware boot media HOB specifies an invalid media type.\n"));
+    return EFI_NOT_FOUND;
+  }
+
+  mFwBootMedia = BootMediaType;
+
+  return EFI_SUCCESS;
+}
diff --git a/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBootMediaLib.c b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBootMediaLib.c
new file mode 100644
index 0000000000..11a14d172d
--- /dev/null
+++ b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBootMediaLib.c
@@ -0,0 +1,109 @@
+/** @file
+  This library identifies the firmware boot media device.
+
+  The firmware boot media device is used to make system initialization decisions in the boot flow dependent
+  upon firmware boot media. Note that the firmware boot media is the storage media that the boot firmware is stored on.
+  It is not the OS storage media which may be stored upon a different non-volatile storage device.
+
+  This file contains library implementation common to all boot phases.
+
+Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/FirmwareBootMediaLib.h>
+
+/**
+  Determines if the platform firmware is booting from SPI.
+
+  @retval TRUE        Platform firmware is booting from SPI
+  @retval FALSE       Platform firmware is booting from a non-SPI device or the boot media is unknown
+**/
+BOOLEAN
+EFIAPI
+FirmwareBootMediaIsSpi (
+  VOID
+  )
+{
+  EFI_STATUS          Status;
+  FW_BOOT_MEDIA_TYPE  BootMedia;
+
+  Status = GetFirmwareBootMediaType (&BootMedia);
+  if (EFI_ERROR (Status) || BootMedia != FwBootMediaSpi) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
+
+/**
+  Determines if the platform firmware is booting from UFS.
+
+  @retval TRUE        Platform firmware is booting from UFS
+  @retval FALSE       Platform firmware is booting from a non-UFS device or the boot media is unknown
+**/
+BOOLEAN
+EFIAPI
+FirmwareBootMediaIsUfs (
+  VOID
+  )
+{
+  EFI_STATUS          Status;
+  FW_BOOT_MEDIA_TYPE  BootMedia;
+
+  Status = GetFirmwareBootMediaType (&BootMedia);
+  if (EFI_ERROR (Status) || BootMedia != FwBootMediaUfs) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
+
+/**
+  Determines if the platform firmware is booting from eMMC.
+
+  @retval TRUE        Platform firmware is booting from eMMC
+  @retval FALSE       Platform firmware is booting from a non-eMMC device or the boot media is unknown
+**/
+BOOLEAN
+EFIAPI
+FirmwareBootMediaIsEmmc (
+  VOID
+  )
+{
+  EFI_STATUS          Status;
+  FW_BOOT_MEDIA_TYPE  BootMedia;
+
+  Status = GetFirmwareBootMediaType (&BootMedia);
+  if (EFI_ERROR (Status) || BootMedia != FwBootMediaEmmc) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
+
+/**
+  Determines if the platform firmware is booting from NVMe.
+
+  @retval TRUE        Platform firmware is booting from NVMe.
+  @retval FALSE       Platform firmware is booting from a non-NVMe device or the boot media is unknown
+**/
+BOOLEAN
+EFIAPI
+FirmwareBootMediaIsNvme (
+  VOID
+  )
+{
+  EFI_STATUS          Status;
+  FW_BOOT_MEDIA_TYPE  BootMedia;
+
+  Status = GetFirmwareBootMediaType (&BootMedia);
+  if (EFI_ERROR (Status) || BootMedia != FwBootMediaNvme) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
diff --git a/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.c b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.c
new file mode 100644
index 0000000000..14478e0dbe
--- /dev/null
+++ b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.c
@@ -0,0 +1,82 @@
+/** @file
+  This library identifies the firmware boot media device.
+
+  The firmware boot media device is used to make system initialization decisions in the boot flow dependent
+  upon firmware boot media. Note that the firmware boot media is the storage media that the boot firmware is stored on.
+  It is not the OS storage media which may be stored upon a different non-volatile storage device.
+
+  This file contains implementation specific to the PEI boot phase.
+
+Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/FirmwareBootMediaLib.h>
+#include <Library/HobLib.h>
+
+/**
+  Determines the current platform firmware boot media device.
+
+  @param[out] FwBootMediaType The current platform Boot Media type.
+
+  @retval     EFI_SUCCESS     The operation completed successfully.
+  @retval     EFI_NOT_FOUND   The boot media type could not be found.
+**/
+EFI_STATUS
+EFIAPI
+GetFirmwareBootMediaType (
+  OUT FW_BOOT_MEDIA_TYPE   *FwBootMediaType
+  )
+{
+  FW_BOOT_MEDIA_HOB_DATA    *BootMediaHobData;
+  EFI_HOB_GUID_TYPE         *GuidHobPtr;
+
+  GuidHobPtr  = GetFirstGuidHob (&gFirmwareBootMediaHobGuid);
+  if (GuidHobPtr == NULL) {
+      DEBUG ((DEBUG_ERROR, "The firmware boot media HOB does not exist!\n"));
+      ASSERT (GuidHobPtr != NULL);
+      return EFI_NOT_FOUND;
+  }
+
+  BootMediaHobData = (FW_BOOT_MEDIA_HOB_DATA *) GET_GUID_HOB_DATA (GuidHobPtr);
+  if (BootMediaHobData == NULL) {
+    return EFI_NOT_FOUND;
+  }
+
+  if (BootMediaHobData->BootMedia >= FwBootMediaMax) {
+    DEBUG ((DEBUG_ERROR, "The firmware boot media HOB specifies an invalid media type.\n"));
+    return EFI_NOT_FOUND;
+  }
+  *FwBootMediaType = BootMediaHobData->BootMedia;
+
+  return EFI_SUCCESS;
+}
+
+/**
+  Determines if the boot media is presently known.
+
+  Note: Very early in boot this data may not be available.
+
+  @retval TRUE        Boot media is known
+  @retval FALSE       Boot media is not known
+**/
+BOOLEAN
+EFIAPI
+FirmwareBootMediaIsKnown (
+  VOID
+  )
+{
+  EFI_STATUS          Status;
+  FW_BOOT_MEDIA_TYPE  BootMedia;
+
+  BootMedia = FwBootMediaMax;
+  Status = GetFirmwareBootMediaType (&BootMedia);
+  if (EFI_ERROR (Status) || BootMedia == FwBootMediaMax) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
-- 
2.16.2.windows.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [edk2-platforms][PATCH V1 2/3] BoardModulePkg/FirmwareBootMediaInfoLib: Add library
  2019-10-01  1:15 [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator Kubacki, Michael A
  2019-10-01  1:15 ` [edk2-platforms][PATCH V1 1/3] IntelSiliconPkg/FirmwareBootMediaLib: Add library Kubacki, Michael A
@ 2019-10-01  1:15 ` Kubacki, Michael A
  2019-10-08  7:01   ` Dong, Eric
  2019-10-01  1:15 ` [edk2-platforms][PATCH V1 3/3] BoardModulePkg/FirmwareBootMediaInfoPei: Add module Kubacki, Michael A
  2019-10-02 23:03 ` [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator Chaganty, Rangasai V
  3 siblings, 1 reply; 10+ messages in thread
From: Kubacki, Michael A @ 2019-10-01  1:15 UTC (permalink / raw)
  To: devel; +Cc: Eric Dong, Liming Gao

REF:https://bugzilla.tianocore.org/show_bug.cgi?id=2229

Introduces a new library class FirmwareBootMediaInfoLib that is
used to report the firmware boot media device. A default library
instance is provided that always returns the firmware boot media
is SPI flash. For platforms with other firmware boot media
options, a board-specific instance of this library should be
used instead to provide the correct firmware boot media device
information.

Cc: Eric Dong <eric.dong@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Michael Kubacki <michael.a.kubacki@intel.com>
---
 Platform/Intel/BoardModulePkg/BoardModulePkg.dec                                                  |  3 ++
 Platform/Intel/BoardModulePkg/BoardModulePkg.dsc                                                  |  3 ++
 Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.inf | 35 ++++++++++++++++++++
 Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLib.h                          | 26 +++++++++++++++
 Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.c   | 24 ++++++++++++++
 5 files changed, 91 insertions(+)

diff --git a/Platform/Intel/BoardModulePkg/BoardModulePkg.dec b/Platform/Intel/BoardModulePkg/BoardModulePkg.dec
index 6f13945ca8..c42f38c32a 100644
--- a/Platform/Intel/BoardModulePkg/BoardModulePkg.dec
+++ b/Platform/Intel/BoardModulePkg/BoardModulePkg.dec
@@ -33,6 +33,9 @@
   ##  @libraryclass    Provide services to get BIOS ID information.
   BiosIdLib|Include/Library/BiosIdLib.h
 
+  ## @libraryclass     Provide a service to determine the firmware boot media device.
+  FirmwareBootMediaInfoLib|Include/Library/FirmwareBootMediaInfoLib.h
+
 [Guids]
   ## Include Include/Guid/BiosId.h
   gBiosIdGuid = { 0xC3E36D09, 0x8294, 0x4b97, { 0xA8, 0x57, 0xD5, 0x28, 0x8F, 0xE3, 0x3E, 0x28 } }
diff --git a/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc b/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
index 734ead9be8..78c09fbf82 100644
--- a/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
+++ b/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
@@ -33,6 +33,8 @@
   DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
 
 [LibraryClasses.common.PEIM]
+  FirmwareBootMediaLib|IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.inf
+  FirmwareBootMediaInfoLib|BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.inf
   HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
   MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
 
@@ -42,6 +44,7 @@
 [LibraryClasses.common.DXE_DRIVER]
   HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
   MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
+  FirmwareBootMediaLib|IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.inf
 
 [LibraryClasses.common.UEFI_DRIVER]
   HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
diff --git a/Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.inf b/Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.inf
new file mode 100644
index 0000000000..637aeca2af
--- /dev/null
+++ b/Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.inf
@@ -0,0 +1,35 @@
+## @file
+# Firmware Boot Media Info Library
+#
+# This library identifies firmware boot media device information used in the boot flow for system initialization
+# decisions dependent upon the firmware boot media.
+#
+# This library instance provides a default implementation of the FirmwareBootMediaInfoLib library class that always
+# returns SPI flash as the boot media device. For any system firmware in which this is not the case, an instance
+# of this library class should be provided that returns the correct boot media for the platform.
+#
+# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  INF_VERSION          = 0x00010005
+  BASE_NAME            = PeiFirmwareBootMediaInfoLib
+  FILE_GUID            = 91CC29F5-AEAD-4108-9E91-C8DECDC1C654
+  MODULE_TYPE          = PEIM
+  VERSION_STRING       = 1.0
+  LIBRARY_CLASS        = FirmwareBootMediaInfoLib
+
+[Sources]
+  PeiFirmwareBootMediaInfoLib.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  IntelSiliconPkg/IntelSiliconPkg.dec
+  BoardModulePkg/BoardModulePkg.dec
+
+[LibraryClasses]
+  BaseLib
+  FirmwareBootMediaLib
diff --git a/Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLib.h b/Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLib.h
new file mode 100644
index 0000000000..b08f21ac74
--- /dev/null
+++ b/Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLib.h
@@ -0,0 +1,26 @@
+/** @file
+  This library identifies the firmware boot media device.
+
+Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef _FIRMWARE_BOOT_MEDIA_INFO_LIB_H_
+#define _FIRMWARE_BOOT_MEDIA_INFO_LIB_H_
+
+#include <Uefi.h>
+#include <Library/FirmwareBootMediaLib.h>
+
+/**
+  Identifies the firmware boot media type for the current boot.
+
+  @retval BOOT_MEDIA_TYPE   The boot media type. A value of FwBootMediaTypeMax indicates the firmware boot media
+                            information is unavailable.
+**/
+FW_BOOT_MEDIA_TYPE
+IdentifyFirmwareBootMediaType (
+  VOID
+  );
+
+#endif
diff --git a/Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.c b/Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.c
new file mode 100644
index 0000000000..0c29d96033
--- /dev/null
+++ b/Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.c
@@ -0,0 +1,24 @@
+/** @file
+  This library identifies the firmware boot media device.
+
+Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Library/BaseLib.h>
+#include <Library/FirmwareBootMediaInfoLib.h>
+
+/**
+  Identifies the firmware boot media type for the current boot.
+
+  @retval BOOT_MEDIA_TYPE   The boot media type. A value of FwBootMediaTypeMax indicates the firmware boot media
+                            information is unavailable.
+**/
+FW_BOOT_MEDIA_TYPE
+IdentifyFirmwareBootMediaType (
+  VOID
+  )
+{
+  return FwBootMediaSpi;
+}
-- 
2.16.2.windows.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [edk2-platforms][PATCH V1 3/3] BoardModulePkg/FirmwareBootMediaInfoPei: Add module
  2019-10-01  1:15 [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator Kubacki, Michael A
  2019-10-01  1:15 ` [edk2-platforms][PATCH V1 1/3] IntelSiliconPkg/FirmwareBootMediaLib: Add library Kubacki, Michael A
  2019-10-01  1:15 ` [edk2-platforms][PATCH V1 2/3] BoardModulePkg/FirmwareBootMediaInfoLib: " Kubacki, Michael A
@ 2019-10-01  1:15 ` Kubacki, Michael A
  2019-10-02 23:03 ` [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator Chaganty, Rangasai V
  3 siblings, 0 replies; 10+ messages in thread
From: Kubacki, Michael A @ 2019-10-01  1:15 UTC (permalink / raw)
  To: devel; +Cc: Eric Dong, Liming Gao

REF:https://bugzilla.tianocore.org/show_bug.cgi?id=2229

Adds a new module that is responsible for publishing the boot
media device information that will be used in the boot flow for
system initialization decisions dependent upon firmware boot
media.

The module depends on a library class to implement the board-
specific details to get the firmware boot media device. This
allows the module to remain consistent in its responsibility
across implementations and the details to be easily substituted.

Cc: Eric Dong <eric.dong@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Michael Kubacki <michael.a.kubacki@intel.com>
---
 Platform/Intel/BoardModulePkg/BoardModulePkg.dsc                                 |  2 +
 Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.inf | 46 ++++++++++++
 Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.c   | 76 ++++++++++++++++++++
 3 files changed, 124 insertions(+)

diff --git a/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc b/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
index 78c09fbf82..50bc704056 100644
--- a/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
+++ b/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
@@ -31,6 +31,7 @@
   DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
   PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
   DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
+  PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf
 
 [LibraryClasses.common.PEIM]
   FirmwareBootMediaLib|IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.inf
@@ -74,6 +75,7 @@
 ###################################################################################################
 
 [Components]
+  BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.inf
   BoardModulePkg/Library/CmosAccessLib/CmosAccessLib.inf
   BoardModulePkg/Library/PlatformCmosAccessLibNull/PlatformCmosAccessLibNull.inf
 
diff --git a/Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.inf b/Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.inf
new file mode 100644
index 0000000000..a81932f2a1
--- /dev/null
+++ b/Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.inf
@@ -0,0 +1,46 @@
+## @file
+# Firmware Boot Media Info Module
+#
+# This module publishes firmware boot media device information used in the boot flow for system initialization
+# decisions dependent upon the firmware boot media.
+#
+# This module depends upon a library instance to actually perform firmware boot media device detection since the
+# detection mechanism will vary across systems. In many cases, the media type may simply be set to a single firmware
+# boot media device with no run-time logic required. In any case, this module should dispatch as early as possible in
+# the system boot flow so the firmware boot media information is available for other modules. If any dependencies are
+# required to dynamically determine the firmware boot media device, those should be in the DEPEX section of the active
+# FirmwareBootMediaInfoLib such that this module will dispatch once those dependencies are satisfied.
+#
+# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  INF_VERSION       = 0x00010017
+  BASE_NAME         = FirmwareBootMediaInfoPei
+  FILE_GUID         = A8F14FA9-FC88-45F4-A622-F06E6C56E632
+  VERSION_STRING    = 1.0
+  MODULE_TYPE       = PEIM
+  ENTRY_POINT       = FirmwareBootMediaInfoPeiEntry
+
+[LibraryClasses]
+  BaseLib
+  DebugLib
+  FirmwareBootMediaLib
+  FirmwareBootMediaInfoLib
+  HobLib
+  PeimEntryPoint
+  PeiServicesLib
+
+[Packages]
+  MdePkg/MdePkg.dec
+  IntelSiliconPkg/IntelSiliconPkg.dec
+  BoardModulePkg/BoardModulePkg.dec
+
+[Sources]
+  FirmwareBootMediaInfoPei.c
+
+[Depex]
+  TRUE
diff --git a/Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.c b/Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.c
new file mode 100644
index 0000000000..7a71071053
--- /dev/null
+++ b/Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.c
@@ -0,0 +1,76 @@
+/** @file
+  Firmware Boot Media Info Module
+
+  This module publishes firmware boot media device information used in the boot flow for system initialization
+  decisions dependent upon the firmware boot media.
+
+  This module depends upon a library instance to actually perform firmware boot media device detection since the
+  detection mechanism will vary across systems. In many cases, the media type may simply be set to a single firmware
+  boot media device with no run-time logic required. In any case, this module should dispatch as early as possible in
+  the system boot flow so the firmware boot media information is available for other modules. If any dependencies are
+  required to dynamically determine the firmware boot media device, those should be in the DEPEX section of the active
+  FirmwareBootMediaInfoLib such that this module will dispatch once those dependencies are satisfied.
+
+Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/FirmwareBootMediaLib.h>
+#include <Library/FirmwareBootMediaInfoLib.h>
+#include <Library/HobLib.h>
+
+/**
+  Produces a gFirmwareBootMediaHobGuid HOB instance.
+
+  @retval     EFI_SUCCESS     The firmware boot media HOB was produced successfully.
+  @retval     EFI_NOT_FOUND   The firmware boot media device information could not be found to produce the
+                              the firmware boot media HOB.
+**/
+EFI_STATUS
+EFIAPI
+ProduceFirmwareBootMediaHob (
+  VOID
+  )
+{
+  FW_BOOT_MEDIA_HOB_DATA FwBootMediaHobData;
+
+  FwBootMediaHobData.BootMedia = IdentifyFirmwareBootMediaType ();
+  if (FwBootMediaHobData.BootMedia == FwBootMediaMax) {
+    return EFI_NOT_FOUND;
+  }
+
+  BuildGuidDataHob (
+    &gFirmwareBootMediaHobGuid,
+    &FwBootMediaHobData,
+    sizeof (FW_BOOT_MEDIA_HOB_DATA)
+    );
+
+  return EFI_SUCCESS;
+}
+
+/**
+  Attempts to publish the firmware boot media HOB.
+
+  @param  FileHandle  Handle of the file being invoked.
+  @param  PeiServices Describes the list of possible PEI Services.
+
+  @retval EFI_SUCCESS   Produce the BootMedia Hob successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+FirmwareBootMediaInfoPeiEntry (
+  IN       EFI_PEI_FILE_HANDLE  FileHandle,
+  IN CONST EFI_PEI_SERVICES     **PeiServices
+  )
+{
+  EFI_STATUS  Status;
+
+  Status = ProduceFirmwareBootMediaHob ();
+  ASSERT_EFI_ERROR (Status);
+
+  return Status;
+}
-- 
2.16.2.windows.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator
  2019-10-01  1:15 [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator Kubacki, Michael A
                   ` (2 preceding siblings ...)
  2019-10-01  1:15 ` [edk2-platforms][PATCH V1 3/3] BoardModulePkg/FirmwareBootMediaInfoPei: Add module Kubacki, Michael A
@ 2019-10-02 23:03 ` Chaganty, Rangasai V
  2019-10-03  1:02   ` Kubacki, Michael A
  3 siblings, 1 reply; 10+ messages in thread
From: Chaganty, Rangasai V @ 2019-10-02 23:03 UTC (permalink / raw)
  To: Kubacki, Michael A, devel@edk2.groups.io; +Cc: Dong, Eric, Gao, Liming, Ni, Ray

I am not sure if there is a silicon scope around the FirmwareBootMediaLib. Have we considered adding this interface to MdePkg, instead?

-----Original Message-----
From: Kubacki, Michael A 
Sent: Monday, September 30, 2019 6:16 PM
To: devel@edk2.groups.io
Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Dong, Eric <eric.dong@intel.com>; Gao, Liming <liming.gao@intel.com>; Ni, Ray <ray.ni@intel.com>
Subject: [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator

This patch series introduces a mechanism for determining the firmware boot media device. This allows the firmware boot media to be discovered through a standardized API.

Traditionally, most systems have only supported firmware storage on SPI flash. Presently, several other storage technologies are being used to store boot system firmware such as eMMC, UFS, and NVMe.

The API for all board, platform, and silicon code to consume the firmware boot media device is provided by the FirmwareBootMediaLib in IntelSiliconPkg.

A driver (FirmwareBootMediaInfoPei) is added to BoardModulePkg to serve as a consistent location for reporting the firmware boot device information. In order to abstract the potentially hardware-specific details to determine the boot media (for platforms that support multiple firmware boot media devices), the driver retrieves the boot media information using a new library class introduced called FirmwareBootMediaInfoLib. A default instance of this library class is provided in BoardModulePkg that always returns SPI flash. This is intended to serve as a default implementation of the library for the most common scenario and to easily allow a board package to substitute the logic required to determine the boot media in more complex scenarios. Ultimately, FirmwareBootMediaInfoPei produces a HOB containing the firmware boot media device information so it can be used in the HOB consumer phase.

Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Michael Kubacki <michael.a.kubacki@intel.com>

Michael Kubacki (3):
  IntelSiliconPkg/FirmwareBootMediaLib: Add library
  BoardModulePkg/FirmwareBootMediaInfoLib: Add library
  BoardModulePkg/FirmwareBootMediaInfoPei: Add module

 Platform/Intel/BoardModulePkg/BoardModulePkg.dec                                                  |   3 +
 Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec                                                 |   4 +-
 Platform/Intel/BoardModulePkg/BoardModulePkg.dsc                                                  |   5 +
 Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc                                                 |   4 +-
 Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.inf                  |  46 +++++++++
 Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.inf |  35 +++++++
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.inf        |  43 ++++++++
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.inf           |  38 +++++++
 Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLib.h                          |  26 +++++
 Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h                              | 106 +++++++++++++++++++
 Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.c                    |  76 ++++++++++++++
 Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.c   |  24 +++++
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.c          | 107 +++++++++++++++++++
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBootMediaLib.c                | 109 ++++++++++++++++++++
 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.c             |  82 +++++++++++++++
 15 files changed, 706 insertions(+), 2 deletions(-)  create mode 100644 Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.inf
 create mode 100644 Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.inf
 create mode 100644 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.inf
 create mode 100644 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.inf
 create mode 100644 Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLib.h
 create mode 100644 Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h
 create mode 100644 Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMediaInfoPei.c
 create mode 100644 Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.c
 create mode 100644 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMediaLib.c
 create mode 100644 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBootMediaLib.c
 create mode 100644 Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib.c

--
2.16.2.windows.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator
  2019-10-02 23:03 ` [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator Chaganty, Rangasai V
@ 2019-10-03  1:02   ` Kubacki, Michael A
  2019-10-03  4:20     ` [edk2-devel] " Andrew Fish
  0 siblings, 1 reply; 10+ messages in thread
From: Kubacki, Michael A @ 2019-10-03  1:02 UTC (permalink / raw)
  To: Chaganty, Rangasai V, devel@edk2.groups.io
  Cc: Dong, Eric, Gao, Liming, Ni, Ray

In platforms built for boot media other than SPI flash there has been a compelling
need for silicon and platform code to be aware of the firmware boot media but
apart from the UEFI variable driver (which is a special case being addressed
here - https://github.com/makubacki/edk2/tree/storage_agnostic_uefi_variables),
this has not been the case for edk2 repository packages. In some cases, code in SEC
has made assumptions about the reset vector or FIT pointer that do not necessarily
translate to storage media that does not support MMIO. These cases have been
handled more gracefully than checking the firmware boot media technology. This is
just an observation, not necessarily a case for it to stay in IntelSiliconPkg (which
does make it accessible to Intel silicon and platform code).

I suppose the firmware boot media properties could be treated in a similar manner
to Boot Mode as defined in the Platform Initialization spec. If this was done, it may
make more sense to abstract the technology impact onto firmware, for example,
whether it supports MMIO or not (NOR vs NAND flash) instead of what is defined
here with specific technologies such as eMMC and UFS. Otherwise, the specification
describing this would be subject to constant expansion over time keeping pace with
new technologies and cross-generation code (not silicon or platform specific drivers)
may base conditionals on something like eMMC when its algorithm really applies to
all NAND media (which, again, has been the proven observation thus far outside
silicon and platform code).

With that said, I see the firmware boot technology details being more pertinent to
silicon and platform code so that's why this change is made now. It can immediately
address existing needs for these details in silicon and platform code.  Some form of
the firmware boot media details in a more generic package could be useful but it
will likely not align closely with the scope of information needed at this level and is
an undertaking, that in my opinion, is separate but compatible with the work done here.

> -----Original Message-----
> From: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>
> Sent: Wednesday, October 2, 2019 4:03 PM
> To: Kubacki, Michael A <michael.a.kubacki@intel.com>;
> devel@edk2.groups.io
> Cc: Dong, Eric <eric.dong@intel.com>; Gao, Liming <liming.gao@intel.com>;
> Ni, Ray <ray.ni@intel.com>
> Subject: RE: [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device
> Indicator
> 
> I am not sure if there is a silicon scope around the FirmwareBootMediaLib.
> Have we considered adding this interface to MdePkg, instead?
> 
> -----Original Message-----
> From: Kubacki, Michael A
> Sent: Monday, September 30, 2019 6:16 PM
> To: devel@edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Dong, Eric
> <eric.dong@intel.com>; Gao, Liming <liming.gao@intel.com>; Ni, Ray
> <ray.ni@intel.com>
> Subject: [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device
> Indicator
> 
> This patch series introduces a mechanism for determining the firmware boot
> media device. This allows the firmware boot media to be discovered through
> a standardized API.
> 
> Traditionally, most systems have only supported firmware storage on SPI
> flash. Presently, several other storage technologies are being used to store
> boot system firmware such as eMMC, UFS, and NVMe.
> 
> The API for all board, platform, and silicon code to consume the firmware
> boot media device is provided by the FirmwareBootMediaLib in
> IntelSiliconPkg.
> 
> A driver (FirmwareBootMediaInfoPei) is added to BoardModulePkg to serve
> as a consistent location for reporting the firmware boot device information.
> In order to abstract the potentially hardware-specific details to determine
> the boot media (for platforms that support multiple firmware boot media
> devices), the driver retrieves the boot media information using a new library
> class introduced called FirmwareBootMediaInfoLib. A default instance of this
> library class is provided in BoardModulePkg that always returns SPI flash. This
> is intended to serve as a default implementation of the library for the most
> common scenario and to easily allow a board package to substitute the logic
> required to determine the boot media in more complex scenarios.
> Ultimately, FirmwareBootMediaInfoPei produces a HOB containing the
> firmware boot media device information so it can be used in the HOB
> consumer phase.
> 
> Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
> Cc: Eric Dong <eric.dong@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Signed-off-by: Michael Kubacki <michael.a.kubacki@intel.com>
> 
> Michael Kubacki (3):
>   IntelSiliconPkg/FirmwareBootMediaLib: Add library
>   BoardModulePkg/FirmwareBootMediaInfoLib: Add library
>   BoardModulePkg/FirmwareBootMediaInfoPei: Add module
> 
>  Platform/Intel/BoardModulePkg/BoardModulePkg.dec
> |   3 +
>  Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec                                                 |   4
> +-
>  Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
> |   5 +
>  Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc                                                 |   4
> +-
> 
> Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
> diaInfoPei.inf                  |  46 +++++++++
> 
> Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
> FirmwareBootMediaInfoLib.inf |  35 +++++++
> 
> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
> wareBootMediaLib.inf        |  43 ++++++++
> 
> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
> ootMediaLib.inf           |  38 +++++++
> 
> Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLi
> b.h                          |  26 +++++
>  Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h
> | 106 +++++++++++++++++++
> 
> Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
> diaInfoPei.c                    |  76 ++++++++++++++
> 
> Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
> FirmwareBootMediaInfoLib.c   |  24 +++++
> 
> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
> wareBootMediaLib.c          | 107 +++++++++++++++++++
> 
> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBoo
> tMediaLib.c                | 109 ++++++++++++++++++++
> 
> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
> ootMediaLib.c             |  82 +++++++++++++++
>  15 files changed, 706 insertions(+), 2 deletions(-)  create mode 100644
> Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
> diaInfoPei.inf
>  create mode 100644
> Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
> FirmwareBootMediaInfoLib.inf
>  create mode 100644
> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
> wareBootMediaLib.inf
>  create mode 100644
> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
> ootMediaLib.inf
>  create mode 100644
> Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLi
> b.h
>  create mode 100644
> Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h
>  create mode 100644
> Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
> diaInfoPei.c
>  create mode 100644
> Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
> FirmwareBootMediaInfoLib.c
>  create mode 100644
> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
> wareBootMediaLib.c
>  create mode 100644
> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBoo
> tMediaLib.c
>  create mode 100644
> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
> ootMediaLib.c
> 
> --
> 2.16.2.windows.1
> 


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [edk2-devel] [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator
  2019-10-03  1:02   ` Kubacki, Michael A
@ 2019-10-03  4:20     ` Andrew Fish
  2019-10-03  7:54       ` Kubacki, Michael A
  0 siblings, 1 reply; 10+ messages in thread
From: Andrew Fish @ 2019-10-03  4:20 UTC (permalink / raw)
  To: devel, michael.a.kubacki
  Cc: Chaganty, Rangasai V, Dong, Eric, Gao, Liming, Ni, Ray

[-- Attachment #1: Type: text/plain, Size: 10731 bytes --]

Since I was around back in the Intel Tiano days and I've worked on all the PI specs I can share the history. 

The reset vector is a hardware thing. It is usually at the top or bottom of the address space. For x86 it is at the TOP of the ROM and that is why the FV has a VoluteTop file GUID that places the file at the end of the FV, thus the end of that file is the reset vector. If the reset vector is low then the FV header starts with a 16 byte ZeroVector that can contain the reset jump instruction. The other architecture that is out there is a mask ROM, and the mask ROM is the reset vector, and that code hands off to the 2nd level, and sometimes that can be in DRAM or ROM. 

The PI FVs (Firmware Volumes) are abstracted by Firmware Volume Blocks (FVB) the FVB instances abstract the storage media for the firmware. Thus from a PI spec point of view there is not need to define the storage type of the "ROM". That is just an implementation detail, that needs to be managed by the implementation. 

If you think about in UEFI disk are abstracted by the Block IO protocol. We can boot an OS from any Block device, and the firmware does not need to know what kind of disk it is. The purpose of the Block IO protocol is to abstract all possible implementations o block devices. For the "Boot ROM", FVB is the same kind of abstraction. So you can implement PI with out knowing the media type. Managing the media type was is a platform abstraction, thus there is no need for a boot media abstraction in the MdePkg. 

That being said the PI architecture is abstract to a fault. It was designed to abstract all possible future platforms. If there are a family of platforms that share common properties it makes sense to build a platform abstraction package that a set of platforms can share. This is the intent of the PI architecture and the EDKII source base. 

The MdePkg implements the UEFI and PI specs, and other industry standards, with some common libs thrown in. So the MdePkg is not the place to put some implementation hint about the Media Device. You could use a GUIDed HOB for that if needed?

Thanks,

Andrew Fish

> On Oct 2, 2019, at 8:02 PM, Kubacki, Michael A <michael.a.kubacki@intel.com> wrote:
> 
> In platforms built for boot media other than SPI flash there has been a compelling
> need for silicon and platform code to be aware of the firmware boot media but
> apart from the UEFI variable driver (which is a special case being addressed
> here - https://github.com/makubacki/edk2/tree/storage_agnostic_uefi_variables <https://github.com/makubacki/edk2/tree/storage_agnostic_uefi_variables>),
> this has not been the case for edk2 repository packages. In some cases, code in SEC
> has made assumptions about the reset vector or FIT pointer that do not necessarily
> translate to storage media that does not support MMIO. These cases have been
> handled more gracefully than checking the firmware boot media technology. This is
> just an observation, not necessarily a case for it to stay in IntelSiliconPkg (which
> does make it accessible to Intel silicon and platform code).
> 
> I suppose the firmware boot media properties could be treated in a similar manner
> to Boot Mode as defined in the Platform Initialization spec. If this was done, it may
> make more sense to abstract the technology impact onto firmware, for example,
> whether it supports MMIO or not (NOR vs NAND flash) instead of what is defined
> here with specific technologies such as eMMC and UFS. Otherwise, the specification
> describing this would be subject to constant expansion over time keeping pace with
> new technologies and cross-generation code (not silicon or platform specific drivers)
> may base conditionals on something like eMMC when its algorithm really applies to
> all NAND media (which, again, has been the proven observation thus far outside
> silicon and platform code).
> 
> With that said, I see the firmware boot technology details being more pertinent to
> silicon and platform code so that's why this change is made now. It can immediately
> address existing needs for these details in silicon and platform code.  Some form of
> the firmware boot media details in a more generic package could be useful but it
> will likely not align closely with the scope of information needed at this level and is
> an undertaking, that in my opinion, is separate but compatible with the work done here.
> 
>> -----Original Message-----
>> From: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com <mailto:rangasai.v.chaganty@intel.com>>
>> Sent: Wednesday, October 2, 2019 4:03 PM
>> To: Kubacki, Michael A <michael.a.kubacki@intel.com <mailto:michael.a.kubacki@intel.com>>;
>> devel@edk2.groups.io <mailto:devel@edk2.groups.io>
>> Cc: Dong, Eric <eric.dong@intel.com <mailto:eric.dong@intel.com>>; Gao, Liming <liming.gao@intel.com <mailto:liming.gao@intel.com>>;
>> Ni, Ray <ray.ni@intel.com <mailto:ray.ni@intel.com>>
>> Subject: RE: [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device
>> Indicator
>> 
>> I am not sure if there is a silicon scope around the FirmwareBootMediaLib.
>> Have we considered adding this interface to MdePkg, instead?
>> 
>> -----Original Message-----
>> From: Kubacki, Michael A
>> Sent: Monday, September 30, 2019 6:16 PM
>> To: devel@edk2.groups.io
>> Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Dong, Eric
>> <eric.dong@intel.com>; Gao, Liming <liming.gao@intel.com>; Ni, Ray
>> <ray.ni@intel.com>
>> Subject: [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device
>> Indicator
>> 
>> This patch series introduces a mechanism for determining the firmware boot
>> media device. This allows the firmware boot media to be discovered through
>> a standardized API.
>> 
>> Traditionally, most systems have only supported firmware storage on SPI
>> flash. Presently, several other storage technologies are being used to store
>> boot system firmware such as eMMC, UFS, and NVMe.
>> 
>> The API for all board, platform, and silicon code to consume the firmware
>> boot media device is provided by the FirmwareBootMediaLib in
>> IntelSiliconPkg.
>> 
>> A driver (FirmwareBootMediaInfoPei) is added to BoardModulePkg to serve
>> as a consistent location for reporting the firmware boot device information.
>> In order to abstract the potentially hardware-specific details to determine
>> the boot media (for platforms that support multiple firmware boot media
>> devices), the driver retrieves the boot media information using a new library
>> class introduced called FirmwareBootMediaInfoLib. A default instance of this
>> library class is provided in BoardModulePkg that always returns SPI flash. This
>> is intended to serve as a default implementation of the library for the most
>> common scenario and to easily allow a board package to substitute the logic
>> required to determine the boot media in more complex scenarios.
>> Ultimately, FirmwareBootMediaInfoPei produces a HOB containing the
>> firmware boot media device information so it can be used in the HOB
>> consumer phase.
>> 
>> Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
>> Cc: Eric Dong <eric.dong@intel.com>
>> Cc: Liming Gao <liming.gao@intel.com>
>> Cc: Ray Ni <ray.ni@intel.com>
>> Signed-off-by: Michael Kubacki <michael.a.kubacki@intel.com>
>> 
>> Michael Kubacki (3):
>>  IntelSiliconPkg/FirmwareBootMediaLib: Add library
>>  BoardModulePkg/FirmwareBootMediaInfoLib: Add library
>>  BoardModulePkg/FirmwareBootMediaInfoPei: Add module
>> 
>> Platform/Intel/BoardModulePkg/BoardModulePkg.dec
>> |   3 +
>> Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec                                                 |   4
>> +-
>> Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
>> |   5 +
>> Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc                                                 |   4
>> +-
>> 
>> Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
>> diaInfoPei.inf                  |  46 +++++++++
>> 
>> Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
>> FirmwareBootMediaInfoLib.inf |  35 +++++++
>> 
>> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
>> wareBootMediaLib.inf        |  43 ++++++++
>> 
>> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
>> ootMediaLib.inf           |  38 +++++++
>> 
>> Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLi
>> b.h                          |  26 +++++
>> Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h
>> | 106 +++++++++++++++++++
>> 
>> Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
>> diaInfoPei.c                    |  76 ++++++++++++++
>> 
>> Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
>> FirmwareBootMediaInfoLib.c   |  24 +++++
>> 
>> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
>> wareBootMediaLib.c          | 107 +++++++++++++++++++
>> 
>> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBoo
>> tMediaLib.c                | 109 ++++++++++++++++++++
>> 
>> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
>> ootMediaLib.c             |  82 +++++++++++++++
>> 15 files changed, 706 insertions(+), 2 deletions(-)  create mode 100644
>> Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
>> diaInfoPei.inf
>> create mode 100644
>> Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
>> FirmwareBootMediaInfoLib.inf
>> create mode 100644
>> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
>> wareBootMediaLib.inf
>> create mode 100644
>> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
>> ootMediaLib.inf
>> create mode 100644
>> Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLi
>> b.h
>> create mode 100644
>> Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h
>> create mode 100644
>> Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
>> diaInfoPei.c
>> create mode 100644
>> Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
>> FirmwareBootMediaInfoLib.c
>> create mode 100644
>> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
>> wareBootMediaLib.c
>> create mode 100644
>> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBoo
>> tMediaLib.c
>> create mode 100644
>> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
>> ootMediaLib.c
>> 
>> --
>> 2.16.2.windows.1
>> 
> 
> 
> 


[-- Attachment #2: Type: text/html, Size: 36360 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [edk2-devel] [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator
  2019-10-03  4:20     ` [edk2-devel] " Andrew Fish
@ 2019-10-03  7:54       ` Kubacki, Michael A
  2019-10-07  1:34         ` Chaganty, Rangasai V
  0 siblings, 1 reply; 10+ messages in thread
From: Kubacki, Michael A @ 2019-10-03  7:54 UTC (permalink / raw)
  To: afish@apple.com, devel@edk2.groups.io
  Cc: Chaganty, Rangasai V, Dong, Eric, Gao, Liming, Ni, Ray

[-- Attachment #1: Type: text/plain, Size: 12037 bytes --]

Thanks for sharing. You articulated well why I also don't think this is required in MdePkg. My
description of the reset vector problem was kind of incomplete. While the x86 reset vector
is fixed at the top of the address space, that does not mean that a FV has to be mapped to it
(or any SPI flash based content). SEC has made that assumption. For example, the top
address space could be mapped to another random access memory with x86 instructions.
In this case, assumptions previously made in SecCore such as calculating the BFV size as follows are invalid:
  SecCoreData.BootFirmwareVolumeSize = (UINTN)(0x100000000ULL - (UINTN) BootFirmwareVolume);

In a system with NAND media, the BFV could be located in CAR at a base of 4GB-xKB/MB with
execution entry via a jump from the code at top of memory. In this particular case, the FvLength
field can more reliably determine the FV size.

These patches use a GUIDed HOB. It just hides that detail behind a function API largely added
for convenience so firmware boot media consumers do not need to handle the HOB related logic.

Thanks,
Michael

From: afish@apple.com <afish@apple.com>
Sent: Wednesday, October 2, 2019 9:20 PM
To: devel@edk2.groups.io; Kubacki, Michael A <michael.a.kubacki@intel.com>
Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Dong, Eric <eric.dong@intel.com>; Gao, Liming <liming.gao@intel.com>; Ni, Ray <ray.ni@intel.com>
Subject: Re: [edk2-devel] [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator

Since I was around back in the Intel Tiano days and I've worked on all the PI specs I can share the history.

The reset vector is a hardware thing. It is usually at the top or bottom of the address space. For x86 it is at the TOP of the ROM and that is why the FV has a VoluteTop file GUID that places the file at the end of the FV, thus the end of that file is the reset vector. If the reset vector is low then the FV header starts with a 16 byte ZeroVector that can contain the reset jump instruction. The other architecture that is out there is a mask ROM, and the mask ROM is the reset vector, and that code hands off to the 2nd level, and sometimes that can be in DRAM or ROM.

The PI FVs (Firmware Volumes) are abstracted by Firmware Volume Blocks (FVB) the FVB instances abstract the storage media for the firmware. Thus from a PI spec point of view there is not need to define the storage type of the "ROM". That is just an implementation detail, that needs to be managed by the implementation.

If you think about in UEFI disk are abstracted by the Block IO protocol. We can boot an OS from any Block device, and the firmware does not need to know what kind of disk it is. The purpose of the Block IO protocol is to abstract all possible implementations o block devices. For the "Boot ROM", FVB is the same kind of abstraction. So you can implement PI with out knowing the media type. Managing the media type was is a platform abstraction, thus there is no need for a boot media abstraction in the MdePkg.

That being said the PI architecture is abstract to a fault. It was designed to abstract all possible future platforms. If there are a family of platforms that share common properties it makes sense to build a platform abstraction package that a set of platforms can share. This is the intent of the PI architecture and the EDKII source base.

The MdePkg implements the UEFI and PI specs, and other industry standards, with some common libs thrown in. So the MdePkg is not the place to put some implementation hint about the Media Device. You could use a GUIDed HOB for that if needed?

Thanks,

Andrew Fish


On Oct 2, 2019, at 8:02 PM, Kubacki, Michael A <michael.a.kubacki@intel.com<mailto:michael.a.kubacki@intel.com>> wrote:

In platforms built for boot media other than SPI flash there has been a compelling
need for silicon and platform code to be aware of the firmware boot media but
apart from the UEFI variable driver (which is a special case being addressed
here - https://github.com/makubacki/edk2/tree/storage_agnostic_uefi_variables),
this has not been the case for edk2 repository packages. In some cases, code in SEC
has made assumptions about the reset vector or FIT pointer that do not necessarily
translate to storage media that does not support MMIO. These cases have been
handled more gracefully than checking the firmware boot media technology. This is
just an observation, not necessarily a case for it to stay in IntelSiliconPkg (which
does make it accessible to Intel silicon and platform code).

I suppose the firmware boot media properties could be treated in a similar manner
to Boot Mode as defined in the Platform Initialization spec. If this was done, it may
make more sense to abstract the technology impact onto firmware, for example,
whether it supports MMIO or not (NOR vs NAND flash) instead of what is defined
here with specific technologies such as eMMC and UFS. Otherwise, the specification
describing this would be subject to constant expansion over time keeping pace with
new technologies and cross-generation code (not silicon or platform specific drivers)
may base conditionals on something like eMMC when its algorithm really applies to
all NAND media (which, again, has been the proven observation thus far outside
silicon and platform code).

With that said, I see the firmware boot technology details being more pertinent to
silicon and platform code so that's why this change is made now. It can immediately
address existing needs for these details in silicon and platform code.  Some form of
the firmware boot media details in a more generic package could be useful but it
will likely not align closely with the scope of information needed at this level and is
an undertaking, that in my opinion, is separate but compatible with the work done here.


-----Original Message-----
From: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com<mailto:rangasai.v.chaganty@intel.com>>
Sent: Wednesday, October 2, 2019 4:03 PM
To: Kubacki, Michael A <michael.a.kubacki@intel.com<mailto:michael.a.kubacki@intel.com>>;
devel@edk2.groups.io<mailto:devel@edk2.groups.io>
Cc: Dong, Eric <eric.dong@intel.com<mailto:eric.dong@intel.com>>; Gao, Liming <liming.gao@intel.com<mailto:liming.gao@intel.com>>;
Ni, Ray <ray.ni@intel.com<mailto:ray.ni@intel.com>>
Subject: RE: [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device
Indicator

I am not sure if there is a silicon scope around the FirmwareBootMediaLib.
Have we considered adding this interface to MdePkg, instead?

-----Original Message-----
From: Kubacki, Michael A
Sent: Monday, September 30, 2019 6:16 PM
To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>
Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com<mailto:rangasai.v.chaganty@intel.com>>; Dong, Eric
<eric.dong@intel.com<mailto:eric.dong@intel.com>>; Gao, Liming <liming.gao@intel.com<mailto:liming.gao@intel.com>>; Ni, Ray
<ray.ni@intel.com<mailto:ray.ni@intel.com>>
Subject: [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device
Indicator

This patch series introduces a mechanism for determining the firmware boot
media device. This allows the firmware boot media to be discovered through
a standardized API.

Traditionally, most systems have only supported firmware storage on SPI
flash. Presently, several other storage technologies are being used to store
boot system firmware such as eMMC, UFS, and NVMe.

The API for all board, platform, and silicon code to consume the firmware
boot media device is provided by the FirmwareBootMediaLib in
IntelSiliconPkg.

A driver (FirmwareBootMediaInfoPei) is added to BoardModulePkg to serve
as a consistent location for reporting the firmware boot device information.
In order to abstract the potentially hardware-specific details to determine
the boot media (for platforms that support multiple firmware boot media
devices), the driver retrieves the boot media information using a new library
class introduced called FirmwareBootMediaInfoLib. A default instance of this
library class is provided in BoardModulePkg that always returns SPI flash. This
is intended to serve as a default implementation of the library for the most
common scenario and to easily allow a board package to substitute the logic
required to determine the boot media in more complex scenarios.
Ultimately, FirmwareBootMediaInfoPei produces a HOB containing the
firmware boot media device information so it can be used in the HOB
consumer phase.

Cc: Sai Chaganty <rangasai.v.chaganty@intel.com<mailto:rangasai.v.chaganty@intel.com>>
Cc: Eric Dong <eric.dong@intel.com<mailto:eric.dong@intel.com>>
Cc: Liming Gao <liming.gao@intel.com<mailto:liming.gao@intel.com>>
Cc: Ray Ni <ray.ni@intel.com<mailto:ray.ni@intel.com>>
Signed-off-by: Michael Kubacki <michael.a.kubacki@intel.com<mailto:michael.a.kubacki@intel.com>>

Michael Kubacki (3):
 IntelSiliconPkg/FirmwareBootMediaLib: Add library
 BoardModulePkg/FirmwareBootMediaInfoLib: Add library
 BoardModulePkg/FirmwareBootMediaInfoPei: Add module

Platform/Intel/BoardModulePkg/BoardModulePkg.dec
|   3 +
Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec                                                 |   4
+-
Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
|   5 +
Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc                                                 |   4
+-

Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
diaInfoPei.inf                  |  46 +++++++++

Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
FirmwareBootMediaInfoLib.inf |  35 +++++++

Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
wareBootMediaLib.inf        |  43 ++++++++

Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
ootMediaLib.inf           |  38 +++++++

Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLi
b.h                          |  26 +++++
Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h
| 106 +++++++++++++++++++

Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
diaInfoPei.c                    |  76 ++++++++++++++

Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
FirmwareBootMediaInfoLib.c   |  24 +++++

Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
wareBootMediaLib.c          | 107 +++++++++++++++++++

Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBoo
tMediaLib.c                | 109 ++++++++++++++++++++

Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
ootMediaLib.c             |  82 +++++++++++++++
15 files changed, 706 insertions(+), 2 deletions(-)  create mode 100644
Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
diaInfoPei.inf
create mode 100644
Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
FirmwareBootMediaInfoLib.inf
create mode 100644
Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
wareBootMediaLib.inf
create mode 100644
Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
ootMediaLib.inf
create mode 100644
Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLi
b.h
create mode 100644
Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h
create mode 100644
Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
diaInfoPei.c
create mode 100644
Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
FirmwareBootMediaInfoLib.c
create mode 100644
Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
wareBootMediaLib.c
create mode 100644
Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBoo
tMediaLib.c
create mode 100644
Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
ootMediaLib.c

--
2.16.2.windows.1





[-- Attachment #2: Type: text/html, Size: 19875 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [edk2-devel] [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator
  2019-10-03  7:54       ` Kubacki, Michael A
@ 2019-10-07  1:34         ` Chaganty, Rangasai V
  0 siblings, 0 replies; 10+ messages in thread
From: Chaganty, Rangasai V @ 2019-10-07  1:34 UTC (permalink / raw)
  To: Kubacki, Michael A, afish@apple.com, devel@edk2.groups.io
  Cc: Dong, Eric, Gao, Liming, Ni, Ray

[-- Attachment #1: Type: text/plain, Size: 13145 bytes --]

Thank you both for sharing the background and justification on why this should not be part of MdePkg.
In general, it appeared we could locate a PPI that provides Boot Media (similar to how EFI_SEC_PLATFORM_INFORMATION2_PPI is located to know information gathered in SEC phase into PEI) or a guided HOB produced by the Platform code.
This patch series choses the latter option which is simpler implementation and serves the needs of silicon and platform code for a non- SPI boot media scenario.

Regards,
Sai

From: Kubacki, Michael A
Sent: Thursday, October 03, 2019 12:55 AM
To: afish@apple.com; devel@edk2.groups.io
Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Dong, Eric <eric.dong@intel.com>; Gao, Liming <liming.gao@intel.com>; Ni, Ray <ray.ni@intel.com>
Subject: RE: [edk2-devel] [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator

Thanks for sharing. You articulated well why I also don't think this is required in MdePkg. My
description of the reset vector problem was kind of incomplete. While the x86 reset vector
is fixed at the top of the address space, that does not mean that a FV has to be mapped to it
(or any SPI flash based content). SEC has made that assumption. For example, the top
address space could be mapped to another random access memory with x86 instructions.
In this case, assumptions previously made in SecCore such as calculating the BFV size as follows are invalid:
  SecCoreData.BootFirmwareVolumeSize = (UINTN)(0x100000000ULL - (UINTN) BootFirmwareVolume);

In a system with NAND media, the BFV could be located in CAR at a base of 4GB-xKB/MB with
execution entry via a jump from the code at top of memory. In this particular case, the FvLength
field can more reliably determine the FV size.

These patches use a GUIDed HOB. It just hides that detail behind a function API largely added
for convenience so firmware boot media consumers do not need to handle the HOB related logic.

Thanks,
Michael

From: afish@apple.com<mailto:afish@apple.com> <afish@apple.com<mailto:afish@apple.com>>
Sent: Wednesday, October 2, 2019 9:20 PM
To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>; Kubacki, Michael A <michael.a.kubacki@intel.com<mailto:michael.a.kubacki@intel.com>>
Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com<mailto:rangasai.v.chaganty@intel.com>>; Dong, Eric <eric.dong@intel.com<mailto:eric.dong@intel.com>>; Gao, Liming <liming.gao@intel.com<mailto:liming.gao@intel.com>>; Ni, Ray <ray.ni@intel.com<mailto:ray.ni@intel.com>>
Subject: Re: [edk2-devel] [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator

Since I was around back in the Intel Tiano days and I've worked on all the PI specs I can share the history.

The reset vector is a hardware thing. It is usually at the top or bottom of the address space. For x86 it is at the TOP of the ROM and that is why the FV has a VoluteTop file GUID that places the file at the end of the FV, thus the end of that file is the reset vector. If the reset vector is low then the FV header starts with a 16 byte ZeroVector that can contain the reset jump instruction. The other architecture that is out there is a mask ROM, and the mask ROM is the reset vector, and that code hands off to the 2nd level, and sometimes that can be in DRAM or ROM.

The PI FVs (Firmware Volumes) are abstracted by Firmware Volume Blocks (FVB) the FVB instances abstract the storage media for the firmware. Thus from a PI spec point of view there is not need to define the storage type of the "ROM". That is just an implementation detail, that needs to be managed by the implementation.

If you think about in UEFI disk are abstracted by the Block IO protocol. We can boot an OS from any Block device, and the firmware does not need to know what kind of disk it is. The purpose of the Block IO protocol is to abstract all possible implementations o block devices. For the "Boot ROM", FVB is the same kind of abstraction. So you can implement PI with out knowing the media type. Managing the media type was is a platform abstraction, thus there is no need for a boot media abstraction in the MdePkg.

That being said the PI architecture is abstract to a fault. It was designed to abstract all possible future platforms. If there are a family of platforms that share common properties it makes sense to build a platform abstraction package that a set of platforms can share. This is the intent of the PI architecture and the EDKII source base.

The MdePkg implements the UEFI and PI specs, and other industry standards, with some common libs thrown in. So the MdePkg is not the place to put some implementation hint about the Media Device. You could use a GUIDed HOB for that if needed?

Thanks,

Andrew Fish

On Oct 2, 2019, at 8:02 PM, Kubacki, Michael A <michael.a.kubacki@intel.com<mailto:michael.a.kubacki@intel.com>> wrote:

In platforms built for boot media other than SPI flash there has been a compelling
need for silicon and platform code to be aware of the firmware boot media but
apart from the UEFI variable driver (which is a special case being addressed
here - https://github.com/makubacki/edk2/tree/storage_agnostic_uefi_variables),
this has not been the case for edk2 repository packages. In some cases, code in SEC
has made assumptions about the reset vector or FIT pointer that do not necessarily
translate to storage media that does not support MMIO. These cases have been
handled more gracefully than checking the firmware boot media technology. This is
just an observation, not necessarily a case for it to stay in IntelSiliconPkg (which
does make it accessible to Intel silicon and platform code).

I suppose the firmware boot media properties could be treated in a similar manner
to Boot Mode as defined in the Platform Initialization spec. If this was done, it may
make more sense to abstract the technology impact onto firmware, for example,
whether it supports MMIO or not (NOR vs NAND flash) instead of what is defined
here with specific technologies such as eMMC and UFS. Otherwise, the specification
describing this would be subject to constant expansion over time keeping pace with
new technologies and cross-generation code (not silicon or platform specific drivers)
may base conditionals on something like eMMC when its algorithm really applies to
all NAND media (which, again, has been the proven observation thus far outside
silicon and platform code).

With that said, I see the firmware boot technology details being more pertinent to
silicon and platform code so that's why this change is made now. It can immediately
address existing needs for these details in silicon and platform code.  Some form of
the firmware boot media details in a more generic package could be useful but it
will likely not align closely with the scope of information needed at this level and is
an undertaking, that in my opinion, is separate but compatible with the work done here.

-----Original Message-----
From: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com<mailto:rangasai.v.chaganty@intel.com>>
Sent: Wednesday, October 2, 2019 4:03 PM
To: Kubacki, Michael A <michael.a.kubacki@intel.com<mailto:michael.a.kubacki@intel.com>>;
devel@edk2.groups.io<mailto:devel@edk2.groups.io>
Cc: Dong, Eric <eric.dong@intel.com<mailto:eric.dong@intel.com>>; Gao, Liming <liming.gao@intel.com<mailto:liming.gao@intel.com>>;
Ni, Ray <ray.ni@intel.com<mailto:ray.ni@intel.com>>
Subject: RE: [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device
Indicator

I am not sure if there is a silicon scope around the FirmwareBootMediaLib.
Have we considered adding this interface to MdePkg, instead?

-----Original Message-----
From: Kubacki, Michael A
Sent: Monday, September 30, 2019 6:16 PM
To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>
Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com<mailto:rangasai.v.chaganty@intel.com>>; Dong, Eric
<eric.dong@intel.com<mailto:eric.dong@intel.com>>; Gao, Liming <liming.gao@intel.com<mailto:liming.gao@intel.com>>; Ni, Ray
<ray.ni@intel.com<mailto:ray.ni@intel.com>>
Subject: [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device
Indicator

This patch series introduces a mechanism for determining the firmware boot
media device. This allows the firmware boot media to be discovered through
a standardized API.

Traditionally, most systems have only supported firmware storage on SPI
flash. Presently, several other storage technologies are being used to store
boot system firmware such as eMMC, UFS, and NVMe.

The API for all board, platform, and silicon code to consume the firmware
boot media device is provided by the FirmwareBootMediaLib in
IntelSiliconPkg.

A driver (FirmwareBootMediaInfoPei) is added to BoardModulePkg to serve
as a consistent location for reporting the firmware boot device information.
In order to abstract the potentially hardware-specific details to determine
the boot media (for platforms that support multiple firmware boot media
devices), the driver retrieves the boot media information using a new library
class introduced called FirmwareBootMediaInfoLib. A default instance of this
library class is provided in BoardModulePkg that always returns SPI flash. This
is intended to serve as a default implementation of the library for the most
common scenario and to easily allow a board package to substitute the logic
required to determine the boot media in more complex scenarios.
Ultimately, FirmwareBootMediaInfoPei produces a HOB containing the
firmware boot media device information so it can be used in the HOB
consumer phase.

Cc: Sai Chaganty <rangasai.v.chaganty@intel.com<mailto:rangasai.v.chaganty@intel.com>>
Cc: Eric Dong <eric.dong@intel.com<mailto:eric.dong@intel.com>>
Cc: Liming Gao <liming.gao@intel.com<mailto:liming.gao@intel.com>>
Cc: Ray Ni <ray.ni@intel.com<mailto:ray.ni@intel.com>>
Signed-off-by: Michael Kubacki <michael.a.kubacki@intel.com<mailto:michael.a.kubacki@intel.com>>

Michael Kubacki (3):
 IntelSiliconPkg/FirmwareBootMediaLib: Add library
 BoardModulePkg/FirmwareBootMediaInfoLib: Add library
 BoardModulePkg/FirmwareBootMediaInfoPei: Add module

Platform/Intel/BoardModulePkg/BoardModulePkg.dec
|   3 +
Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec                                                 |   4
+-
Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
|   5 +
Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc                                                 |   4
+-

Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
diaInfoPei.inf                  |  46 +++++++++

Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
FirmwareBootMediaInfoLib.inf |  35 +++++++

Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
wareBootMediaLib.inf        |  43 ++++++++

Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
ootMediaLib.inf           |  38 +++++++

Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLi
b.h                          |  26 +++++
Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h
| 106 +++++++++++++++++++

Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
diaInfoPei.c                    |  76 ++++++++++++++

Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
FirmwareBootMediaInfoLib.c   |  24 +++++

Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
wareBootMediaLib.c          | 107 +++++++++++++++++++

Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBoo
tMediaLib.c                | 109 ++++++++++++++++++++

Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
ootMediaLib.c             |  82 +++++++++++++++
15 files changed, 706 insertions(+), 2 deletions(-)  create mode 100644
Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
diaInfoPei.inf
create mode 100644
Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
FirmwareBootMediaInfoLib.inf
create mode 100644
Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
wareBootMediaLib.inf
create mode 100644
Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
ootMediaLib.inf
create mode 100644
Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLi
b.h
create mode 100644
Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h
create mode 100644
Platform/Intel/BoardModulePkg/FirmwareBootMediaInfo/FirmwareBootMe
diaInfoPei.c
create mode 100644
Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/Pei
FirmwareBootMediaInfoLib.c
create mode 100644
Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm
wareBootMediaLib.c
create mode 100644
Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBoo
tMediaLib.c
create mode 100644
Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
ootMediaLib.c

--
2.16.2.windows.1





[-- Attachment #2: Type: text/html, Size: 21889 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [edk2-platforms][PATCH V1 2/3] BoardModulePkg/FirmwareBootMediaInfoLib: Add library
  2019-10-01  1:15 ` [edk2-platforms][PATCH V1 2/3] BoardModulePkg/FirmwareBootMediaInfoLib: " Kubacki, Michael A
@ 2019-10-08  7:01   ` Dong, Eric
  0 siblings, 0 replies; 10+ messages in thread
From: Dong, Eric @ 2019-10-08  7:01 UTC (permalink / raw)
  To: Kubacki, Michael A, devel@edk2.groups.io; +Cc: Gao, Liming

Reviewed-by: Eric Dong <eric .dong@intel.com>

> -----Original Message-----
> From: Kubacki, Michael A
> Sent: Tuesday, October 1, 2019 9:16 AM
> To: devel@edk2.groups.io
> Cc: Dong, Eric <eric.dong@intel.com>; Gao, Liming <liming.gao@intel.com>
> Subject: [edk2-platforms][PATCH V1 2/3]
> BoardModulePkg/FirmwareBootMediaInfoLib: Add library
> 
> REF:https://bugzilla.tianocore.org/show_bug.cgi?id=2229
> 
> Introduces a new library class FirmwareBootMediaInfoLib that is used to
> report the firmware boot media device. A default library instance is provided
> that always returns the firmware boot media is SPI flash. For platforms with
> other firmware boot media options, a board-specific instance of this library
> should be used instead to provide the correct firmware boot media device
> information.
> 
> Cc: Eric Dong <eric.dong@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Signed-off-by: Michael Kubacki <michael.a.kubacki@intel.com>
> ---
>  Platform/Intel/BoardModulePkg/BoardModulePkg.dec
> |  3 ++
>  Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
> |  3 ++
> 
> Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFir
> mwareBootMediaInfoLib.inf | 35 ++++++++++++++++++++
>  Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLib.h
> | 26 +++++++++++++++
> 
> Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFir
> mwareBootMediaInfoLib.c   | 24 ++++++++++++++
>  5 files changed, 91 insertions(+)
> 
> diff --git a/Platform/Intel/BoardModulePkg/BoardModulePkg.dec
> b/Platform/Intel/BoardModulePkg/BoardModulePkg.dec
> index 6f13945ca8..c42f38c32a 100644
> --- a/Platform/Intel/BoardModulePkg/BoardModulePkg.dec
> +++ b/Platform/Intel/BoardModulePkg/BoardModulePkg.dec
> @@ -33,6 +33,9 @@
>    ##  @libraryclass    Provide services to get BIOS ID information.
>    BiosIdLib|Include/Library/BiosIdLib.h
> 
> +  ## @libraryclass     Provide a service to determine the firmware boot media
> device.
> +  FirmwareBootMediaInfoLib|Include/Library/FirmwareBootMediaInfoLib.h
> +
>  [Guids]
>    ## Include Include/Guid/BiosId.h
>    gBiosIdGuid = { 0xC3E36D09, 0x8294, 0x4b97, { 0xA8, 0x57, 0xD5, 0x28, 0x8F,
> 0xE3, 0x3E, 0x28 } } diff --git
> a/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
> b/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
> index 734ead9be8..78c09fbf82 100644
> --- a/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
> +++ b/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc
> @@ -33,6 +33,8 @@
>    DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
> 
>  [LibraryClasses.common.PEIM]
> +
> +
> FirmwareBootMediaLib|IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Pei
> + FirmwareBootMediaLib.inf
> +
> FirmwareBootMediaInfoLib|BoardModulePkg/Library/PeiFirmwareBootMediaI
> n
> + foLib/PeiFirmwareBootMediaInfoLib.inf
>    HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
> 
> MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAll
> ocationLib.inf
> 
> @@ -42,6 +44,7 @@
>  [LibraryClasses.common.DXE_DRIVER]
>    HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
> 
> MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemory
> AllocationLib.inf
> +
> +
> FirmwareBootMediaLib|IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Dxe
> + SmmFirmwareBootMediaLib.inf
> 
>  [LibraryClasses.common.UEFI_DRIVER]
>    HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
> diff --git
> a/Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFi
> rmwareBootMediaInfoLib.inf
> b/Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFi
> rmwareBootMediaInfoLib.inf
> new file mode 100644
> index 0000000000..637aeca2af
> --- /dev/null
> +++ b/Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/
> +++ PeiFirmwareBootMediaInfoLib.inf
> @@ -0,0 +1,35 @@
> +## @file
> +# Firmware Boot Media Info Library
> +#
> +# This library identifies firmware boot media device information used
> +in the boot flow for system initialization # decisions dependent upon the
> firmware boot media.
> +#
> +# This library instance provides a default implementation of the
> +FirmwareBootMediaInfoLib library class that always # returns SPI flash
> +as the boot media device. For any system firmware in which this is not the
> case, an instance # of this library class should be provided that returns the
> correct boot media for the platform.
> +#
> +# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> # #
> +SPDX-License-Identifier: BSD-2-Clause-Patent # ##
> +
> +[Defines]
> +  INF_VERSION          = 0x00010005
> +  BASE_NAME            = PeiFirmwareBootMediaInfoLib
> +  FILE_GUID            = 91CC29F5-AEAD-4108-9E91-C8DECDC1C654
> +  MODULE_TYPE          = PEIM
> +  VERSION_STRING       = 1.0
> +  LIBRARY_CLASS        = FirmwareBootMediaInfoLib
> +
> +[Sources]
> +  PeiFirmwareBootMediaInfoLib.c
> +
> +[Packages]
> +  MdePkg/MdePkg.dec
> +  IntelSiliconPkg/IntelSiliconPkg.dec
> +  BoardModulePkg/BoardModulePkg.dec
> +
> +[LibraryClasses]
> +  BaseLib
> +  FirmwareBootMediaLib
> diff --git
> a/Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLib
> .h
> b/Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInfoLib
> .h
> new file mode 100644
> index 0000000000..b08f21ac74
> --- /dev/null
> +++ b/Platform/Intel/BoardModulePkg/Include/Library/FirmwareBootMediaInf
> +++ oLib.h
> @@ -0,0 +1,26 @@
> +/** @file
> +  This library identifies the firmware boot media device.
> +
> +Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#ifndef _FIRMWARE_BOOT_MEDIA_INFO_LIB_H_ #define
> +_FIRMWARE_BOOT_MEDIA_INFO_LIB_H_
> +
> +#include <Uefi.h>
> +#include <Library/FirmwareBootMediaLib.h>
> +
> +/**
> +  Identifies the firmware boot media type for the current boot.
> +
> +  @retval BOOT_MEDIA_TYPE   The boot media type. A value of
> FwBootMediaTypeMax indicates the firmware boot media
> +                            information is unavailable.
> +**/
> +FW_BOOT_MEDIA_TYPE
> +IdentifyFirmwareBootMediaType (
> +  VOID
> +  );
> +
> +#endif
> diff --git
> a/Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFi
> rmwareBootMediaInfoLib.c
> b/Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFi
> rmwareBootMediaInfoLib.c
> new file mode 100644
> index 0000000000..0c29d96033
> --- /dev/null
> +++ b/Platform/Intel/BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/
> +++ PeiFirmwareBootMediaInfoLib.c
> @@ -0,0 +1,24 @@
> +/** @file
> +  This library identifies the firmware boot media device.
> +
> +Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#include <Library/BaseLib.h>
> +#include <Library/FirmwareBootMediaInfoLib.h>
> +
> +/**
> +  Identifies the firmware boot media type for the current boot.
> +
> +  @retval BOOT_MEDIA_TYPE   The boot media type. A value of
> FwBootMediaTypeMax indicates the firmware boot media
> +                            information is unavailable.
> +**/
> +FW_BOOT_MEDIA_TYPE
> +IdentifyFirmwareBootMediaType (
> +  VOID
> +  )
> +{
> +  return FwBootMediaSpi;
> +}
> --
> 2.16.2.windows.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-10-08  7:01 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-10-01  1:15 [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator Kubacki, Michael A
2019-10-01  1:15 ` [edk2-platforms][PATCH V1 1/3] IntelSiliconPkg/FirmwareBootMediaLib: Add library Kubacki, Michael A
2019-10-01  1:15 ` [edk2-platforms][PATCH V1 2/3] BoardModulePkg/FirmwareBootMediaInfoLib: " Kubacki, Michael A
2019-10-08  7:01   ` Dong, Eric
2019-10-01  1:15 ` [edk2-platforms][PATCH V1 3/3] BoardModulePkg/FirmwareBootMediaInfoPei: Add module Kubacki, Michael A
2019-10-02 23:03 ` [edk2-platforms][PATCH V1 0/3] Add FW Boot Media Device Indicator Chaganty, Rangasai V
2019-10-03  1:02   ` Kubacki, Michael A
2019-10-03  4:20     ` [edk2-devel] " Andrew Fish
2019-10-03  7:54       ` Kubacki, Michael A
2019-10-07  1:34         ` Chaganty, Rangasai V

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox