1
0
mirror of git://projects.qi-hardware.com/xburst-tools.git synced 2024-11-01 12:26:16 +02:00

Code cleanup

This commit is contained in:
Sergey Gridassov 2010-12-04 10:45:49 +03:00
parent 8c36acee57
commit 0bf753e06a
5 changed files with 57 additions and 63 deletions

View File

@ -180,7 +180,7 @@ void ingenic_close(void *hndl) {
int ingenic_rebuild(void *hndl) { int ingenic_rebuild(void *hndl) {
HANDLE; 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("EXTCLK", ext_clk, v <= 27 && v >= 12);
CFGOPT("CPUSPEED", cpu_speed, (v % 12) == 0); CFGOPT("CPUSPEED", cpu_speed, (v % 12) == 0);
@ -197,10 +197,8 @@ int ingenic_rebuild(void *hndl) {
CFGOPT("SDRAM_COLADDR", col_addr, 1); CFGOPT("SDRAM_COLADDR", col_addr, 1);
CFGOPT("SDRAM_ISMOBILE", is_mobile, v == 0 || v == 1); CFGOPT("SDRAM_ISMOBILE", is_mobile, v == 0 || v == 1);
CFGOPT("SDRAM_ISBUSSHARE", is_busshare, v == 0 || v == 1); CFGOPT("SDRAM_ISBUSSHARE", is_busshare, v == 0 || v == 1);
CFGOPT("DEBUGOPS", debug_ops, 1);
CFGOPT("PINNUM", pin_num, 1); memset(&handle->cfg.debug, 0, sizeof(ingenic_stage1_debug_t));
CFGOPT("START", start, 1);
CFGOPT("SIZE", size, 1);
handle->total_sdram_size = (uint32_t) handle->total_sdram_size = (uint32_t)
(2 << (handle->cfg.row_addr + handle->cfg.col_addr - 1)) * 2 (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); 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) { int ingenic_loadstage(void *hndl, int id, const char *file) {
HANDLE; HANDLE;
@ -253,11 +269,8 @@ int ingenic_loadstage(void *hndl, int id, const char *file) {
FILE *fd = fopen(file, "rb"); FILE *fd = fopen(file, "rb");
if(fd == NULL) { if(fd == NULL)
debug(LEVEL_ERROR, "Ingenic: cannot load file `%s'\n", file);
return -1; return -1;
}
fseek(fd, 0, SEEK_END); fseek(fd, 0, SEEK_END);
int size = ftell(fd); int size = ftell(fd);
@ -307,3 +320,4 @@ int ingenic_loadstage(void *hndl, int id, const char *file) {
return ingenic_redetect(hndl); return ingenic_redetect(hndl);
} }

View File

@ -31,6 +31,7 @@ int ingenic_type(void *hndl);
int ingenic_rebuild(void *hndl); int ingenic_rebuild(void *hndl);
int ingenic_loadstage(void *hndl, int id, const char *filename); 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_SPL 1
#define CMDSET_USBBOOT 2 #define CMDSET_USBBOOT 2
@ -38,14 +39,23 @@ int ingenic_loadstage(void *hndl, int id, const char *filename);
#define INGENIC_STAGE1 1 #define INGENIC_STAGE1 1
#define INGENIC_STAGE2 2 #define INGENIC_STAGE2 2
#define SPL_DEBUG_MEMTEST "1" #define STAGE1_DEBUG_BOOT 0
#define SPL_DEBUG_GPIO_SET "2" #define STAGE1_DEBUG_MEMTEST 1
#define SPL_DEBUG_GPIO_CLEAR "3" #define STAGE1_DEBUG_GPIO_SET 2
#define STAGE1_DEBUG_GPIO_CLEAR 3
#define STAGE1_BASE 0x2000 #define STAGE1_BASE 0x2000
#define STAGE2_CODESIZE 0x400000 #define STAGE2_CODESIZE 0x400000
#define SDRAM_BASE 0x80000000 #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 { typedef struct {
/* CPU ID */ /* CPU ID */
uint32_t cpu_id; uint32_t cpu_id;
@ -65,11 +75,7 @@ typedef struct {
uint8_t is_mobile; uint8_t is_mobile;
uint8_t is_busshare; uint8_t is_busshare;
/* debug args */ ingenic_stage1_debug_t debug;
uint8_t debug_ops;
uint8_t pin_num;
uint32_t start;
uint32_t size;
} __attribute__((packed)) firmware_config_t; } __attribute__((packed)) firmware_config_t;
#endif #endif

View File

@ -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_WPPIN 0 # Specify the write protect pin number
set NAND_BLOCKPERCHIP 4096 # Specify the block number per chip,0 means ignore 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 rebuildcfg

11
shell.c
View File

@ -304,7 +304,7 @@ static int builtin_source(int argc, char *argv[]) {
int ret = shell_source(argv[1]); int ret = shell_source(argv[1]);
if(ret == -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; shell_exit = 0;
@ -320,14 +320,9 @@ static int builtin_echo(int argc, char *argv[]) {
} }
for(int i = 1; i < argc; i++) { for(int i = 1; i < argc; i++) {
printf("%s", argv[i]); fputs(argv[i], stdout);
if(i < argc - 1) { putchar((i < argc - 1) ? ' ' : '\n');
printf(" ");
} else {
printf("\n");
}
} }
return 0; return 0;

View File

@ -36,14 +36,19 @@ const shell_command_t spl_cmdset[] = {
{ NULL, NULL, NULL } { 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) { if(cfg_getenv("STAGE1_FILE") == NULL) {
printf("Variable STAGE1_FILE is not set\n"); printf("Variable STAGE1_FILE is not set\n");
return -1; 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[]) { static int spl_memtest(int argc, char *argv[]) {
@ -51,7 +56,7 @@ static int spl_memtest(int argc, char *argv[]) {
printf("Usage: %s [BASE <SIZE>]\n", argv[0]); printf("Usage: %s [BASE <SIZE>]\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[]) { static int spl_gpio(int argc, char *argv[]) {
@ -62,30 +67,7 @@ static int spl_gpio(int argc, char *argv[]) {
return -1; return -1;
} }
char *old_debugops = strdup(cfg_getenv("DEBUGOPS")), return spl_stage1_op(!strcmp(argv[2], "1") ? STAGE1_DEBUG_GPIO_SET : STAGE1_DEBUG_GPIO_CLEAR, atoi(argv[1]), 0, 0);
*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;
} }
static int spl_boot(int argc, char *argv[]) { 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]); printf("Usage: %s\n", argv[0]);
} }
int ret; int ret = spl_stage1_op(STAGE1_DEBUG_BOOT, 0, 0, 0);
ret = spl_load_stage1();
if(ret == -1) if(ret == -1)
return -1; return -1;
@ -106,5 +86,11 @@ static int spl_boot(int argc, char *argv[]) {
return -1; 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;
} }