| #ifndef FLASH_LIB_H |
| #define FLASH_LIB_H |
| |
| #include <common.h> |
| |
| /* PIO operations max */ |
| #define FLASH_PROGRAM_POLLS 100000 |
| |
| /* 10 Seconds default */ |
| #define FLASH_ERASE_SECTOR_TIMEOUT (10*1000 /*SEC*/ ) |
| |
| /* Flash device info structure */ |
| typedef struct flash_dev_s { |
| char name[24]; /* Bank Name */ |
| int bank; /* Bank 0 or 1 */ |
| unsigned int base; /* Base address */ |
| int sectors; /* Sector count */ |
| int lgSectorSize; /* Log2(usable bytes/sector) */ |
| int vendorID; /* Expected vendor ID */ |
| int deviceID; /* Expected device ID */ |
| int found; /* Set if found by flashLibInit */ |
| int swap; /* Set for bank 1 if byte swap req'd */ |
| } flash_dev_t; |
| |
| #define FLASH_MAX_POS(dev) \ |
| ((dev)->sectors << (dev)->lgSectorSize) |
| |
| #define FLASH_SECTOR_POS(dev, sector) \ |
| ((sector) << (dev)->lgSectorSize) |
| |
| /* AMD 29F040 */ |
| #define FLASH0_BANK 0 |
| #define FLASH0_VENDOR_ID 0x01 |
| #define FLASH0_DEVICE_ID 0x49 |
| |
| /* AMD29LV160DB */ |
| #define FLASH1_BANK 1 |
| #define FLASH1_VENDOR_ID 0x0001 |
| #define FLASH1_DEVICE_ID 0x2249 |
| |
| extern flash_dev_t flashDev[]; |
| extern int flashDevCount; |
| |
| /* |
| * Device pointers |
| * |
| * These must be kept in sync with the table in flashLib.c. |
| */ |
| #define FLASH_DEV_BANK0_SA0 (&flashDev[0]) |
| #define FLASH_DEV_BANK0_SA1 (&flashDev[1]) |
| #define FLASH_DEV_BANK0_SA2 (&flashDev[2]) |
| #define FLASH_DEV_BANK0_LOW (&flashDev[3]) /* 960K */ |
| #define FLASH_DEV_BANK0_BOOT (&flashDev[4]) /* PLCC */ |
| #define FLASH_DEV_BANK0_HIGH (&flashDev[5]) /* 512K PLCC shadow */ |
| |
| unsigned long flash_init(void); |
| int flashEraseSector(flash_dev_t *dev, int sector); |
| int flashErase(flash_dev_t *dev); |
| int flashRead(flash_dev_t *dev, int pos, char *buf, int len); |
| int flashWrite(flash_dev_t *dev, int pos, char *buf, int len); |
| int flashWritable(flash_dev_t *dev, int pos, int len); |
| int flashDiag(flash_dev_t *dev); |
| int flashDiagAll(void); |
| |
| ulong flash_get_size (vu_long *addr, flash_info_t *info); |
| void flash_print_info (flash_info_t *info); |
| int flash_erase (flash_info_t *info, int s_first, int s_last); |
| int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt); |
| |
| /* |
| * Flash info indices. |
| */ |
| #define FLASH_BANK_KERNEL 0 |
| #define FLASH_BANK_BOOT 1 |
| #define FLASH_BANK_AUX 2 |
| #define FIRST_SECTOR 0 |
| |
| #endif /* !FLASH_LIB_H */ |