sdk-hwV1.3/lichee/linux-4.9/drivers/mtd/awnand/rawnand/aw_rawnand_ids.c

408 lines
10 KiB
C

/**
* SPDX-License-Identifier: GPL-2.0+
* aw_rawnand_ids.c
*
* (C) Copyright 2020 - 2021
* Allwinner Technology Co., Ltd. <www.allwinnertech.com>
* cuizhikui <cuizhikui@allwinnertech.com>
*
*/
#include <linux/mtd/aw-rawnand.h>
#include <linux/sizes.h>
struct aw_nand_flash_dev giga[] = {
{
.name = "GD9FU2G8F2A",
.id = {0xc8, 0xda, 0x90, 0x95, 0x46},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 128,
.pages_per_blk = 64,
.blks_per_die = 2048,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_PAGE,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_MULTI_WRITE | RAWNAND_MULTI_ERASE,
},
{
.name = "GD9FU1G8F2A",
.id = {0xc8, 0xf1, 0x80, 0x1d, 0x42},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 128,
.pages_per_blk = 64,
.blks_per_die = 1024,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_ROW_ADDR_2,
},
{
.name = "GD9FU1G8F2G",
.id = {0xc8, 0xf1, 0x80, 0x95, 0x43},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 128,
.pages_per_blk = 64,
.blks_per_die = 1024,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_AND_LAST_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_ROW_ADDR_2,
},
{
.name = "GD9FU4G8F2A",
.id = {0xc8, 0xdc, 0x90, 0x95, 0x16},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 128,
.pages_per_blk = 64,
.blks_per_die = 4096,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_AND_LAST_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_MULTI_WRITE | RAWNAND_MULTI_ONFI_ERASE,
},
};
struct aw_nand_flash_dev mxic[] = {
{
.name = "MX30LF2G18AC",
.id = {0xc2, 0xda, 0x90, 0x95, 0x06},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 2048,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_PAGE,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_MULTI_WRITE | RAWNAND_MULTI_ONFI_ERASE,
},
};
struct aw_nand_flash_dev mircon[] = {
{
.name = "MT29F1G08ABAEA",
.id = {0x2c, 0xf1, 0x80, 0x95, 0x04},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 1024,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_PAGE,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_MULTI_WRITE | RAWNAND_MULTI_ONFI_ERASE,
},
{
.name = "MT29F2G08ABAGA",
.id = {0x2c, 0xda, 0x90, 0x95, 0x06},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 128,
.pages_per_blk = 64,
.blks_per_die = 2048,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_PAGE,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_MULTI_WRITE | RAWNAND_MULTI_ONFI_ERASE,
},
};
struct aw_nand_flash_dev windbond[] = {
{
.name = "W29N02KV",
.id = {0xef, 0xda, 0x10, 0x95, 0x06},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 128,
.pages_per_blk = 64,
.blks_per_die = 2048,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_MULTI_WRITE | RAWNAND_MULTI_ONFI_ERASE,
},
{
.name = "W29N04GV",
.id = {0xef, 0xdc, 0x90, 0x95, 0x54},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 4096,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_MULTI_WRITE | RAWNAND_MULTI_ONFI_ERASE,
},
{
.name = "W29N01HV",
.id = {0xef, 0xf1, 0x00, 0x95, 0x00},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 1024,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM,
},
};
struct aw_nand_flash_dev foresee[] = {
{
.name = "FS33ND01GS1",
.id = {0xec, 0xf1, 0x00, 0x95, 0x42},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 1024,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM,
},
{
.name = "FS33ND04GS1",
.id = {0xec, 0xdc, 0x10, 0x95, 0x56},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 4096,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_JEDEC_MULTI_WRITE | RAWNAND_MULTI_ERASE,
},
};
struct aw_nand_flash_dev foresee_1[] = {
{
.name = "FSNS8A001G",
.id = {0xcd, 0xf1, 0x00, 0x95, 0x40},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 1024,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM,
},
{
.name = "FSNS8A002G",
.id = {0xcd, 0xda, 0x00, 0x95, 0x44},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 2048,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM,
},
};
struct aw_nand_flash_dev spansion[] = {
{
.name = "S34ML04G2",
.id = {0x01, 0xdc, 0x90, 0x95, 0x56},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 4096,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_MULTI_WRITE | RAWNAND_MULTI_ONFI_ERASE,
},
{
.name = "S34ML01G2",
.id = {0x01, 0xf1, 0x80, 0x1d},
.id_len = 4,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 1024,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_ROW_ADDR_2,
},
{
.name = "S34ML02G1",
.id = {0x01, 0xda, 0x90, 0x95, 0x46},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 2048,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_AND_LAST_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_MULTI_WRITE | RAWNAND_MULTI_ONFI_ERASE,
},
};
struct aw_nand_flash_dev toshiba[] = {
{
.name = "TC58NVG1S3HTA00",
.id = {0x98, 0xda, 0x90, 0x15, 0x76},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 128,
.pages_per_blk = 64,
.blks_per_die = 2048,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_PAGE,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_JEDEC_MULTI_WRITE | RAWNAND_MULTI_ERASE,
},
};
struct aw_nand_flash_dev fidelix[] = {
{
.name = "FMND1G08U3J",
.id = {0xad, 0xf1, 0x80, 0x1d},
.id_len = 4,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 1024,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM,
},
};
struct aw_nand_flash_dev unilc[] = {
{
.name = "SCN00SA1T1AI6A",
.id = {0xc8, 0xd1, 0x80, 0x95, 0x42},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 1024,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_ROW_ADDR_2,
},
{
.name = "SCN01SA1T1AI7A",
.id = {0xc8, 0xda, 0x90, 0x95, 0x44},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 2048,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_MULTI_WRITE | RAWNAND_MULTI_ERASE,
},
};
struct aw_nand_flash_dev jsc[] = {
{
.name = "JS27HU2G08SCN",
.id = {0xad, 0xda, 0x90, 0x95, 0x46},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 64,
.pages_per_blk = 64,
.blks_per_die = 2048,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_MULTI_WRITE | RAWNAND_MULTI_ONFI_ERASE,
},
};
struct aw_nand_flash_dev dosilicon[] = {
{
.name = "FMND4G08U3C",
.id = {0xf8, 0xdc, 0x90, 0x95, 0x46},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 128,
.pages_per_blk = 64,
.blks_per_die = 4096,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_MULTI_WRITE | RAWNAND_MULTI_ONFI_ERASE,
},
};
struct aw_nand_flash_dev dosilicon_1[] = {
{
.name = "DSND4G08U3C",
.id = {0xe5, 0xdc, 0x90, 0x95, 0x57},
.id_len = 5,
.dies_per_chip = 1,
.pagesize = SZ_2K,
.sparesize = 128,
.pages_per_blk = 64,
.blks_per_die = 4096,
.access_freq = 40,
.badblock_flag_pos = PST_FIRST_TWO_PAGES,
.pe_cycles = PE_CYCLES_100K,
.options = RAWNAND_ITF_SDR | RAWNAND_NFC_RANDOM | RAWNAND_MULTI_WRITE | RAWNAND_MULTI_ONFI_ERASE,
},
};
struct rawnand_manufacture aw_manuf_tbl[] = {
RAWNAND_MANUFACTURE(RAWNAND_MFR_GIGA, GIGA_NAME, giga),
RAWNAND_MANUFACTURE(RAWNAND_MFR_MXIC, MXIC_NAME, mxic),
RAWNAND_MANUFACTURE(RAWNAND_MFR_MICRON, MICRON_NAME, mircon),
RAWNAND_MANUFACTURE(RAWNAND_MFR_WINBOND, WINBOND_NAME, windbond),
RAWNAND_MANUFACTURE(RAWNAND_MFR_FORESEE, FORESEE_NAME, foresee),
RAWNAND_MANUFACTURE(RAWNAND_MFR_SPANSION, SPANSION_NAME, spansion),
RAWNAND_MANUFACTURE(RAWNAND_MFR_TOSHIBA, TOSHIBA_NAME, toshiba),
RAWNAND_MANUFACTURE(RAWNAND_MFR_FIDELIX, FIDELIX_NAME, fidelix),
RAWNAND_MANUFACTURE(RAWNAND_MFR_UNILC, UNILC_NAME, unilc),
RAWNAND_MANUFACTURE(RAWNAND_MFR_JSC, JSC_NAME, jsc),
RAWNAND_MANUFACTURE(RAWNAND_MFR_DOSILICON, DOSILICON_NAME, dosilicon),
RAWNAND_MANUFACTURE(RAWNAND_MFR_FORESEE_1, FORESEE_NAME, foresee_1),
RAWNAND_MANUFACTURE(RAWNAND_MFR_DOSILICON_1, DOSILICON_NAME, dosilicon_1),
};
AW_NAND_MANUFACTURE(aw_nand_manufs, aw_manuf_tbl);