; SK6366 SSD LLF ini file ; semicolon is for line comment ; this file is for JS29F16B08CCME3, BE=1, Word Mode, copy from Fls_JS29F16B08CCME2_x2.ini FLASH_INI_UNIQUE = 0x6191 ; basic flash parameter, IO bus is 16 bits or not FLASH_IOBUS16 = 0 ; basic flash parameter, CE per package gubCEperPkg = 2 ; basic flash parameter, Blocks per Die gabPhyBlksPerDie = 4096 ; basic flash parameter, page size in flash mode, 2^4 = 16 sectors = 8KB FLASHMODE_PARTI_SHIFT = 4 ; basic flash parameter, Flash ID (5 Bytes) FlashID_1 = 0x89 FlashID_2 = 0x88 FlashID_3 = 0x24 FlashID_4 = 0x4B FlashID_5 = 0xA9 ; DWORD, BE reg offset = 0x0008 CE_CTL = 0x0500 ; DWORd, BE reg offset = 0x0010 FSIGNAL_CTRL = 0x1C39 ; DWORD, BE reg offset = 0x0018 CHIP_SEL = 0xFFFF ; BYTE, BE reg offset = 0x0044 PARTI_SHIFT = 0x05 ; BYTE, BE reg offset = 0x0045 CHIP_FACTOR = 0x00 ; BYTE, BE reg offset = 0x0046 DIE_FACTOR = 0x00 ; BYTE, BE reg offset = 0x0047 MP_FACTOR = 0x01 ; BYTE, BE reg offset = 0x005C ADDR_CYCLE = 0x12 ; BYTE, BE reg offset = 0x005D PAGE_SHIFT = 0x08 ; BYTE, BE reg offset = 0x005E BANK_SHIFT = 0x08 ; BYTE, BE reg offset = 0x005F BLOCK_SHIFT = 0x0B ; DWORD, BE reg offset = 0x0060 BLOCK_SHIFT_NUM = 0x800 ; DWORD, BE reg offset = 0x0064 BLOCK_SHIFT_NUM2 = 0x800 ; DWORD, BE reg offset = 0x0068 FLASH_CFG = 0xA4 ; DWORD, BE reg offset = 0x006C FLASH_WR_CFG = 0x31 ; DWORD, BE reg offset = 0x0070 FLASH_RD_CFG = 0x3B1 ; DWORD, BE reg offset = 0x0078 ALE_CLE_CTRL = 0x93 ; DWORD, BE reg offset = 0x007C FLASH_CTRL0 = 0x31 ; DWORD, BE reg offset = 0x0080 FLASH_CTRL1 = 0x3F ; DWORD, BE reg offset = 0x0080 FLASH_CTRL1_ERASE = 0x2E ; DWORD, BE reg offset = 0x0080 FLASH_CTRL1_READ = 0x3F ; DWORD, BE reg offset = 0x0080 FLASH_CTRL1_WRITE = 0x2F ; DWORD, BE reg offset = 0x0084 FLASH_CTRL2 = 0x89 ; DWORD, BE reg offset = 0x0088 FLASH_CTRL3 = 0x98704 ; DWORD, BE reg offset = 0x008C FLASH_CTRL4 = 0x00 ; DWORD, BE reg offset = 0x0090 FLASH_CTRL5 = 0x12 ; DWORD, BE reg offset = 0x0094 FLASH_CTRL6 = 0x00 ; DWORD, BE reg offset = 0x0098 FLASH_CTRL7 = 0x00 ; DWORD, BE reg offset = 0x009C FLASH_CTRL8 = 0x0A ; DWORD, BE reg offset = 0x00A4 FLASH_DQS_CTRL = 0x00000000 ; DWORD, BE reg offset = 0x035C FLASH_DEFECT = 0x0000 ; DWORD, BE reg offset = 0x0380 RDMR_CTL_0 = 0x0128 ; DWORD, BE reg offset = 0x0384 RDMR_CTL_1 = 0x0000 ; DWORD, BE reg offset = 0x0388 RDMR_CTL_2 = 0x0000 ; DWORD, BE reg offset = 0x038C RDMR_CTL_3 = 0x0000 ; BYTE, Multi Plane Write Command Set WRITE_CMD0 = 0x80 WRITE_CMD1 = 0x10 WRITE_CMD2 = 0x11 WRITE_CMD3 = 0x80 WRITE_CMD4 = 0x85 WRITE_CMD5 = 0x78 WRITE_CMD6 = 0x10 WRITE_CMD7 = 0x00 WRITE_CMD8 = 0xFC WRITE_CMD9 = 0x11 ; BYTE, Multi Plane Read Command Set READ_CMD0 = 0x00 READ_CMD1 = 0x30 READ_CMD2 = 0x06 READ_CMD3 = 0xE0 READ_CMD4 = 0x05 READ_CMD5 = 0x78 READ_CMD6 = 0xE0 READ_CMD7 = 0x00 READ_CMD8 = 0xFE READ_CMD9 = 0x70 READ_CMD10 = 0x10 READ_STATUSCMD = 0x78 ; BYTE, Multi Plane Write Flash SRAM Command Set WriteFlashSramCmd0 = 0x85 WriteFlashSramCmd1 = 0x10 WriteFlashSramCmd2 = 0x11 WriteFlashSramCmd3 = 0x85 WriteFlashSramCmd4 = 0x85 WriteFlashSramCmd5 = 0x78 WriteFlashSramCmd6 = 0x10 WriteFlashSramCmd7 = 0x00 WriteFlashSramCmd8 = 0x7C WriteFlashSramCmd9 = 0x11 ; BYTE, Multi Plane Erase Command Set ERASE_CMD0 = 0x60 ERASE_CMD1 = 0xD0 ERASE_CMD2 = 0x00 ERASE_CMD3 = 0x60 ERASE_CMD4 = 0x00 ERASE_CMD5 = 0x78 ERASE_CMD6 = 0x00 ERASE_CMD7 = 0x00 ERASE_CMD8 = 0x2C ERASE_CMD9 = 0x20 ; Main Control, BASE 0xFFFCE000 ; DWORD, Main Control offset 0x10 PAD_BE0_PAR = 0x22222A2A ; DWORD, Main Control offset 0x14 PAD_BE1_PAR = 0x22222A2A ; DWORD, Main Control offset 0x20 PAD_FCE_PAR = 0x00000022 ; DWORD, Main Control offset 0xC0 TLC_CTL = 0x00000000 ; DWORD, DMA Priority Ctrl DMA_PRIORITY_CTRL = 0x00001203 ; BYTE, Multi Plane Copy back Command Set COPYBACK_CMD0 = 0x85 COPYBACK_CMD1 = 0x10 COPYBACK_CMD2 = 0x0C COPYBACK_CMD3 = 0x01 COPYBACK_CMD4 = 0x85 COPYBACK_CMD5 = 0x11 COPYBACK_CMD6 = 0x85 COPYBACK_CMD7 = 0x10 ; DWORD, 決定系統clock頻率,單位為hz,例如16MHz時,此值為16000000。 gulSysClk = 118750000 ; DWORD, 提供DRAM大小,目前使用DDR的大小4MB = 0x00400000。 gulDRAMSize = 0x00400000 ; WORD, SATACapNCQ guwSATACapNCQ = 0x0306 ; WORD, 為了支援Trim command,將SSD提供可使用的LBA大小扣掉該值。 ; 該值建議由程式計算得出 ; guwTrimLBAOffset = 4096 ; BYTE, 支援NCQ command的深度。 gubNCQDepth = 31 ; BYTE, 是否支援Trim Command。數值1為支援,數值0為不支援。 gfSupportTrim = 1 ; Byte, 當SATA傳輸命令小於該值時,此命令視為random。 gubRandomBoundary = 32 ; BYTE, debug on gubDebugOn = 1 ; BYTE, 一個gang的實際大小。根據FLASHMODE_PARTI_SHIFT與gfSys16Fsh08得出 gubGangSizeShift = 15 ; BYTE, 當在Load Code Group時,是否發起一次的flash read命令將Code Group由flash讀到SRAM,若不是一次完成的話,將會對該flash以一個gang一個gang的方式依次讀出。 gfLoadCodeOnce = 1 ; BYTE, background GC 願意發動的group數量。 ; 該值建議由程式計算得出 gubGCFreeLimit = 12 ; BYTE, 當該bank中的Free Group小於該設定值時,將強迫發起GC。 ; 該值建議由程式計算得出 ; gubGCFreeForceLimit = 30 ; DWORD, 經過該時間之後還沒有新的Write命令時,處理最後的pending write IRP,時間單位為ms。 gulIdleWriteTolerance = 20 ; WORD, 當連續的Read Sector超過該值後,開始Pre Read的功能,單位為Sector。 ; 此參數不可小於 700 guwPreReadThreshold = 1000 ; WORD, 每一個bank保留的Group數,用來提供給GC使用,此外的可用Group即為SSD可以使用的空間,該數字大小會影響SSD實際容量與GC效能。 guwGroupPreserveNum = 133 ; WORD, 當執行flash copy back命令時,第一階段read後獲得ECC回報的錯誤bit的值若大於該值,則該IRP的ulFlag設為IRP_CB_R_ERROR。建議值為開啟BCH大小的一半,如BCH 24 bits 時設定為12。目前設定值= 0,當flash copy back在第一階段read後獲得ECC回報的產生錯誤bit則發起flash copy back。 guwCBReadErrorBitThreshold = 0 ; BYTE, 是否支援Pre Read的功能。數值1為支援,數值0為不支援。 gubEnablePreRead = 1 ; BYTE, 是否開啟AES 對flash資料編碼功能,根據該值可決定開啟ECB、ECB、XTS mode或不開啟編碼功能。 gubAESMode = 0 ; BYTE, 決定使用1 BE 或2 BE的重要參數,當使用2 BE時,該值為1。 gubBEShift = 0 ; BYTE, 在一個BE下,flash使用的CE數,根據flash種類與實際焊接數量來決定。 gubCENum = 2 ; WORD, 在一個CE下,flash實際的Block數,該值不一定要是2的冪次方。 gabPhyBlksPerChip = 4096 ; BYTE, Flash組態設定,是否支援word mode,該值為1是word mode,0為byte mode。 gfSys16Fsh08 = 1 ; BYTE gfNoWaitStatus = 0 ; BYTE gfNoWaitRead = 1 ; BYTE gfNoWaitWrite = 1 ; BYTE gfNoWaitErase = 1 ; BYTE gfNoWaitSwap = 1 ; BYTE, 在flash執行read動作時,是否支援兩階段Read。 gfEnable2StepRead = 1 ; BYTE, 在flash執行read動作時,發起interleave的階數。 gfInterleaveReadCounter = 2 ; BYTE, 在flash執行copy back動作時,是否利用copy back命令來發起flash內部的copy back。 gfEnableFlashCB = 1 ; BYTE, 在flash執行copy back動作時,enable copyback 2K~14K when LBA is 4K aligned。數值1為使用,數值0為不使用。 gfEnableCopyBackPartialData = 1 ; BYTE, 當flash執行copy back動作超過該數值指定的次數時,發起一個bank的wear leveling,該值為次方數(2^8 = 256) gubBankWearLevelingThreshold = 8 ; BYTE gfRestrictFlashCBStartPart = 1 ; BYTE, 是否支援ONFI flash,當使用OMFI flash時,fioResetSingleCE()與fioMultiPageRead()有不一樣的動作。數值1為使用,數值0為不使用。 gfOnfiFlag = 0 ; BYTE, 當flash執行Erase、Read、Write、Copy back等動作時,是否reset該BE的所有CE。數值1為使用,數值0為不使用。 gfResetFirst = 0 ; BYTE, SSD所有的bank值,該值為次方數(2^1 = 2),此值跟使用的BE數、CE數、Die數有相關 gubBankShift = 1 ; BYTE, 單一BE所允許pending的write IRP個數,目的為設定scheduling random write的queue size。 gubPendingWriteNumMax = 3 ; WORD, 該flash一個block所含的page數 guwGangNum = 256 ; WORD, 為了獲得last gang,通常會將guwGangNum減掉1,來獲得last gang的page值,因為演算法有利用last gang來存放特定資訊。該值會使得使用總容量減少。 guwGangIdxNum = 1 ; WORD, SSD中一個Bank所含的Group量。 guwGroupNum = 2048 ; WORD, SSD寫入該數量MB數的資料時,將發起一次Dram Preserve。 guwDramPreserveInterval = 4096 ; BYTE, 是否參考Defect Block Table(DBT)而忽略該Group的使用。 gubEnableDefectSkipInPick = 1 ; BYTE gfOptimizeCont4K = 0 ; WORD, 為了修正alignment的問題,SATA提供的LBA會加上此值成為演算法使用的LBA。 guwLBAOffset = 0 ; BYTE, BE使用的ck cnt gubCKCnt = 4 ; BYTE, IRP個數 gubBufSplitNum = 23 ; BYTE gubTBEG_QMaxLen = 10 ; BYTE, SATA完成該個數個IRP之後,Dram Preserve 自己可以做一次IRP。 gubDramPreserveStopStep = 0x02 ; DWORD gulDIPMControl = 0x00000000 ; AES mode, Key AES_KEY1_0 = 0x0001 AES_KEY1_1 = 0x0002 AES_KEY1_2 = 0x0003 AES_KEY1_3 = 0x0004 AES_KEY1_4 = 0x0005 AES_KEY1_5 = 0x0006 AES_KEY1_6 = 0x0007 AES_KEY1_7 = 0x0008 AES_INIVEC0 = 0x0000 AES_INIVEC1 = 0x0000 AES_INIVEC2 = 0x0000 AES_INIVEC3 = 0x0000 AES_KEY2_0 = 0x0010 AES_KEY2_1 = 0x0020 AES_KEY2_2 = 0x0030 AES_KEY2_3 = 0x0040 AES_KEY2_4 = 0x0050 AES_KEY2_5 = 0x0060 AES_KEY2_6 = 0x0070 AES_KEY2_7 = 0x0080 AES_Control = 0x0030 ; BYTE, 是否取出strong page來使用。 gubEnableWeakGangSkipInPick = 1 ; BYTE, 是否在GC階段使用Copy back。數值1為使用,數值0為不使用。 gubEnableGCCopyBack = 1 ; BYTE, 是否開啟Constraint Read。數值1為開啟,數值0為不開啟。 gubEnableConstraintRead = 1 ; BYTE, 是否開啟Poll program fail功能,開啟時會在Program flash 時檢查是否fail。數值1為開啟,數值0為不開啟。 gubEnablePollProgFail = 1 ; DWORD, 提供開卡後的初始Erase endurance, 不同種類的Flash此值可能會不同。對MLC flash目前設定3000次。 gulEraseEndurance = 3000 ; BYTE, 當滿足發起wear leveling 的條件,前端寫入gubEnWearLevelGroupGap個group的資料後,就會發生一次wear leveling平衡的GC動作。該值越大越少發起wear leveling,效能會稍微好一些,但wear leveling的效果會不明顯,WAI會較小。目前建議值為32,表示每寫入32個group後會發起一次平衡wear leveling的GC動作。此值若為0, disable wear leveling。 gubEnWearLevelGroupGap = 32 ; BYTE, 是否在Random write階段使用IRP Scheduling。數值1為使用,數值0為不使用。 gubEnableRandomWScheduling = 1 ; BYTE, 每一個bank最大的run time defect group個數。 gubRDefectGroupNumMax = 100 ; BYTE, 最大的ECC可更正錯誤的bit個數,當超過此個數時,將此讀取資料所在的Group視為runtime defect group。 gubReadErrorBitThreshold = 20 ; BYTE, 支援兩個FDM IRP對應到一個FIO IRP的功能,此功能在8KB per page的Flash中,可以加速Random Write的效能。數值1為支援,數值0為不支援。 gubEnableTwoFDMtoOneFIO = 0 ; BYTE, Replace Mode, please set as following rules ; REPLACEATTR_2_1 0x00 ; REPLACEATTR_1_1_SKY 0x01 ; REPLACEATTR_1_1 0x02 gubReplaceMode = 1 ; WORD, Run Time Attribute, please set as following rules (using bitwise OR) ; RTATTR_HEADERTYPE_1 0x0001 ; RTATTR_ONFI 0x0002 //CPU = DRAM = 162.5MHz, BE = 81.25MHz ; RTATTR_TOGGLE 0x0004 ; RTATTR_RANDOMIZER 0x0008 ; RTATTR_BE_40Mhz 0x0010 //CPU = DRAM = 120MHz, BE = 40MHz ; RTATTR_BE_50Mhz 0x0020 //CPU = DRAM = 150MHz, BE = 50MHz ; RTATTR_BE_66_25Mhz 0x0040 //CPU = DRAM = 132.5MHz, BE = 66.25MHz, for Samsung toggle flash ; RTATTR_FILL_EMPTY_GANGS 0x0080 //for Toshiba 24nm ; RTATTR_S3S4_SPEEDUP 0x0100 //for 7sec ; RTATTR_BE_54_16Mhz 0x0200 //CPU = DRAM = 162.5MHz, BE = 54.16MHz ; RTATTR_CPU110_BE55Mhz 0x0400 //CPU = DRAM = 110MHz, BE = 55MHz ; RTATTR_POWER_OFF_DP 0x0800 ; RTATTR_BE_81Mhz 0x1000 ; RTATTR_BE_75Mhz 0x2000 ; RTATTR_SDR_TOGGLE 0x4000 ; for example, 0x44 means Toggle flash with BE=66.25Mhz guwRunTimeAttr = 0x02 ; BYTE, 當1CE有2 Die且沒有任何status command可以知道哪一個Die是ready時,可以把這兩個Die當作一個同一個Die來操作。 gubUseTwoDiesAsOneDieEn = 0 ; BYTE, 如果flash有support cache program時,則可選擇gubCacheOperationEn = CACHE_PROGRAM。反之,gubCacheOperationEn 必須等於NON_CACHE_OPERATION。 gubCacheOperationEn = 1 ; WORD, 開卡Erase Flash時,切換Bank的延遲時間,防止Erase Speed太快,耗電量太高(10us per unit)。 guwEraseDelay = 250 ; BYTE, 為了錯開Erase時在不同BE間所需下的delay時間,單位10 us。 gubBEEraseDelay = 0 ; BYTE, 為了錯開Write時在不同BE間所需下的delay時間,單位10 us。 gubBEWriteDelay = 0 ; DWORD, Read Retry Mode ; 0: Only read Repeat ; 1: Support L84A(MT29F64G08CBABA, MT29F64G08CBABB) ; 2: Support Toshiba(TC58NVG6DCJTA00) gulReadRetryMode = 0 ; BYTE, Read Retry Cycle gubReadRetryCycle = 0 ; BYTE, Read Retry Register Num gubReadRetryRegNum = 0 ; BYTE, Read Retry Table READ_RETRY_TABLE_00 = 0x00 READ_RETRY_TABLE_01 = 0x00 READ_RETRY_TABLE_02 = 0x00 READ_RETRY_TABLE_03 = 0x00 READ_RETRY_TABLE_04 = 0x00 READ_RETRY_TABLE_05 = 0x00 READ_RETRY_TABLE_06 = 0x00 READ_RETRY_TABLE_07 = 0x00 READ_RETRY_TABLE_08 = 0x00 READ_RETRY_TABLE_09 = 0x00 READ_RETRY_TABLE_10 = 0x00 READ_RETRY_TABLE_11 = 0x00 READ_RETRY_TABLE_12 = 0x00 READ_RETRY_TABLE_13 = 0x00 READ_RETRY_TABLE_14 = 0x00 READ_RETRY_TABLE_15 = 0x00 READ_RETRY_TABLE_16 = 0x00 READ_RETRY_TABLE_17 = 0x00 READ_RETRY_TABLE_18 = 0x00 READ_RETRY_TABLE_19 = 0x00 READ_RETRY_TABLE_20 = 0x00 READ_RETRY_TABLE_21 = 0x00 READ_RETRY_TABLE_22 = 0x00 READ_RETRY_TABLE_23 = 0x00 READ_RETRY_TABLE_24 = 0x00 READ_RETRY_TABLE_25 = 0x00 READ_RETRY_TABLE_26 = 0x00 READ_RETRY_TABLE_27 = 0x00 READ_RETRY_TABLE_28 = 0x00 READ_RETRY_TABLE_29 = 0x00 READ_RETRY_TABLE_30 = 0x00 READ_RETRY_TABLE_31 = 0x00 READ_RETRY_TABLE_32 = 0x00 READ_RETRY_TABLE_33 = 0x00 READ_RETRY_TABLE_34 = 0x00 READ_RETRY_TABLE_35 = 0x00 READ_RETRY_TABLE_36 = 0x00 READ_RETRY_TABLE_37 = 0x00 READ_RETRY_TABLE_38 = 0x00 READ_RETRY_TABLE_39 = 0x00 READ_RETRY_TABLE_40 = 0x00 READ_RETRY_TABLE_41 = 0x00 READ_RETRY_TABLE_42 = 0x00 READ_RETRY_TABLE_43 = 0x00 READ_RETRY_TABLE_44 = 0x00 READ_RETRY_TABLE_45 = 0x00 READ_RETRY_TABLE_46 = 0x00 READ_RETRY_TABLE_47 = 0x00 READ_RETRY_TABLE_48 = 0x00 READ_RETRY_TABLE_49 = 0x00 READ_RETRY_TABLE_50 = 0x00 READ_RETRY_TABLE_51 = 0x00 READ_RETRY_TABLE_52 = 0x00 READ_RETRY_TABLE_53 = 0x00 READ_RETRY_TABLE_54 = 0x00 READ_RETRY_TABLE_55 = 0x00 READ_RETRY_TABLE_56 = 0x00 READ_RETRY_TABLE_57 = 0x00 READ_RETRY_TABLE_58 = 0x00 READ_RETRY_TABLE_59 = 0x00 READ_RETRY_TABLE_60 = 0x00 READ_RETRY_TABLE_61 = 0x00 READ_RETRY_TABLE_62 = 0x00 READ_RETRY_TABLE_63 = 0x00 READ_RETRY_TABLE_64 = 0x00 READ_RETRY_TABLE_65 = 0x00 READ_RETRY_TABLE_66 = 0x00 READ_RETRY_TABLE_67 = 0x00 READ_RETRY_TABLE_68 = 0x00 READ_RETRY_TABLE_69 = 0x00 READ_RETRY_TABLE_70 = 0x00 READ_RETRY_TABLE_71 = 0x00 READ_RETRY_TABLE_72 = 0x00 READ_RETRY_TABLE_73 = 0x00 READ_RETRY_TABLE_74 = 0x00 READ_RETRY_TABLE_75 = 0x00 READ_RETRY_TABLE_76 = 0x00 READ_RETRY_TABLE_77 = 0x00 READ_RETRY_TABLE_78 = 0x00 READ_RETRY_TABLE_79 = 0x00 READ_RETRY_TABLE_80 = 0x00 READ_RETRY_TABLE_81 = 0x00 READ_RETRY_TABLE_82 = 0x00 READ_RETRY_TABLE_83 = 0x00 READ_RETRY_TABLE_84 = 0x00 READ_RETRY_TABLE_85 = 0x00 READ_RETRY_TABLE_86 = 0x00 READ_RETRY_TABLE_87 = 0x00 READ_RETRY_TABLE_88 = 0x00 READ_RETRY_TABLE_89 = 0x00 READ_RETRY_TABLE_90 = 0x00 READ_RETRY_TABLE_91 = 0x00 READ_RETRY_TABLE_92 = 0x00 READ_RETRY_TABLE_93 = 0x00 READ_RETRY_TABLE_94 = 0x00 READ_RETRY_TABLE_95 = 0x00 READ_RETRY_TABLE_96 = 0x00 READ_RETRY_TABLE_97 = 0x00 READ_RETRY_TABLE_98 = 0x00 READ_RETRY_TABLE_99 = 0x00