summaryrefslogtreecommitdiffstats
path: root/cfe/cfe/include/dev_flash.h
blob: 8cbce486a1611e4533b1d8a600e22a8a70cd572e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
49
50
51
52
53
54
55
56
57
58
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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
/*  *********************************************************************
    *  Broadcom Common Firmware Environment (CFE)
    *  
    *  Flash memory definitions			File: dev_flash.h
    *  
    *  Stuff we use when manipulating flash memory devices.
    *  
    *  Author:  Mitch Lichtenberg (mpl@broadcom.com)
    *  
    *********************************************************************  
    *
    *  Copyright 2000,2001,2002,2003
    *  Broadcom Corporation. All rights reserved.
    *  
    *  This software is furnished under license and may be used and 
    *  copied only in accordance with the following terms and 
    *  conditions.  Subject to these conditions, you may download, 
    *  copy, install, use, modify and distribute modified or unmodified 
    *  copies of this software in source and/or binary form.  No title 
    *  or ownership is transferred hereby.
    *  
    *  1) Any source code used, modified or distributed must reproduce 
    *     and retain this copyright notice and list of conditions 
    *     as they appear in the source file.
    *  
    *  2) No right is granted to use any trade name, trademark, or 
    *     logo of Broadcom Corporation.  The "Broadcom Corporation" 
    *     name may not be used to endorse or promote products derived 
    *     from this software without the prior written permission of 
    *     Broadcom Corporation.
    *  
    *  3) THIS SOFTWARE IS PROVIDED "AS-IS" AND ANY EXPRESS OR
    *     IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED
    *     WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 
    *     PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT 
    *     SHALL BROADCOM BE LIABLE FOR ANY DAMAGES WHATSOEVER, AND IN 
    *     PARTICULAR, BROADCOM SHALL NOT BE LIABLE FOR DIRECT, INDIRECT,
    *     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
    *     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
    *     GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
    *     BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
    *     OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
    *     TORT (INCLUDING NEGLIGENCE OR OTHERWISE), EVEN IF ADVISED OF 
    *     THE POSSIBILITY OF SUCH DAMAGE.
    ********************************************************************* */

/*
 * AMD Flash commands and magic offsets
 */

#define	AMD_FLASH_MAGIC_ADDR_1	0x555	/* AAA for 16-bit devices in 8-bit mode */
#define	AMD_FLASH_MAGIC_ADDR_2	0x2AA	/* 554 for 16-bit devices in 8-bit mode */

#define	AMD_FLASH_RESET		0xF0
#define	AMD_FLASH_MAGIC_1	0xAA
#define	AMD_FLASH_MAGIC_2	0x55
#define	AMD_FLASH_AUTOSEL	0x90
#define	AMD_FLASH_PROGRAM	0xA0
#define	AMD_FLASH_UNLOCK_BYPASS	0x20
#define	AMD_FLASH_ERASE_3	0x80
#define	AMD_FLASH_ERASE_4	0xAA
#define	AMD_FLASH_ERASE_5	0x55
#define	AMD_FLASH_ERASE_ALL_6	0x10
#define	AMD_FLASH_ERASE_SEC_6	0x30

/*
 * INTEL Flash commands and magic offsets
 */

#define INTEL_FLASH_READ_MODE 0xFF
#define INTEL_FLASH_ERASE_BLOCK	0x20
#define INTEL_FLASH_ERASE_CONFIRM 0xD0
#define INTEL_FLASH_PROGRAM	0x40

/* INTEL Flash commands for 16-bit mode */
#define INTEL_FLASH_16BIT_READ_MODE 		0xFF00
#define INTEL_FLASH_16BIT_ERASE_BLOCK 		0x2000
#define INTEL_FLASH_16BIT_ERASE_CONFIRM 	0xD000
#define INTEL_FLASH_16BIT_PROGRAM 		0x4000
#define INTEL_FLASH_8BIT			0
#define INTEL_FLASH_16BIT			1
  

