From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: None (no SPF record) identity=mailfrom; client-ip=2607:f8b0:4001:c06::233; helo=mail-io0-x233.google.com; envelope-from=mw@semihalf.com; receiver=edk2-devel@lists.01.org Received: from mail-io0-x233.google.com (mail-io0-x233.google.com [IPv6:2607:f8b0:4001:c06::233]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 2EAC321C913C5 for ; Wed, 1 Nov 2017 01:41:32 -0700 (PDT) Received: by mail-io0-x233.google.com with SMTP id 101so4549322ioj.3 for ; Wed, 01 Nov 2017 01:45:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=iNxlk7bA77iRQi8LQIPAe1pzExEjLz3xo3GDUmGJ9+I=; b=qGzc+vE3FDGWk+ZlmBsiUKZO8A/wR/sYPhu/LVVsgugr8fdGMmgzPP7a3Y4G27J6TD YqSjWd0w5Rn2IELvaeuJBF+xWtsKwPHqAo/SBESEoX+0YdLIBUJ0xsViz9J3Xgt8AEn6 YeOzA4bVAwyBVDtFdmmbi8iYE3NeJHdfNjPpr5xQoEZiAS6VJlZ3qsKHVB20YZ8QkSsO DiBVFCk/50JiaqFkg/VfslcB8npOgg6YTlvmGqqMoED1FHyfuHzarAQ6dyZ5YJiTSbFE X4+3lFC5UPyrGi4TDtX+fwZoqXrbms/ERGI2fuf4vVvGgPbbX5XFXV4nNb57Bwbfnbbw Kesg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=iNxlk7bA77iRQi8LQIPAe1pzExEjLz3xo3GDUmGJ9+I=; b=OI/iIVtdc0lk73OGpd5Egr7rJXu5+cX+KMN2bm2v6RpzSLUfsHziqSPsZrXazRcDPk 3/DFLy40fKFtXv0ULaVWCDrcZeqdRAYD0uuzLAyyOsk9aaCvUM+7H4Y/I1GcmzddajcN OWtETqGPkZfelmBQGHvIbNhzSpmTyzEBKf3ZMR+tJdCsdJvuVOAq7y54icGRhNq41BJ7 7MxqzWKvdvsUakmN5d4dPzbzV9+6aW6uyC8S/qG4kWiNMJXrspQxo7kBViNzHUFCrjVi nymRvavVjdu8HhxxT3p6JN89k4+o9jSnLoii9y46td3uDycimXEoLge8rheFxEWAEy2v q/mw== X-Gm-Message-State: AMCzsaVn/+lttkDAyfjvOiXPNNFHdT8RpA17BT6CRgDj3/4xJxF9+LwG a1KgmN0UEh28R/8khHpLCKRAUREEai97CyWruALD0Q== X-Google-Smtp-Source: ABhQp+TqcrQDVFrqyqN1FaHVU/ZFOv0sBYMwfadYmP0tHnarNrSYkaoU/fG41CwNUXCd1s83JJ7Pn0RCcbjKEKaIfsE= X-Received: by 10.36.105.65 with SMTP id e62mr6770220itc.16.1509525924026; Wed, 01 Nov 2017 01:45:24 -0700 (PDT) MIME-Version: 1.0 Received: by 10.107.167.208 with HTTP; Wed, 1 Nov 2017 01:45:23 -0700 (PDT) In-Reply-To: References: <1509395425-15145-1-git-send-email-mw@semihalf.com> <20171031075818.l7rdpy6d6nue7l4r@bivouac.eciton.net> From: Marcin Wojtas Date: Wed, 1 Nov 2017 09:45:23 +0100 Message-ID: To: Pankaj Bansal Cc: Leif Lindholm , "Tian, Feng" , Hua Jing , Ard Biesheuvel , edk2-devel-01 , "Gao, Liming" , "nadavh@marvell.com" , Kostya Porotchkin , Neta Zur Hershkovits , "Kinney, Michael D" Subject: Re: [PATCH 1/1] EmbeddedPkg: Implement NorFlashLib X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Nov 2017 08:41:32 -0000 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Pankaj, 2017-11-01 6:57 GMT+01:00 Pankaj Bansal : > Hi Marcin, > > The SPI flash Jedec id is not standardized across flashes. > The JEDEDC group only assigns first byte (Manufacturer ID) to different v= endors. > Rest of the bytes are up to the Manufacturer to decide. > Therefore this info should be left to the SPI flash driver to parse. > It should not be stored in tabular form rather calculated based on JEDEDC= data read. I tend to disagree. Ok, in terms of the naming/commit log it can be distinguished between JEDEC ID byte and unique flash ID (overall 3-5 bytes). However as among the vendors the overall flash IDs are unique for each model and associated parameters seems to not be changing. See similar tables in U-Boot and Linux, which have been used for a couple of years. Thanks to this the flash driver can be more generic and use the structure fields, hence some duplication/hardcoding among EDK2 drivers could be dropped. Anyway in this concept the flash driver is responsible for obtaining the ID (and it's not obligatory to use the NorFlashInfoLib...), so it can interpret READ_ID data as it wants. There is an example of the library usage - ed2-platforms Marvell SPI flash driver (currently in the upstreaming process of NorFlashInfoLib adjusments): https://github.com/MarvellEmbeddedProcessors/edk2-open-platform/blob/5d1657= a2d05bb91858ffd5e243d19ecb33479945/Platform/Marvell/Drivers/Spi/Devices/MvS= piFlash.c which proved to work with multiple flash models on various boards. Best regards, Marcin > > Thanks & Regards, > Pankaj Bansal > > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Ma= rcin Wojtas > Sent: Tuesday, October 31, 2017 1:46 PM > To: Leif Lindholm > Cc: Tian, Feng ; Hua Jing ; Ard= Biesheuvel ; edk2-devel-01 ; Gao, Liming ; nadavh@marvell.com; Kostya Porot= chkin ; Neta Zur Hershkovits ; Kinney= , Michael D > Subject: Re: [edk2] [PATCH 1/1] EmbeddedPkg: Implement NorFlashLib > > Hi Leif, > > 2017-10-31 8:58 GMT+01:00 Leif Lindholm : >> On Mon, Oct 30, 2017 at 09:30:25PM +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 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 NorFlashLib that gives 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 issuing READ_ID >>> command to the GetNorFlashInfo () routine - if the match is found, an >>> allocated (optionally for RT) pool with the flash description will be >>> returned. >>> >>> Contributed-under: TianoCore Contribution Agreement 1.1 >>> Signed-off-by: Marcin Wojtas >>> --- >>> 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..ae0e45f >>> --- /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 >>> +* >>> +https://emea01.safelinks.protection.outlook.com/?url=3Dhttp%3A%2F%2Fop >>> +ensource.org%2Flicenses%2Fbsd-license.php&data=3D02%7C01%7Cpankaj.bans >>> +al%40nxp.com%7C753424b872b346c9c76f08d52037acfc%7C686ea1d3bc2b4c6fa9 >>> +2cd99c5c301635%7C0%7C0%7C636450345874702676&sdata=3DcxqjBkGwxPBYUu%2Fh >>> +Rwn8xdMheRjl%2BXBokEA74oIyaTw%3D&reserved=3D0 >>> +* >>> +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" >>> +BASIS, >>> +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS O= R IMPLIED. >>> +* >>> +**/ >>> + >>> +#ifndef __NOR_FLASH_ID_LIB_H__ >>> +#define __NOR_FLASH_ID_LIB_H__ >>> + >>> +#include >>> + >>> +#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 NF_ERASE_4K 1 << 0 /* Use 4096B erase blocks and CMD_ERA= SE_4K */ >>> +#define NF_WRITE_FSR 1 << 1 /* Use flag status register for write= */ >>> +#define NF_4B_ADDR 1 << 2 /* Use 4B addressing */ >> >> I think these should keep a NOR_FLASH_ prefix, like the rest of the file= . >> >>> +} NOR_FLASH_INFO; >>> + >>> +/** >>> + Return a pool allocated copy of the NOR flash . >>> + >>> + @param[in] Id Pointer to an array with JEDEC I= D 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 co= py pool >>> + allocation (TRUE for runtime, FA= LSE for >>> + normal) >>> + >>> + @retval EFI_SUCCESS Operation completed successfully >>> + @retval EFI_NOT_FOUND No matching entry in NOR ID tabl= e found >>> + @retval EFI_OUT_OF_RESOURCES No pool memory available >>> + >>> +**/ >>> +EFI_STATUS >>> +EFIAPI >>> +GetNorFlashInfo ( >> >> 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 >>> +PrintNorFlashInfo ( >> >> 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..2185163 >>> --- /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 >>> +* >>> +https://emea01.safelinks.protection.outlook.com/?url=3Dhttp%3A%2F%2Fop >>> +ensource.org%2Flicenses%2Fbsd-license.php&data=3D02%7C01%7Cpankaj.bans >>> +al%40nxp.com%7C753424b872b346c9c76f08d52037acfc%7C686ea1d3bc2b4c6fa9 >>> +2cd99c5c301635%7C0%7C0%7C636450345874702676&sdata=3DcxqjBkGwxPBYUu%2Fh >>> +Rwn8xdMheRjl%2BXBokEA74oIyaTw%3D&reserved=3D0 >>> +* >>> +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" >>> +BASIS, >>> +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS O= R IMPLIED. >>> +* >>> +**/ >>> + >>> +#include >>> + >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include #include >>> + >>> + >>> +static CONST NOR_FLASH_INFO NorFlashIds[] =3D { >>> + /* ATMEL */ >>> + {L"at45db011d", {0x1f, 0x22, 0x00}, 3, 256, 64 * 1024, 4, NF= _ERASE_4K}, >>> + {L"at45db021d", {0x1f, 0x23, 0x00}, 3, 256, 64 * 1024, 8, NF= _ERASE_4K}, >>> + {L"at45db041d", {0x1f, 0x24, 0x00}, 3, 256, 64 * 1024, 8, NF= _ERASE_4K}, >>> + {L"at45db081d", {0x1f, 0x25, 0x00}, 3, 256, 64 * 1024, 16, NF= _ERASE_4K}, >>> + {L"at45db161d", {0x1f, 0x26, 0x00}, 3, 256, 64 * 1024, 32, NF= _ERASE_4K}, >>> + {L"at45db321d", {0x1f, 0x27, 0x00}, 3, 256, 64 * 1024, 64, NF= _ERASE_4K}, >>> + {L"at45db641d", {0x1f, 0x28, 0x00}, 3, 256, 64 * 1024, 128, NF= _ERASE_4K}, >>> + {L"at25df321a", {0x1f, 0x47, 0x01}, 3, 256, 64 * 1024, 64, NF= _ERASE_4K}, >>> + {L"at25df321", {0x1f, 0x47, 0x00}, 3, 256, 64 * 1024, 64, NF= _ERASE_4K}, >>> + {L"at26df081a", {0x1f, 0x45, 0x01}, 3, 256, 64 * 1024, 16, NF= _ERASE_4K}, >>> + /* EON */ >>> + {L"en25q32b", {0x1c, 0x30, 0x16}, 3, 256, 64 * 1024, 64, 0}= , >>> + {L"en25q64", {0x1c, 0x30, 0x17}, 3, 256, 64 * 1024, 128, NF= _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, NF= _ERASE_4K}, >>> + {L"gd25lq32", {0xc8, 0x60, 0x16}, 3, 256, 64 * 1024, 64, NF= _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 * 10= 24, 128, 0}, >>> + {L"s25fl128p_256k", {0x01, 0x20, 0x18, 0x03, 0x00}, 5, 256, 256 * 10= 24, 64, 0}, >>> + {L"s25fl128p_64k", {0x01, 0x20, 0x18, 0x03, 0x01}, 5, 256, 64 * 10= 24, 256, 0}, >>> + {L"s25fl032p", {0x01, 0x02, 0x15, 0x4d, 0x00}, 5, 256, 64 * 10= 24, 64, 0}, >>> + {L"s25fl064p", {0x01, 0x02, 0x16, 0x4d, 0x00}, 5, 256, 64 * 10= 24, 128, 0}, >>> + {L"s25fl128s_256k", {0x01, 0x20, 0x18, 0x4d, 0x00}, 5, 256, 256 * 10= 24, 64, 0}, >>> + {L"s25fl128s_64k", {0x01, 0x20, 0x18, 0x4d, 0x01}, 5, 256, 64 * 10= 24, 256, 0}, >>> + {L"s25fl256s_256k", {0x01, 0x02, 0x19, 0x4d, 0x00}, 5, 256, 256 * 10= 24, 128, 0}, >>> + {L"s25fl256s_64k", {0x01, 0x02, 0x19, 0x4d, 0x01}, 5, 256, 64 * 10= 24, 512, 0}, >>> + {L"s25fl512s_256k", {0x01, 0x02, 0x20, 0x4d, 0x00}, 5, 256, 256 * 10= 24, 256, 0}, >>> + {L"s25fl512s_64k", {0x01, 0x02, 0x20, 0x4d, 0x01}, 5, 256, 64 * 10= 24, 1024, 0}, >>> + {L"s25fl512s_512k", {0x01, 0x02, 0x20, 0x4f, 0x00}, 5, 256, 256 * 10= 24, 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 * 102= 4, 32, 0}, >>> + {L"m25pX16", {0x20, 0x71, 0x15, 0x10, 0x00}, 5, 256, 64 * 102= 4, 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, N= F_ERASE_4K}, >>> + {L"n25q016a", {0x20, 0xbb, 0x15}, 3, 256, 64 * 1024, 32, N= F_ERASE_4K}, >>> + {L"n25q32", {0x20, 0xba, 0x16}, 3, 256, 64 * 1024, 64, N= F_ERASE_4K}, >>> + {L"n25q32a", {0x20, 0xbb, 0x16}, 3, 256, 64 * 1024, 64, N= F_ERASE_4K}, >>> + {L"n25q64", {0x20, 0xba, 0x17}, 3, 256, 64 * 1024, 128, N= F_ERASE_4K}, >>> + {L"n25q64a", {0x20, 0xbb, 0x17}, 3, 256, 64 * 1024, 128, N= F_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, N= F_ERASE_4K}, >>> + {L"n25q256a", {0x20, 0xbb, 0x19}, 3, 256, 64 * 1024, 512, N= F_ERASE_4K}, >>> + {L"n25q512", {0x20, 0xba, 0x20}, 3, 256, 64 * 1024, 1024, N= F_WRITE_FSR | NF_ERASE_4K}, >>> + {L"n25q512a", {0x20, 0xbb, 0x20}, 3, 256, 64 * 1024, 1024, N= F_WRITE_FSR | NF_ERASE_4K}, >>> + {L"n25q1024", {0x20, 0xba, 0x21}, 3, 256, 64 * 1024, 2048, N= F_WRITE_FSR | NF_ERASE_4K}, >>> + {L"n25q1024a", {0x20, 0xbb, 0x21}, 3, 256, 64 * 1024, 2048, N= F_WRITE_FSR | NF_ERASE_4K}, >>> + {L"mt25qu02g", {0x20, 0xbb, 0x22}, 3, 256, 64 * 1024, 4096, N= F_WRITE_FSR | NF_ERASE_4K}, >>> + {L"mt25ql02g", {0x20, 0xba, 0x22}, 3, 256, 64 * 1024, 4096, N= F_WRITE_FSR | NF_ERASE_4K}, >>> + /* SST */ >>> + {L"sst25vf040b", {0xbf, 0x25, 0x8d}, 3, 256, 64 * 1024, 8, N= F_ERASE_4K}, >>> + {L"sst25vf080b", {0xbf, 0x25, 0x8e}, 3, 256, 64 * 1024, 16, N= F_ERASE_4K}, >>> + {L"sst25vf016b", {0xbf, 0x25, 0x41}, 3, 256, 64 * 1024, 32, N= F_ERASE_4K}, >>> + {L"sst25vf032b", {0xbf, 0x25, 0x4a}, 3, 256, 64 * 1024, 64, N= F_ERASE_4K}, >>> + {L"sst25vf064c", {0xbf, 0x25, 0x4b}, 3, 256, 64 * 1024, 128, N= F_ERASE_4K}, >>> + {L"sst25wf512", {0xbf, 0x25, 0x01}, 3, 256, 64 * 1024, 1, N= F_ERASE_4K}, >>> + {L"sst25wf010", {0xbf, 0x25, 0x02}, 3, 256, 64 * 1024, 2, N= F_ERASE_4K}, >>> + {L"sst25wf020", {0xbf, 0x25, 0x03}, 3, 256, 64 * 1024, 4, N= F_ERASE_4K}, >>> + {L"sst25wf040", {0xbf, 0x25, 0x04}, 3, 256, 64 * 1024, 8, N= F_ERASE_4K}, >>> + {L"sst25wf040b", {0x62, 0x16, 0x13}, 3, 256, 64 * 1024, 8, N= F_ERASE_4K}, >>> + {L"sst25wf080", {0xbf, 0x25, 0x05}, 3, 256, 64 * 1024, 16, N= F_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, N= F_ERASE_4K}, >>> + {L"w25x16", {0xef, 0x30, 0x15}, 3, 256, 64 * 1024, 32, N= F_ERASE_4K}, >>> + {L"w25x32", {0xef, 0x30, 0x16}, 3, 256, 64 * 1024, 64, N= F_ERASE_4K}, >>> + {L"w25x64", {0xef, 0x30, 0x17}, 3, 256, 64 * 1024, 128, N= F_ERASE_4K}, >>> + {L"w25q80bl", {0xef, 0x40, 0x14}, 3, 256, 64 * 1024, 16, N= F_ERASE_4K}, >>> + {L"w25q16cl", {0xef, 0x40, 0x15}, 3, 256, 64 * 1024, 32, N= F_ERASE_4K}, >>> + {L"w25q32bv", {0xef, 0x40, 0x16}, 3, 256, 64 * 1024, 64, N= F_ERASE_4K}, >>> + {L"w25q64cv", {0xef, 0x40, 0x17}, 3, 256, 64 * 1024, 128, N= F_ERASE_4K}, >>> + {L"w25q128bv", {0xef, 0x40, 0x18}, 3, 256, 64 * 1024, 256, N= F_ERASE_4K}, >>> + {L"w25q256", {0xef, 0x40, 0x19}, 3, 256, 64 * 1024, 512, N= F_ERASE_4K}, >>> + {L"w25q80bw", {0xef, 0x50, 0x14}, 3, 256, 64 * 1024, 16, N= F_ERASE_4K}, >>> + {L"w25q16dw", {0xef, 0x60, 0x15}, 3, 256, 64 * 1024, 32, N= F_ERASE_4K}, >>> + {L"w25q32dw", {0xef, 0x60, 0x16}, 3, 256, 64 * 1024, 64, N= F_ERASE_4K}, >>> + {L"w25q64dw", {0xef, 0x60, 0x17}, 3, 256, 64 * 1024, 128, N= F_ERASE_4K}, >>> + {L"w25q128fw", {0xef, 0x60, 0x18}, 3, 256, 64 * 1024, 256, N= F_ERASE_4K}, >>> + {}, /* Empty entry to terminate the list */ }; >>> + >>> +/** >>> + Return a pool allocated copy of the NOR flash . >> >> Well, a copy of the NOR flash information structure, not the flash conte= nts. >> Extra space before period. >> >> / > > Thanks for the review. Will submit v2 with all corrections (also with typ= o fix in the commit log). > > Best regards, > Marcin > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://emea01.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Flist= s.01.org%2Fmailman%2Flistinfo%2Fedk2-devel&data=3D02%7C01%7Cpankaj.bansal%4= 0nxp.com%7C753424b872b346c9c76f08d52037acfc%7C686ea1d3bc2b4c6fa92cd99c5c301= 635%7C0%7C0%7C636450345874702676&sdata=3DXrtsj3B7deTGx45bVNfBi%2FjUoQOMQIfb= 65d0510U02c%3D&reserved=3D0