#include <common.h> | |
#include <command.h> | |
#include <net.h> | |
#include <jffs2/load_kernel.h> | |
#include <common.h> | |
#include <asm/arch/hardware.h> | |
#include <asm/arch/uart.h> | |
#include <asm/arch/lsp_crpm.h> | |
#include "errno.h" | |
#include <config.h> | |
#include <drvs_gpio.h> | |
#if CONFIG_HARDWARE_TEST | |
#define DDR_START 0x20000000 | |
#define DDR_END 0x27800000 | |
void led_init(void) | |
{ | |
int32_t reg = 0; | |
reg = __REG(0x10d440); /* ¹¦ÄÜÒý½Å */ | |
reg |= (0x1 << 24); | |
__REG(0x10d440)=reg; | |
reg = __REG(0x10dC04); /* config OUT */ | |
reg &= (~(0x1<<9)); | |
__REG(0x10dC04)=reg; | |
#if 1 | |
reg = __REG(0x10dC08); | |
reg |= (0x1<<9); | |
__REG(0x10dC08)=reg; | |
#endif | |
} | |
void led_on(void) | |
{ | |
int32_t reg = __REG(0x10dC08); | |
reg |= (0x1<<9); | |
__REG(0x10dC08)=reg; | |
} | |
void led_off(void) | |
{ | |
int32_t reg = __REG(0x10dC08); | |
reg &= ~(0x1<<9); | |
__REG(0x10dC08)=reg; | |
} | |
int do_test_ddr(void) | |
{ | |
volatile unsigned char *test_count = 0; | |
static int test_cnt = 0; | |
unsigned int cnt = 0; | |
volatile unsigned int state = 0; | |
int ret = 0; | |
test_cnt++; | |
printf("single byte test round:%d\n",test_cnt); | |
for(test_count = (unsigned char *)DDR_START; test_count < (unsigned char *)DDR_END; test_count++) | |
{ | |
*test_count = 0x55; | |
if(*test_count != 0x55) | |
{ | |
break; | |
ret = -1; | |
} | |
*test_count = 0xAA; | |
if(*test_count != 0xAA) | |
{ | |
break; | |
ret = -1; | |
} | |
cnt++; | |
if(cnt%2000000 == 0) | |
{ | |
if(state==0) | |
{ | |
zDrvGpio_SetOutputValue(GPIO32,GPIO_HIGH); | |
printf("single byte test round:%d\n",cnt); | |
state = 1; | |
} | |
else | |
{ | |
zDrvGpio_SetOutputValue(GPIO32,GPIO_LOW); | |
printf("single byte test round:%d\n",cnt); | |
state = 0; | |
} | |
} | |
} | |
if(test_count != (unsigned char *)DDR_END) | |
{ | |
printf("test ddr faile\n"); | |
ret = -1; | |
} | |
else | |
{ | |
printf("test ddr success\n"); | |
} | |
if(ret == -1) | |
{ | |
zDrvGpio_SetOutputValue(GPIO70,GPIO_HIGH); | |
while(1); | |
} | |
printf("memset test round:%d\n",test_cnt); | |
memset(DDR_START,0x5a,DDR_END-DDR_START); | |
printf("check memset\n"); | |
for(test_count = (unsigned char *)DDR_START; test_count < (unsigned char *)DDR_END; test_count++) | |
{ | |
if(*test_count != 0x5a) | |
{ | |
break; | |
ret = -1; | |
} | |
cnt++; | |
if(cnt%2000000 == 0) | |
{ | |
if(state==0) | |
{ | |
zDrvGpio_SetOutputValue(GPIO32,GPIO_HIGH); | |
state = 1; | |
} | |
else | |
{ | |
zDrvGpio_SetOutputValue(GPIO32,GPIO_LOW); | |
state = 0; | |
} | |
} | |
} | |
if(test_count != (unsigned char *)DDR_END) | |
{ | |
printf("test ddr faile\n"); | |
ret = -1; | |
} | |
else | |
{ | |
printf("test ddr success\n"); | |
} | |
if(ret == -1) | |
{ | |
zDrvGpio_SetOutputValue(GPIO70,GPIO_HIGH); | |
while(1); | |
} | |
return 0; | |
} | |
U_BOOT_CMD( | |
test_ddr, CONFIG_SYS_MAXARGS, 0, do_test_ddr, | |
"test_ddr: test_ddr ", | |
"" | |
); | |
#endif | |