Index: arch/arm/mach-tegra/nv/include/nvodm_query_nand.h |
diff --git a/arch/arm/mach-tegra/nv/include/nvodm_query_nand.h b/arch/arm/mach-tegra/nv/include/nvodm_query_nand.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0b89648448957e6cae1b2412ae8cc7b1becdd3cf |
--- /dev/null |
+++ b/arch/arm/mach-tegra/nv/include/nvodm_query_nand.h |
@@ -0,0 +1,332 @@ |
+/* |
+ * Copyright (c) 2006-2009 NVIDIA Corporation. |
+ * All rights reserved. |
+ * |
+ * Redistribution and use in source and binary forms, with or without |
+ * modification, are permitted provided that the following conditions are met: |
+ * |
+ * Redistributions of source code must retain the above copyright notice, |
+ * this list of conditions and the following disclaimer. |
+ * |
+ * Redistributions in binary form must reproduce the above copyright notice, |
+ * this list of conditions and the following disclaimer in the documentation |
+ * and/or other materials provided with the distribution. |
+ * |
+ * Neither the name of the NVIDIA Corporation nor the names of its contributors |
+ * may be used to endorse or promote products derived from this software |
+ * without specific prior written permission. |
+ * |
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
+ * POSSIBILITY OF SUCH DAMAGE. |
+ * |
+ */ |
+ |
+/** |
+ * @file |
+ * <b>NVIDIA Tegra ODM Kit: |
+ * NAND Memory Query Interface</b> |
+ * |
+ * @b Description: Defines the ODM query interface for NVIDIA NAND memory adaptation. |
+ * |
+ */ |
+#ifndef INCLUDED_NVODM_QUERY_NAND_H |
+#define INCLUDED_NVODM_QUERY_NAND_H |
+ |
+#include "nvcommon.h" |
+#include "nvodm_modules.h" |
+ |
+#if defined(__cplusplus) |
+extern "C" { |
+#endif |
+ |
+/** |
+ * @defgroup nvodm_query_Nand NAND Memory Query Interface |
+ * This is the ODM query interface for NAND configurations. |
+ * @ingroup nvodm_query |
+ * @{ |
+ */ |
+ |
+#define FLASH_TYPE_SHIFT 16 |
+#define DEVICE_SHIFT 8 |
+#define FOURTH_ID_SHIFT 24 |
+/** |
+ * Defines the list of various capabilities of the NAND devices. |
+ */ |
+typedef enum |
+{ |
+ /// Specifies detected NAND device has only one plane; interleave not |
+ /// supported. |
+ SINGLE_PLANE, |
+ /// Specifies detected NAND device has only one plane; but interleave is |
+ /// supported for page programming. |
+ SINGLE_PLANE_INTERLEAVE, |
+ /// Specifies all types of multiplane capabilities should be declared after |
+ /// this. |
+ MULTI_PLANE, |
+ /// Specifies detected NAND device has multiple planes, and each plane is |
+ /// formed with alternate blocks from each bank. |
+ MULTIPLANE_ALT_BLOCK, |
+ /// Specifies detected NAND device has multiple planes, and each plane is |
+ /// formed with sequential blocks from each bank. |
+ MULTIPLANE_ALT_PLANE, |
+ /// Specifies detected NAND device has multiple planes, and each plane is |
+ /// formed with alternate blocks from each bank. Interleaving operation is |
+ /// supported across the banks. |
+ MULTIPLANE_ALT_BLOCK_INTERLEAVE, |
+ /// Specifies detected NAND device has multiple planes, and each plane is |
+ /// formed with sequential blocks from each bank. Interleaving operation is |
+ /// supported across the banks. |
+ MULTIPLANE_ALT_PLANE_INTERLEAVE |
+}NvOdmNandInterleaveCapability; |
+ |
+/** |
+ * Specifies the NAND Flash type. |
+ */ |
+typedef enum |
+{ |
+ /// Specifies NAND flash type is not known. |
+ NvOdmNandFlashType_UnKnown, |
+ /// Specifies SLC NAND flash type. |
+ NvOdmNandFlashType_Slc, |
+ /// Specifies MLC NAND flash type. |
+ NvOdmNandFlashType_Mlc, |
+ /// Ignore. Forces compilers to make 32-bit enums. |
+ NvOdmNandFlashType_Force32 = 0x7FFFFFFF |
+}NvOdmNandFlashType; |
+ |
+/// Defines the type of algorithm for error-correcting code (ECC). |
+typedef enum |
+{ |
+ /// Specifies Hamming ECC. |
+ NvOdmNandECCAlgorithm_Hamming = 0, |
+ /// Specifies Reed-Solomon ECC. |
+ NvOdmNandECCAlgorithm_ReedSolomon, |
+ /// Specifies BCH ECC. |
+ NvOdmNandECCAlgorithm_BCH, |
+ /// Specifies to disable ECC, if the the NAND flash part being used |
+ /// has error correction capability within itself. |
+ NvOdmNandECCAlgorithm_NoEcc, |
+ /// Ignore. Forces compilers to make 32-bit enums. |
+ NvOdmNandECCAlgorithm_Force32 = 0x7FFFFFFF |
+}NvOdmNandECCAlgorithm; |
+ |
+/// Defines the number of skip spare bytes. |
+typedef enum |
+{ |
+ NvOdmNandSkipSpareBytes_0, |
+ NvOdmNandSkipSpareBytes_4, |
+ NvOdmNandSkipSpareBytes_8, |
+ NvOdmNandSkipSpareBytes_12, |
+ NvOdmNandSkipSpareBytes_16, |
+ NvOdmNandSkipSpareBytes_Force32 = 0x7FFFFFFF |
+}NvOdmNandSkipSpareBytes; |
+ |
+/** |
+ * Defines the number of symbol errors correctable per each 512 continous |
+ * bytes of the flash area when Reed-Solomon algorithm is chosen for error |
+ * correction. Here each symbol is of 9 contiguous bits in the flash. |
+ * |
+ * @note Based on the chosen number of errors correctable, parity bytes |
+ * required to be stored in the spare area of NAND flash will vary. For 4 |
+ * correctable errors the number of parity bytes required are 36 bytes. |
+ * Similarly, for 6 and 8 symbol error correction, 56 and 72 parity bytes |
+ * must be stored in the spare area. As we also must use the spare area for |
+ * bad block management and wear levelling, we need to have 12 bytes for that |
+ * in the spare area. So, the spare area size should be able to accommodate |
+ * parity bytes and bytes required for bad block management. |
+ * Hence fill this parameter based on the spare area size of the flash being |
+ * used. |
+ */ |
+typedef enum |
+{ |
+ /// Specifies 4 symbol error correction per 512 byte area of NAND flash. |
+ NvOdmNandNumberOfCorrectableSymbolErrors_Four, |
+ /// Specifies 6 symbol error correction per 512 byte area of NAND flash. |
+ NvOdmNandNumberOfCorrectableSymbolErrors_Six, |
+ /// Specifies 8 symbol error correction per 512 byte area of NAND flash. |
+ NvOdmNandNumberOfCorrectableSymbolErrors_Eight, |
+ /// Ignore. Forces compilers to make 32-bit enums. |
+ NvOdmNandNumberOfCorrectableSymbolErrors_Force32 = 0x7FFFFFFF |
+}NvOdmNandNumberOfCorrectableSymbolErrors; |
+ |
+/// Defines the NAND flash command set. |
+typedef enum |
+{ |
+ /// Specifies to read command 1st cycle. |
+ NvOdmNandCommandList_Read = 0x00, |
+ /// Specifies to read command start 2nd cycle. |
+ NvOdmNandCommandList_Read_Start = 0x30, |
+ /// Specifies to read copy back 1st cycle. |
+ NvOdmNandCommandList_Read_Cpy_Bck = 0x00, |
+ /// Specifies to read copy back start 2nd cycle. |
+ NvOdmNandCommandList_Read_Cpy_Bck_Start = 0x35, |
+ /// Specifies to cache the read command. |
+ NvOdmNandCommandList_Cache_Read = 0x31, |
+ /// Specifies the last command to end cache read operation. |
+ NvOdmNandCommandList_Cache_ReadEnd = 0x3F, |
+ /// Specifies to read device ID. |
+ NvOdmNandCommandList_Read_Id = 0x90, |
+ /// Specifies to reset the device. |
+ NvOdmNandCommandList_Reset = 0xFF, |
+ /// Specifies to program/write page 1st cycle. |
+ NvOdmNandCommandList_Page_Program = 0x80, |
+ /// Specifies to program/write page 2nd cycle. |
+ NvOdmNandCommandList_Page_Program_Start = 0x10, |
+ /// Specifies to cache program 1st cycle. |
+ NvOdmNandCommandList_Cache_Program = 0x80, |
+ /// Specifies to cache program 2nd cycle. |
+ NvOdmNandCommandList_Cache_Program_Start = 0x15, |
+ /// Specifies to erase block. |
+ NvOdmNandCommandList_Block_Erase = 0x60, |
+ /// Specifies erase block start. |
+ NvOdmNandCommandList_Block_Erase_Start = 0xD0, |
+ /// Specifies copy back data. |
+ NvOdmNandCommandList_Copy_Back = 0x85, |
+ /// Specifies random data write. |
+ NvOdmNandCommandList_Random_Data_Input = 0x85, |
+ /// Specifies random data read. |
+ NvOdmNandCommandList_Random_Data_Out = 0x05, |
+ /// Specifies random data read start. |
+ NvOdmNandCommandList_Random_Data_Out_Start = 0xE0, |
+ /// Specifies multi page command. |
+ NvOdmNandCommandList_MultiPage = 0x11, |
+ NvOdmNandCommandList_MultiPageProgPlane2 = 0x81, |
+ /// Specifies read device status. |
+ NvOdmNandCommandList_Status = 0x70, |
+ /// Specifies read status of chip 1. |
+ NvOdmNandCommandList_Status_1 = 0xF1, |
+ /// Specifies read status of chip 2. |
+ NvOdmNandCommandList_Status_2 = 0xF2, |
+ /// Specifies ONFI read ID command. |
+ NvOdmNandCommandList_ONFIReadId = 0xEC, |
+ /// Ignore -- Forces compilers to make 32-bit enums. |
+ NvOdmNandCommandList_Force32 = 0x7FFFFFFF |
+}NvOdmNandCommandList; |
+ |
+/// Defines NAND flash types (42nm NAND or normal NAND). |
+typedef enum |
+{ |
+ /// Specifies conventional NAND flash (50nm, 60nm). |
+ NvOdmNandDeviceType_Type1, |
+ /// Specifies 42nm technology NAND flash. |
+ NvOdmNandDeviceType_Type2, |
+ NvOdmNandDeviceType_Force32 = 0x7FFFFFFF |
+}NvOdmNandDeviceType; |
+ |
+/** |
+ * This structure holds various NAND flash parameters. |
+ */ |
+typedef struct NvOdmNandFlashParamsRec |
+{ |
+ /// Holds the vendor ID code. |
+ NvU8 VendorId; |
+ /// Holds the device ID code. |
+ NvU8 DeviceId; |
+ /// Holds the device type. |
+ NvOdmNandFlashType NandType; |
+ /// Holds the information whether the used NAND flash supports internal |
+ /// copy back command. |
+ NvBool IsCopyBackCommandSupported; |
+ /// Holds the information whether the used NAND flash supports cache |
+ /// write operations. |
+ NvBool IsCacheWriteSupported; |
+ /// Holds the size of the flash (in megabytes). |
+ NvU32 CapacityInMB; |
+ /// Holds the Zones per flash device--minimum value possible is 1. |
+ /// Zone is a group of contiguous blocks among which internal copy back can |
+ /// be performed, if the chip supports copy-back operation. |
+ /// Zone is also referred as plane or district by some flashes. |
+ NvU32 ZonesPerDevice; |
+ /// Holds the blocks per Zone of the flash. |
+ NvU32 BlocksPerZone; |
+ /// Holds the expected flash response for READ STATUS command |
+ /// when requested previous operation is successful. |
+ NvU32 OperationSuccessStatus; |
+ /// Holds the interleave mechanism supported by the flash. |
+ NvOdmNandInterleaveCapability InterleaveCapability; |
+ /// Holds the ECC algorithm to be used for error correction. |
+ NvOdmNandECCAlgorithm EccAlgorithm; |
+ /// Holds the number of errors that can be corrected per 512 byte area of NAND |
+ /// flash using Reed-Solomon algorithm. |
+ NvOdmNandNumberOfCorrectableSymbolErrors ErrorsCorrectable; |
+ /// Holds the number of bytes to be skipped in spare area, starting from |
+ /// spare byte 0. |
+ NvOdmNandSkipSpareBytes SkippedSpareBytes; |
+ /// Flash timing parameters, which are all to be filled in nSec. |
+ /// Holds read pulse width in nSec. |
+ NvU32 TRP; |
+ /// Holds read hold delay in nSec. |
+ NvU32 TRH; |
+ /// Holds write pulse width in nSec. |
+ NvU32 TWP; |
+ /// Holds write hold delay in nSec. |
+ NvU32 TWH; |
+ /// Holds CE# setup time. |
+ NvU32 TCS; |
+ /// Holds write hold to read delay in nSec. |
+ NvU32 TWHR; |
+ /// Holds WE to BSY set wait time in nSec. |
+ NvU32 TWB; |
+ /// Holds read pulse width for PIO read commands. |
+ NvU32 TREA; |
+ /// Holds time from final rising edge of WE of addrress input to |
+ /// first rising edge of WE for data input. |
+ NvU32 TADL; |
+ /* |
+ tCLH, tALH, tCH, tCLS, tALS params are also |
+ required to calculate tCS value. |
+ */ |
+ /// Holds CLE setup time. |
+ NvU32 TCLS; |
+ /// Holds CLE hold time. |
+ NvU32 TCLH; |
+ /// Holds CE# hold time. |
+ NvU32 TCH; |
+ /// Holds ALE setup time. |
+ NvU32 TALS; |
+ /// Holds ALE hold time. |
+ NvU32 TALH; |
+ /// Holds Read Cycle hold time. |
+ NvU32 TRC; |
+ /// Holds Write Cycle hold time. |
+ NvU32 TWC; |
+ /// Holds CLE High to Read Delay Some data sheets refer it as TCLR. |
+ NvU32 TCR; |
+ /// Holds ALE High to Read Delay |
+ NvU32 TAR; |
+ /// Holds RBSY High to Read Delay |
+ NvU32 TRR; |
+ /// Describes whether the NAND is 42 nm NAND or normal. |
+ NvOdmNandDeviceType NandDeviceType; |
+ |
+ /// Holds the 4th ID data of the read ID command (as given by the data sheet) |
+ /// here to differentiate between 42 nm and other flashes that have the |
+ /// same ManufaturerId, DevId, and Flash type (e.g., K9LBG08U0M & K9LBG08U0D). |
+ NvU8 ReadIdFourthByte; |
+}NvOdmNandFlashParams; |
+ |
+/** |
+ * Gets the NAND flash device information. |
+ * |
+ * @param ReadID The NAND flash ID value that is read from the flash. |
+ * @return NULL if unsuccessful, or the appropriate flash params structure. |
+ */ |
+NvOdmNandFlashParams *NvOdmNandGetFlashInfo (NvU32 ReadID); |
+ |
+/** @}*/ |
+ |
+#if defined(__cplusplus) |
+} |
+#endif |
+ |
+#endif // INCLUDED_NVODM_QUERY_NAND_H |
+ |