Blame view

include/dataflash.h 7.53 KB
2abbe0754   wdenk   * Patch by Nicola...
1
2
3
4
5
  /*
   * (C) Copyright 2003
   * Data Flash Atmel Description File
   * Author : Hamid Ikdoumi (Atmel)
   *
3765b3e7b   Wolfgang Denk   Coding Style clea...
6
   * SPDX-License-Identifier:	GPL-2.0+
2abbe0754   wdenk   * Patch by Nicola...
7
8
9
10
11
12
13
14
15
16
17
18
   */
  
  /* File Name		: dataflash.h					*/
  /* Object		: Data Flash Atmel Description File		*/
  /* Translator		:						*/
  /*									*/
  /* 1.0 03/04/01 HI	: Creation					*/
  /* 1.2 20/10/02 FB	: Adapatation Service and Lib v3		*/
  /*----------------------------------------------------------------------*/
  
  #ifndef _DataFlash_h
  #define _DataFlash_h
2abbe0754   wdenk   * Patch by Nicola...
19
  #include "config.h"
5779d8d98   wdenk   * Patch by Nicola...
20
  /*number of protected area*/
5604e2178   Stelian Pop   Cleanup DataFlash...
21
  #define NB_DATAFLASH_AREA		5
d4fc6012f   Peter Pearse   Add MACH_TYPE rec...
22

6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
23
  #ifdef CONFIG_SYS_NO_FLASH
d4fc6012f   Peter Pearse   Add MACH_TYPE rec...
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  
  /*-----------------------------------------------------------------------
   * return codes from flash_write():
   */
  # define ERR_OK				0
  # define ERR_TIMOUT			1
  # define ERR_NOT_ERASED			2
  # define ERR_PROTECTED			4
  # define ERR_INVAL			8
  # define ERR_ALIGN			16
  # define ERR_UNKNOWN_FLASH_VENDOR	32
  # define ERR_UNKNOWN_FLASH_TYPE		64
  # define ERR_PROG_ERROR			128
  
  /*-----------------------------------------------------------------------
   * Protection Flags for flash_protect():
   */
  # define FLAG_PROTECT_SET		0x01
  # define FLAG_PROTECT_CLEAR		0x02
  # define FLAG_PROTECT_INVALID		0x03
  
  /*-----------------------------------------------------------------------
   * Set Environment according to label:
   */
  # define	FLAG_SETENV		0x80
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
49
  #endif /* CONFIG_SYS_NO_FLASH */
2abbe0754   wdenk   * Patch by Nicola...
50

5779d8d98   wdenk   * Patch by Nicola...
51
  /*define the area structure*/
2abbe0754   wdenk   * Patch by Nicola...
52
  typedef struct {
5779d8d98   wdenk   * Patch by Nicola...
53
54
55
  	unsigned long start;
  	unsigned long end;
  	unsigned char protected;
d4fc6012f   Peter Pearse   Add MACH_TYPE rec...
56
  	unsigned char setenv;
f01dbb542   Wolfgang Denk   Coding style clea...
57
  	unsigned char label[20];
5779d8d98   wdenk   * Patch by Nicola...
58
  } dataflash_protect_t;
2abbe0754   wdenk   * Patch by Nicola...
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  
  typedef unsigned int AT91S_DataFlashStatus;
  
  /*----------------------------------------------------------------------*/
  /* DataFlash Structures							*/
  /*----------------------------------------------------------------------*/
  
  /*---------------------------------------------*/
  /* DataFlash Descriptor Structure Definition   */
  /*---------------------------------------------*/
  typedef struct _AT91S_DataflashDesc {
  	unsigned char *tx_cmd_pt;
  	unsigned int tx_cmd_size;
  	unsigned char *rx_cmd_pt;
  	unsigned int rx_cmd_size;
  	unsigned char *tx_data_pt;
  	unsigned int tx_data_size;
  	unsigned char *rx_data_pt;
  	unsigned int rx_data_size;
  	volatile unsigned char state;
  	volatile unsigned char DataFlash_state;
  	unsigned char command[8];
  } AT91S_DataflashDesc, *AT91PS_DataflashDesc;
  
  /*---------------------------------------------*/
  /* DataFlash device definition structure       */
  /*---------------------------------------------*/
  typedef struct _AT91S_Dataflash {
  	int pages_number;			/* dataflash page number */
  	int pages_size;				/* dataflash page size */
  	int page_offset;			/* page offset in command */
  	int byte_mask;				/* byte mask in command */
  	int cs;
5779d8d98   wdenk   * Patch by Nicola...
92
  	dataflash_protect_t area_list[NB_DATAFLASH_AREA]; /* area protection status */
2abbe0754   wdenk   * Patch by Nicola...
93
94
95
96
97
98
99
100
101
  } AT91S_DataflashFeatures, *AT91PS_DataflashFeatures;
  
  /*---------------------------------------------*/
  /* DataFlash Structure Definition	       */
  /*---------------------------------------------*/
  typedef struct _AT91S_DataFlash {
  	AT91PS_DataflashDesc pDataFlashDesc;	/* dataflash descriptor */
  	AT91PS_DataflashFeatures pDevice;	/* Pointer on a dataflash features array */
  } AT91S_DataFlash, *AT91PS_DataFlash;
