]> git.sur5r.net Git - openocd/blob - src/flash/nor/cfi.h
tcl/target: ti_tms570.cfg restructure dap support
[openocd] / src / flash / nor / cfi.h
1 /***************************************************************************
2  *   Copyright (C) 2005 by Dominic Rath                                    *
3  *   Dominic.Rath@gmx.de                                                   *
4  *                                                                         *
5  *   This program is free software; you can redistribute it and/or modify  *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) any later version.                                   *
9  *                                                                         *
10  *   This program is distributed in the hope that it will be useful,       *
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13  *   GNU General Public License for more details.                          *
14  *                                                                         *
15  *   You should have received a copy of the GNU General Public License     *
16  *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
17  ***************************************************************************/
18
19 #ifndef OPENOCD_FLASH_NOR_CFI_H
20 #define OPENOCD_FLASH_NOR_CFI_H
21
22 #define CFI_STATUS_POLL_MASK_DQ5_DQ6_DQ7 0xE0 /* DQ5..DQ7 */
23 #define CFI_STATUS_POLL_MASK_DQ6_DQ7     0xC0 /* DQ6..DQ7 */
24
25 struct cfi_flash_bank {
26         int x16_as_x8;
27         int jedec_probe;
28         int not_cfi;
29         int probed;
30
31         enum target_endianness endianness;
32         int data_swap;
33
34         uint16_t manufacturer;
35         uint16_t device_id;
36
37         uint8_t qry[3];
38
39         /* identification string */
40         uint16_t pri_id;
41         uint16_t pri_addr;
42         uint16_t alt_id;
43         uint16_t alt_addr;
44
45         /* device-system interface */
46         uint8_t vcc_min;
47         uint8_t vcc_max;
48         uint8_t vpp_min;
49         uint8_t vpp_max;
50         uint8_t word_write_timeout_typ;
51         uint8_t buf_write_timeout_typ;
52         uint8_t block_erase_timeout_typ;
53         uint8_t chip_erase_timeout_typ;
54         uint8_t word_write_timeout_max;
55         uint8_t buf_write_timeout_max;
56         uint8_t block_erase_timeout_max;
57         uint8_t chip_erase_timeout_max;
58
59         uint8_t status_poll_mask;
60
61         /* flash geometry */
62         uint32_t dev_size;
63         uint16_t interface_desc;
64         uint16_t max_buf_write_size;
65         uint8_t num_erase_regions;
66         uint32_t *erase_region_info;
67
68         void *pri_ext;
69         void *alt_ext;
70
71         /* calculated timeouts */
72         unsigned word_write_timeout;
73         unsigned buf_write_timeout;
74         unsigned block_erase_timeout;
75         unsigned chip_erase_timeout;
76 };
77
78 /* Intel primary extended query table
79  * as defined for the Advanced+ Boot Block Flash Memory (C3)
80  * and used by the linux kernel cfi driver (as of 2.6.14)
81  */
82 struct cfi_intel_pri_ext {
83         uint8_t pri[3];
84         uint8_t major_version;
85         uint8_t minor_version;
86         uint32_t feature_support;
87         uint8_t suspend_cmd_support;
88         uint16_t blk_status_reg_mask;
89         uint8_t vcc_optimal;
90         uint8_t vpp_optimal;
91         uint8_t num_protection_fields;
92         uint16_t prot_reg_addr;
93         uint8_t fact_prot_reg_size;
94         uint8_t user_prot_reg_size;
95         uint8_t extra[0];
96 };
97
98 /* Spansion primary extended query table as defined for and used by
99  * the linux kernel cfi driver (as of 2.6.15)
100  */
101 struct cfi_spansion_pri_ext {
102         uint8_t  pri[3];
103         uint8_t  major_version;
104         uint8_t  minor_version;
105         uint8_t  SiliconRevision; /* bits 1-0: Address Sensitive Unlock */
106         uint8_t  EraseSuspend;
107         uint8_t  BlkProt;
108         uint8_t  TmpBlkUnprotect;
109         uint8_t  BlkProtUnprot;
110         uint8_t  SimultaneousOps;
111         uint8_t  BurstMode;
112         uint8_t  PageMode;
113         uint8_t  VppMin;
114         uint8_t  VppMax;
115         uint8_t  TopBottom;
116         int _reversed_geometry;
117         uint32_t _unlock1;
118         uint32_t _unlock2;
119 };
120
121 /* Atmel primary extended query table as defined for and used by
122  * the linux kernel cfi driver (as of 2.6.20+)
123  */
124 struct cfi_atmel_pri_ext {
125         uint8_t pri[3];
126         uint8_t major_version;
127         uint8_t minor_version;
128         uint8_t features;
129         uint8_t bottom_boot;
130         uint8_t burst_mode;
131         uint8_t page_mode;
132 };
133
134 enum {
135         CFI_UNLOCK_555_2AA,
136         CFI_UNLOCK_5555_2AAA,
137 };
138
139 struct cfi_unlock_addresses {
140         uint32_t unlock1;
141         uint32_t unlock2;
142 };
143
144 struct cfi_fixup {
145         uint16_t mfr;
146         uint16_t id;
147         void (*fixup)(struct flash_bank *bank, const void *param);
148         const void *param;
149 };
150
151 #define CFI_MFR_AMD             0x0001
152 #define CFI_MFR_FUJITSU 0x0004
153 #define CFI_MFR_ATMEL   0x001F
154 #define CFI_MFR_ST              0x0020  /* STMicroelectronics */
155 #define CFI_MFR_AMIC    0x0037
156 #define CFI_MFR_SST             0x00BF
157 #define CFI_MFR_MX              0x00C2
158 #define CFI_MFR_EON             0x007F
159
160 #define CFI_MFR_ANY             0xffff
161 #define CFI_ID_ANY              0xffff
162
163 #endif /* OPENOCD_FLASH_NOR_CFI_H */