public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Leif Lindholm <leif.lindholm@linaro.org>
To: Marcin Wojtas <mw@semihalf.com>
Cc: edk2-devel@lists.01.org, feng.tian@intel.com,
	michael.d.kinney@intel.com, liming.gao@intel.com,
	ard.biesheuvel@linaro.org, nadavh@marvell.com, neta@marvell.com,
	kostap@marvell.com, jinghua@marvell.com, jsd@semihalf.com
Subject: Re: [PATCH v2 1/1] EmbeddedPkg: Implement NorFlashInfoLib
Date: Wed, 1 Nov 2017 04:28:07 +0000	[thread overview]
Message-ID: <20171101042807.znjpyacqzdymgp5w@bivouac.eciton.net> (raw)
In-Reply-To: <1509446342-1618-1-git-send-email-mw@semihalf.com>

On Tue, Oct 31, 2017 at 11:39:02AM +0100, Marcin Wojtas wrote:
> The SPI NOR flash drivers which base on ArmPlatformPkg's
> NorFlashDxe usually make use of static declarations of the
> flash instances with their type and parameters. As a result
> it implies hardcoding the exact way of flash handling, not to
> mention the code does not look very nice. Much better solution
> would be obtaining the flash ID and hence its description
> in runtime.
> 
> Because JEDEC compliant SPI NOR devices allow to obtain their ID
> with READ_ID command (0x9f), implement a NorFlashInfoLib that gives
> an access to the NOR flash data, such as name, page size, sector
> (block) size and others, of more than 50 different models.
> The new library user should pass an output array from issuing
> READ_ID command to the NorFlashGetInfo () routine - if the
> match is found, an allocated (optionally for RT) pool with
> the flash description copy will be returned.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Marcin Wojtas <mw@semihalf.com>
> 
> =========================================
> Patch available in the github:
> https://github.com/MarvellEmbeddedProcessors/edk2/commits/norlib-upstream-r20171031
> 
> Changelog:
> v1 -> v2
>   * In flash info flags: s/NF_/NOR_FLASH_/
>   * Rename routines to NorFlashGetInfo and NorFlashPrintInfo
>   * Fix NorFlashGetInfo description.
>   * Improve commit log (fix typos and other minor improvements)
> 
> ---
>  EmbeddedPkg/EmbeddedPkg.dec                             |   1 +
>  EmbeddedPkg/Include/Library/NorFlashInfoLib.h           |  84 ++++++++
>  EmbeddedPkg/Library/NorFlashInfoLib/NorFlashInfoLib.c   | 225 ++++++++++++++++++++
>  EmbeddedPkg/Library/NorFlashInfoLib/NorFlashInfoLib.inf |  34 +++
>  4 files changed, 344 insertions(+)
> 
> diff --git a/EmbeddedPkg/EmbeddedPkg.dec b/EmbeddedPkg/EmbeddedPkg.dec
> index 52482af..aa551ab 100644
> --- a/EmbeddedPkg/EmbeddedPkg.dec
> +++ b/EmbeddedPkg/EmbeddedPkg.dec
> @@ -45,6 +45,7 @@
>    EblNetworkLib|Include/Library/EblNetworkLib.h
>    GdbSerialLib|Include/Library/GdbSerialLib.h
>    DebugAgentTimerLib|Include/Library/DebugAgentTimerLib.h
> +  NorFlashInfoLib|Include/Library/NorFlashInfoLib.h
>  
>    DtPlatformDtbLoaderLib|Include/Library/DtPlatformDtbLoaderLib.h
>  
> diff --git a/EmbeddedPkg/Include/Library/NorFlashInfoLib.h b/EmbeddedPkg/Include/Library/NorFlashInfoLib.h
> new file mode 100644
> index 0000000..e28c169
> --- /dev/null
> +++ b/EmbeddedPkg/Include/Library/NorFlashInfoLib.h
> @@ -0,0 +1,84 @@
> +/** @file
> +*
> +*  Copyright (c) 2017 Marvell International Ltd.
> +*
> +*  This program and the accompanying materials
> +*  are licensed and made available under the terms and conditions of the BSD License
> +*  which accompanies this distribution.  The full text of the license may be found at
> +*  http://opensource.org/licenses/bsd-license.php
> +*
> +*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +*
> +**/
> +
> +#ifndef __NOR_FLASH_ID_LIB_H__
> +#define __NOR_FLASH_ID_LIB_H__

