3 #include <linux/types.h>
4 #include <asm/arch/bits.h>
5 #include <linux/string.h>
6 #include <android_bootimg.h>
7 #include <linux/mtd/mtd.h>
8 #include <linux/mtd/nand.h>
10 #include <android_boot.h>
11 #include <environment.h>
14 #include <asm/arch/common.h>
15 #include <asm/u-boot.h>
18 const char dsp_sleep_vect0[] =
588 const char dsp_sleep_vect1[] =
981 const char dsp_sleep_vect2[] =
7592 const char dsp_sleep_vect3[] =
22662 const char dsp_sleep_vect4[] =
23197 unsigned char dsp_start_vect[0x1b5000];
23198 unsigned char * dsp_start_addr = (unsigned char *)0x1e80000;
23200 #define AHB_REG_BASE 0x20900200
23201 #define GREG_BASE 0x8B000000
23202 #define DSP_CONFIG_ADDR 0x400020
23203 #define GR_PCTL (GREG_BASE + 0x000C)//0x8b00000c
23204 #define DSP_BOOT_EN (AHB_REG_BASE + 0x84)//0x20900284
23205 #define DSP_BOOT_VEC (AHB_REG_BASE + 0x88)//0x20900288
23206 #define DSP_RST (AHB_REG_BASE + 0x8C)//0x2090028c
23208 void DSP_ForceSleep(void)
23213 //*(volatile unsigned int *)(GR_PCTL) |= BIT_8;
23214 *(volatile unsigned int *)(DSP_CONFIG_ADDR) = 0X10000;
23216 for(i = 0; i <=565; i++){
23217 dsp_start_vect[i]=dsp_sleep_vect0[i];
23220 for(i = 4096; i <= 4484; i++){
23221 dsp_start_vect[i]=dsp_sleep_vect1[i-4096];
23224 for(i = 4545; i <= 11151; i++){
23225 dsp_start_vect[i]=dsp_sleep_vect2[i-4545];
23228 for(i = 266242; i <= 281307; i++){
23229 dsp_start_vect[i]=dsp_sleep_vect3[i-266242];
23232 for(i = 528384; i <= 528799; i++){
23233 dsp_start_vect[i]=dsp_sleep_vect4[i-528384];
23236 for(i = 0; i < 0x1b5000; i+=4)
23239 temp |= dsp_start_vect[i + 3];
23240 temp |= dsp_start_vect[i + 2] << 8;
23241 temp |= dsp_start_vect[i + 1] << 16;
23242 temp |= dsp_start_vect[i + 0] << 24;
23244 *(volatile unsigned int *)(dsp_start_addr + i) = temp;
23247 *(volatile unsigned int *)(DSP_BOOT_EN) &= ~BIT_0;
23248 *(volatile unsigned int *)(DSP_BOOT_VEC) = (unsigned int)0xc1e80000;
23249 *(volatile unsigned int *)(DSP_BOOT_EN) |= BIT_0;
23250 *(volatile unsigned int *)(DSP_RST) |= BIT_0;