1
0
mirror of git://projects.qi-hardware.com/xburst-tools.git synced 2024-11-01 10:15:19 +02:00

cleanup output, fix not exit when error

This commit is contained in:
Xiangfu Liu 2009-09-30 23:47:29 -04:00 committed by xiangfu
parent 3e030a84f8
commit 5fd478b936
6 changed files with 80 additions and 80 deletions

View File

@ -222,12 +222,14 @@ int nand_program_check(struct nand_in *nand_in,
unsigned int *start_page) unsigned int *start_page)
{ {
unsigned int i, page_num, cur_page = -1; unsigned int i, page_num, cur_page = -1;
unsigned int start_addr;
unsigned short temp; unsigned short temp;
int status = -1;
printf(" Writing NAND page %d len %d...\n", nand_in->start, nand_in->length); printf(" Writing NAND page %d len %d...\n", nand_in->start, nand_in->length);
if (nand_in->length > (unsigned int)MAX_TRANSFER_SIZE) { if (nand_in->length > (unsigned int)MAX_TRANSFER_SIZE) {
printf(" Buffer size too long!\n"); printf(" Buffer size too long!\n");
return -1; goto err;
} }
#ifdef CONFIG_NAND_OUT #ifdef CONFIG_NAND_OUT
@ -237,15 +239,17 @@ int nand_program_check(struct nand_in *nand_in,
(nand_out->status)[i] = 0; /* set all status to fail */ (nand_out->status)[i] = 0; /* set all status to fail */
#endif #endif
if (usb_get_ingenic_cpu(&ingenic_dev) < 3) { int cpu = usb_get_ingenic_cpu(&ingenic_dev);
if (cpu != BOOT4740 && cpu != BOOT4750) {
printf(" Device unboot! Boot it first!\n"); printf(" Device unboot! Boot it first!\n");
return -1; goto err;
} }
ingenic_dev.file_buff = nand_in->buf; ingenic_dev.file_buff = nand_in->buf;
ingenic_dev.file_len = nand_in->length; ingenic_dev.file_len = nand_in->length;
usb_send_data_to_ingenic(&ingenic_dev); usb_send_data_to_ingenic(&ingenic_dev);
for (i = 0; i < nand_in->max_chip; i++) { for (i = 0; i < nand_in->max_chip; i++) {
if ((nand_in->cs_map)[i]==0) if ((nand_in->cs_map)[i] == 0)
continue; continue;
if (nand_in->option == NO_OOB) { if (nand_in->option == NO_OOB) {
page_num = nand_in->length / hand.nand_ps; page_num = nand_in->length / hand.nand_ps;
@ -259,50 +263,47 @@ int nand_program_check(struct nand_in *nand_in,
} }
temp = ((nand_in->option << 12) & 0xf000) + temp = ((nand_in->option << 12) & 0xf000) +
((i<<4) & 0xff0) + NAND_PROGRAM; ((i<<4) & 0xff0) + NAND_PROGRAM;
usb_send_data_address_to_ingenic(&ingenic_dev, nand_in->start); if (usb_send_data_address_to_ingenic(&ingenic_dev, nand_in->start) != 1)
usb_send_data_length_to_ingenic(&ingenic_dev, page_num); goto err;
usb_ingenic_nand_ops(&ingenic_dev, temp); if (usb_send_data_length_to_ingenic(&ingenic_dev, page_num) != 1)
goto err;
if (usb_ingenic_nand_ops(&ingenic_dev, temp) != 1)
goto err;
if (usb_read_data_from_ingenic(&ingenic_dev, ret, 8) != 1)
goto err;
usb_read_data_from_ingenic(&ingenic_dev, ret, 8);
printf(" Finish! (len %d start_page %d page_num %d)\n", printf(" Finish! (len %d start_page %d page_num %d)\n",
nand_in->length, nand_in->start, page_num); nand_in->length, nand_in->start, page_num);
usb_send_data_address_to_ingenic(&ingenic_dev, nand_in->start);
/* Read back to check! */ /* Read back to check! */
usb_send_data_address_to_ingenic(&ingenic_dev, nand_in->start);
usb_send_data_length_to_ingenic(&ingenic_dev, page_num); usb_send_data_length_to_ingenic(&ingenic_dev, page_num);
switch (nand_in->option) { switch (nand_in->option) {
case OOB_ECC: case OOB_ECC:
temp = ((OOB_ECC << 12) & 0xf000) + temp = ((OOB_ECC << 12) & 0xf000) +
((i << 4) & 0xff0) + NAND_READ; ((i << 4) & 0xff0) + NAND_READ;
usb_ingenic_nand_ops(&ingenic_dev, temp); start_addr = page_num * (hand.nand_ps + hand.nand_os);
printf(" Checking %d bytes...", nand_in->length);
usb_read_data_from_ingenic(&ingenic_dev, check_buf,
page_num * (hand.nand_ps + hand.nand_os));
usb_read_data_from_ingenic(&ingenic_dev, ret, 8);
break; break;
case OOB_NO_ECC: /* do not support data verify */ case OOB_NO_ECC: /* do not support data verify */
temp = ((OOB_NO_ECC << 12) & 0xf000) + temp = ((OOB_NO_ECC << 12) & 0xf000) +
((i << 4) & 0xff0) + NAND_READ; ((i << 4) & 0xff0) + NAND_READ;
usb_ingenic_nand_ops(&ingenic_dev, temp); start_addr = page_num * (hand.nand_ps + hand.nand_os);
printf(" Checking %d bytes...", nand_in->length);
usb_read_data_from_ingenic(&ingenic_dev, check_buf,
page_num * (hand.nand_ps + hand.nand_os));
usb_read_data_from_ingenic(&ingenic_dev, ret, 8);
break; break;
case NO_OOB: case NO_OOB:
temp = ((NO_OOB << 12) & 0xf000) + temp = ((NO_OOB << 12) & 0xf000) +
((i << 4) & 0xff0) + NAND_READ; ((i << 4) & 0xff0) + NAND_READ;
usb_ingenic_nand_ops(&ingenic_dev, temp); start_addr = page_num * hand.nand_ps;
printf(" Checking %d bytes...", nand_in->length);
usb_read_data_from_ingenic(&ingenic_dev, check_buf,
page_num * hand.nand_ps);
usb_read_data_from_ingenic(&ingenic_dev, ret, 8);
break; break;
default: default:
; ;
} }
printf(" Checking %d bytes...", nand_in->length);
usb_ingenic_nand_ops(&ingenic_dev, temp);
usb_read_data_from_ingenic(&ingenic_dev, check_buf, start_addr);
usb_read_data_from_ingenic(&ingenic_dev, ret, 8);
cur_page = (ret[3] << 24) | (ret[2] << 16) | (ret[1] << 8) | cur_page = (ret[3] << 24) | (ret[2] << 16) | (ret[1] << 8) |
(ret[0] << 0); (ret[0] << 0);
@ -329,11 +330,14 @@ int nand_program_check(struct nand_in *nand_in,
nand_markbad(&bad); nand_markbad(&bad);
} }
printf(" End at Page: %d\n",cur_page); printf(" End at Page: %d\n", cur_page);
} }
*start_page = cur_page; *start_page = cur_page;
return 0;
status = 1;
err:
return status;
} }
int nand_erase(struct nand_in *nand_in) int nand_erase(struct nand_in *nand_in)
@ -551,6 +555,7 @@ int init_nand_in(void)
int nand_prog(void) int nand_prog(void)
{ {
int status = -1;
char *image_file; char *image_file;
char *help = " Usage: nprog (1) (2) (3) (4) (5)\n" char *help = " Usage: nprog (1) (2) (3) (4) (5)\n"
" (1)\tstart page number\n" " (1)\tstart page number\n"
@ -595,7 +600,9 @@ int nand_prog(void)
printf(" %d", (nand_out.status)[i]); printf(" %d", (nand_out.status)[i]);
#endif #endif
return 1; status = 1;
err:
return status;
} }
int nand_query(void) int nand_query(void)

View File

@ -166,12 +166,12 @@ int usb_get_ingenic_cpu(struct ingenic_dev *ingenic_dev)
ingenic_dev->cpu_info_buff[8] = '\0'; ingenic_dev->cpu_info_buff[8] = '\0';
printf(" CPU data: %s\n", ingenic_dev->cpu_info_buff); printf(" CPU data: %s\n", ingenic_dev->cpu_info_buff);
if (!strcmp(ingenic_dev->cpu_info_buff,"JZ4740V1")) return 1; if (!strcmp(ingenic_dev->cpu_info_buff,"JZ4740V1")) return JZ4740V1;
if (!strcmp(ingenic_dev->cpu_info_buff,"JZ4750V1")) return 2; if (!strcmp(ingenic_dev->cpu_info_buff,"JZ4750V1")) return JZ4750V1;
if (!strcmp(ingenic_dev->cpu_info_buff,"Boot4740")) return 3; if (!strcmp(ingenic_dev->cpu_info_buff,"Boot4740")) return BOOT4740;
if (!strcmp(ingenic_dev->cpu_info_buff,"Boot4750")) return 4; if (!strcmp(ingenic_dev->cpu_info_buff,"Boot4750")) return BOOT4750;
return 0; return -1;
} }
int usb_ingenic_flush_cache(struct ingenic_dev *ingenic_dev) int usb_ingenic_flush_cache(struct ingenic_dev *ingenic_dev)

