blob: db0b59e707a6d19a43c1353f9cce5bf92c62fc28 [file] [log] [blame]
#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