/*
 * Common Flash Interface (CFI) commands and offsets
 */

#define FLASH_CFI_QUERY_ADDR	0x55
#define FLASH_CFI_QUERY_MODE	0x98
#define FLASH_CFI_QUERY_EXIT	0xFF

#define FLASH_CFI_MANUFACTURER	0x00
#define FLASH_CFI_DEVICE	0x01
#define FLASH_CFI_SIGNATURE	0x10
#define FLASH_CFI_QUERY_STRING	0x10
#define FLASH_CFI_COMMAND_SET	0x13
#define FLASH_CFI_DEVICE_SIZE	0x27
#define FLASH_CFI_DEVICE_INTERFACE 0x28
#define FLASH_CFI_REGION_COUNT	0x2C
#define FLASH_CFI_REGION_TABLE	0x2D

#define FLASH_CFI_CMDSET_INTEL_ECS	0x0001	/* Intel extended */
#define FLASH_CFI_CMDSET_AMD_STD	0x0002	/* AMD Standard */
#define FLASH_CFI_CMDSET_INTEL_STD	0x0003	/* Intel Standard */
#define FLASH_CFI_CMDSET_AMD_ECS	0x0004	/* AMD Extended */

#define FLASH_CFI_DEVIF_X8	0x0000	/* 8-bit asynchronous */
#define FLASH_CFI_DEVIF_X16	0x0001	/* 16-bit asynchronous */
#define FLASH_CFI_DEVIF_X8X16	0x0002	/* 8 or 16-bit with BYTE# pin */
#define FLASH_CFI_DEVIF_X32	0x0003	/* 32-bit asynchronous */

/*
 * JEDEC offsets
 */

#define FLASH_JEDEC_OFFSET_MFR	0
#define FLASH_JEDEC_OFFSET_DEV	1

/* Vendor-specific flash identifiers */

#define FLASH_MFR_HYUNDAI       0xAD

/*  *********************************************************************
    *  Macros for defining custom sector tables
    ********************************************************************* */

#define FLASH_SECTOR_RANGE(nblks,size) (((nblks)-1) << 16) + ((size)/256)
#define FLASH_SECTOR_NBLKS(x) (((x) >> 16)+1)
#define FLASH_SECTOR_SIZE(x) (((x) & 0xFFFF)*256)
#define FLASH_MAXSECTORS  8


/*  *********************************************************************
    *  Structures
    ********************************************************************* */

/*
 * This structure is passed in the "probe_ptr" field of the 
 * flash's probe routines and can be used for advanced 
 * configuration.  If you pass this structure, probe_a and 
 * probe_b will be ignored by the driver
 * 
 * flash_prog_phys is the base address you use for flash commands - 
 * you can put 0 here if it's the same as flash_phys.  some boards,
 * like the Algor P5064, have a different PA region used for doing
 * byte accesses to the flash.  In this case the special
 * "flash_prog_phys" field is used for that.
 */


#define FLASH_FLG_NVRAM	0x00000001	/* Reserve space for NVRAM */
#define FLASH_FLG_AUTOSIZE 0x00000002   /* resize to actual device size */
#define FLASH_FLG_16BIT	0x00000004	/* it's a 16-bit ROM in 16-bit mode */
#define FLASH_FLG_MANUAL 0x00000008	/* Not CFI, manual sectoring */
#define FLASH_FLG_WIDE 0x00000010	/* must shift control addresses left one bit */

#ifndef __ASSEMBLER__
typedef struct flash_probe_t {
    long flash_phys;
    long flash_prog_phys;	/* base address for programming, if different */
    int flash_size;		/* total flash size */
    int flash_flags;
    /* The following are used when manually sectoring */
    int flash_cmdset;
    int flash_nsectors;		/* number of ranges */
    int flash_sectors[FLASH_MAXSECTORS];
} flash_probe_t;
#endif