UefiPayloadPkg: Add SpiFlashLib
This is a common SPI Flash library used for the Intel platform that supports SPI hardware sequence. This library provides actual SPI flash operation via Intel PCH SPI controller. Signed-off-by: Guo Dong <guo.dong@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Maurice Ma <maurice.ma@intel.com> Cc: Benjamin You <benjamin.you@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Reviewed-by: Benjamin You <benjamin.you@intel.com>
This commit is contained in:
215
UefiPayloadPkg/Include/Library/SpiFlashLib.h
Normal file
215
UefiPayloadPkg/Include/Library/SpiFlashLib.h
Normal file
@ -0,0 +1,215 @@
|
||||
/** @file
|
||||
PCH SPI Common Driver implements the SPI Host Controller Compatibility Interface.
|
||||
|
||||
Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#ifndef SPI_FLASH_LIB_H_
|
||||
#define SPI_FLASH_LIB_H_
|
||||
|
||||
/**
|
||||
Flash Region Type
|
||||
**/
|
||||
typedef enum {
|
||||
FlashRegionDescriptor,
|
||||
FlashRegionBios,
|
||||
FlashRegionMe,
|
||||
FlashRegionGbE,
|
||||
FlashRegionPlatformData,
|
||||
FlashRegionDer,
|
||||
FlashRegionAll,
|
||||
FlashRegionMax
|
||||
} FLASH_REGION_TYPE;
|
||||
|
||||
/**
|
||||
Read SFDP data from the flash part.
|
||||
|
||||
@param[in] ComponentNumber The Component Number for chip select
|
||||
@param[in] ByteCount Number of bytes in SFDP data portion of the SPI cycle, the max number is 64
|
||||
@param[out] SfdpData The Pointer to caller-allocated buffer containing the SFDP data received
|
||||
It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
|
||||
|
||||
@retval EFI_SUCCESS Command succeed.
|
||||
@retval EFI_INVALID_PARAMETER The parameters specified are not valid.
|
||||
@retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SpiFlashReadSfdp (
|
||||
IN UINT8 ComponentNumber,
|
||||
IN UINT32 ByteCount,
|
||||
OUT UINT8 *SfdpData
|
||||
);
|
||||
|
||||
/**
|
||||
Read Jedec Id from the flash part.
|
||||
|
||||
@param[in] ComponentNumber The Component Number for chip select
|
||||
@param[in] ByteCount Number of bytes in JedecId data portion of the SPI cycle, the data size is 3 typically
|
||||
@param[out] JedecId The Pointer to caller-allocated buffer containing JEDEC ID received
|
||||
It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
|
||||
|
||||
@retval EFI_SUCCESS Command succeed.
|
||||
@retval EFI_INVALID_PARAMETER The parameters specified are not valid.
|
||||
@retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SpiFlashReadJedecId (
|
||||
IN UINT8 ComponentNumber,
|
||||
IN UINT32 ByteCount,
|
||||
OUT UINT8 *JedecId
|
||||
);
|
||||
|
||||
/**
|
||||
Write the status register in the flash part.
|
||||
|
||||
@param[in] ByteCount Number of bytes in Status data portion of the SPI cycle, the data size is 1 typically
|
||||
@param[in] StatusValue The Pointer to caller-allocated buffer containing the value of Status register writing
|
||||
|
||||
@retval EFI_SUCCESS Command succeed.
|
||||
@retval EFI_INVALID_PARAMETER The parameters specified are not valid.
|
||||
@retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SpiFlashWriteStatus (
|
||||
IN UINT32 ByteCount,
|
||||
IN UINT8 *StatusValue
|
||||
);
|
||||
|
||||
/**
|
||||
Read status register in the flash part.
|
||||
|
||||
@param[in] ByteCount Number of bytes in Status data portion of the SPI cycle, the data size is 1 typically
|
||||
@param[out] StatusValue The Pointer to caller-allocated buffer containing the value of Status register received.
|
||||
|
||||
@retval EFI_SUCCESS Command succeed.
|
||||
@retval EFI_INVALID_PARAMETER The parameters specified are not valid.
|
||||
@retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SpiFlashReadStatus (
|
||||
IN UINT32 ByteCount,
|
||||
OUT UINT8 *StatusValue
|
||||
);
|
||||
|
||||
/**
|
||||
Read SC Soft Strap Values
|
||||
|
||||
@param[in] SoftStrapAddr SC Soft Strap address offset from FPSBA.
|
||||
@param[in] ByteCount Number of bytes in SoftStrap data portion of the SPI cycle
|
||||
@param[out] SoftStrapValue The Pointer to caller-allocated buffer containing SC Soft Strap Value.
|
||||
It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
|
||||
|
||||
@retval EFI_SUCCESS Command succeed.
|
||||
@retval EFI_INVALID_PARAMETER The parameters specified are not valid.
|
||||
@retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SpiReadPchSoftStrap (
|
||||
IN UINT32 SoftStrapAddr,
|
||||
IN UINT32 ByteCount,
|
||||
OUT UINT8 *SoftStrapValue
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Read data from the flash part.
|
||||
|
||||
@param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
|
||||
@param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions.
|
||||
@param[in] ByteCount Number of bytes in the data portion of the SPI cycle.
|
||||
@param[out] Buffer The Pointer to caller-allocated buffer containing the dada received.
|
||||
It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
|
||||
|
||||
@retval EFI_SUCCESS Command succeed.
|
||||
@retval EFI_INVALID_PARAMETER The parameters specified are not valid.
|
||||
@retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SpiFlashRead (
|
||||
IN FLASH_REGION_TYPE FlashRegionType,
|
||||
IN UINT32 Address,
|
||||
IN UINT32 ByteCount,
|
||||
OUT UINT8 *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Erase some area on the flash part.
|
||||
|
||||
@param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
|
||||
@param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions.
|
||||
@param[in] ByteCount Number of bytes in the data portion of the SPI cycle.
|
||||
|
||||
@retval EFI_SUCCESS Command succeed.
|
||||
@retval EFI_INVALID_PARAMETER The parameters specified are not valid.
|
||||
@retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SpiFlashErase (
|
||||
IN FLASH_REGION_TYPE FlashRegionType,
|
||||
IN UINT32 Address,
|
||||
IN UINT32 ByteCount
|
||||
);
|
||||
|
||||
/**
|
||||
Write data to the flash part.
|
||||
|
||||
@param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
|
||||
@param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions.
|
||||
@param[in] ByteCount Number of bytes in the data portion of the SPI cycle.
|
||||
@param[in] Buffer Pointer to caller-allocated buffer containing the data sent during the SPI cycle.
|
||||
|
||||
@retval EFI_SUCCESS Command succeed.
|
||||
@retval EFI_INVALID_PARAMETER The parameters specified are not valid.
|
||||
@retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SpiFlashWrite (
|
||||
IN FLASH_REGION_TYPE FlashRegionType,
|
||||
IN UINT32 Address,
|
||||
IN UINT32 ByteCount,
|
||||
IN UINT8 *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Initialize an SPI library.
|
||||
|
||||
@retval EFI_SUCCESS The protocol instance was properly initialized
|
||||
@retval EFI_NOT_FOUND The expected SPI info could not be found
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SpiConstructor (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Get the SPI region base and size, based on the enum type
|
||||
|
||||
@param[in] FlashRegionType The Flash Region type for for the base address which is listed in the Descriptor.
|
||||
@param[out] BaseAddress The Flash Linear Address for the Region 'n' Base
|
||||
@param[out] RegionSize The size for the Region 'n'
|
||||
|
||||
@retval EFI_SUCCESS Read success
|
||||
@retval EFI_INVALID_PARAMETER Invalid region type given
|
||||
@retval EFI_DEVICE_ERROR The region is not used
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SpiGetRegionAddress (
|
||||
IN FLASH_REGION_TYPE FlashRegionType,
|
||||
OUT UINT32 *BaseAddress, OPTIONAL
|
||||
OUT UINT32 *RegionSize OPTIONAL
|
||||
);
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user