Files

240 lines
9.3 KiB
C
Executable File
Vendored

/*
* drvDeviceInfo.h- Sigmastar
*
* Copyright (c) [2019~2020] SigmaStar Technology.
*
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* 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 version 2 for more details.
*
*/
#ifndef _DRV_DEVICE_INFO_H_
#define _DRV_DEVICE_INFO_H_
//-------------------------------------------------------------------------------------------------
// Macro and Define
//-------------------------------------------------------------------------------------------------
// Flash IC
#define FLASH_IC_UNKNOWN 0x0000UL
// SST
#define FLASH_IC_SST25VF080B 0x0100UL // 1M SST
#define FLASH_IC_SST25VF016B 0x0101UL // 2M
#define FLASH_IC_SST25VF032B 0x0102UL // 2M
#define FLASH_IC_PM25LV080 0x0200UL // 1M PMC
#define FLASH_IC_PM25LV016 0x0201UL // 2M
#define FLASH_IC_PM25LQ032C 0x0202UL // 4M
#define FLASH_IC_ST25P80_A 0x0300UL // 1M ST
#define FLASH_IC_ST25P16_A 0x0301UL // 2M
#define FLASH_IC_STM25P32 0x0302UL // 4M
#define FLASH_IC_ST25Q128 0x0303UL // unknow , history problem , maybe brand typo .
//ATMEL
#define FLASH_IC_AT26DF081A 0x0400UL // 1M ATMEL
#define FLASH_IC_AT26DF161 0x0401UL // 2M
#define FLASH_IC_AT26DF321 0x0402UL // 4M
#define FLASH_IC_AT25DF321A 0x0403UL // 4M
// MXIC
#define FLASH_IC_MX25L8005 0x0500UL // 1M MXIC
#define FLASH_IC_MX25L1655D 0x0501UL // 2M for secure option
#define FLASH_IC_MX25L1606E 0x0502UL // 2M
#define FLASH_IC_MX25L1605A 0x0503UL // 2M
#define FLASH_IC_MX25L3206E 0x0504UL // 4M
#define FLASH_IC_MX25L3205D 0x0505UL // 4M
#define FLASH_IC_MX25L6405D 0x0506UL // 8M
#define FLASH_IC_MX25L6406E 0x0507UL // 8M
#define FLASH_IC_MX25L12805D 0x0508UL // 16M
#define FLASH_IC_MX25L12845E 0x0509UL // 16M
#define FLASH_IC_MX25L6445E 0x050AUL // 8M
#define FLASH_IC_MX25L6455E 0x050BUL // 8M
#define FLASH_IC_MX25L12855E 0x050CUL // 16M
#define FLASH_IC_MX25L4006E 0x050DUL // 512K MXIC
#define FLASH_IC_MX25L8006E 0x050EUL // 1M MXIC
#define FLASH_IC_MX25L3255D 0x0512UL // 4M for secure option
#define FLASH_IC_MX25L25645G 0x0513UL // 32M
#define FLASH_IC_MX25L5123G 0x5014UL //64M / MX25L51245G
// NX
#define FLASH_IC_NX25P80 0x0600UL // 1M NX
#define FLASH_IC_NX25P16 0x0601UL // 2M
// WINB
#define FLASH_IC_W25X80 0x0700UL // 1M WINB
#define FLASH_IC_W25Q80 0x0701UL // 1M
#define FLASH_IC_W25Q16 0x0702UL // 2M
#define FLASH_IC_W25X16 0x0703UL // 2M
#define FLASH_IC_W25X32 0x0704UL // 4M
#define FLASH_IC_W25Q32 0x0705UL // 4M
#define FLASH_IC_W25X64 0x0706UL // 8M
#define FLASH_IC_W25Q64 0x0707UL // 8M
#define FLASH_IC_W25Q64CV 0x0708UL // 8M
#define FLASH_IC_W25Q128 0x0709UL // 16M
#define FLASH_IC_W25Q32BV 0x070AUL // 4M
#define FLASH_IC_W25X40 0x070BUL // 512K WINB
#define FLASH_IC_W25Q256JV 0x070CUL // 32M
//SPANSION
#define FLASH_IC_S25FL008A 0x0800UL // 1M SPANSION
#define FLASH_IC_S25FL016A 0x0801UL // 2M
#define FLASH_IC_S25FL128P 0x0802UL // 16M
#define FLASH_IC_S25FL032P 0x0803UL // 4M
#define FLASH_IC_S25FL064P 0x0804UL // 8M
#define FLASH_IC_S25FL032K 0x0805UL // 4M
#define FLASH_IC_S25FL032 0x0804UL // 4M
// EON
#define FLASH_IC_EN25F10 0x0900UL // 128K for secure boot
#define FLASH_IC_EN25F16 0x0901UL // 2M
#define FLASH_IC_EN25F32 0x0902UL // 4M
#define FLASH_IC_EN25F80 0x0903UL // 1M
#define FLASH_IC_EN25B20T 0x0904UL // 2M EON
#define FLASH_IC_EN25B20B 0x0905UL // 2M
#define FLASH_IC_EN25B10T 0x0906UL // 1M
#define FLASH_IC_EN25B10B 0x0907UL // 1M
#define FLASH_IC_EN25B32B 0x0908UL // 4M (Bottom Boot)
#define FLASH_IC_EN25Q32 0x0909UL // 4M
#define FLASH_IC_EN25Q32A 0x090AUL // 4M
#define FLASH_IC_EN25Q64 0x090BUL // 4M
#define FLASH_IC_EN25B64B 0x090CUL // 4M
#define FLASH_IC_EN25Q128 0x090DUL // 16M
#define FLASH_IC_EN25QH128 0x090FUL // 16M
#define FLASH_IC_EN25P16 0x090EUL // 2M
#define FLASH_IC_EN25F40 0x090AUL // 512k
#define FLASH_IC_EN25QH16 0x090BUL // 2M
// ESMT
#define FLASH_IC_ESMT_F25L016A 0x0A00UL // 2M
// GD
#define FLASH_IC_GD25Q32 0x0B00UL // 4M
#define FLASH_IC_GD25Q16 0x0B01UL // 2MByte
#define FLASH_IC_GD25S80 0x0B02UL
#define FLASH_IC_GD25Q64 0x0B03UL // 8M
#define FLASH_IC_GD25Q128 0x0B05UL //16M
#define FLASH_IC_GD25Q256C 0x0B06UL //32M
// AM
#define FLASH_IC_A25LM032 0x0D00UL
// MICRON
#define FLASH_IC_MICRON_M25P16 0x0E00UL // 2M
#define FLASH_IC_MICRON_N25Q32 0x0E01UL // 4M
#define FLASH_IC_MICRON_N25Q64 0x0E02UL // 8M
#define FLASH_IC_MICRON_N25Q128 0x0E03UL // 16M
#define FLASH_IC_NUMONYX_M25PX16 0x0E04UL // 2M
//ZB
#define FLASH_IC_ZB25Q64 0x1002UL // 8M
#define FLASH_IC_ZB25VQ128 0x1003UL // 16M
#define FLASH_IC_25Q128AS 0x1100UL // 25q128as
#define FLASH_IC_XM25QH128A 0x1200UL
#define FLASH_IC_XM25QH256B 0x1201UL
//XTX
#define FLASH_IC_XT25F128B 0x1300UL
//End of table
#define FLASH_IC_ENDTABLE 0x0000UL
// Flash Manufacture ID
#define MID_MXIC 0xC2UL
#define MID_WB 0xEFUL
#define MID_EON 0x1CUL
#define MID_ST 0x20UL
#define MID_SST 0xBFUL
#define MID_PMC 0x9DUL
#define MID_ATMEL 0x1FUL
#define MID_SPAN 0x01UL
#define MID_GD 0xC8UL
#define MID_MICRON 0x20UL
#define MID_NUMONYX 0x20UL
#define MID_AM 0x37UL
#define MID_25Q 0x68UL
#define MID_ZB 0x5EUL
#define MID_XMC 0x20UL
#define MID_XTX 0x0BUL
// Flash Storage Size
#define SIZE_1KB 0x400UL
#define SIZE_2KB 0x800UL
#define SIZE_4KB 0x1000UL
#define SIZE_8KB 0x2000UL
#define SIZE_16KB 0x4000UL
#define SIZE_32KB 0x8000UL
#define SIZE_64KB 0x10000UL
#define SIZE_128KB 0x20000UL
#define SIZE_256KB 0x40000UL
#define SIZE_512KB 0x80000UL
#define SIZE_1MB 0x100000UL
#define SIZE_2MB 0x200000UL
#define SIZE_4MB 0x400000UL
#define SIZE_8MB 0x800000UL
#define SIZE_16MB 0x1000000UL
// ISP_DEV_SEL
#define ISP_DEV_PMC BITS(2:0, 0)
#define ISP_DEV_NEXTFLASH BITS(2:0, 1)
#define ISP_DEV_ST BITS(2:0, 2)
#define ISP_DEV_SST BITS(2:0, 3)
#define ISP_DEV_ATMEL BITS(2:0, 4)
// ISP_SPI_ENDIAN_SEL
#define ISP_SPI_ENDIAN_BIG BITS(0:0, 1)
#define ISP_SPI_ENDIAN_LITTLE BITS(0:0, 0)
typedef struct
{
MS_U8 u8BlockProtectBits; // Block Protection Bits
MS_U8 u8BlockProtectMask; // Block Protection Mask
MS_U32 u32LowerBound;
MS_U32 u32UpperBound;
} ST_WRITE_PROTECT;
typedef struct
{
MS_U16 u16Start; // Start block # of special block size
MS_U16 u16End; // End block # of special block size
MS_U32 au32SizeList[8]; // List of special block sizes. Total size must be equal to FLASH_BLOCK_SIZE
} ST_SPECIAL_BLOCKS;
typedef struct
{
MS_U16 u16FlashType; // flash type
MS_U8 u8MID; // Manufacture ID
MS_U8 u8DID0; // Device ID (memory type)
MS_U8 u8DID1; // Device ID (memory capacity)
ST_WRITE_PROTECT *pWriteProtectTable;
ST_SPECIAL_BLOCKS *pSpecialBlocks;
MS_U32 u32FlashSize; // Flash Size
MS_U32 u32NumSec; // NUMBER_OF_SERFLASH_SECTORS // number of sectors
MS_U32 u32SecSize; // SERFLASH_SECTOR_SIZE // sector size
MS_U16 u16PageSize; // SERFLASH_PAGE_SIZE // page size
MS_U16 u16MaxChipWrDoneTimeout; // SERFLASH_MAX_CHIP_WR_DONE_TIMEOUT // max timeout for chip write done
MS_U8 u8WrsrBlkProtect; // SERFLASH_WRSR_BLK_PROTECT // BP bits @ Serial Flash Status Register
MS_U16 u16DevSel; // ISP_DEV_SEL // reg_device_select
MS_U16 u16SpiEndianSel; // ISP_SPI_ENDIAN_SEL // reg_endian_sel_spi
MS_U16 u16SPIMaxClk[2];
MS_BOOL b2XREAD;
MS_BOOL b4XREAD;
} hal_SERFLASH_t;
#endif //_DRV_DEVICE_INFO_H_