# HG changeset patch # User Michael Spacefalcon # Date 1402969966 0 # Node ID 431023033c86e5a8cce1b3036263a34440f5dde2 # Parent f2cc551e597fac8ef8a9627c25461dda12b41479 Intel flash: flash status command implemented diff -r f2cc551e597f -r 431023033c86 loadtools/flashops.c --- a/loadtools/flashops.c Tue Jun 17 01:39:59 2014 +0000 +++ b/loadtools/flashops.c Tue Jun 17 01:52:46 2014 +0000 @@ -107,6 +107,27 @@ return(0); } +intel_status_cmd(bi) + struct flash_bank_info *bi; +{ + int stat; + uint16_t sr; + + /* issue Read SR command */ + stat = do_w16(bi->base_addr, 0x70); + if (stat) { + fprintf(stderr, + "unexpected response to w16 for Read SR command\n"); + return(-1); + } + stat = do_r16(bi->base_addr, &sr); + if (stat) + return(stat); /* error msg already printed */ + sr &= 0xFF; + printf("Status Register: %02X\n", sr); + return(0); +} + intel_sector_unlock(bi, sp) struct flash_bank_info *bi; struct sector_info *sp; @@ -174,7 +195,7 @@ struct flash_cmdset flash_cmdset_intel = { .cmdset_name = "Intel", .reset_cmd = intel_reset_cmd, - .status_cmd = invalid, + .status_cmd = intel_status_cmd, .unlock_sector = intel_sector_unlock, .erase_sector = intel_sector_erase, .loadagent_setbase_cmd = "INFB", diff -r f2cc551e597f -r 431023033c86 loadtools/flmain.c --- a/loadtools/flmain.c Tue Jun 17 01:39:59 2014 +0000 +++ b/loadtools/flmain.c Tue Jun 17 01:52:46 2014 +0000 @@ -202,6 +202,7 @@ extern int flashcmd_quickprog(); extern int flashcmd_reset(); extern int flashcmd_sectors(); +extern int flashcmd_status(); static struct cmdtab { char *cmd; @@ -219,6 +220,7 @@ {"quickprog", flashcmd_quickprog}, {"reset", flashcmd_reset}, {"sectors", flashcmd_sectors}, + {"status", flashcmd_status}, {0, 0} }; diff -r f2cc551e597f -r 431023033c86 loadtools/flmisc.c --- a/loadtools/flmisc.c Tue Jun 17 01:39:59 2014 +0000 +++ b/loadtools/flmisc.c Tue Jun 17 01:52:46 2014 +0000 @@ -233,3 +233,18 @@ bi = flash_bank_info + bank; return bi->ops->reset_cmd(bi); } + +flashcmd_status(argc, argv, bank) + char **argv; +{ + struct flash_bank_info *bi; + + if (argc > 2) { + fprintf(stderr, "error: too many arguments\n"); + return(-1); + } + if (flash_get_cfi(bank) < 0) + return(-1); + bi = flash_bank_info + bank; + return bi->ops->status_cmd(bi); +}