mirror of
git://projects.qi-hardware.com/xburst-tools.git
synced 2024-11-22 14:19:40 +02:00
cleanup output, fix not exit when error
This commit is contained in:
parent
3e030a84f8
commit
5fd478b936
@ -222,12 +222,14 @@ int nand_program_check(struct nand_in *nand_in,
|
||||
unsigned int *start_page)
|
||||
{
|
||||
unsigned int i, page_num, cur_page = -1;
|
||||
unsigned int start_addr;
|
||||
unsigned short temp;
|
||||
int status = -1;
|
||||
|
||||
printf(" Writing NAND page %d len %d...\n", nand_in->start, nand_in->length);
|
||||
if (nand_in->length > (unsigned int)MAX_TRANSFER_SIZE) {
|
||||
printf(" Buffer size too long!\n");
|
||||
return -1;
|
||||
goto err;
|
||||
}
|
||||
|
||||
#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 */
|
||||
#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");
|
||||
return -1;
|
||||
goto err;
|
||||
}
|
||||
|
||||
ingenic_dev.file_buff = nand_in->buf;
|
||||
ingenic_dev.file_len = nand_in->length;
|
||||
usb_send_data_to_ingenic(&ingenic_dev);
|
||||
for (i = 0; i < nand_in->max_chip; i++) {
|
||||
if ((nand_in->cs_map)[i]==0)
|
||||
if ((nand_in->cs_map)[i] == 0)
|
||||
continue;
|
||||
if (nand_in->option == NO_OOB) {
|
||||
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) +
|
||||
((i<<4) & 0xff0) + NAND_PROGRAM;
|
||||
usb_send_data_address_to_ingenic(&ingenic_dev, nand_in->start);
|
||||
usb_send_data_length_to_ingenic(&ingenic_dev, page_num);
|
||||
usb_ingenic_nand_ops(&ingenic_dev, temp);
|
||||
if (usb_send_data_address_to_ingenic(&ingenic_dev, nand_in->start) != 1)
|
||||
goto err;
|
||||
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",
|
||||
nand_in->length, nand_in->start, page_num);
|
||||
|
||||
usb_send_data_address_to_ingenic(&ingenic_dev, nand_in->start);
|
||||
/* 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);
|
||||
|
||||
switch (nand_in->option) {
|
||||
case OOB_ECC:
|
||||
temp = ((OOB_ECC << 12) & 0xf000) +
|
||||
((i << 4) & 0xff0) + NAND_READ;
|
||||
usb_ingenic_nand_ops(&ingenic_dev, temp);
|
||||
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);
|
||||
start_addr = page_num * (hand.nand_ps + hand.nand_os);
|
||||
break;
|
||||
case OOB_NO_ECC: /* do not support data verify */
|
||||
temp = ((OOB_NO_ECC << 12) & 0xf000) +
|
||||
((i << 4) & 0xff0) + NAND_READ;
|
||||
usb_ingenic_nand_ops(&ingenic_dev, temp);
|
||||
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);
|
||||
start_addr = page_num * (hand.nand_ps + hand.nand_os);
|
||||
break;
|
||||
case NO_OOB:
|
||||
temp = ((NO_OOB << 12) & 0xf000) +
|
||||
((i << 4) & 0xff0) + NAND_READ;
|
||||
usb_ingenic_nand_ops(&ingenic_dev, temp);
|
||||
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);
|
||||
start_addr = page_num * hand.nand_ps;
|
||||
break;
|
||||
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) |
|
||||
(ret[0] << 0);
|
||||
|
||||
@ -329,11 +330,14 @@ int nand_program_check(struct nand_in *nand_in,
|
||||
nand_markbad(&bad);
|
||||
}
|
||||
|
||||
printf(" End at Page: %d\n",cur_page);
|
||||
printf(" End at Page: %d\n", cur_page);
|
||||
}
|
||||
|
||||
*start_page = cur_page;
|
||||
return 0;
|
||||
|
||||
status = 1;
|
||||
err:
|
||||
return status;
|
||||
}
|
||||
|
||||
int nand_erase(struct nand_in *nand_in)
|
||||
@ -551,6 +555,7 @@ int init_nand_in(void)
|
||||
|
||||
int nand_prog(void)
|
||||
{
|
||||
int status = -1;
|
||||
char *image_file;
|
||||
char *help = " Usage: nprog (1) (2) (3) (4) (5)\n"
|
||||
" (1)\tstart page number\n"
|
||||
@ -595,7 +600,9 @@ int nand_prog(void)
|
||||
printf(" %d", (nand_out.status)[i]);
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
status = 1;
|
||||
err:
|
||||
return status;
|
||||
}
|
||||
|
||||
int nand_query(void)
|
||||
|
@ -166,12 +166,12 @@ int usb_get_ingenic_cpu(struct ingenic_dev *ingenic_dev)
|
||||
ingenic_dev->cpu_info_buff[8] = '\0';
|
||||
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,"JZ4750V1")) return 2;
|
||||
if (!strcmp(ingenic_dev->cpu_info_buff,"Boot4740")) return 3;
|
||||
if (!strcmp(ingenic_dev->cpu_info_buff,"Boot4750")) return 4;
|
||||
if (!strcmp(ingenic_dev->cpu_info_buff,"JZ4740V1")) return JZ4740V1;
|
||||
if (!strcmp(ingenic_dev->cpu_info_buff,"JZ4750V1")) return JZ4750V1;
|
||||
if (!strcmp(ingenic_dev->cpu_info_buff,"Boot4740")) return BOOT4740;
|
||||
if (!strcmp(ingenic_dev->cpu_info_buff,"Boot4750")) return BOOT4750;
|
||||
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int usb_ingenic_flush_cache(struct ingenic_dev *ingenic_dev)
|
||||
|
@ -37,11 +37,16 @@
|
||||
#define VR_CONFIGRATION 0x09
|
||||
#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_LSB(addr) ((addr) & 0xffff)
|
||||
|
||||
#define USB_PACKET_SIZE 512
|
||||
#define USB_TIMEOUT 5000
|
||||
#define USB_PACKET_SIZE 512
|
||||
#define USB_TIMEOUT 5000
|
||||
|
||||
#define VENDOR_ID 0x601a
|
||||
#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);
|
||||
|
||||
#endif /* __INGENIC_USB_H__ */
|
||||
|
||||
|
@ -83,13 +83,6 @@ void config_hand()
|
||||
Hand.nand_eccpos=hand_p->nand_eccpos;
|
||||
Hand.nand_bbpos=hand_p->nand_bbpos;
|
||||
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.ext_clk);
|
||||
#endif
|
||||
@ -98,11 +91,12 @@ void config_hand()
|
||||
int GET_CUP_INFO_Handle()
|
||||
{
|
||||
char temp1[8]="Boot4740",temp2[8]="Boot4750";
|
||||
dprintf("\n GET_CPU_INFO!");
|
||||
if ( Hand.fw_args.cpu_id == 0x4740 )
|
||||
HW_SendPKT(0,temp1,8);
|
||||
dprintf("\n GET_CPU_INFO:\t");
|
||||
serial_put_hex(Hand.fw_args.cpu_id);
|
||||
if (Hand.fw_args.cpu_id == 0x4740)
|
||||
HW_SendPKT(0, temp1, 8);
|
||||
else
|
||||
HW_SendPKT(0,temp2,8);
|
||||
HW_SendPKT(0, temp2, 8);
|
||||
udc_state = IDLE;
|
||||
return ERR_OK;
|
||||
}
|
||||
@ -111,7 +105,7 @@ int SET_DATA_ADDERSS_Handle(u8 *buf)
|
||||
{
|
||||
USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf;
|
||||
start_addr=(((u32)dreq->wValue)<<16)+(u32)dreq->wIndex;
|
||||
dprintf("\n SET ADDRESS:");
|
||||
dprintf("\n SET ADDRESS:\t");
|
||||
serial_put_hex(start_addr);
|
||||
return ERR_OK;
|
||||
}
|
||||
@ -120,7 +114,7 @@ int SET_DATA_LENGTH_Handle(u8 *buf)
|
||||
{
|
||||
USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf;
|
||||
ops_length=(((u32)dreq->wValue)<<16)+(u32)dreq->wIndex;
|
||||
dprintf("\n DATA_LENGTH :");
|
||||
dprintf("\n DATA_LENGTH:\t");
|
||||
serial_put_hex(ops_length);
|
||||
return ERR_OK;
|
||||
}
|
||||
@ -219,20 +213,18 @@ int NAND_OPS_Handle(u8 *buf)
|
||||
}
|
||||
break;
|
||||
case NAND_ERASE:
|
||||
dprintf("\n Request : NAND_ERASE!");
|
||||
dprintf("\n Request : NAND_ERASE");
|
||||
ret_dat = nand_erase(ops_length,start_addr,
|
||||
Hand.nand_force_erase);
|
||||
handshake_PKT[0] = (u16) ret_dat;
|
||||
handshake_PKT[1] = (u16) (ret_dat>>16);
|
||||
HW_SendPKT(1,handshake_PKT,sizeof(handshake_PKT));
|
||||
udc_state = IDLE;
|
||||
dprintf("\n Request : NAND_ERASE_FINISH!");
|
||||
dprintf(" ... finished.");
|
||||
break;
|
||||
case NAND_READ:
|
||||
dprintf("\n Request : NAND_READ!");
|
||||
// dprintf("\n Option : %x",option);
|
||||
switch (option)
|
||||
{
|
||||
switch (option) {
|
||||
case OOB_ECC:
|
||||
ret_dat = nand_read(Bulk_in_buf,start_addr,ops_length,OOB_ECC);
|
||||
handshake_PKT[0] = (u16) ret_dat;
|
||||
@ -255,21 +247,20 @@ int NAND_OPS_Handle(u8 *buf)
|
||||
udc_state = BULK_IN;
|
||||
break;
|
||||
}
|
||||
dprintf("\n Request : NAND_READ_FUNISH!");
|
||||
dprintf(" ... finished.");
|
||||
break;
|
||||
case NAND_PROGRAM:
|
||||
dprintf("\n Request : NAND_PROGRAM!");
|
||||
// dprintf("\n Option : %x",option);
|
||||
ret_dat = nand_program((void *)Bulk_out_buf,
|
||||
start_addr,ops_length,option);
|
||||
dprintf("\n NAND_PROGRAM finish!");
|
||||
handshake_PKT[0] = (u16) ret_dat;
|
||||
handshake_PKT[1] = (u16) (ret_dat>>16);
|
||||
HW_SendPKT(1,handshake_PKT,sizeof(handshake_PKT));
|
||||
udc_state = IDLE;
|
||||
dprintf(" ... finished.");
|
||||
break;
|
||||
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);
|
||||
__dcache_writeback_all();
|
||||
handshake_PKT[3]=(u16)ERR_OK;
|
||||
@ -293,7 +284,7 @@ int SDRAM_OPS_Handle(u8 *buf)
|
||||
switch ((dreq->wValue)&0xf)
|
||||
{
|
||||
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);
|
||||
handshake_PKT[0] = (u16) ret_dat;
|
||||
handshake_PKT[1] = (u16) (ret_dat>>16);
|
||||
@ -312,16 +303,10 @@ void Borad_Init()
|
||||
{
|
||||
case 0x4740:
|
||||
//Init nand flash
|
||||
nand_init_4740(Hand.nand_bw,Hand.nand_rc,Hand.nand_ps,Hand.nand_ppb,
|
||||
Hand.nand_bbpage,Hand.nand_bbpos,Hand.nand_force_erase,Hand.nand_eccpos);
|
||||
nand_init_4740(Hand.nand_bw, Hand.nand_rc, Hand.nand_ps,
|
||||
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_erase = nand_erase_4740;
|
||||
nand_read = nand_read_4740;
|
||||
@ -355,21 +340,23 @@ void Borad_Init()
|
||||
|
||||
int CONFIGRATION_Handle(u8 *buf)
|
||||
{
|
||||
dprintf("\n Configuration:\t");
|
||||
|
||||
USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf;
|
||||
switch ((dreq->wValue)&0xf)
|
||||
{
|
||||
switch ((dreq->wValue)&0xf) {
|
||||
case DS_flash_info:
|
||||
dprintf("\n configration :DS_flash_info_t!");
|
||||
dprintf("DS_flash_info_t!");
|
||||
config_flash_info();
|
||||
break;
|
||||
|
||||
case DS_hand:
|
||||
dprintf("\n configration :DS_hand_t!");
|
||||
dprintf("DS_hand_t!");
|
||||
config_hand();
|
||||
break;
|
||||
default:;
|
||||
|
||||
default:
|
||||
;
|
||||
}
|
||||
|
||||
Borad_Init();
|
||||
return ERR_OK;
|
||||
}
|
||||
|
@ -57,11 +57,11 @@ void c_main(void)
|
||||
if ( fw_args->use_uart > 3 ) fw_args->use_uart = 0;
|
||||
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_puts("Address offset is:");
|
||||
serial_puts("\n Address offset is:\t");
|
||||
serial_put_hex(offset);
|
||||
serial_puts("GOT correct to :");
|
||||
serial_puts("\n GOT correct to :\t");
|
||||
serial_put_hex(got_start);
|
||||
|
||||
usb_main();
|
||||
|
@ -89,9 +89,9 @@ void serial_init(void)
|
||||
|
||||
void serial_put_hex(unsigned int d)
|
||||
{
|
||||
unsigned char c[12];
|
||||
unsigned char c[9];
|
||||
char i;
|
||||
for(i = 0; i < 8;i++)
|
||||
for(i = 0; i < 8; i++)
|
||||
{
|
||||
c[i] = (d >> ((7 - i) * 4)) & 0xf;
|
||||
if(c[i] < 10)
|
||||
@ -99,7 +99,9 @@ void serial_put_hex(unsigned int d)
|
||||
else
|
||||
c[i] += (0x41 - 10);
|
||||
}
|
||||
c[8] = '\n';
|
||||
c[9] = 0;
|
||||
|
||||
c[8] = 0;
|
||||
|
||||
serial_puts("0x");
|
||||
serial_puts(c);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user