From 0bf753e06a747ad1f8274e0de32384b34da20382 Mon Sep 17 00:00:00 2001 From: Sergey Gridassov Date: Sat, 4 Dec 2010 10:45:49 +0300 Subject: [PATCH] Code cleanup --- ingenic.c | 32 +++++++++++++++++++++++--------- ingenic.h | 22 ++++++++++++++-------- initial.cfg | 7 ------- shell.c | 11 +++-------- spl_cmdset.c | 48 +++++++++++++++++------------------------------- 5 files changed, 57 insertions(+), 63 deletions(-) diff --git a/ingenic.c b/ingenic.c index 5ed4921..2b96e75 100644 --- a/ingenic.c +++ b/ingenic.c @@ -180,7 +180,7 @@ void ingenic_close(void *hndl) { int ingenic_rebuild(void *hndl) { HANDLE; - handle->cfg.cpu_id = 0x4750; //CPUID(handle->type); + handle->cfg.cpu_id = CPUID(handle->type); CFGOPT("EXTCLK", ext_clk, v <= 27 && v >= 12); CFGOPT("CPUSPEED", cpu_speed, (v % 12) == 0); @@ -197,10 +197,8 @@ int ingenic_rebuild(void *hndl) { CFGOPT("SDRAM_COLADDR", col_addr, 1); CFGOPT("SDRAM_ISMOBILE", is_mobile, v == 0 || v == 1); CFGOPT("SDRAM_ISBUSSHARE", is_busshare, v == 0 || v == 1); - CFGOPT("DEBUGOPS", debug_ops, 1); - CFGOPT("PINNUM", pin_num, 1); - CFGOPT("START", start, 1); - CFGOPT("SIZE", size, 1); + + memset(&handle->cfg.debug, 0, sizeof(ingenic_stage1_debug_t)); handle->total_sdram_size = (uint32_t) (2 << (handle->cfg.row_addr + handle->cfg.col_addr - 1)) * 2 @@ -220,6 +218,24 @@ static int ingenic_address(void *usb, uint32_t base) { return usbdev_vendor(usb, USBDEV_TODEV, VR_SET_DATA_ADDRESS, (base >> 16), base & 0xFFFF, 0, 0); } +int ingenic_stage1_debugop(void *hndl, const char *filename, uint32_t op, uint32_t pin, uint32_t base, uint32_t size) { + HANDLE; + + handle->cfg.debug.debug_ops = op; + handle->cfg.debug.pin_num = pin; + handle->cfg.debug.start = base; + handle->cfg.debug.size = size; + + debug(LEVEL_DEBUG, "Debug configuration dump:\n"); + hexdump(&handle->cfg, sizeof(firmware_config_t)); + + int ret = ingenic_loadstage(handle, INGENIC_STAGE1, filename); + + memset(&handle->cfg.debug, 0, sizeof(ingenic_stage1_debug_t)); + + return ret; +} + int ingenic_loadstage(void *hndl, int id, const char *file) { HANDLE; @@ -253,11 +269,8 @@ int ingenic_loadstage(void *hndl, int id, const char *file) { FILE *fd = fopen(file, "rb"); - if(fd == NULL) { - debug(LEVEL_ERROR, "Ingenic: cannot load file `%s'\n", file); - + if(fd == NULL) return -1; - } fseek(fd, 0, SEEK_END); int size = ftell(fd); @@ -307,3 +320,4 @@ int ingenic_loadstage(void *hndl, int id, const char *file) { return ingenic_redetect(hndl); } + diff --git a/ingenic.h b/ingenic.h index 0432301..44e12ff 100644 --- a/ingenic.h +++ b/ingenic.h @@ -31,6 +31,7 @@ int ingenic_type(void *hndl); int ingenic_rebuild(void *hndl); int ingenic_loadstage(void *hndl, int id, const char *filename); +int ingenic_stage1_debugop(void *device, const char *filename, uint32_t op, uint32_t pin, uint32_t base, uint32_t size); #define CMDSET_SPL 1 #define CMDSET_USBBOOT 2 @@ -38,14 +39,23 @@ int ingenic_loadstage(void *hndl, int id, const char *filename); #define INGENIC_STAGE1 1 #define INGENIC_STAGE2 2 -#define SPL_DEBUG_MEMTEST "1" -#define SPL_DEBUG_GPIO_SET "2" -#define SPL_DEBUG_GPIO_CLEAR "3" +#define STAGE1_DEBUG_BOOT 0 +#define STAGE1_DEBUG_MEMTEST 1 +#define STAGE1_DEBUG_GPIO_SET 2 +#define STAGE1_DEBUG_GPIO_CLEAR 3 #define STAGE1_BASE 0x2000 #define STAGE2_CODESIZE 0x400000 #define SDRAM_BASE 0x80000000 +typedef struct { + /* debug args */ + uint8_t debug_ops; + uint8_t pin_num; + uint32_t start; + uint32_t size; +} ingenic_stage1_debug_t; + typedef struct { /* CPU ID */ uint32_t cpu_id; @@ -65,11 +75,7 @@ typedef struct { uint8_t is_mobile; uint8_t is_busshare; - /* debug args */ - uint8_t debug_ops; - uint8_t pin_num; - uint32_t start; - uint32_t size; + ingenic_stage1_debug_t debug; } __attribute__((packed)) firmware_config_t; #endif diff --git a/initial.cfg b/initial.cfg index 6a15eac..15c1c53 100644 --- a/initial.cfg +++ b/initial.cfg @@ -31,11 +31,4 @@ set NAND_BCHBIT 8 # Specify the hardware BCH algorithm for 4750 (4|8) set NAND_WPPIN 0 # Specify the write protect pin number set NAND_BLOCKPERCHIP 4096 # Specify the block number per chip,0 means ignore -# DEBUG -set DEBUGOPS 0 -set PINNUM 0 -set START 0 -set SIZE 0 - - rebuildcfg diff --git a/shell.c b/shell.c index 524de3a..05c9101 100644 --- a/shell.c +++ b/shell.c @@ -304,7 +304,7 @@ static int builtin_source(int argc, char *argv[]) { int ret = shell_source(argv[1]); if(ret == -1) { - printf("Error while sourcing file %s\n", argv[1]); + fprintf(stderr, "Error while sourcing file %s: %s\n", argv[1], strerror(errno)); } shell_exit = 0; @@ -320,14 +320,9 @@ static int builtin_echo(int argc, char *argv[]) { } for(int i = 1; i < argc; i++) { - printf("%s", argv[i]); + fputs(argv[i], stdout); - if(i < argc - 1) { - printf(" "); - - } else { - printf("\n"); - } + putchar((i < argc - 1) ? ' ' : '\n'); } return 0; diff --git a/spl_cmdset.c b/spl_cmdset.c index 0d37a2b..56ed4da 100644 --- a/spl_cmdset.c +++ b/spl_cmdset.c @@ -36,14 +36,19 @@ const shell_command_t spl_cmdset[] = { { NULL, NULL, NULL } }; -static int spl_load_stage1() { +static int spl_stage1_op(uint32_t op, uint32_t pin, uint32_t base, uint32_t size) { if(cfg_getenv("STAGE1_FILE") == NULL) { printf("Variable STAGE1_FILE is not set\n"); return -1; } - return ingenic_loadstage(shell_device(), INGENIC_STAGE1, cfg_getenv("STAGE1_FILE")); + int ret = ingenic_stage1_debugop(shell_device(), cfg_getenv("STAGE1_FILE"), op, pin, base, size); + + if(ret == -1) + perror("ingenic_stage1_debugop"); + + return ret; } static int spl_memtest(int argc, char *argv[]) { @@ -51,7 +56,7 @@ static int spl_memtest(int argc, char *argv[]) { printf("Usage: %s [BASE ]\n", argv[0]); } - return spl_load_stage1(); // TODO + return spl_stage1_op(STAGE1_DEBUG_BOOT, 0, 0, 0); // TODO } static int spl_gpio(int argc, char *argv[]) { @@ -62,30 +67,7 @@ static int spl_gpio(int argc, char *argv[]) { return -1; } - char *old_debugops = strdup(cfg_getenv("DEBUGOPS")), - *old_pinnum = strdup(cfg_getenv("PINNUM")); - - cfg_setenv("DEBUGOPS", (!strcmp(argv[2], "1")) ? - SPL_DEBUG_GPIO_SET : SPL_DEBUG_GPIO_CLEAR); - cfg_setenv("PINNUM", argv[1]); - - int ret = 0; - - ret = shell_execute("rebuildcfg"); - - if(ret == -1) - goto finally; - - ret = spl_load_stage1(); - -finally: - cfg_setenv("DEBUGOPS", old_debugops); - cfg_setenv("PINNUM", old_pinnum); - - free(old_debugops); - free(old_pinnum); - - return ret; + return spl_stage1_op(!strcmp(argv[2], "1") ? STAGE1_DEBUG_GPIO_SET : STAGE1_DEBUG_GPIO_CLEAR, atoi(argv[1]), 0, 0); } static int spl_boot(int argc, char *argv[]) { @@ -93,9 +75,7 @@ static int spl_boot(int argc, char *argv[]) { printf("Usage: %s\n", argv[0]); } - int ret; - - ret = spl_load_stage1(); + int ret = spl_stage1_op(STAGE1_DEBUG_BOOT, 0, 0, 0); if(ret == -1) return -1; @@ -106,5 +86,11 @@ static int spl_boot(int argc, char *argv[]) { return -1; } - return ingenic_loadstage(shell_device(), INGENIC_STAGE2, cfg_getenv("STAGE2_FILE")); + ret = ingenic_loadstage(shell_device(), INGENIC_STAGE2, cfg_getenv("STAGE2_FILE")); + + if(ret == -1) + perror("ingenic_loadstage"); + + return ret; } +