2abbe0754   wdenk   * Patch by Nicola...
102
103
104
105
106
  typedef struct _AT91S_DATAFLASH_INFO {
  
  	AT91S_DataflashDesc Desc;
  	AT91S_DataflashFeatures Device; /* Pointer on a dataflash features array */
  	unsigned long logical_address;
d4fc6012f   Peter Pearse   Add MACH_TYPE rec...
107
  	unsigned long end_address;
2abbe0754   wdenk   * Patch by Nicola...
108
  	unsigned int id;			/* device id */
2abbe0754   wdenk   * Patch by Nicola...
109
  } AT91S_DATAFLASH_INFO, *AT91PS_DATAFLASH_INFO;
c3a60cb3b   Ulf Samuelsson   Clean up dataflas...
110
111
112
113
  struct dataflash_addr {
  	unsigned long addr;
  	int cs;
  };
2abbe0754   wdenk   * Patch by Nicola...
114
  /*-------------------------------------------------------------------------------------------------*/
2abbe0754   wdenk   * Patch by Nicola...
115
  #define AT45DB161	0x2c
c6457e3b8   Sergey Lapin   DataFlash AT45DB0...
116
  #define AT45DB021	0x14
f77d92a3f   Sergey Lapin   DataFlash: AT45DB...
117
  #define AT45DB081	0x24
2abbe0754   wdenk   * Patch by Nicola...
118
119
  #define AT45DB321	0x34
  #define AT45DB642	0x3c
5779d8d98   wdenk   * Patch by Nicola...
120
  #define AT45DB128	0x10
d4fc6012f   Peter Pearse   Add MACH_TYPE rec...
121
  #define	PAGES_PER_BLOCK	8