View File

@ -37,11 +37,16 @@
#define VR_CONFIGRATION 0x09 #define VR_CONFIGRATION 0x09
#define VR_GET_NUM 0x0a #define VR_GET_NUM 0x0a
#define JZ4740V1 1
#define JZ4750V1 2
#define BOOT4740 3
#define BOOT4750 4
#define STAGE_ADDR_MSB(addr) ((addr) >> 16) #define STAGE_ADDR_MSB(addr) ((addr) >> 16)
#define STAGE_ADDR_LSB(addr) ((addr) & 0xffff) #define STAGE_ADDR_LSB(addr) ((addr) & 0xffff)
#define USB_PACKET_SIZE 512 #define USB_PACKET_SIZE 512
#define USB_TIMEOUT 5000 #define USB_TIMEOUT 5000
#define VENDOR_ID 0x601a #define VENDOR_ID 0x601a
#define PRODUCT_ID 0x4740 #define PRODUCT_ID 0x4740
@ -73,4 +78,3 @@ int usb_ingenic_nand_ops(struct ingenic_dev *ingenic_dev, int ops);
int usb_read_data_from_ingenic(struct ingenic_dev *ingenic_dev,unsigned char *buff, unsigned int len); int usb_read_data_from_ingenic(struct ingenic_dev *ingenic_dev,unsigned char *buff, unsigned int len);
#endif /* __INGENIC_USB_H__ */ #endif /* __INGENIC_USB_H__ */

