📄 jedec_probe.c
字号:
/* Common Flash Interface probe code. (C) 2000 Red Hat. GPL'd. $Id: jedec_probe.c,v 1.19 2002/11/12 13:12:10 dwmw2 Exp $ See JEDEC (http://www.jedec.org/) standard JESD21C (section 3.5) for the standard this probe goes back to.*/#include <linux/config.h>#include <linux/module.h>#include <linux/types.h>#include <linux/kernel.h>#include <asm/io.h>#include <asm/byteorder.h>#include <linux/errno.h>#include <linux/slab.h>#include <linux/interrupt.h>#include <linux/mtd/map.h>#include <linux/mtd/cfi.h>#include <linux/mtd/gen_probe.h>/* Manufacturers */#define MANUFACTURER_AMD 0x0001#define MANUFACTURER_ATMEL 0x001f#define MANUFACTURER_FUJITSU 0x0004#define MANUFACTURER_INTEL 0x0089#define MANUFACTURER_MACRONIX 0x00C2#define MANUFACTURER_ST 0x0020#define MANUFACTURER_SST 0x00BF#define MANUFACTURER_TOSHIBA 0x0098/* AMD */#define AM29F800BB 0x2258#define AM29F800BT 0x22D6#define AM29LV800BB 0x225B#define AM29LV800BT 0x22DA#define AM29LV160DT 0x22C4#define AM29LV160DB 0x2249#define AM29F017D 0x003D#define AM29F016 0x00AD#define AM29F080 0x00D5#define AM29F040 0x00A4#define AM29LV040B 0x004F#define AM29F032B 0x0041/* Atmel */#define AT49BV512 0x0003#define AT29LV512 0x003d#define AT49BV16X 0x00C0#define AT49BV16XT 0x00C2#define AT49BV32X 0x00C8#define AT49BV32XT 0x00C9/* Fujitsu */#define MBM29LV650UE 0x22D7#define MBM29LV320TE 0x22F6#define MBM29LV320BE 0x22F9#define MBM29LV160TE 0x22C4#define MBM29LV160BE 0x2249#define MBM29LV800BA 0x225B#define MBM29LV800TA 0x22DA/* Intel */#define I28F004B3T 0x00d4#define I28F004B3B 0x00d5#define I28F400B3T 0x8894#define I28F400B3B 0x8895#define I28F008S5 0x00a6#define I28F016S5 0x00a0#define I28F008SA 0x00a2#define I28F008B3T 0x00d2#define I28F008B3B 0x00d3#define I28F800B3T 0x8892#define I28F800B3B 0x8893#define I28F016S3 0x00aa#define I28F016B3T 0x00d0#define I28F016B3B 0x00d1#define I28F160B3T 0x8890#define I28F160B3B 0x8891#define I28F320B3T 0x8896#define I28F320B3B 0x8897#define I28F640B3T 0x8898#define I28F640B3B 0x8899#define I82802AB 0x00ad#define I82802AC 0x00ac/* Macronix */#define MX29LV160T 0x22C4#define MX29LV160B 0x2249#define MX29F016 0x00AD#define MX29F004T 0x0045#define MX29F004B 0x0046/* ST - www.st.com */#define M29W800T 0x00D7#define M29W160DT 0x22C4#define M29W160DB 0x2249#define M29W040B 0x00E3/* SST */#define SST29EE512 0x005d#define SST29LE512 0x003d#define SST39LF800 0x2781#define SST39LF160 0x2782#define SST39LF512 0x00D4#define SST39LF010 0x00D5#define SST39LF020 0x00D6#define SST39LF040 0x00D7#define SST39SF010A 0x00B5#define SST39SF020A 0x00B6#define SST49LF030A 0x001C#define SST49LF040A 0x0051#define SST49LF080A 0x005B/* Toshiba */#define TC58FVT160 0x00C2#define TC58FVB160 0x0043#define TC58FVT321 0x009A#define TC58FVB321 0x009C#define TC58FVT641 0x0093#define TC58FVB641 0x0095struct amd_flash_info { const __u16 mfr_id; const __u16 dev_id; const char *name; const int DevSize; const int InterfaceDesc; const int NumEraseRegions; const int CmdSet; const ulong regions[4];};#define ERASEINFO(size,blocks) (size<<8)|(blocks-1)#define SIZE_64KiB 16#define SIZE_128KiB 17#define SIZE_256KiB 18#define SIZE_512KiB 19#define SIZE_1MiB 20#define SIZE_2MiB 21#define SIZE_4MiB 22#define SIZE_8MiB 23static const struct amd_flash_info jedec_table[] = { { mfr_id: MANUFACTURER_AMD, dev_id: AM29F032B, name: "AMD AM29F032B", DevSize: SIZE_4MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 1, regions: {ERASEINFO(0x10000,64) } }, { mfr_id: MANUFACTURER_AMD, dev_id: AM29LV160DT, name: "AMD AM29LV160DT", DevSize: SIZE_2MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 4, regions: {ERASEINFO(0x10000,31), ERASEINFO(0x08000,1), ERASEINFO(0x02000,2), ERASEINFO(0x04000,1) } }, { mfr_id: MANUFACTURER_AMD, dev_id: AM29LV160DB, name: "AMD AM29LV160DB", DevSize: SIZE_2MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 4, regions: {ERASEINFO(0x04000,1), ERASEINFO(0x02000,2), ERASEINFO(0x08000,1), ERASEINFO(0x10000,31) } }, { mfr_id: MANUFACTURER_TOSHIBA, dev_id: TC58FVT160, name: "Toshiba TC58FVT160", DevSize: SIZE_2MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 4, regions: {ERASEINFO(0x10000,31), ERASEINFO(0x08000,1), ERASEINFO(0x02000,2), ERASEINFO(0x04000,1) } }, { mfr_id: MANUFACTURER_TOSHIBA, dev_id: TC58FVB160, name: "Toshiba TC58FVB160", DevSize: SIZE_2MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 4, regions: {ERASEINFO(0x04000,1), ERASEINFO(0x02000,2), ERASEINFO(0x08000,1), ERASEINFO(0x10000,31) } }, { mfr_id: MANUFACTURER_TOSHIBA, dev_id: TC58FVB321, name: "Toshiba TC58FVB321", DevSize: SIZE_4MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 2, regions: {ERASEINFO(0x02000,8), ERASEINFO(0x10000,63) } }, { mfr_id: MANUFACTURER_TOSHIBA, dev_id: TC58FVT321, name: "Toshiba TC58FVT321", DevSize: SIZE_4MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 2, regions: {ERASEINFO(0x10000,63), ERASEINFO(0x02000,8) } }, { mfr_id: MANUFACTURER_TOSHIBA, dev_id: TC58FVB641, name: "Toshiba TC58FVB641", DevSize: SIZE_8MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 2, regions: {ERASEINFO(0x02000,8), ERASEINFO(0x10000,127) } }, { mfr_id: MANUFACTURER_TOSHIBA, dev_id: TC58FVT641, name: "Toshiba TC58FVT641", DevSize: SIZE_8MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 2, regions: {ERASEINFO(0x10000,127), ERASEINFO(0x02000,8) } }, { mfr_id: MANUFACTURER_FUJITSU, dev_id: MBM29LV650UE, name: "Fujitsu MBM29LV650UE", DevSize: SIZE_8MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 1, regions: {ERASEINFO(0x10000,128) } }, { mfr_id: MANUFACTURER_FUJITSU, dev_id: MBM29LV320TE, name: "Fujitsu MBM29LV320TE", DevSize: SIZE_4MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 2, regions: {ERASEINFO(0x10000,63), ERASEINFO(0x02000,8) } }, { mfr_id: MANUFACTURER_FUJITSU, dev_id: MBM29LV320BE, name: "Fujitsu MBM29LV320BE", DevSize: SIZE_4MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 2, regions: {ERASEINFO(0x02000,8), ERASEINFO(0x10000,63) } }, { mfr_id: MANUFACTURER_FUJITSU, dev_id: MBM29LV160TE, name: "Fujitsu MBM29LV160TE", DevSize: SIZE_2MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 4, regions: {ERASEINFO(0x10000,31), ERASEINFO(0x08000,1), ERASEINFO(0x02000,2), ERASEINFO(0x04000,1) } }, { mfr_id: MANUFACTURER_FUJITSU, dev_id: MBM29LV160BE, name: "Fujitsu MBM29LV160BE", DevSize: SIZE_2MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 4, regions: {ERASEINFO(0x04000,1), ERASEINFO(0x02000,2), ERASEINFO(0x08000,1), ERASEINFO(0x10000,31) } }, { mfr_id: MANUFACTURER_FUJITSU, dev_id: MBM29LV800BA, name: "Fujitsu MBM29LV800BA", DevSize: SIZE_1MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 4, regions: {ERASEINFO(0x04000,1), ERASEINFO(0x02000,2), ERASEINFO(0x08000,1), ERASEINFO(0x10000,15) } }, { mfr_id: MANUFACTURER_FUJITSU, dev_id: MBM29LV800TA, name: "Fujitsu MBM29LV800TA", DevSize: SIZE_1MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 4, regions: {ERASEINFO(0x10000,15), ERASEINFO(0x08000,1), ERASEINFO(0x02000,2), ERASEINFO(0x04000,1) } }, { mfr_id: MANUFACTURER_AMD, dev_id: AM29LV800BB, name: "AMD AM29LV800BB", DevSize: SIZE_1MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 4, regions: {ERASEINFO(0x04000,1), ERASEINFO(0x02000,2), ERASEINFO(0x08000,1), ERASEINFO(0x10000,15), } }, { mfr_id: MANUFACTURER_AMD, dev_id: AM29F800BB, name: "AMD AM29F800BB", DevSize: SIZE_1MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 4, regions: {ERASEINFO(0x04000,1), ERASEINFO(0x02000,2), ERASEINFO(0x08000,1), ERASEINFO(0x10000,15), } }, { mfr_id: MANUFACTURER_AMD, dev_id: AM29LV800BT, name: "AMD AM29LV800BT", DevSize: SIZE_1MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 4, regions: {ERASEINFO(0x10000,15), ERASEINFO(0x08000,1), ERASEINFO(0x02000,2), ERASEINFO(0x04000,1) } }, { mfr_id: MANUFACTURER_AMD, dev_id: AM29F800BT, name: "AMD AM29F800BT", DevSize: SIZE_1MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 4, regions: {ERASEINFO(0x10000,15), ERASEINFO(0x08000,1), ERASEINFO(0x02000,2), ERASEINFO(0x04000,1) } }, { mfr_id: MANUFACTURER_AMD, dev_id: AM29LV800BB, name: "AMD AM29LV800BB", DevSize: SIZE_1MiB, CmdSet: P_ID_AMD_STD, NumEraseRegions: 4, regions: {ERASEINFO(0x10000,15), ERASEINFO(0x08000,1), ERASEINFO(0x02000,2), ERASEINFO(0x04000,1) } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F004B3B, name: "Intel 28F004B3B", DevSize: SIZE_512KiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x02000, 8), ERASEINFO(0x10000, 7), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F004B3T, name: "Intel 28F004B3T", DevSize: SIZE_512KiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x10000, 7), ERASEINFO(0x02000, 8), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F400B3B, name: "Intel 28F400B3B", DevSize: SIZE_512KiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x02000, 8), ERASEINFO(0x10000, 7), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F400B3T, name: "Intel 28F400B3T", DevSize: SIZE_512KiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x10000, 7), ERASEINFO(0x02000, 8), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F008B3B, name: "Intel 28F008B3B", DevSize: SIZE_1MiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x02000, 8), ERASEINFO(0x10000, 15), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F008B3T, name: "Intel 28F008B3T", DevSize: SIZE_1MiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x10000, 15), ERASEINFO(0x02000, 8), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F008S5, name: "Intel 28F008S5", DevSize: SIZE_1MiB, CmdSet: P_ID_INTEL_EXT, NumEraseRegions: 1, regions: {ERASEINFO(0x10000,16), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F016S5, name: "Intel 28F016S5", DevSize: SIZE_2MiB, CmdSet: P_ID_INTEL_EXT, NumEraseRegions: 1, regions: {ERASEINFO(0x10000,32), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F008SA, name: "Intel 28F008SA", DevSize: SIZE_1MiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 1, regions: { ERASEINFO(0x10000, 16), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F800B3B, name: "Intel 28F800B3B", DevSize: SIZE_1MiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x02000, 8), ERASEINFO(0x10000, 15), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F800B3T, name: "Intel 28F800B3T", DevSize: SIZE_1MiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x10000, 15), ERASEINFO(0x02000, 8), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F016B3B, name: "Intel 28F016B3B", DevSize: SIZE_2MiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x02000, 8), ERASEINFO(0x10000, 31), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F016S3, name: "Intel I28F016S3", DevSize: SIZE_2MiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 1, regions: { ERASEINFO(0x10000, 32), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F016B3T, name: "Intel 28F016B3T", DevSize: SIZE_2MiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x10000, 31), ERASEINFO(0x02000, 8), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F160B3B, name: "Intel 28F160B3B", DevSize: SIZE_2MiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x02000, 8), ERASEINFO(0x10000, 31), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F160B3T, name: "Intel 28F160B3T", DevSize: SIZE_2MiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x10000, 31), ERASEINFO(0x02000, 8), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F320B3B, name: "Intel 28F320B3B", DevSize: SIZE_4MiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x02000, 8), ERASEINFO(0x10000, 63), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F320B3T, name: "Intel 28F320B3T", DevSize: SIZE_4MiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x10000, 63), ERASEINFO(0x02000, 8), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F640B3B, name: "Intel 28F640B3B", DevSize: SIZE_8MiB, CmdSet: P_ID_INTEL_STD, NumEraseRegions: 2, regions: { ERASEINFO(0x02000, 8), ERASEINFO(0x10000, 127), } }, { mfr_id: MANUFACTURER_INTEL, dev_id: I28F640B3T,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -