Tomato 1.28
[tomato.git] / release / src / include / flash.h
blob9794b39b6d3c6c6a9e8cc19812451e56c048887a
1 /*
2 * flash.h: Common definitions for flash access.
4 * Copyright 2005, Broadcom Corporation
5 * All Rights Reserved.
6 *
7 * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
8 * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
9 * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
10 * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
12 * $Id: flash.h,v 1.4 2005/03/07 08:35:32 kanki Exp $
15 /* Types of flashes we know about */
16 typedef enum _flash_type {OLD, BSC, SCS, AMD, SST, SFLASH} flash_type_t;
18 /* Commands to write/erase the flases */
19 typedef struct _flash_cmds{
20 flash_type_t type;
21 bool need_unlock;
22 uint16 pre_erase;
23 uint16 erase_block;
24 uint16 erase_chip;
25 uint16 write_word;
26 uint16 write_buf;
27 uint16 clear_csr;
28 uint16 read_csr;
29 uint16 read_id;
30 uint16 confirm;
31 uint16 read_array;
32 } flash_cmds_t;
34 #define UNLOCK_CMD_WORDS 2
36 typedef struct _unlock_cmd {
37 uint addr[UNLOCK_CMD_WORDS];
38 uint16 cmd[UNLOCK_CMD_WORDS];
39 } unlock_cmd_t;
41 /* Flash descriptors */
42 typedef struct _flash_desc {
43 uint16 mfgid; /* Manufacturer Id */
44 uint16 devid; /* Device Id */
45 uint size; /* Total size in bytes */
46 uint width; /* Device width in bytes */
47 flash_type_t type; /* Device type old, S, J */
48 uint bsize; /* Block size */
49 uint nb; /* Number of blocks */
50 uint ff; /* First full block */
51 uint lf; /* Last full block */
52 uint nsub; /* Number of subblocks */
53 uint *subblocks; /* Offsets for subblocks */
54 char *desc; /* Description */
55 } flash_desc_t;
58 #ifdef DECLARE_FLASHES
59 flash_cmds_t sflash_cmd_t =
60 { SFLASH, 0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
62 flash_cmds_t flash_cmds[] = {
63 /* type needu preera eraseb erasech write wbuf clcsr rdcsr rdid confrm read */
64 { BSC, 0, 0x00, 0x20, 0x00, 0x40, 0x00, 0x50, 0x70, 0x90, 0xd0, 0xff },
65 { SCS, 0, 0x00, 0x20, 0x00, 0x40, 0xe8, 0x50, 0x70, 0x90, 0xd0, 0xff },
66 { AMD, 1, 0x80, 0x30, 0x10, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x00, 0xf0 },
67 { SST, 1, 0x80, 0x50, 0x10, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x00, 0xf0 },
68 { 0 }
71 unlock_cmd_t unlock_cmd_amd = {
72 #ifdef MIPSEB
73 /* addr: */ { 0x0aa8, 0x0556},
74 #else
75 /* addr: */ { 0x0aaa, 0x0554},
76 #endif
77 /* data: */ { 0xaa, 0x55}
80 unlock_cmd_t unlock_cmd_sst = {
81 #ifdef MIPSEB
82 /* addr: */ { 0xaaa8, 0x5556},
83 #else
84 /* addr: */ { 0xaaaa, 0x5554},
85 #endif
86 /* data: */ { 0xaa, 0x55}
89 #define AMD_CMD 0xaaa
90 #define SST_CMD 0xaaaa
92 /* intel unlock block cmds */
93 #define INTEL_UNLOCK1 0x60
94 #define INTEL_UNLOCK2 0xD0
96 /* Just eight blocks of 8KB byte each */
98 uint blk8x8k[] = { 0x00000000,
99 0x00002000,
100 0x00004000,
101 0x00006000,
102 0x00008000,
103 0x0000a000,
104 0x0000c000,
105 0x0000e000,
106 0x00010000
109 /* Funky AMD arrangement for 29xx800's */
110 uint amd800[] = { 0x00000000, /* 16KB */
111 0x00004000, /* 32KB */
112 0x0000c000, /* 8KB */
113 0x0000e000, /* 8KB */
114 0x00010000, /* 8KB */
115 0x00012000, /* 8KB */
116 0x00014000, /* 32KB */
117 0x0001c000, /* 16KB */
118 0x00020000
121 /* AMD arrangement for 29xx160's */
122 uint amd4112[] = { 0x00000000, /* 32KB */
123 0x00008000, /* 8KB */
124 0x0000a000, /* 8KB */
125 0x0000c000, /* 16KB */
126 0x00010000
128 uint amd2114[] = { 0x00000000, /* 16KB */
129 0x00004000, /* 8KB */
130 0x00006000, /* 8KB */
131 0x00008000, /* 32KB */
132 0x00010000
136 flash_desc_t sflash_desc =
137 { 0, 0, 0, 0, SFLASH, 0, 0, 0, 0, 0, NULL, "SFLASH" };
139 flash_desc_t flashes[] = {
140 { 0x00b0, 0x00d0, 0x0200000, 2, SCS, 0x10000, 32, 0, 31, 0, NULL, "Intel 28F160S3/5 1Mx16" },
141 { 0x00b0, 0x00d4, 0x0400000, 2, SCS, 0x10000, 64, 0, 63, 0, NULL, "Intel 28F320S3/5 2Mx16" },
142 { 0x0089, 0x8890, 0x0200000, 2, BSC, 0x10000, 32, 0, 30, 8, blk8x8k, "Intel 28F160B3 1Mx16 TopB" },
143 { 0x0089, 0x8891, 0x0200000, 2, BSC, 0x10000, 32, 1, 31, 8, blk8x8k, "Intel 28F160B3 1Mx16 BotB" },
144 { 0x0089, 0x8896, 0x0400000, 2, BSC, 0x10000, 64, 0, 62, 8, blk8x8k, "Intel 28F320B3 2Mx16 TopB" },
145 { 0x0089, 0x8897, 0x0400000, 2, BSC, 0x10000, 64, 1, 63, 8, blk8x8k, "Intel 28F320B3 2Mx16 BotB" },
146 { 0x0089, 0x8898, 0x0800000, 2, BSC, 0x10000, 128, 0, 126, 8, blk8x8k, "Intel 28F640B3 4Mx16 TopB" },
147 { 0x0089, 0x8899, 0x0800000, 2, BSC, 0x10000, 128, 1, 127, 8, blk8x8k, "Intel 28F640B3 4Mx16 BotB" },
148 { 0x0089, 0x88C2, 0x0200000, 2, BSC, 0x10000, 32, 0, 30, 8, blk8x8k, "Intel 28F160C3 1Mx16 TopB" },
149 { 0x0089, 0x88C3, 0x0200000, 2, BSC, 0x10000, 32, 1, 31, 8, blk8x8k, "Intel 28F160C3 1Mx16 BotB" },
150 { 0x0089, 0x88C4, 0x0400000, 2, BSC, 0x10000, 64, 0, 62, 8, blk8x8k, "Intel 28F320C3 2Mx16 TopB" },
151 { 0x0089, 0x88C5, 0x0400000, 2, BSC, 0x10000, 64, 1, 63, 8, blk8x8k, "Intel 28F320C3 2Mx16 BotB" },
152 { 0x0089, 0x88CC, 0x0800000, 2, BSC, 0x10000, 128, 0, 126, 8, blk8x8k, "Intel 28F640C3 4Mx16 TopB" },
153 { 0x0089, 0x88CD, 0x0800000, 2, BSC, 0x10000, 128, 1, 127, 8, blk8x8k, "Intel 28F640C3 4Mx16 BotB" },
154 { 0x0089, 0x0014, 0x0400000, 2, SCS, 0x20000, 32, 0, 31, 0, NULL, "Intel 28F320J5 2Mx16" },
155 { 0x0089, 0x0015, 0x0800000, 2, SCS, 0x20000, 64, 0, 63, 0, NULL, "Intel 28F640J5 4Mx16" },
156 { 0x0089, 0x0016, 0x0400000, 2, SCS, 0x20000, 32, 0, 31, 0, NULL, "Intel 28F320J3 2Mx16" },
157 { 0x0089, 0x0017, 0x0800000, 2, SCS, 0x20000, 64, 0, 63, 0, NULL, "Intel 28F640J3 4Mx16" },
158 { 0x0089, 0x0018, 0x1000000, 2, SCS, 0x20000, 128, 0, 127, 0, NULL, "Intel 28F128J3 8Mx16" },
159 { 0x00b0, 0x00e3, 0x0400000, 2, BSC, 0x10000, 64, 1, 63, 8, blk8x8k, "Sharp 28F320BJE 2Mx16 BotB" },
160 { 0x0001, 0x224a, 0x0100000, 2, AMD, 0x10000, 16, 0, 13, 8, amd800, "AMD 29DL800BT 512Kx16 TopB" },
161 { 0x0001, 0x22cb, 0x0100000, 2, AMD, 0x10000, 16, 2, 15, 8, amd800, "AMD 29DL800BB 512Kx16 BotB" },
162 { 0x0001, 0x22c4, 0x0200000, 2, AMD, 0x10000, 32, 0, 30, 4, amd2114, "AMD 29lv160DT 1Mx16 TopB" },
163 { 0x0001, 0x2249, 0x0200000, 2, AMD, 0x10000, 32, 1, 31, 4, amd4112, "AMD 29lv160DB 1Mx16 BotB" },
164 { 0x0001, 0x22f6, 0x0400000, 2, AMD, 0x10000, 64, 0, 62, 8, blk8x8k, "AMD 29lv320DT 2Mx16 TopB" },
165 { 0x0001, 0x22f9, 0x0400000, 2, AMD, 0x10000, 64, 1, 63, 8, blk8x8k, "AMD 29lv320DB 2Mx16 BotB" },
166 { 0x0001, 0x227E, 0x0400000, 2, AMD, 0x10000, 64, 0, 62, 8, blk8x8k, "AMD 29lv320MT 2Mx16 TopB" },
167 //{ 0x0001, 0x2201, 0x0400000, 2, AMD, 0x10000, 64, 0, 62, 8, blk8x8k, "AMD 29lv320MT 2Mx16 TopB" },
168 { 0x0001, 0x2200, 0x0400000, 2, AMD, 0x10000, 64, 1, 63, 8, blk8x8k, "AMD 29lv320MB 2Mx16 BotB" },
169 { 0x0020, 0x22CA, 0x0400000, 2, AMD, 0x10000, 64, 0, 62, 4, amd4112, "ST 29w320DT 2Mx16 TopB" },
170 { 0x0020, 0x22CB, 0x0400000, 2, AMD, 0x10000, 64, 1, 63, 4, amd2114, "ST 29w320DB 2Mx16 BotB" },
171 { 0x00C2, 0x00A7, 0x0400000, 2, AMD, 0x10000, 64, 0, 62, 4, amd4112, "MX29LV320T 2Mx16 TopB" },
172 { 0x00C2, 0x00A8, 0x0400000, 2, AMD, 0x10000, 64, 1, 63, 4, amd2114, "MX29LV320B 2Mx16 BotB" },
173 { 0x0004, 0x22F6, 0x0400000, 2, AMD, 0x10000, 64, 0, 62, 4, amd4112, "MBM29LV320TE 2Mx16 TopB" },
174 { 0x0004, 0x22F9, 0x0400000, 2, AMD, 0x10000, 64, 1, 63, 4, amd2114, "MBM29LV320BE 2Mx16 BotB" },
175 { 0x0098, 0x009A, 0x0400000, 2, AMD, 0x10000, 64, 0, 62, 4, amd4112, "TC58FVT321 2Mx16 TopB" },
176 { 0x0098, 0x009C, 0x0400000, 2, AMD, 0x10000, 64, 1, 63, 4, amd2114, "TC58FVB321 2Mx16 BotB" },
177 { 0x00C2, 0x22A7, 0x0400000, 2, AMD, 0x10000, 64, 0, 62, 4, amd4112, "MX29LV320T 2Mx16 TopB" },
178 { 0x00C2, 0x22A8, 0x0400000, 2, AMD, 0x10000, 64, 1, 63, 4, amd2114, "MX29LV320B 2Mx16 BotB" },
179 { 0x00BF, 0x2783, 0x0400000, 2, SST, 0x10000, 64, 0, 63, 0, NULL, "SST39VF320 2Mx16" },
180 { 0, 0, 0, 0, OLD, 0, 0, 0, 0, 0, NULL, NULL },
183 #else
185 extern flash_cmds_t flash_cmds[];
186 extern unlock_cmd_t unlock_cmd;
187 extern flash_desc_t flashes[];
189 #endif