mirror of
https://gitee.com/Vancouver2017/luban-lite.git
synced 2025-12-16 17:18:56 +00:00
V1.0.5
This commit is contained in:
@@ -2,7 +2,7 @@ Import('AIC_ROOT')
|
||||
Import('PRJ_KERNEL')
|
||||
from building import *
|
||||
|
||||
src = Glob('*.c')
|
||||
src = Glob('*.c') + Glob("*.S")
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
CPPPATH = [cwd + '/../include/', ]
|
||||
|
||||
@@ -15,7 +15,7 @@ void gettimespec(struct timespec *t)
|
||||
if (!t)
|
||||
return;
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, t);
|
||||
clock_gettime(CLOCK_REALTIME, t);
|
||||
}
|
||||
|
||||
float timespec_diff(struct timespec *start, struct timespec *end)
|
||||
|
||||
@@ -14,229 +14,6 @@
|
||||
#include "console.h"
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_FINSH
|
||||
#include <rtconfig.h>
|
||||
#include <rthw.h>
|
||||
#include <rtthread.h>
|
||||
#include <finsh.h>
|
||||
|
||||
#define printf rt_kprintf
|
||||
#define THREAD_NAME_LEN 64
|
||||
|
||||
struct memtest_para {
|
||||
u32 address;
|
||||
u32 size;
|
||||
char thread_name[THREAD_NAME_LEN];
|
||||
bool auto_addr;
|
||||
};
|
||||
|
||||
u8 do_mem_test(long address, u32 size)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
/**< 8bit test */
|
||||
{
|
||||
u8 *p_u8 = (u8 *)address;
|
||||
for (i = 0; i < size / sizeof(u8); i++) {
|
||||
*p_u8++ = (u8)i;
|
||||
}
|
||||
|
||||
p_u8 = (u8 *)address;
|
||||
for (i = 0; i < size / sizeof(u8); i++) {
|
||||
if (*p_u8 != (u8)i) {
|
||||
printf("8bit test fail @ 0x%08X\r\nsystem halt!!!!!",
|
||||
(long)p_u8);
|
||||
return 1;
|
||||
}
|
||||
p_u8++;
|
||||
}
|
||||
}
|
||||
|
||||
/**< 16bit test */
|
||||
{
|
||||
u16 *p_u16 = (u16 *)address;
|
||||
for (i = 0; i < size / sizeof(u16); i++) {
|
||||
*p_u16++ = (u16)i;
|
||||
}
|
||||
|
||||
p_u16 = (u16 *)address;
|
||||
for (i = 0; i < size / sizeof(u16); i++) {
|
||||
if (*p_u16 != (u16)i) {
|
||||
printf("16bit test fail @ 0x%08X\r\nsystem halt!!!!!",
|
||||
(long)p_u16);
|
||||
return 1;
|
||||
}
|
||||
p_u16++;
|
||||
}
|
||||
}
|
||||
|
||||
/**< 32bit test */
|
||||
{
|
||||
u32 *p_u32 = (u32 *)address;
|
||||
for (i = 0; i < size / sizeof(u32); i++) {
|
||||
*p_u32++ = (u32)i;
|
||||
}
|
||||
|
||||
p_u32 = (u32 *)address;
|
||||
for (i = 0; i < size / sizeof(u32); i++) {
|
||||
if (*p_u32 != (u32)i) {
|
||||
printf("32bit test fail @ 0x%08X\r\nsystem halt!!!!!",
|
||||
(long)p_u32);
|
||||
return 1;
|
||||
}
|
||||
p_u32++;
|
||||
}
|
||||
}
|
||||
|
||||
/**< 32bit Loopback test */
|
||||
{
|
||||
u32 *p_u32 = (u32 *)address;
|
||||
for (i = 0; i < size / sizeof(u32); i++) {
|
||||
*p_u32 = (long)p_u32;
|
||||
p_u32++;
|
||||
}
|
||||
|
||||
p_u32 = (u32 *)address;
|
||||
for (i = 0; i < size / sizeof(u32); i++) {
|
||||
if (*p_u32 != (long)p_u32) {
|
||||
printf("32bit Loopback test fail @ 0x%08X", (long)p_u32);
|
||||
printf(" data:0x%08X \r\n", (u32)*p_u32);
|
||||
printf("system halt!!!!!", (long)p_u32);
|
||||
return 1;
|
||||
}
|
||||
p_u32++;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void memtest_thread(void *arg)
|
||||
{
|
||||
long loop_times = 0;
|
||||
u8 ret = 0;
|
||||
u32 *malloc_addr = NULL;
|
||||
struct memtest_para para;
|
||||
memset(¶, 0, sizeof(struct memtest_para));
|
||||
memcpy(¶, arg, sizeof(struct memtest_para));
|
||||
|
||||
if (para.auto_addr) {
|
||||
malloc_addr = aicos_malloc(MEM_CMA, para.size);
|
||||
if (!malloc_addr) {
|
||||
goto memtest_thread_err;
|
||||
}
|
||||
para.address = (long)malloc_addr;
|
||||
memset(para.thread_name, 0, THREAD_NAME_LEN);
|
||||
}
|
||||
snprintf(para.thread_name, THREAD_NAME_LEN, "memtest_0x%x-0x%x, size=0x%x",
|
||||
para.address, para.address + para.size, para.size);
|
||||
printf("memtest address 0x%08X, size 0x%08X\r\n", para.address, para.size);
|
||||
|
||||
do {
|
||||
loop_times++;
|
||||
ret = do_mem_test(para.address, para.size);
|
||||
if (ret) {
|
||||
printf("[failed] %s, loop_times=%d\n", para.thread_name,
|
||||
loop_times);
|
||||
goto memtest_thread_free;
|
||||
}
|
||||
aicos_msleep(1000);
|
||||
printf("[success] %s, loop_times=%d\n", para.thread_name, loop_times);
|
||||
} while (1);
|
||||
|
||||
memtest_thread_err:
|
||||
printf("memtest_thread aicos_malloc issue: ");
|
||||
printf(
|
||||
"The start addr: 0x%x, end addr: 0x%x, size: 0x%lx, please try small size.\n",
|
||||
para.address, para.address + para.size, para.size);
|
||||
memtest_thread_free:
|
||||
aicos_free(MEM_CMA, malloc_addr);
|
||||
}
|
||||
|
||||
static void cmd_mem_test(int argc, char **argv)
|
||||
{
|
||||
u32 address = 0;
|
||||
u32 size = 0;
|
||||
rt_thread_t thid;
|
||||
char thread_name[THREAD_NAME_LEN] = { 0 };
|
||||
struct memtest_para para;
|
||||
memset(¶, 0, sizeof(struct memtest_para));
|
||||
char *str_tmp;
|
||||
|
||||
if (argc < 2) {
|
||||
printf("Invalid parameter, eg: \n");
|
||||
printf("1. lock addr mode: mem_test 0x40400000 0x100000\n");
|
||||
printf("2. auto malloc addr mode: mem_test 0x10000\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (argc == 2) {
|
||||
para.auto_addr = 1;
|
||||
size = strtol(argv[1], &str_tmp, 16);
|
||||
snprintf(thread_name, THREAD_NAME_LEN, "memtest_auto_addr-0x%x", size);
|
||||
} else if (argc == 3) {
|
||||
address = strtol(argv[1], &str_tmp, 16);
|
||||
size = strtol(argv[2], &str_tmp, 16);
|
||||
para.address = address;
|
||||
snprintf(thread_name, THREAD_NAME_LEN, "memtest_0x%x-0x%x",
|
||||
address, address + size);
|
||||
}
|
||||
snprintf(para.thread_name, THREAD_NAME_LEN, "%s", thread_name);
|
||||
para.size = size;
|
||||
|
||||
thid = aicos_thread_create(thread_name, 4096, 10, memtest_thread, ¶);
|
||||
if (thid == NULL) {
|
||||
printf("Failed to create \"memtest_0x%lx-0x%lx\" thread\n", address,
|
||||
address + size);
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
MSH_CMD_EXPORT_ALIAS(cmd_mem_test, mem_test, memory test: mem_test address_hex size_hex);
|
||||
|
||||
#endif /* RT_USING_FINSH */
|
||||
|
||||
static int cmd_test_cache(int argc, char **argv)
|
||||
{
|
||||
u32 addr = 0, len = 0;
|
||||
|
||||
if (argc != 4) {
|
||||
printf("Invalid argument. Usage: \n");
|
||||
printf(" %s [i/c/f] [Phy addr] [len]\n", argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
addr = strtol(argv[2], NULL, 16);
|
||||
len = atoi(argv[3]);
|
||||
switch (argv[1][0]) {
|
||||
case 'i':
|
||||
printf("Invalid Cache 0x%08x, len %d\n", addr, len);
|
||||
aicos_dcache_invalid_range((void *)(ptr_t)addr, len);
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
printf("Clean Cache 0x%08x, len %d\n", addr, len);
|
||||
aicos_dcache_clean_range((void *)(ptr_t)addr, len);
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
printf("Clean and invalid Cache 0x%08x, len %d\n", addr, len);
|
||||
aicos_dcache_clean_invalid_range((void *)(ptr_t)addr, len);
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("Invalid Cache operation: %s\n", argv[1]);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#ifdef RT_USING_FINSH
|
||||
MSH_CMD_EXPORT_ALIAS(cmd_test_cache, test_cache, Cache operation test);
|
||||
#endif
|
||||
#ifdef AIC_CONSOLE_BARE_DRV
|
||||
CONSOLE_CMD(test_cache, cmd_test_cache, "Cache operation test");
|
||||
#endif
|
||||
|
||||
static char *show_size(u32 size)
|
||||
{
|
||||
|
||||
@@ -32,9 +32,9 @@ static int clk_mod_reset(char *name)
|
||||
printf("error! get clk-id failed!\n");
|
||||
printf("Reset module :%s(id:%d)\n", name, (u32)clk_id);
|
||||
|
||||
if(hal_clk_disable_assertrst(clk_id) < 0)
|
||||
if (hal_clk_disable_assertrst(clk_id) < 0)
|
||||
goto __err;
|
||||
if(hal_clk_enable_deassertrst(clk_id) < 0)
|
||||
if (hal_clk_enable_deassertrst(clk_id) < 0)
|
||||
goto __err;
|
||||
return 0;
|
||||
__err:
|
||||
@@ -51,7 +51,7 @@ static int do_clk_mod_reset(int argc, char *argv[])
|
||||
}
|
||||
|
||||
for (next = 1; next < argc; next++) {
|
||||
if(clk_mod_reset(argv[next]) < 0)
|
||||
if (clk_mod_reset(argv[next]) < 0)
|
||||
printf("error! get clk failed!\n");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user