169 lines
8.2 KiB
C
169 lines
8.2 KiB
C
/*******************************************************************************
|
|
Copyright (C) Marvell International Ltd. and its affiliates
|
|
|
|
This software file (the "File") is owned and distributed by Marvell
|
|
International Ltd. and/or its affiliates ("Marvell") under the following
|
|
alternative licensing terms. Once you have made an election to distribute the
|
|
File under one of the following license alternatives, please (i) delete this
|
|
introductory statement regarding license alternatives, (ii) delete the two
|
|
license alternatives that you have not elected to use and (iii) preserve the
|
|
Marvell copyright notice above.
|
|
|
|
********************************************************************************
|
|
Marvell Commercial License Option
|
|
|
|
If you received this File from Marvell and you have entered into a commercial
|
|
license agreement (a "Commercial License") with Marvell, the File is licensed
|
|
to you under the terms of the applicable Commercial License.
|
|
|
|
********************************************************************************
|
|
Marvell GPL License Option
|
|
|
|
If you received this File from Marvell, you may opt to use, redistribute and/or
|
|
modify this File in accordance with the terms and conditions of the General
|
|
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
|
available along with the File in the license.txt file or by writing to the Free
|
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
|
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
|
|
|
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
|
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
|
DISCLAIMED. The GPL License provides additional details about this warranty
|
|
disclaimer.
|
|
********************************************************************************
|
|
Marvell BSD License Option
|
|
|
|
If you received this File from Marvell, you may opt to use, redistribute and/or
|
|
modify this File under the following licensing terms.
|
|
Redistribution and use in source and binary forms, with or without modification,
|
|
are permitted provided that the following conditions are met:
|
|
|
|
* Redistributions of source code must retain the above copyright notice,
|
|
this list of conditions and the following disclaimer.
|
|
|
|
* Redistributions in binary form must reproduce the above copyright
|
|
notice, this list of conditions and the following disclaimer in the
|
|
documentation and/or other materials provided with the distribution.
|
|
|
|
* Neither the name of Marvell nor the names of its contributors may be
|
|
used to endorse or promote products derived from this software without
|
|
specific prior written permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
ANY 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) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*******************************************************************************/
|
|
|
|
#ifndef __INCmvAmdFlashH
|
|
#define __INCmvAmdFlashH
|
|
|
|
#include "mvFlashCom.h"
|
|
|
|
|
|
/* AMD Flash IDs */
|
|
#define AMD_FID_LV040B 0x4F /* 29LV040B ID */
|
|
/* 4 Mbit, 512K x 8, */
|
|
/* 8 64K x 8 uniform sectors */
|
|
|
|
#define AMD_FID_F040B 0xA4 /* 29F040B ID */
|
|
/* 4 Mbit, 512K x 8, */
|
|
/* 8 64K x 8 uniform sectors */
|
|
#define STM_FID_M29W040B 0xE3 /* M29W040B ID */
|
|
/* 4 Mbit, 512K x 8, */
|
|
/* 8 64K x 8 uniform sectors */
|
|
#define AMD_FID_F080B 0xD5 /* 29F080 ID ( 1 M) */
|
|
/* 8 Mbit, 512K x 16, */
|
|
/* 8 64K x 16 uniform sectors */
|
|
#define AMD_FID_F016D 0xAD /* 29F016 ID ( 2 M x 8) */
|
|
#define AMD_FID_F032B 0x41 /* 29F032 ID ( 4 M x 8) */
|
|
#define AMD_FID_LV116DT 0xC7 /* 29LV116DT ( 2 M x 8, top boot sect)*/
|
|
#define AMD_FID_LV016B 0xc8 /* 29LV016 ID ( 2 M x 8) */
|
|
|
|
#define AMD_FID_LV400T 0x22B9 /* 29LV400T ID ( 4 M, top boot sector) */
|
|
#define AMD_FID_LV400B 0x22BA /* 29LV400B ID ( 4 M, bottom boot sect) */
|
|
|
|
#define AMD_FID_LV033C 0xA3 /* 29LV033C ID ( 4 M x 8) */
|
|
#define AMD_FID_LV065D 0x93 /* 29LV065D ID ( 8 M x 8) */
|
|
|
|
#define AMD_FID_LV800T 0x22DA /* 29LV800T ID ( 8 M, top boot sector) */
|
|
#define AMD_FID_LV800B 0x225B /* 29LV800B ID ( 8 M, bottom boot sect) */
|
|
|
|
#define AMD_FID_LV160T 0x22C4 /* 29LV160T ID (16 M, top boot sector) */
|
|
#define AMD_FID_LV160B 0x2249 /* 29LV160B ID (16 M, bottom boot sect) */
|
|
|
|
#define AMD_FID_LV320T 0x22F6 /* 29LV320T ID (32 M, top boot sector) */
|
|
#define AMD_FID_LV320B 0x22F9 /* 29LV320B ID (32 M, bottom boot sect) */
|
|
|
|
#define AMD_FID_DL322T 0x2255 /* 29DL322T ID (32 M, top boot sector) */
|
|
#define AMD_FID_DL322B 0x2256 /* 29DL322B ID (32 M, bottom boot sect) */
|
|
#define AMD_FID_DL323T 0x2250 /* 29DL323T ID (32 M, top boot sector) */
|
|
#define AMD_FID_DL323B 0x2253 /* 29DL323B ID (32 M, bottom boot sect) */
|
|
#define AMD_FID_DL324T 0x225C /* 29DL324T ID (32 M, top boot sector) */
|
|
#define AMD_FID_DL324B 0x225F /* 29DL324B ID (32 M, bottom boot sect) */
|
|
|
|
#define AMD_S29GL128N 0x227E /* S29GL128N spansion 128Mbit flash */
|
|
#define AMD_FID_DL640 0x227E /* 29DL640D ID (64 M, dual boot sectors)*/
|
|
#define AMD_FID_MIRROR 0x227E /* 1st ID word for MirrorBit family */
|
|
#define AMD_FID_LV640U_2 0x220C /* 2d ID word for AM29LV640M at 0x38 */
|
|
#define AMD_FID_LV640U_3 0x2201 /* 3d ID word for AM29LV640M at 0x3c */
|
|
#define AMD_FID_LV128U_2 0x2212 /* 2d ID word for AM29LV128M at 0x38 */
|
|
#define AMD_FID_LV128U_3 0x2200 /* 3d ID word for AM29LV128M at 0x3c */
|
|
|
|
#define AMD_FID_LV640U 0x22D7 /* 29LV640U ID (64 M, uniform sectors) */
|
|
|
|
#define STM_FID_29W040B 0xE3 /* M29W040B ID (4M = 512K x 8) */
|
|
|
|
/* SST Flash IDs */
|
|
#define SST_39VF_020 0xD6 /* SST39VF020 (256KB = 4K * 64) */
|
|
|
|
|
|
/* Amd Flash APIs */
|
|
#define AMD_EARASE_MILI_TIMEOUT 8000 /* mili seconds */
|
|
#define AMD_PROG_TIMEOUT 0xA0000 /* number of loops */
|
|
|
|
/* Commands */
|
|
#define AMD_CHIP_CMD_RST 0xF0 /* reset flash */
|
|
#define AMD_CHIP_UNLOCK_CMD1 0xAA /* 1st data for unlock */
|
|
#define AMD_CHIP_UNLOCK_ADDR1 0x555 /* 1st addr for unlock */
|
|
#define SST_CHIP_UNLOCK_ADDR1 0x5555 /* 1st addr for unlock */
|
|
#define AMD_CHIP_UNLOCK_CMD2 0x55 /* 2nd data for unlock */
|
|
#define AMD_CHIP_UNLOCK_ADDR2 0x2AA /* 2nd addr for unlock */
|
|
#define SST_CHIP_UNLOCK_ADDR2 0x2AAA /* 2nd addr for unlock */
|
|
#define AMD_CHIP_CMD_PROG 0xA0 /* 1st data for program command */
|
|
#define AMD_CHIP_ADDR_PROG 0x555 /* 1st addr for program command */
|
|
#define SST_CHIP_ADDR_PROG 0x5555 /* 1st addr for program command */
|
|
#define AMD_CHIP_CMD_ERASE1 0x80 /* 1st data for erase command */
|
|
#define AMD_CHIP_ADDR_ERASE1 0x555 /* 1st addr for erase command */
|
|
#define SST_CHIP_ADDR_ERASE1 0x5555 /* 1st addr for erase command */
|
|
#define AMD_CHIP_CMD_ERASE2 0xAA /* 2nd data for erase command */
|
|
#define AMD_CHIP_ADDR_ERASE2 0x555 /* 2nd addr for erase command */
|
|
#define SST_CHIP_ADDR_ERASE2 0x5555 /* 2nd addr for erase command */
|
|
#define AMD_CHIP_CMD_ERASE3 0x55 /* 3rd data for erase command */
|
|
#define AMD_CHIP_ADDR_ERASE3 0x2AA /* 3rd addr for erase command */
|
|
#define SST_CHIP_ADDR_ERASE3 0x2AAA /* 3rd addr for erase command */
|
|
#define AMD_CHIP_CMD_ERASE4 0x30 /* 4rd data for erase command */
|
|
|
|
/* there are few ways to check if the AMD flash is busy or not: */
|
|
/* 1) by checking DQ7 [and 5 - optional ] */
|
|
/* 2) by checking toggle bit DQ7 (linux) */
|
|
/* here we used the first option. */
|
|
/* status register bits */
|
|
#define AMD_CHIP_STAT_DQ7_MASK 0x80 /* Device is ready */
|
|
|
|
/* ID and Lock Configuration */
|
|
#define AMD_CHIP_RD_ID_MAN 0x01 /* Manufacturer code = 0x89 */
|
|
|
|
MV_STATUS amdFlashSecErase(MV_FLASH_INFO *pFlash, MV_U32 secNum);
|
|
MV_VOID amdFlashReset(MV_FLASH_INFO *pFlash);
|
|
MV_STATUS amdFlashProg(MV_FLASH_INFO *pFlash,MV_U32 offset, MV_U32 data);
|
|
|
|
#endif /* __INCmvAmdFlashH */
|