/********************************************************************************
 * 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.
 ******************************************************************************/
#include "util.h"
extern unsigned int FIGO_Sram_Code[] ; 
extern unsigned int Figo_Sram_Code_Size ;
void 	Copy_Code_To_Figo_Sram(){
	
	unsigned int * pFigo_SRAM_Base ;
	unsigned int i ; 
	unsigned int * pCode ; 
	pCode = FIGO_Sram_Code ;

	pFigo_SRAM_Base = (unsigned int *)0xF7CC1000 ;
	// copy code to FIGO SRAM
	for( i = 0 ; i < Figo_Sram_Code_Size ; i ++ )
        {
                *pFigo_SRAM_Base ++ = *pCode ++;
        }
//	while(1) ; 
	//jumpt to figo SRAM
	__reset_cpu(0xF7CC1000, 0, 0) ;
}

