X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=common%2Fcmd_fdc.c;h=4fe410dd327d5a1b47d48615dd9dd1df9bf33a00;hb=d88af4da9a8d694e2cfd98a2deefedd472817183;hp=486d5d4844790e3dbfefaf1a450d1c320bd48f39;hpb=54841ab50c20d6fa6c9cc3eb826989da3a22d934;p=karo-tx-uboot.git diff --git a/common/cmd_fdc.c b/common/cmd_fdc.c index 486d5d4844..4fe410dd32 100644 --- a/common/cmd_fdc.c +++ b/common/cmd_fdc.c @@ -428,8 +428,8 @@ int fdc_terminate(FDC_COMMAND_STRUCT *pCMD) int fdc_read_data(unsigned char *buffer, unsigned long blocks,FDC_COMMAND_STRUCT *pCMD, FD_GEO_STRUCT *pFG) { /* first seek to start address */ - unsigned long len,lastblk,readblk,i,timeout,ii,offset; - unsigned char pcn,c,retriesrw,retriescal; + unsigned long len,readblk,i,timeout,ii,offset; + unsigned char c,retriesrw,retriescal; unsigned char *bufferw; /* working buffer */ int sect_size; int flags; @@ -442,18 +442,19 @@ int fdc_read_data(unsigned char *buffer, unsigned long blocks,FDC_COMMAND_STRUCT offset=0; if(fdc_seek(pCMD,pFG)==FALSE) { stop_fdc_drive(pCMD); - enable_interrupts(); + if (flags) + enable_interrupts(); return FALSE; } if((pCMD->result[STATUS_0]&0x20)!=0x20) { printf("Seek error Status: %02X\n",pCMD->result[STATUS_0]); stop_fdc_drive(pCMD); - enable_interrupts(); + if (flags) + enable_interrupts(); return FALSE; } - pcn=pCMD->result[STATUS_PCN]; /* current track */ /* now determine the next seek point */ - lastblk=pCMD->blnr + blocks; + /* lastblk=pCMD->blnr + blocks; */ /* readblk=(pFG->head*pFG->sect)-(pCMD->blnr%(pFG->head*pFG->sect)); */ readblk=pFG->sect-(pCMD->blnr%pFG->sect); PRINTF("1st nr of block possible read %ld start %ld\n",readblk,pCMD->blnr); @@ -467,7 +468,8 @@ retryrw: pCMD->cmd[COMMAND]=FDC_CMD_READ; if(fdc_issue_cmd(pCMD,pFG)==FALSE) { stop_fdc_drive(pCMD); - enable_interrupts(); + if (flags) + enable_interrupts(); return FALSE; } for (i=0;iFDC_RW_RETRIES) { if (retriescal++>FDC_CAL_RETRIES) { stop_fdc_drive(pCMD); - enable_interrupts(); + if (flags) + enable_interrupts(); return FALSE; } else { PRINTF(" trying to recalibrate Try %d\n",retriescal); if(fdc_recalibrate(pCMD,pFG)==FALSE) { stop_fdc_drive(pCMD); - enable_interrupts(); + if (flags) + enable_interrupts(); return FALSE; } retriesrw=0; @@ -528,7 +532,8 @@ retrycal: /* a seek is necessary */ if(fdc_seek(pCMD,pFG)==FALSE) { stop_fdc_drive(pCMD); - enable_interrupts(); + if (flags) + enable_interrupts(); return FALSE; } if((pCMD->result[STATUS_0]&0x20)!=0x20) { @@ -536,10 +541,10 @@ retrycal: stop_fdc_drive(pCMD); return FALSE; } - pcn=pCMD->result[STATUS_PCN]; /* current track */ }while(TRUE); /* start over */ stop_fdc_drive(pCMD); /* switch off drive */ - enable_interrupts(); + if (flags) + enable_interrupts(); return TRUE; } @@ -721,8 +726,6 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) image_header_t *hdr; /* used for fdc boot */ unsigned char boot_drive; int i,nrofblk; - char *ep; - int rcode = 0; #if defined(CONFIG_FIT) const void *fit_hdr = NULL; #endif @@ -741,8 +744,7 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) boot_drive=simple_strtoul(argv[2], NULL, 10); break; default: - cmd_usage(cmdtp); - return 1; + return cmd_usage(cmdtp); } /* setup FDC and scan for drives */ if(fdc_setup(boot_drive,pCMD,pFG)==FALSE) { @@ -824,20 +826,7 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) /* Loading ok, update default load address */ load_addr = addr; - /* Check if we should attempt an auto-start */ - if (((ep = getenv("autostart")) != NULL) && (strcmp(ep,"yes") == 0)) { - char *local_args[2]; - extern int do_bootm (cmd_tbl_t *, int, int, char *[]); - - local_args[0] = argv[0]; - local_args[1] = NULL; - - printf ("Automatic boot of image at addr 0x%08lX ...\n", addr); - - do_bootm (cmdtp, 0, 1, local_args); - rcode ++; - } - return rcode; + return bootm_maybe_autostart(cmdtp, argv[0]); } U_BOOT_CMD(