flash.h 3.99 KB
Newer Older
1 2 3 4 5
/*
 * flash.h: flash programming utility - central include file
 *
 * Copyright 2000 Silicon Integrated System Corporation
 * Copyright 2000 Ronald G. Minnich <rminnich@gmail.com>
6
 * Copyright 2005-2007 coresystems GmbH <stepan@coresystems.de>
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 * 
 *	This program is free software; you can redistribute it and/or modify
 *	it under the terms of the GNU General Public License as published by
 *	the Free Software Foundation; either version 2 of the License, or
 *	(at your option) any later version.
 *
 *	This program is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *	GNU General Public License for more details.
 *
 *	You should have received a copy of the GNU General Public License
 *	along with this program; if not, write to the Free Software
 *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */

Ronald G. Minnich's avatar
Ronald G. Minnich committed
24 25 26
#ifndef __FLASH_H__
#define __FLASH_H__ 1

27
#if defined(__GLIBC__)
28
#include <sys/io.h>
29 30
#endif

31
#include <unistd.h>
32
#include <stdint.h>
33 34

struct flashchip {
35
	char *name;
36 37 38
	int manufacture_id;
	int model_id;

39
	volatile uint8_t *virt_addr;
40 41 42
	int total_size;
	int page_size;

Uwe Hermann's avatar
Uwe Hermann committed
43 44 45 46
	int (*probe) (struct flashchip *flash);
	int (*erase) (struct flashchip *flash);
	int (*write) (struct flashchip *flash, uint8_t *buf);
	int (*read) (struct flashchip *flash, uint8_t *buf);
Ronald G. Minnich's avatar
Ronald G. Minnich committed
47

48
	volatile uint8_t *virt_addr_2;
49 50
};

51 52
extern struct flashchip flashchips[];

53 54 55 56 57 58
/* Please keep this list sorted alphabetically by manufacturer. The first
 * entry of each section should be the manufacturer ID, followed by the
 * list of devices from that manufacturer (sorted by device IDs).
 */

#define AMD_ID			0x01	/* AMD */
Uwe Hermann's avatar
Uwe Hermann committed
59 60 61
#define AM_29F040B		0xA4
#define AM_29F016D		0xAD

62
#define ASD_ID			0x25	/* ASD */
Uwe Hermann's avatar
Uwe Hermann committed
63 64
#define ASD_AE49F2008		0x52

65 66
#define ATMEL_ID		0x1F	/* Atmel */
#define AT_29C040A		0xA4
Uwe Hermann's avatar
Uwe Hermann committed
67

68
#define MX_ID			0xC2	/* Macronix (MX) */
Uwe Hermann's avatar
Uwe Hermann committed
69 70
#define MX_29F002		0xB0

71
#define SHARP_ID		0xB0	/* Sharp */
Uwe Hermann's avatar
Uwe Hermann committed
72 73
#define SHARP_LHF00L04		0xCF

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
#define SST_ID			0xBF	/* SST */
#define SST_29EE020A		0x10
#define SST_28SF040		0x04
#define SST_39SF010		0xB5
#define SST_39SF020		0xB6
#define SST_39SF040		0xB7
#define SST_39VF020		0xD6
#define SST_49LF040B		0x50
#define SST_49LF040		0x51
#define SST_49LF020A		0x52
#define SST_49LF080A		0x5B
#define SST_49LF002A		0x57
#define SST_49LF003A		0x1B
#define SST_49LF004A		0x60
#define SST_49LF008A		0x5A
#define SST_49LF004C		0x54
#define SST_49LF008C		0x59
#define SST_49LF016C		0x5C
#define SST_49LF160C		0x4C

#define PMC_ID			0x9D	/* PMC */
#define PMC_49FL002		0x6D
#define PMC_49FL004		0x6E

#define WINBOND_ID		0xDA	/* Winbond */
#define W_29C011		0xC1
#define W_29C020C		0x45
#define W_39V040A		0x3D
#define W_39V040B		0x54
#define W_39V080A		0xD0
#define W_49F002U		0x0B
#define W_49V002A		0xB0
#define W_49V002FA		0x32

#define ST_ID			0x20	/* ST */
Uwe Hermann's avatar
Uwe Hermann committed
109 110 111
#define ST_M29F040B		0xE2
#define ST_M29F400BT		0xD5

112 113
#define EMST_ID			0x8c	/* EMST / EFST */
#define EMST_F49B002UA		0x00
Uwe Hermann's avatar
Uwe Hermann committed
114

115
#define MSYSTEMS_ID		0x156f	/* M-Systems */
Uwe Hermann's avatar
Uwe Hermann committed
116 117 118 119
#define MSYSTEMS_MD2200		0xdb	/* ? */
#define MSYSTEMS_MD2800		0x30	/* hmm -- both 0x30 */
#define MSYSTEMS_MD2802		0x30	/* hmm -- both 0x30 */

120 121 122 123 124
#define SYNCMOS_ID		0x40	/* SyncMOS */
#define S29C51001T		0x01
#define S29C51002T		0x02
#define S29C51004T		0x03
#define S29C31004T		0x63
125

126 127
/* function prototypes from udelay.h */

Stefan Reinauer's avatar
Stefan Reinauer committed
128 129
void myusec_delay(int time);
void myusec_calibrate_delay();
130 131

/* pci handling for board/chipset_enable */
Stefan Reinauer's avatar
Stefan Reinauer committed
132 133 134 135
struct pci_access *pacc; /* For board and chipset_enable */
struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device);
struct pci_dev *pci_card_find(uint16_t vendor, uint16_t device, 
		uint16_t card_vendor, uint16_t card_device);
136

Stefan Reinauer's avatar
Stefan Reinauer committed
137 138
int board_flash_enable(char *vendor, char *part); /* board_enable.c */
int chipset_flash_enable(void); /* chipset_enable.c */
139 140 141 142 143 144 145 146 147

/* physical memory mapping device */

#if defined (__sun) && (defined(__i386) || defined(__amd64))
#  define MEM_DEV "/dev/xsvc"
#else
#  define MEM_DEV "/dev/mem"
#endif

Stefan Reinauer's avatar
Stefan Reinauer committed
148 149
extern int fd_mem;

150
#endif				/* !__FLASH_H__ */