Changeset 1456 for trunk


Ignore:
Timestamp:
10/22/11 23:45:27 (7 months ago)
Author:
stefanct
Message:

serprog: small improvements

  • rename serprog_delay parameter to usecs
  • fix code style, (output) formatting issues and comments
  • sp_docommand: remove unnecessary malloc+memcpy and fix formatting

Signed-off-by: Stefan Tauner <stefan.tauner@…>
Acked-by: Uwe Hermann <uwe@…>

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/programmer.h

    r1450 r1456  
    608608uint8_t serprog_chip_readb(const chipaddr addr); 
    609609void serprog_chip_readn(uint8_t *buf, const chipaddr addr, size_t len); 
    610 void serprog_delay(int delay); 
     610void serprog_delay(int usecs); 
    611611int serprog_spi_send_command(unsigned int writecnt, unsigned int readcnt, 
    612                         const unsigned char *writearr, unsigned char *readarr); 
     612                             const unsigned char *writearr, 
     613                             unsigned char *readarr); 
    613614int serprog_spi_read(struct flashchip *flash, uint8_t *buf, int start, int len); 
    614615#endif 
  • trunk/serprog-protocol.txt

    r1442 r1456  
    20200x06    Query connected address lines   none                            ACK + 8bit line count / NAK 
    21210x07    Query operation buffer size     none                            ACK + 16bit size / NAK 
    22 0x08    Query write-n maximum data len  none                            ACK + 24bit maximum length / NAK 
     220x08    Query maximum write-n length    none                            ACK + 24bit length (0==2^24) / NAK 
    23230x09    Read byte                       24-bit addr                     ACK + BYTE / NAK 
    24240x0A    Read n bytes                    24-bit addr + 24-bit length     ACK + length bytes / NAK 
  • trunk/serprog.c

    r1450 r1456  
    3939#include "chipdrivers.h" 
    4040 
    41 #define MSGHEADER "serprog:" 
     41#define MSGHEADER "serprog: " 
    4242 
    4343/* 
     
    205205                } 
    206206        } 
    207         msg_perr("Error: cannot synchronize protocol\n" 
     207        msg_perr("Error: cannot synchronize protocol " 
    208208                "- check communications and reset device?\n"); 
    209209        exit(1); 
     
    221221{ 
    222222        if ((sp_check_avail_automatic) && (sp_check_commandavail(cmd) == 0)) { 
    223                 msg_pdbg("Warning: Automatic command availability check" 
    224                                 " failed for cmd %d - wont execute cmd\n",cmd); 
     223                msg_pdbg("Warning: Automatic command availability check failed " 
     224                         "for cmd 0x%x - won't execute cmd\n", cmd); 
    225225                return 1; 
    226226                } 
     
    229229 
    230230static int sp_docommand(uint8_t command, uint32_t parmlen, 
    231                              uint8_t * params, uint32_t retlen, void *retparms) 
    232 { 
    233         unsigned char *sendpacket; 
     231                        uint8_t *params, uint32_t retlen, void *retparms) 
     232{ 
    234233        unsigned char c; 
    235234        if (sp_automatic_cmdcheck(command)) 
    236235                return 1; 
    237         sendpacket = malloc(1 + parmlen); 
    238         if (!sendpacket) 
    239                 sp_die("Error: cannot malloc command buffer"); 
    240         sendpacket[0] = command; 
    241         memcpy(&(sendpacket[1]), params, parmlen); 
    242         if (write(sp_fd, sendpacket, 1 + parmlen) != (1 + parmlen)) { 
    243                 sp_die("Error: cannot write command"); 
    244         } 
    245         free(sendpacket); 
     236        if (write(sp_fd, &command, 1) != 1) 
     237                sp_die("Error: cannot write op code"); 
     238        if (write(sp_fd, params, parmlen) != (parmlen)) 
     239                sp_die("Error: cannot write parameters"); 
    246240        if (read(sp_fd, &c, 1) != 1) 
    247241                sp_die("Error: cannot read from device"); 
    248         if (c == S_NAK) return 1; 
     242        if (c == S_NAK) 
     243                return 1; 
    249244        if (c != S_ACK) { 
    250245                msg_perr("Error: invalid response 0x%02X from device\n",c); 
     
    257252                        r = read(sp_fd, retparms + rd_bytes, 
    258253                                 retlen - rd_bytes); 
    259                         if (r <= 0) sp_die 
    260                                     ("Error: cannot read return parameters"); 
     254                        if (r <= 0) 
     255                                sp_die("Error: cannot read return parameters"); 
    261256                        rd_bytes += r; 
    262257                } while (rd_bytes != retlen); 
     
    405400 
    406401        if (sp_docommand(S_CMD_Q_IFACE, 0, NULL, 2, &iface)) { 
    407                 msg_perr("Error: NAK to Query Interface version\n"); 
     402                msg_perr("Error: NAK to query interface version\n"); 
    408403                exit(1); 
    409404        } 
    410405 
    411406        if (iface != 1) { 
    412                 msg_perr("Error: Unknown interface version %d\n", iface); 
     407                msg_perr("Error: Unknown interface version: %d\n", iface); 
    413408                exit(1); 
    414409        } 
     
    429424        } 
    430425        buses_supported = c; 
     426        msg_pdbg(MSGHEADER "Bus support: parallel=%s, LPC=%s, FWH=%s, SPI=%s\n", 
     427                 (c & BUS_PARALLEL) ? "on" : "off", 
     428                 (c & BUS_LPC) ? "on" : "off", 
     429                 (c & BUS_FWH) ? "on" : "off", 
     430                 (c & BUS_SPI) ? "on" : "off"); 
    431431        /* Check for the minimum operational set of commands. */ 
    432432        if (buses_supported & BUS_SPI) { 
     
    539539        } 
    540540        pgmname[16] = 0; 
    541         msg_pinfo(MSGHEADER "Programmer name \"%s\"\n", pgmname); 
     541        msg_pinfo(MSGHEADER "Programmer name is \"%s\"\n", pgmname); 
    542542 
    543543        if (sp_docommand(S_CMD_Q_SERBUF, 0, NULL, 2, &sp_device_serbuf_size)) { 
    544544                msg_perr("Warning: NAK to query serial buffer size\n"); 
    545545        } 
    546         msg_pdbg(MSGHEADER "serial buffer size %d\n", 
     546        msg_pdbg(MSGHEADER "Serial buffer size is %d\n", 
    547547                     sp_device_serbuf_size); 
    548548 
     
    565565                                 "size\n"); 
    566566                } 
    567                 msg_pdbg(MSGHEADER "operation buffer size %d\n", 
     567                msg_pdbg(MSGHEADER "operation buffer size is %d\n", 
    568568                         sp_device_opbuf_size); 
    569569        } 
     
    582582        unsigned char header[7]; 
    583583        msg_pspew(MSGHEADER "Passing write-n bytes=%d addr=0x%x\n", 
    584                      sp_write_n_bytes, sp_write_n_addr); 
     584                  sp_write_n_bytes, sp_write_n_addr); 
    585585        if (sp_streamed_transmit_bytes >= 
    586586            (7 + sp_write_n_bytes + sp_device_serbuf_size)) 
     
    736736        size_t lenm = len; 
    737737        chipaddr addrm = addr; 
    738         while ((sp_max_read_n)&&(lenm > sp_max_read_n)) { 
    739                 sp_do_read_n(&(buf[addrm-addr]),addrm,sp_max_read_n); 
     738        while ((sp_max_read_n != 0) && (lenm > sp_max_read_n)) { 
     739                sp_do_read_n(&(buf[addrm-addr]), addrm, sp_max_read_n); 
    740740                addrm += sp_max_read_n; 
    741741                lenm -= sp_max_read_n; 
    742742        } 
    743         if (lenm) sp_do_read_n(&(buf[addrm-addr]),addrm,lenm); 
    744 } 
    745  
    746 void serprog_delay(int delay) 
     743        if (lenm) 
     744                sp_do_read_n(&(buf[addrm-addr]), addrm, lenm); 
     745} 
     746 
     747void serprog_delay(int usecs) 
    747748{ 
    748749        unsigned char buf[4]; 
    749         msg_pspew("%s\n", __func__); 
     750        msg_pspew("%s usecs=%d\n", __func__, usecs); 
    750751        if (!sp_check_commandavail(S_CMD_O_DELAY)) { 
    751                 internal_delay(delay); 
    752752                msg_pdbg("Note: serprog_delay used, but the programmer doesn't " 
    753753                         "support delay\n"); 
     754                internal_delay(usecs); 
    754755                return; 
    755756        } 
     
    757758                sp_pass_writen(); 
    758759        sp_check_opbuf_usage(5); 
    759         buf[0] = ((delay >> 0) & 0xFF); 
    760         buf[1] = ((delay >> 8) & 0xFF); 
    761         buf[2] = ((delay >> 16) & 0xFF); 
    762         buf[3] = ((delay >> 24) & 0xFF); 
     760        buf[0] = ((usecs >> 0) & 0xFF); 
     761        buf[1] = ((usecs >> 8) & 0xFF); 
     762        buf[2] = ((usecs >> 16) & 0xFF); 
     763        buf[3] = ((usecs >> 24) & 0xFF); 
    763764        sp_stream_buffer_op(S_CMD_O_DELAY, 4, buf); 
    764765        sp_opbuf_usage += 5; 
Note: See TracChangeset for help on using the changeset viewer.