Please also fold in the vendor name defines somewhere in this file,
(as NOR_FLASH_*).

> +
> +#include <Uefi/UefiBaseType.h>
> +
> +#define NOR_FLASH_MAX_ID_LEN    6
> +
> +typedef struct {
> +  /* Device name */
> +  UINT16 *Name;
> +
> +  /*
> +   * JEDEC ID
> +   */
> +  UINT8  Id[NOR_FLASH_MAX_ID_LEN];
> +  UINT8  IdLen;
> +
> +  UINT16 PageSize;
> +
> +  /*
> +   * Below parameters can be referred as BlockSize
> +   * and BlockCount, when treating the NorFlash as
> +   * block device.
> +   */
> +  UINT32 SectorSize;
> +  UINT32 SectorCount;
> +
> +  UINT16 Flags;
> +#define NOR_FLASH_ERASE_4K     (1 << 0)  /* Use 4096B erase blocks and CMD_ERASE_4K */
> +#define NOR_FLASH_WRITE_FSR    (1 << 1)  /* Use flag status register for write */
> +#define NOR_FLASH_4B_ADDR      (1 << 2)  /* Use 4B addressing */
> +} NOR_FLASH_INFO;
> +
> +/**
> +  Return an allocated copy pool of the NOR flash information structure.
> +
> +  @param[in]       Id                 Pointer to an array with JEDEC ID obtained
> +                                      from the NOR flash with READ_ID command
> +                                      (0x9f)
> +  @param[in out]   FlashInfo          Pointer to NOR flash information structure
> +  @param[in]       AllocateForRuntime A flag specifying a type of a copy pool
> +                                      allocation (TRUE for runtime, FALSE for
> +                                      normal)
> +
> +  @retval       EFI_SUCCESS           Operation completed successfully
> +  @retval       EFI_NOT_FOUND         No matching entry in NOR ID table found
> +  @retval       EFI_OUT_OF_RESOURCES  No pool memory available
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +NorFlashGetInfo (
> +  IN UINT8                *Id,
> +  IN OUT NOR_FLASH_INFO  **FlashInfo,
> +  IN BOOLEAN               AllocateForRuntime
> +  );
> +
> +/**
> +  Print NOR flash information basing on data stored in
> +  the NOR_FLASH_INFO structure.
> +
> +  @param[in]       FlashInfo          Pointer to NOR flash information structure
> +
> +**/
> +VOID
> +EFIAPI
> +NorFlashPrintInfo (
> +  IN     NOR_FLASH_INFO  *Info
> +  );
> +#endif
> diff --git a/EmbeddedPkg/Library/NorFlashInfoLib/NorFlashInfoLib.c b/EmbeddedPkg/Library/NorFlashInfoLib/NorFlashInfoLib.c
> new file mode 100644
> index 0000000..326c4c1
> --- /dev/null
> +++ b/EmbeddedPkg/Library/NorFlashInfoLib/NorFlashInfoLib.c
> @@ -0,0 +1,225 @@
> +/** @file
> +*
> +*  Copyright (c) 2017 Marvell International Ltd.
> +*
> +*  This program and the accompanying materials
> +*  are licensed and made available under the terms and conditions of the BSD License
> +*  which accompanies this distribution.  The full text of the license may be found at
> +*  http://opensource.org/licenses/bsd-license.php
> +*
> +*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +*
> +**/
> +
> +#include <PiDxe.h>
> +
> +#include <Library/BaseLib.h>
> +#include <Library/BaseMemoryLib.h>
> +#include <Library/DebugLib.h>
> +#include <Library/DxeServicesLib.h>
> +#include <Library/MemoryAllocationLib.h>
> +#include <Library/NorFlashInfoLib.h>
> +
> +static CONST NOR_FLASH_INFO NorFlashIds[] = {

STATIC CONST NOR_FLASH_INFO mNorFlashIds[] = {

(Sorry, didn't spot when looking at v1.)
Otherwise, this looks fine to me.

/
    Leif

> +  /* ATMEL */
> +  {L"at45db011d",     {0x1f, 0x22, 0x00}, 3, 256, 64 * 1024,     4, NOR_FLASH_ERASE_4K},
> +  {L"at45db021d",     {0x1f, 0x23, 0x00}, 3, 256, 64 * 1024,     8, NOR_FLASH_ERASE_4K},
> +  {L"at45db041d",     {0x1f, 0x24, 0x00}, 3, 256, 64 * 1024,     8, NOR_FLASH_ERASE_4K},
> +  {L"at45db081d",     {0x1f, 0x25, 0x00}, 3, 256, 64 * 1024,    16, NOR_FLASH_ERASE_4K},
> +  {L"at45db161d",     {0x1f, 0x26, 0x00}, 3, 256, 64 * 1024,    32, NOR_FLASH_ERASE_4K},
> +  {L"at45db321d",     {0x1f, 0x27, 0x00}, 3, 256, 64 * 1024,    64, NOR_FLASH_ERASE_4K},
> +  {L"at45db641d",     {0x1f, 0x28, 0x00}, 3, 256, 64 * 1024,   128, NOR_FLASH_ERASE_4K},
> +  {L"at25df321a",     {0x1f, 0x47, 0x01}, 3, 256, 64 * 1024,    64, NOR_FLASH_ERASE_4K},
> +  {L"at25df321",      {0x1f, 0x47, 0x00}, 3, 256, 64 * 1024,    64, NOR_FLASH_ERASE_4K},
> +  {L"at26df081a",     {0x1f, 0x45, 0x01}, 3, 256, 64 * 1024,    16, NOR_FLASH_ERASE_4K},
> +  /* EON */
> +  {L"en25q32b",       {0x1c, 0x30, 0x16}, 3, 256, 64 * 1024,    64, 0},
> +  {L"en25q64",        {0x1c, 0x30, 0x17}, 3, 256, 64 * 1024,   128, NOR_FLASH_ERASE_4K},
> +  {L"en25q128b",      {0x1c, 0x30, 0x18}, 3, 256, 64 * 1024,   256, 0},
> +  {L"en25s64",        {0x1c, 0x38, 0x17}, 3, 256, 64 * 1024,   128, 0},
> +  /* GIGADEVICE */
> +  {L"gd25q64b",       {0xc8, 0x40, 0x17}, 3, 256, 64 * 1024,   128, NOR_FLASH_ERASE_4K},
> +  {L"gd25lq32",       {0xc8, 0x60, 0x16}, 3, 256, 64 * 1024,    64, NOR_FLASH_ERASE_4K},
> +  /* ISSI */
> +  {L"is25lp032",      {0x9d, 0x60, 0x16}, 3, 256, 64 * 1024,    64, 0},
> +  {L"is25lp064",      {0x9d, 0x60, 0x17}, 3, 256, 64 * 1024,   128, 0},
> +  {L"is25lp128",      {0x9d, 0x60, 0x18}, 3, 256, 64 * 1024,   256, 0},
> +  /* MACRONIX */
> +  {L"mx25l2006e",     {0xc2, 0x20, 0x12}, 3, 256, 64 * 1024,     4, 0},
> +  {L"mx25l4005",      {0xc2, 0x20, 0x13}, 3, 256, 64 * 1024,     8, 0},
> +  {L"mx25l8005",      {0xc2, 0x20, 0x14}, 3, 256, 64 * 1024,    16, 0},
> +  {L"mx25l1605d",     {0xc2, 0x20, 0x15}, 3, 256, 64 * 1024,    32, 0},
> +  {L"mx25l3205d",     {0xc2, 0x20, 0x16}, 3, 256, 64 * 1024,    64, 0},
> +  {L"mx25l6405d",     {0xc2, 0x20, 0x17}, 3, 256, 64 * 1024,   128, 0},
> +  {L"mx25l12805",     {0xc2, 0x20, 0x18}, 3, 256, 64 * 1024,   256, 0},
> +  {L"mx25l25635f",    {0xc2, 0x20, 0x19}, 3, 256, 64 * 1024,   512, 0},
> +  {L"mx25l51235f",    {0xc2, 0x20, 0x1a}, 3, 256, 64 * 1024,  1024, 0},
> +  {L"mx25l12855e",    {0xc2, 0x26, 0x18}, 3, 256, 64 * 1024,   256, 0},
> +  {L"mx66u51235f",    {0xc2, 0x25, 0x3a}, 3, 256, 64 * 1024,  1024, 0},
> +  {L"mx66l1g45g",     {0xc2, 0x20, 0x1b}, 3, 256, 64 * 1024,  2048, 0},
> +  /* SPANSION */
> +  {L"s25fl008a",      {0x01, 0x02, 0x13}, 3, 256, 64 * 1024,    16, 0},
> +  {L"s25fl016a",      {0x01, 0x02, 0x14}, 3, 256, 64 * 1024,    32, 0},
> +  {L"s25fl032a",      {0x01, 0x02, 0x15}, 3, 256, 64 * 1024,    64, 0},
> +  {L"s25fl064a",      {0x01, 0x02, 0x16}, 3, 256, 64 * 1024,   128, 0},
> +  {L"s25fl116k",      {0x01, 0x40, 0x15}, 3, 256, 64 * 1024,   128, 0},
> +  {L"s25fl164k",      {0x01, 0x40, 0x17, 0x01, 0x40}, 5, 256,  64 * 1024,   128, 0},
> +  {L"s25fl128p_256k", {0x01, 0x20, 0x18, 0x03, 0x00}, 5, 256, 256 * 1024,    64, 0},
> +  {L"s25fl128p_64k",  {0x01, 0x20, 0x18, 0x03, 0x01}, 5, 256,  64 * 1024,   256, 0},
> +  {L"s25fl032p",      {0x01, 0x02, 0x15, 0x4d, 0x00}, 5, 256,  64 * 1024,    64, 0},
> +  {L"s25fl064p",      {0x01, 0x02, 0x16, 0x4d, 0x00}, 5, 256,  64 * 1024,   128, 0},
> +  {L"s25fl128s_256k", {0x01, 0x20, 0x18, 0x4d, 0x00}, 5, 256, 256 * 1024,    64, 0},
> +  {L"s25fl128s_64k",  {0x01, 0x20, 0x18, 0x4d, 0x01}, 5, 256,  64 * 1024,   256, 0},
> +  {L"s25fl256s_256k", {0x01, 0x02, 0x19, 0x4d, 0x00}, 5, 256, 256 * 1024,   128, 0},
> +  {L"s25fl256s_64k",  {0x01, 0x02, 0x19, 0x4d, 0x01}, 5, 256,  64 * 1024,   512, 0},
> +  {L"s25fl512s_256k", {0x01, 0x02, 0x20, 0x4d, 0x00}, 5, 256, 256 * 1024,   256, 0},
> +  {L"s25fl512s_64k",  {0x01, 0x02, 0x20, 0x4d, 0x01}, 5, 256,  64 * 1024,  1024, 0},
> +  {L"s25fl512s_512k", {0x01, 0x02, 0x20, 0x4f, 0x00}, 5, 256, 256 * 1024,   256, 0},
> +  /* STMICRO */
> +  {L"m25p10",         {0x20, 0x20, 0x11}, 3, 256, 32 * 1024,     4, 0},
> +  {L"m25p20",         {0x20, 0x20, 0x12}, 3, 256, 64 * 1024,     4, 0},
> +  {L"m25p40",         {0x20, 0x20, 0x13}, 3, 256, 64 * 1024,     8, 0},
> +  {L"m25p80",         {0x20, 0x20, 0x14}, 3, 256, 64 * 1024,    16, 0},
> +  {L"m25p16",         {0x20, 0x20, 0x15}, 3, 256, 64 * 1024,    32, 0},
> +  {L"m25pE16",        {0x20, 0x80, 0x15, 0x10, 0x00}, 5, 256, 64 * 1024, 32, 0},
> +  {L"m25pX16",        {0x20, 0x71, 0x15, 0x10, 0x00}, 5, 256, 64 * 1024, 32, 0},
> +  {L"m25p32",         {0x20, 0x20, 0x16}, 3, 256,  64 * 1024,    64, 0},
> +  {L"m25p64",         {0x20, 0x20, 0x17}, 3, 256,  64 * 1024,   128, 0},
> +  {L"m25p128",        {0x20, 0x20, 0x18}, 3, 256, 256 * 1024,    64, 0},
> +  {L"m25pX64",        {0x20, 0x71, 0x17}, 3, 256,  64 * 1024,   128, NOR_FLASH_ERASE_4K},
> +  {L"n25q016a",       {0x20, 0xbb, 0x15}, 3, 256,  64 * 1024,    32, NOR_FLASH_ERASE_4K},
> +  {L"n25q32",         {0x20, 0xba, 0x16}, 3, 256,  64 * 1024,    64, NOR_FLASH_ERASE_4K},
> +  {L"n25q32a",        {0x20, 0xbb, 0x16}, 3, 256,  64 * 1024,    64, NOR_FLASH_ERASE_4K},
> +  {L"n25q64",         {0x20, 0xba, 0x17}, 3, 256,  64 * 1024,   128, NOR_FLASH_ERASE_4K},
> +  {L"n25q64a",        {0x20, 0xbb, 0x17}, 3, 256,  64 * 1024,   128, NOR_FLASH_ERASE_4K},
> +  {L"n25q128",        {0x20, 0xba, 0x18}, 3, 256,  64 * 1024,   256, 0},
> +  {L"n25q128a",       {0x20, 0xbb, 0x18}, 3, 256,  64 * 1024,   256, 0},
> +  {L"n25q256",        {0x20, 0xba, 0x19}, 3, 256,  64 * 1024,   512, NOR_FLASH_ERASE_4K},
> +  {L"n25q256a",       {0x20, 0xbb, 0x19}, 3, 256,  64 * 1024,   512, NOR_FLASH_ERASE_4K},
> +  {L"n25q512",        {0x20, 0xba, 0x20}, 3, 256,  64 * 1024,  1024, NOR_FLASH_WRITE_FSR | NOR_FLASH_ERASE_4K},
> +  {L"n25q512a",       {0x20, 0xbb, 0x20}, 3, 256,  64 * 1024,  1024, NOR_FLASH_WRITE_FSR | NOR_FLASH_ERASE_4K},
> +  {L"n25q1024",       {0x20, 0xba, 0x21}, 3, 256,  64 * 1024,  2048, NOR_FLASH_WRITE_FSR | NOR_FLASH_ERASE_4K},
> +  {L"n25q1024a",      {0x20, 0xbb, 0x21}, 3, 256,  64 * 1024,  2048, NOR_FLASH_WRITE_FSR | NOR_FLASH_ERASE_4K},
> +  {L"mt25qu02g",      {0x20, 0xbb, 0x22}, 3, 256,  64 * 1024,  4096, NOR_FLASH_WRITE_FSR | NOR_FLASH_ERASE_4K},
> +  {L"mt25ql02g",      {0x20, 0xba, 0x22}, 3, 256,  64 * 1024,  4096, NOR_FLASH_WRITE_FSR | NOR_FLASH_ERASE_4K},
> +  /* SST */
> +  {L"sst25vf040b",    {0xbf, 0x25, 0x8d}, 3, 256,  64 * 1024,     8, NOR_FLASH_ERASE_4K},
> +  {L"sst25vf080b",    {0xbf, 0x25, 0x8e}, 3, 256,  64 * 1024,    16, NOR_FLASH_ERASE_4K},
> +  {L"sst25vf016b",    {0xbf, 0x25, 0x41}, 3, 256,  64 * 1024,    32, NOR_FLASH_ERASE_4K},
> +  {L"sst25vf032b",    {0xbf, 0x25, 0x4a}, 3, 256,  64 * 1024,    64, NOR_FLASH_ERASE_4K},
> +  {L"sst25vf064c",    {0xbf, 0x25, 0x4b}, 3, 256,  64 * 1024,   128, NOR_FLASH_ERASE_4K},
> +  {L"sst25wf512",     {0xbf, 0x25, 0x01}, 3, 256,  64 * 1024,     1, NOR_FLASH_ERASE_4K},
> +  {L"sst25wf010",     {0xbf, 0x25, 0x02}, 3, 256,  64 * 1024,     2, NOR_FLASH_ERASE_4K},
> +  {L"sst25wf020",     {0xbf, 0x25, 0x03}, 3, 256,  64 * 1024,     4, NOR_FLASH_ERASE_4K},
> +  {L"sst25wf040",     {0xbf, 0x25, 0x04}, 3, 256,  64 * 1024,     8, NOR_FLASH_ERASE_4K},
> +  {L"sst25wf040b",    {0x62, 0x16, 0x13}, 3, 256,  64 * 1024,     8, NOR_FLASH_ERASE_4K},
> +  {L"sst25wf080",     {0xbf, 0x25, 0x05}, 3, 256,  64 * 1024,    16, NOR_FLASH_ERASE_4K},
> +  /* WINBOND */
> +  {L"w25p80",         {0xef, 0x20, 0x14}, 3, 256,  64 * 1024,    16, 0},
> +  {L"w25p16",         {0xef, 0x20, 0x15}, 3, 256,  64 * 1024,    32, 0},
> +  {L"w25p32",         {0xef, 0x20, 0x16}, 3, 256,  64 * 1024,    64, 0},
> +  {L"w25x40",         {0xef, 0x30, 0x13}, 3, 256,  64 * 1024,     8, NOR_FLASH_ERASE_4K},
> +  {L"w25x16",         {0xef, 0x30, 0x15}, 3, 256,  64 * 1024,    32, NOR_FLASH_ERASE_4K},
> +  {L"w25x32",         {0xef, 0x30, 0x16}, 3, 256,  64 * 1024,    64, NOR_FLASH_ERASE_4K},
> +  {L"w25x64",         {0xef, 0x30, 0x17}, 3, 256,  64 * 1024,   128, NOR_FLASH_ERASE_4K},
> +  {L"w25q80bl",       {0xef, 0x40, 0x14}, 3, 256,  64 * 1024,    16, NOR_FLASH_ERASE_4K},
> +  {L"w25q16cl",       {0xef, 0x40, 0x15}, 3, 256,  64 * 1024,    32, NOR_FLASH_ERASE_4K},
> +  {L"w25q32bv",       {0xef, 0x40, 0x16}, 3, 256,  64 * 1024,    64, NOR_FLASH_ERASE_4K},
> +  {L"w25q64cv",       {0xef, 0x40, 0x17}, 3, 256,  64 * 1024,   128, NOR_FLASH_ERASE_4K},
> +  {L"w25q128bv",      {0xef, 0x40, 0x18}, 3, 256,  64 * 1024,   256, NOR_FLASH_ERASE_4K},
> +  {L"w25q256",        {0xef, 0x40, 0x19}, 3, 256,  64 * 1024,   512, NOR_FLASH_ERASE_4K},
> +  {L"w25q80bw",       {0xef, 0x50, 0x14}, 3, 256,  64 * 1024,    16, NOR_FLASH_ERASE_4K},
> +  {L"w25q16dw",       {0xef, 0x60, 0x15}, 3, 256,  64 * 1024,    32, NOR_FLASH_ERASE_4K},
> +  {L"w25q32dw",       {0xef, 0x60, 0x16}, 3, 256,  64 * 1024,    64, NOR_FLASH_ERASE_4K},
> +  {L"w25q64dw",       {0xef, 0x60, 0x17}, 3, 256,  64 * 1024,   128, NOR_FLASH_ERASE_4K},
> +  {L"w25q128fw",      {0xef, 0x60, 0x18}, 3, 256,  64 * 1024,   256, NOR_FLASH_ERASE_4K},
> +  {},  /* Empty entry to terminate the list */
> +};
> +
> +/**
> +  Return an allocated copy pool of the NOR flash information structure.
> +
> +  @param[in]       Id                 Pointer to an array with JEDEC ID obtained
> +                                      from the NOR flash with READ_ID command
> +                                      (0x9f)
> +  @param[in out]   FlashInfo          Pointer to NOR flash information structure
> +  @param[in]       AllocateForRuntime A flag specifying a type of a copy pool
> +                                      allocation (TRUE for runtime, FALSE for
> +                                      normal)
> +
> +  @retval       EFI_SUCCESS           Operation completed successfully
> +  @retval       EFI_NOT_FOUND         No matching entry in NOR ID table found
> +  @retval       EFI_OUT_OF_RESOURCES  No pool memory available
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +NorFlashGetInfo (
> +  IN UINT8                *Id,
> +  IN OUT NOR_FLASH_INFO  **FlashInfo,
> +  IN BOOLEAN               AllocateForRuntime
> +  )
> +{
> +  CONST NOR_FLASH_INFO *TmpInfo;
> +
> +  /*
> +   * Iterate over NorFlashIds table, in order to find matching entry.
> +   */
> +  TmpInfo = NorFlashIds;
> +  for (; TmpInfo->Name != NULL; TmpInfo++) {
> +    if (CompareMem (TmpInfo->Id, Id, TmpInfo->IdLen) == 0) {
> +      break;
> +    }
> +  }
> +
> +  /*
> +   * Matching entry was not found.
> +   */
> +  if (TmpInfo->Name == NULL) {
> +    return EFI_NOT_FOUND;
> +  }
> +
> +  /*
> +   * Allocate and copy NOR flash information structure.
> +   */
> +  if (AllocateForRuntime) {
> +    *FlashInfo = AllocateRuntimeCopyPool (sizeof (NOR_FLASH_INFO), TmpInfo);
> +  } else {
> +    *FlashInfo = AllocateCopyPool (sizeof (NOR_FLASH_INFO), TmpInfo);
> +  }
> +  if (FlashInfo == NULL) {
> +    return EFI_OUT_OF_RESOURCES;
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +/**
> +  Print NOR flash information basing on data stored in
> +  the NOR_FLASH_INFO structure.
> +
> +  @param[in]       FlashInfo          Pointer to NOR flash information structure
> +
> +**/
> +VOID
> +EFIAPI
> +NorFlashPrintInfo (
> +  IN     NOR_FLASH_INFO  *Info
> +  )
> +{
> +  UINTN EraseSize;
> +
> +  if (Info->Flags & NOR_FLASH_ERASE_4K) {
> +    EraseSize = SIZE_4KB;
> +  } else {
> +    EraseSize = Info->SectorSize;
> +  }
> +
> +  DEBUG ((DEBUG_ERROR,
> +    "Detected %s SPI NOR flash with page size %d B, erase size %d KB, total %d MB\n",
> +    Info->Name,
> +    Info->PageSize,
> +    EraseSize / 1024,
> +    (Info->SectorSize * Info->SectorCount) / 1024 / 1024));
> +}
> diff --git a/EmbeddedPkg/Library/NorFlashInfoLib/NorFlashInfoLib.inf b/EmbeddedPkg/Library/NorFlashInfoLib/NorFlashInfoLib.inf
> new file mode 100644
> index 0000000..b4b3324
> --- /dev/null
> +++ b/EmbeddedPkg/Library/NorFlashInfoLib/NorFlashInfoLib.inf
> @@ -0,0 +1,34 @@
> +/** @file
> +*
> +*  Copyright (c) 2017 Marvell International Ltd.
> +*
> +*  This program and the accompanying materials
> +*  are licensed and made available under the terms and conditions of the BSD License
> +*  which accompanies this distribution.  The full text of the license may be found at
> +*  http://opensource.org/licenses/bsd-license.php
> +*
> +*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +*
> +**/
> +
> +[Defines]
> +  INF_VERSION                    = 0x00010019
> +  BASE_NAME                      = NorFlashInfoLib
> +  FILE_GUID                      = 6b639c7e-9b53-4e9f-89a3-2e711729709c
> +  MODULE_TYPE                    = DXE_DRIVER
> +  VERSION_STRING                 = 1.0
> +  LIBRARY_CLASS                  = NorFlashInfoLib|DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION
> +
> +[Sources]
> +  NorFlashInfoLib.c
> +
> +[Packages]
> +  EmbeddedPkg/EmbeddedPkg.dec
> +  MdePkg/MdePkg.dec
> +
> +[LibraryClasses]
> +  BaseLib
> +  DebugLib
> +  DxeServicesLib
> +  MemoryAllocationLib
> -- 
> 2.7.4
> 


      reply	other threads:[~2017-11-01  4:24 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-31 10:39 [PATCH v2 1/1] EmbeddedPkg: Implement NorFlashInfoLib Marcin Wojtas
2017-11-01  4:28 ` Leif Lindholm [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171101042807.znjpyacqzdymgp5w@bivouac.eciton.net \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox