1
0
mirror of git://projects.qi-hardware.com/xburst-tools.git synced 2024-11-01 08:29:41 +02:00

usbboot: fix hand.fw_args.cpu_id have wrong value when there is no 'boot' in commands

This commit is contained in:
Xiangfu Liu 2011-05-27 21:12:02 +08:00
parent b8420d20e1
commit 1d7a2f3f56

View File

@ -97,11 +97,44 @@ out:
return res;
}
int get_ingenic_cpu()
{
int status;
status = usb_get_ingenic_cpu(&ingenic_dev);
switch (status) {
case JZ4740V1:
hand.fw_args.cpu_id = 0x4740;
break;
case JZ4750V1:
hand.fw_args.cpu_id = 0x4750;
break;
case JZ4760V1:
hand.fw_args.cpu_id = 0x4760;
break;
case BOOT4740:
hand.fw_args.cpu_id = 0x4740;
break;
case BOOT4750:
hand.fw_args.cpu_id = 0x4750;
break;
case BOOT4760:
hand.fw_args.cpu_id = 0x4760;
break;
default:
hand.fw_args.cpu_id = 0;
}
return status;
}
/* after upload stage2. must init device */
void init_cfg()
{
if (usb_get_ingenic_cpu(&ingenic_dev) < 3) {
printf(" XBurst CPU not booted yet, boot it first!\n");
int cpu = get_ingenic_cpu();
if (cpu != BOOT4740 && cpu != BOOT4750 && cpu != BOOT4760) {
printf(" Device unboot! Boot it first!\n");
return;
}
@ -124,39 +157,9 @@ xout:
}
int boot(char *stage1_path, char *stage2_path){
int status;
int status = get_ingenic_cpu();
status = usb_get_ingenic_cpu(&ingenic_dev);
switch (status) {
case JZ4740V1:
status = 0;
hand.fw_args.cpu_id = 0x4740;
break;
case JZ4750V1:
status = 0;
hand.fw_args.cpu_id = 0x4750;
break;
case JZ4760V1:
status = 0;
hand.fw_args.cpu_id = 0x4760;
break;
case BOOT4740:
status = 1;
hand.fw_args.cpu_id = 0x4740;
break;
case BOOT4750:
status = 1;
hand.fw_args.cpu_id = 0x4750;
break;
case BOOT4760:
status = 1;
hand.fw_args.cpu_id = 0x4760;
break;
default:
return 1;
}
if (status) {
if (status == BOOT4740 || status == BOOT4750 || status == BOOT4760) {
printf(" Already booted.\n");
return 1;
} else {
@ -181,8 +184,10 @@ int boot(char *stage1_path, char *stage2_path){
printf(" Booted successfully!\n");
}
usleep(100);
init_cfg();
return 1;
}
@ -214,7 +219,8 @@ int error_check(unsigned char *org,unsigned char * obj,unsigned int size)
int nand_markbad(struct nand_in *nand_in)
{
if (usb_get_ingenic_cpu(&ingenic_dev) < 3) {
int cpu = get_ingenic_cpu();
if (cpu != BOOT4740 && cpu != BOOT4750 && cpu != BOOT4760) {
printf(" Device unboot! Boot it first!\n");
return -1;
}
@ -242,7 +248,7 @@ int nand_program_check(struct nand_in *nand_in, unsigned int *start_page)
goto err;
}
int cpu = usb_get_ingenic_cpu(&ingenic_dev);
int cpu = get_ingenic_cpu();
if (cpu != BOOT4740 && cpu != BOOT4750 && cpu != BOOT4760) {
printf(" Device unboot! Boot it first!\n");
goto err;
@ -353,7 +359,8 @@ int nand_erase(struct nand_in *nand_in)
return -1;
}
if (usb_get_ingenic_cpu(&ingenic_dev) < 3) {
int cpu = get_ingenic_cpu();
if (cpu != BOOT4740 && cpu != BOOT4750 && cpu != BOOT4760) {
printf(" Device unboot! Boot it first!\n");
return -1;
}
@ -590,7 +597,8 @@ int nand_query(void)
if (i >= nand_in.max_chip)
return -1;
if (usb_get_ingenic_cpu(&ingenic_dev) < 3) {
int cpu = get_ingenic_cpu();
if (cpu != BOOT4740 && cpu != BOOT4750 && cpu != BOOT4760) {
printf(" Device unboot! Boot it first!\n");
return -1;
}
@ -651,7 +659,8 @@ int nand_read(int mode)
printf(" Page number overflow!\n");
return -1;
}
if (usb_get_ingenic_cpu(&ingenic_dev) < 3) {
int cpu = get_ingenic_cpu();
if (cpu != BOOT4740 && cpu != BOOT4750 && cpu != BOOT4760) {
printf(" Device unboot! Boot it first!\n");
return -1;
}
@ -711,8 +720,8 @@ int debug_memory(int obj, unsigned int start, unsigned int size)
{
unsigned int buffer[8],tmp;
tmp = usb_get_ingenic_cpu(&ingenic_dev);
if (tmp > 2) {
tmp = get_ingenic_cpu();
if (tmp == BOOT4740 || tmp == BOOT4750 || tmp == BOOT4760) {
printf(" This command only run under UNBOOT state!\n");
return -1;
}
@ -759,8 +768,8 @@ int debug_gpio(int obj, unsigned char ops, unsigned char pin)
{
unsigned int tmp;
tmp = usb_get_ingenic_cpu(&ingenic_dev);
if (tmp > 2) {
tmp = get_ingenic_cpu();
if (tmp == BOOT4740 || tmp == BOOT4750 || tmp == BOOT4760) {
printf(" This command only run under UNBOOT state!\n");
return -1;
}
@ -823,7 +832,8 @@ int debug_go(void)
int sdram_load(struct sdram_in *sdram_in)
{
if (usb_get_ingenic_cpu(&ingenic_dev) < 3) {
int cpu = get_ingenic_cpu();
if (cpu != BOOT4740 && cpu != BOOT4750 && cpu != BOOT4760) {
printf(" Device unboot! Boot it first!\n");
return -1;
}
@ -917,7 +927,8 @@ out:
int device_reset(int ops)
{
if (usb_get_ingenic_cpu(&ingenic_dev) < 3) {
int cpu = get_ingenic_cpu();
if (cpu != BOOT4740 && cpu != BOOT4750 && cpu != BOOT4760) {
printf(" Device unboot! Boot it first!\n");
return -1;
}