View File

@ -83,13 +83,6 @@ void config_hand()
Hand.nand_eccpos=hand_p->nand_eccpos; Hand.nand_eccpos=hand_p->nand_eccpos;
Hand.nand_bbpos=hand_p->nand_bbpos; Hand.nand_bbpos=hand_p->nand_bbpos;
Hand.nand_bbpage=hand_p->nand_bbpage; Hand.nand_bbpage=hand_p->nand_bbpage;
// memcpy( &Hand.fw_args, (unsigned char *)(start_addr + 0x8), 32 );
// serial_putc(Hand.nand_eccpos + 48);
// serial_putc(Hand.nand_bbpos + 48);
// serial_putc(Hand.nand_bbpage + 48);
/* dprintf("\n Hand : bw %d rc %d ps %d ppb %d erase %d pn %d os %d", */
/* Hand.nand_bw,Hand.nand_rc,Hand.nand_ps,Hand.nand_ppb,Hand.nand_force_erase,Hand.nand_pn,Hand.nand_os); */
serial_put_hex(Hand.fw_args.cpu_id); serial_put_hex(Hand.fw_args.cpu_id);
serial_put_hex(Hand.fw_args.ext_clk); serial_put_hex(Hand.fw_args.ext_clk);
#endif #endif
@ -98,11 +91,12 @@ void config_hand()
int GET_CUP_INFO_Handle() int GET_CUP_INFO_Handle()
{ {
char temp1[8]="Boot4740",temp2[8]="Boot4750"; char temp1[8]="Boot4740",temp2[8]="Boot4750";
dprintf("\n GET_CPU_INFO!"); dprintf("\n GET_CPU_INFO:\t");
if ( Hand.fw_args.cpu_id == 0x4740 ) serial_put_hex(Hand.fw_args.cpu_id);
HW_SendPKT(0,temp1,8); if (Hand.fw_args.cpu_id == 0x4740)
HW_SendPKT(0, temp1, 8);
else else
HW_SendPKT(0,temp2,8); HW_SendPKT(0, temp2, 8);
udc_state = IDLE; udc_state = IDLE;
return ERR_OK; return ERR_OK;
} }
@ -111,7 +105,7 @@ int SET_DATA_ADDERSS_Handle(u8 *buf)
{ {
USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf; USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf;
start_addr=(((u32)dreq->wValue)<<16)+(u32)dreq->wIndex; start_addr=(((u32)dreq->wValue)<<16)+(u32)dreq->wIndex;
dprintf("\n SET ADDRESS:"); dprintf("\n SET ADDRESS:\t");
serial_put_hex(start_addr); serial_put_hex(start_addr);
return ERR_OK; return ERR_OK;
} }
@ -120,7 +114,7 @@ int SET_DATA_LENGTH_Handle(u8 *buf)
{ {
USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf; USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf;
ops_length=(((u32)dreq->wValue)<<16)+(u32)dreq->wIndex; ops_length=(((u32)dreq->wValue)<<16)+(u32)dreq->wIndex;
dprintf("\n DATA_LENGTH :"); dprintf("\n DATA_LENGTH:\t");
serial_put_hex(ops_length); serial_put_hex(ops_length);
return ERR_OK; return ERR_OK;
} }
@ -219,20 +213,18 @@ int NAND_OPS_Handle(u8 *buf)
} }
break; break;
case NAND_ERASE: case NAND_ERASE:
dprintf("\n Request : NAND_ERASE!"); dprintf("\n Request : NAND_ERASE");
ret_dat = nand_erase(ops_length,start_addr, ret_dat = nand_erase(ops_length,start_addr,
Hand.nand_force_erase); Hand.nand_force_erase);
handshake_PKT[0] = (u16) ret_dat; handshake_PKT[0] = (u16) ret_dat;
handshake_PKT[1] = (u16) (ret_dat>>16); handshake_PKT[1] = (u16) (ret_dat>>16);
HW_SendPKT(1,handshake_PKT,sizeof(handshake_PKT)); HW_SendPKT(1,handshake_PKT,sizeof(handshake_PKT));
udc_state = IDLE; udc_state = IDLE;
dprintf("\n Request : NAND_ERASE_FINISH!"); dprintf(" ... finished.");
break; break;
case NAND_READ: case NAND_READ:
dprintf("\n Request : NAND_READ!"); dprintf("\n Request : NAND_READ!");
// dprintf("\n Option : %x",option); switch (option) {
switch (option)
{
case OOB_ECC: case OOB_ECC:
ret_dat = nand_read(Bulk_in_buf,start_addr,ops_length,OOB_ECC); ret_dat = nand_read(Bulk_in_buf,start_addr,ops_length,OOB_ECC);
handshake_PKT[0] = (u16) ret_dat; handshake_PKT[0] = (u16) ret_dat;
@ -255,21 +247,20 @@ int NAND_OPS_Handle(u8 *buf)
udc_state = BULK_IN; udc_state = BULK_IN;
break; break;
} }
dprintf("\n Request : NAND_READ_FUNISH!"); dprintf(" ... finished.");
break; break;
case NAND_PROGRAM: case NAND_PROGRAM:
dprintf("\n Request : NAND_PROGRAM!"); dprintf("\n Request : NAND_PROGRAM!");
// dprintf("\n Option : %x",option);
ret_dat = nand_program((void *)Bulk_out_buf, ret_dat = nand_program((void *)Bulk_out_buf,
start_addr,ops_length,option); start_addr,ops_length,option);
dprintf("\n NAND_PROGRAM finish!");
handshake_PKT[0] = (u16) ret_dat; handshake_PKT[0] = (u16) ret_dat;
handshake_PKT[1] = (u16) (ret_dat>>16); handshake_PKT[1] = (u16) (ret_dat>>16);
HW_SendPKT(1,handshake_PKT,sizeof(handshake_PKT)); HW_SendPKT(1,handshake_PKT,sizeof(handshake_PKT));
udc_state = IDLE; udc_state = IDLE;
dprintf(" ... finished.");
break; break;
case NAND_READ_TO_RAM: case NAND_READ_TO_RAM:
dprintf("\n Request : NAND_READNAND!"); dprintf("\n Request : NAND_READ_TO_RAM!");
nand_read((u8 *)ram_addr,start_addr,ops_length,NO_OOB); nand_read((u8 *)ram_addr,start_addr,ops_length,NO_OOB);
__dcache_writeback_all(); __dcache_writeback_all();
handshake_PKT[3]=(u16)ERR_OK; handshake_PKT[3]=(u16)ERR_OK;
@ -293,7 +284,7 @@ int SDRAM_OPS_Handle(u8 *buf)
switch ((dreq->wValue)&0xf) switch ((dreq->wValue)&0xf)
{ {
case SDRAM_LOAD: case SDRAM_LOAD:
// dprintf("\n Request : SDRAM_LOAD!"); //dprintf("\n Request : SDRAM_LOAD!");
ret_dat = (u32)memcpy((u8 *)start_addr,Bulk_out_buf,ops_length); ret_dat = (u32)memcpy((u8 *)start_addr,Bulk_out_buf,ops_length);
handshake_PKT[0] = (u16) ret_dat; handshake_PKT[0] = (u16) ret_dat;
handshake_PKT[1] = (u16) (ret_dat>>16); handshake_PKT[1] = (u16) (ret_dat>>16);
@ -312,16 +303,10 @@ void Borad_Init()
{ {
case 0x4740: case 0x4740:
//Init nand flash //Init nand flash
nand_init_4740(Hand.nand_bw,Hand.nand_rc,Hand.nand_ps,Hand.nand_ppb, nand_init_4740(Hand.nand_bw, Hand.nand_rc, Hand.nand_ps,
Hand.nand_bbpage,Hand.nand_bbpos,Hand.nand_force_erase,Hand.nand_eccpos); Hand.nand_ppb, Hand.nand_bbpage, Hand.nand_bbpos,
Hand.nand_force_erase, Hand.nand_eccpos);
dprintf("\nnand_ps, nand_ppb, nand_bbpage, nand_bbpos, nand_eccpos\n");
serial_put_hex(Hand.nand_ps);
serial_put_hex(Hand.nand_ppb);
serial_put_hex(Hand.nand_bbpage);
serial_put_hex(Hand.nand_bbpos);
serial_put_hex(Hand.nand_eccpos);
nand_program = nand_program_4740; nand_program = nand_program_4740;
nand_erase = nand_erase_4740; nand_erase = nand_erase_4740;
nand_read = nand_read_4740; nand_read = nand_read_4740;
@ -355,21 +340,23 @@ void Borad_Init()
int CONFIGRATION_Handle(u8 *buf) int CONFIGRATION_Handle(u8 *buf)
{ {
dprintf("\n Configuration:\t");
USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf; USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf;
switch ((dreq->wValue)&0xf) switch ((dreq->wValue)&0xf) {
{
case DS_flash_info: case DS_flash_info:
dprintf("\n configration :DS_flash_info_t!"); dprintf("DS_flash_info_t!");
config_flash_info(); config_flash_info();
break; break;
case DS_hand: case DS_hand:
dprintf("\n configration :DS_hand_t!"); dprintf("DS_hand_t!");
config_hand(); config_hand();
break; break;
default:; default:
;
} }
Borad_Init(); Borad_Init();
return ERR_OK; return ERR_OK;
} }

View File

@ -57,11 +57,11 @@ void c_main(void)
if ( fw_args->use_uart > 3 ) fw_args->use_uart = 0; if ( fw_args->use_uart > 3 ) fw_args->use_uart = 0;
UART_BASE = 0xB0030000 + fw_args->use_uart * 0x1000; UART_BASE = 0xB0030000 + fw_args->use_uart * 0x1000;
serial_puts("Start address is :"); serial_puts("\n Stage2 start address is :\t");
serial_put_hex(start_addr); serial_put_hex(start_addr);
serial_puts("Address offset is:"); serial_puts("\n Address offset is:\t");
serial_put_hex(offset); serial_put_hex(offset);
serial_puts("GOT correct to :"); serial_puts("\n GOT correct to :\t");
serial_put_hex(got_start); serial_put_hex(got_start);
usb_main(); usb_main();

View File

@ -89,9 +89,9 @@ void serial_init(void)
void serial_put_hex(unsigned int d) void serial_put_hex(unsigned int d)
{ {
unsigned char c[12]; unsigned char c[9];
char i; char i;
for(i = 0; i < 8;i++) for(i = 0; i < 8; i++)
{ {
c[i] = (d >> ((7 - i) * 4)) & 0xf; c[i] = (d >> ((7 - i) * 4)) & 0xf;
if(c[i] < 10) if(c[i] < 10)
@ -99,7 +99,9 @@ void serial_put_hex(unsigned int d)
else else
c[i] += (0x41 - 10); c[i] += (0x41 - 10);
} }
c[8] = '\n';
c[9] = 0; c[8] = 0;
serial_puts("0x");
serial_puts(c); serial_puts(c);
} }