2abbe0754   wdenk   * Patch by Nicola...
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
  
  #define AT91C_DATAFLASH_TIMEOUT		10000	/* For AT91F_DataFlashWaitReady */
  
  /* DataFlash return value */
  #define DATAFLASH_BUSY			0x00
  #define DATAFLASH_OK			0x01
  #define DATAFLASH_ERROR			0x02
  #define DATAFLASH_MEMORY_OVERFLOW	0x03
  #define DATAFLASH_BAD_COMMAND		0x04
  #define DATAFLASH_BAD_ADDRESS		0x05
  
  
  /* Driver State */
  #define IDLE		0x0
  #define BUSY		0x1
  #define ERROR		0x2
  
  /* DataFlash Driver State */
  #define GET_STATUS	0x0F
  
  /*-------------------------------------------------------------------------------------------------*/
  /* Command Definition										   */
  /*-------------------------------------------------------------------------------------------------*/
  
  /* READ COMMANDS */
  #define DB_CONTINUOUS_ARRAY_READ	0xE8	/* Continuous array read */
  #define DB_BURST_ARRAY_READ		0xE8	/* Burst array read */
  #define DB_PAGE_READ			0xD2	/* Main memory page read */
  #define DB_BUF1_READ			0xD4	/* Buffer 1 read */
  #define DB_BUF2_READ			0xD6	/* Buffer 2 read */
  #define DB_STATUS			0xD7	/* Status Register */
  
  /* PROGRAM and ERASE COMMANDS */
  #define DB_BUF1_WRITE			0x84	/* Buffer 1 write */
  #define DB_BUF2_WRITE			0x87	/* Buffer 2 write */
  #define DB_BUF1_PAGE_ERASE_PGM		0x83	/* Buffer 1 to main memory page program with built-In erase */
  #define DB_BUF1_PAGE_ERASE_FASTPGM	0x93	/* Buffer 1 to main memory page program with built-In erase, Fast program */
  #define DB_BUF2_PAGE_ERASE_PGM		0x86	/* Buffer 2 to main memory page program with built-In erase */
  #define DB_BUF2_PAGE_ERASE_FASTPGM	0x96	/* Buffer 1 to main memory page program with built-In erase, Fast program */
  #define DB_BUF1_PAGE_PGM		0x88	/* Buffer 1 to main memory page program without built-In erase */
  #define DB_BUF1_PAGE_FASTPGM		0x98	/* Buffer 1 to main memory page program without built-In erase, Fast program */
  #define DB_BUF2_PAGE_PGM		0x89	/* Buffer 2 to main memory page program without built-In erase */
  #define DB_BUF2_PAGE_FASTPGM		0x99	/* Buffer 1 to main memory page program without built-In erase, Fast program */
  #define DB_PAGE_ERASE			0x81	/* Page Erase */
  #define DB_BLOCK_ERASE			0x50	/* Block Erase */
  #define DB_PAGE_PGM_BUF1		0x82	/* Main memory page through buffer 1 */
  #define DB_PAGE_FASTPGM_BUF1		0x92	/* Main memory page through buffer 1, Fast program */
  #define DB_PAGE_PGM_BUF2		0x85	/* Main memory page through buffer 2 */
  #define DB_PAGE_FastPGM_BUF2		0x95	/* Main memory page through buffer 2, Fast program */
  
  /* ADDITIONAL COMMANDS */
  #define DB_PAGE_2_BUF1_TRF		0x53	/* Main memory page to buffer 1 transfert */
  #define DB_PAGE_2_BUF2_TRF		0x55	/* Main memory page to buffer 2 transfert */
  #define DB_PAGE_2_BUF1_CMP		0x60	/* Main memory page to buffer 1 compare */
  #define DB_PAGE_2_BUF2_CMP		0x61	/* Main memory page to buffer 2 compare */
  #define DB_AUTO_PAGE_PGM_BUF1		0x58	/* Auto page rewrite throught buffer 1 */
  #define DB_AUTO_PAGE_PGM_BUF2		0x59	/* Auto page rewrite throught buffer 2 */
  
  /*-------------------------------------------------------------------------------------------------*/
5779d8d98   wdenk   * Patch by Nicola...
181
182
  extern int size_dataflash (AT91PS_DataFlash pdataFlash, unsigned long addr, unsigned long size);
  extern int prot_dataflash (AT91PS_DataFlash pdataFlash, unsigned long addr);
d4fc6012f   Peter Pearse   Add MACH_TYPE rec...
183
  extern int addr2ram(ulong addr);
5779d8d98   wdenk   * Patch by Nicola...
184
  extern int dataflash_real_protect (int flag, unsigned long start_addr, unsigned long end_addr);
2abbe0754   wdenk   * Patch by Nicola...
185
186
  extern int addr_dataflash (unsigned long addr);
  extern int read_dataflash (unsigned long addr, unsigned long size, char *result);
abdbd67cb   Igor Grinberg   dataflash: fix pa...
187
188
  extern int write_dataflash(unsigned long addr_dest, unsigned long addr_src,
  			unsigned long size);
0901d9f89   Igor Grinberg   env: clean env_da...
189
  extern int AT91F_DataflashInit(void);
2abbe0754   wdenk   * Patch by Nicola...
190
191
  extern void dataflash_print_info (void);
  extern void dataflash_perror (int err);
c3a60cb3b   Ulf Samuelsson   Clean up dataflas...
192
  extern void AT91F_DataflashSetEnv (void);
2abbe0754   wdenk   * Patch by Nicola...
193

6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
194
  extern struct dataflash_addr cs[CONFIG_SYS_MAX_DATAFLASH_BANKS];
c3a60cb3b   Ulf Samuelsson   Clean up dataflas...
195
196
  extern dataflash_protect_t area_list[NB_DATAFLASH_AREA];
  extern AT91S_DATAFLASH_INFO dataflash_info[];
2abbe0754   wdenk   * Patch by Nicola...
197
  #endif