]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/cmd_load.c
sf: Add S25FL128S_256K IDs
[karo-tx-uboot.git] / common / cmd_load.c
index f63b8e805617517d3912a41f3649e37b3c453a19..f6e522cbb3482bf48eeae51cfe0d2e1467404de3 100644 (file)
@@ -2,23 +2,7 @@
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 /*
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#if (CONFIG_COMMANDS & CFG_CMD_LOADB)
-static ulong load_serial_ymodem (ulong offset);
+#if defined(CONFIG_CMD_LOADB)
+static ulong load_serial_ymodem(ulong offset, int mode);
 #endif
 
-#if (CONFIG_COMMANDS & CFG_CMD_LOADS)
-static ulong load_serial (ulong offset);
-static int read_record (char *buf, ulong len);
-# if (CONFIG_COMMANDS & CFG_CMD_SAVES)
-static int save_serial (ulong offset, ulong size);
-static int write_record (char *buf);
-# endif /* CFG_CMD_SAVES */
+#if defined(CONFIG_CMD_LOADS)
+static ulong load_serial(long offset);
+static int read_record(char *buf, ulong len);
+# if defined(CONFIG_CMD_SAVES)
+static int save_serial(ulong offset, ulong size);
+static int write_record(char *buf);
+#endif
 
 static int do_echo = 1;
-#endif /* CFG_CMD_LOADS */
+#endif
 
 /* -------------------------------------------------------------------- */
 
-#if (CONFIG_COMMANDS & CFG_CMD_LOADS)
-int do_load_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+#if defined(CONFIG_CMD_LOADS)
+static int do_load_serial(cmd_tbl_t *cmdtp, int flag, int argc,
+                         char * const argv[])
 {
-       ulong offset = 0;
+       long offset = 0;
        ulong addr;
        int i;
        char *env_echo;
        int rcode = 0;
-#ifdef CFG_LOADS_BAUD_CHANGE
+#ifdef CONFIG_SYS_LOADS_BAUD_CHANGE
        int load_baudrate, current_baudrate;
 
        load_baudrate = current_baudrate = gd->baudrate;
@@ -70,9 +55,9 @@ int do_load_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                do_echo = 0;
        }
 
-#ifdef CFG_LOADS_BAUD_CHANGE
+#ifdef CONFIG_SYS_LOADS_BAUD_CHANGE
        if (argc >= 2) {
-               offset = simple_strtoul(argv[1], NULL, 16);
+               offset = simple_strtol(argv[1], NULL, 16);
        }
        if (argc == 3) {
                load_baudrate = (int)simple_strtoul(argv[2], NULL, 10);
@@ -82,26 +67,26 @@ int do_load_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                        load_baudrate = current_baudrate;
        }
        if (load_baudrate != current_baudrate) {
-               printf ("## Switch baudrate to %d bps and press ENTER ...\n",
+               printf("## Switch baudrate to %d bps and press ENTER ...\n",
                        load_baudrate);
                udelay(50000);
                gd->baudrate = load_baudrate;
-               serial_setbrg ();
+               serial_setbrg();
                udelay(50000);
                for (;;) {
                        if (getc() == '\r')
                                break;
                }
        }
-#else  /* ! CFG_LOADS_BAUD_CHANGE */
+#else  /* ! CONFIG_SYS_LOADS_BAUD_CHANGE */
        if (argc == 2) {
-               offset = simple_strtoul(argv[1], NULL, 16);
+               offset = simple_strtol(argv[1], NULL, 16);
        }
-#endif /* CFG_LOADS_BAUD_CHANGE */
+#endif /* CONFIG_SYS_LOADS_BAUD_CHANGE */
 
-       printf ("## Ready for S-Record download ...\n");
+       printf("## Ready for S-Record download ...\n");
 
-       addr = load_serial (offset);
+       addr = load_serial(offset);
 
        /*
         * Gather any trailing characters (for instance, the ^D which
@@ -116,21 +101,21 @@ int do_load_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        }
 
        if (addr == ~0) {
-               printf ("## S-Record download aborted\n");
+               printf("## S-Record download aborted\n");
                rcode = 1;
        } else {
-               printf ("## Start Addr      = 0x%08lX\n", addr);
+               printf("## Start Addr      = 0x%08lX\n", addr);
                load_addr = addr;
        }
 
-#ifdef CFG_LOADS_BAUD_CHANGE
+#ifdef CONFIG_SYS_LOADS_BAUD_CHANGE
        if (load_baudrate != current_baudrate) {
-               printf ("## Switch baudrate to %d bps and press ESC ...\n",
+               printf("## Switch baudrate to %d bps and press ESC ...\n",
                        current_baudrate);
-               udelay (50000);
+               udelay(50000);
                gd->baudrate = current_baudrate;
-               serial_setbrg ();
-               udelay (50000);
+               serial_setbrg();
+               udelay(50000);
                for (;;) {
                        if (getc() == 0x1B) /* ESC */
                                break;
@@ -140,8 +125,7 @@ int do_load_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        return rcode;
 }
 
-static ulong
-load_serial (ulong offset)
+static ulong load_serial(long offset)
 {
        char    record[SREC_MAXRECLEN + 1];     /* buffer for one S-Record      */
        char    binbuf[SREC_MAXBINLEN];         /* buffer for binary data       */
@@ -149,14 +133,13 @@ load_serial (ulong offset)
        int     type;                           /* return code for record type  */
        ulong   addr;                           /* load address from S-Record   */
        ulong   size;                           /* number of bytes transferred  */
-       char    buf[32];
        ulong   store_addr;
        ulong   start_addr = ~0;
        ulong   end_addr   =  0;
        int     line_count =  0;
 
        while (read_record(record, SREC_MAXRECLEN + 1) >= 0) {
-               type = srec_decode (record, &binlen, &addr, binbuf);
+               type = srec_decode(record, &binlen, &addr, binbuf);
 
                if (type < 0) {
                        return (~0);            /* Invalid S-Record             */
@@ -167,19 +150,19 @@ load_serial (ulong offset)
                case SREC_DATA3:
                case SREC_DATA4:
                    store_addr = addr + offset;
-#ifndef CFG_NO_FLASH
+#ifndef CONFIG_SYS_NO_FLASH
                    if (addr2info(store_addr)) {
                        int rc;
 
                        rc = flash_write((char *)binbuf,store_addr,binlen);
                        if (rc != 0) {
-                               flash_perror (rc);
+                               flash_perror(rc);
                                return (~0);
                        }
                    } else
 #endif
                    {
-                       memcpy ((char *)(store_addr), binbuf, binlen);
+                       memcpy((char *)(store_addr), binbuf, binlen);
                    }
                    if ((store_addr) < start_addr)
                        start_addr = store_addr;
@@ -189,17 +172,16 @@ load_serial (ulong offset)
                case SREC_END2:
                case SREC_END3:
                case SREC_END4:
-                   udelay (10000);
+                   udelay(10000);
                    size = end_addr - start_addr + 1;
-                   printf ("\n"
+                   printf("\n"
                            "## First Load Addr = 0x%08lX\n"
                            "## Last  Load Addr = 0x%08lX\n"
                            "## Total Size      = 0x%08lX = %ld Bytes\n",
                            start_addr, end_addr, size, size
                    );
-                   flush_cache (start_addr, size);
-                   sprintf(buf, "%lX", size);
-                   setenv("filesize", buf);
+                   flush_cache(start_addr, size);
+                   setenv_hex("filesize", size);
                    return (addr);
                case SREC_START:
                    break;
@@ -208,15 +190,14 @@ load_serial (ulong offset)
                }
                if (!do_echo) { /* print a '.' every 100 lines */
                        if ((++line_count % 100) == 0)
-                               putc ('.');
+                               putc('.');
                }
        }
 
        return (~0);                    /* Download aborted             */
 }
 
-static int
-read_record (char *buf, ulong len)
+static int read_record(char *buf, ulong len)
 {
        char *p;
        char c;
@@ -226,7 +207,7 @@ read_record (char *buf, ulong len)
        for (p=buf; p < buf+len; ++p) {
                c = getc();             /* read character               */
                if (do_echo)
-                       putc (c);       /* ... and echo it              */
+                       putc(c);        /* ... and echo it              */
 
                switch (c) {
                case '\r':
@@ -253,13 +234,13 @@ read_record (char *buf, ulong len)
        return (p - buf);
 }
 
-#if (CONFIG_COMMANDS & CFG_CMD_SAVES)
+#if defined(CONFIG_CMD_SAVES)
 
-int do_save_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+int do_save_serial (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        ulong offset = 0;
        ulong size   = 0;
-#ifdef CFG_LOADS_BAUD_CHANGE
+#ifdef CONFIG_SYS_LOADS_BAUD_CHANGE
        int save_baudrate, current_baudrate;
 
        save_baudrate = current_baudrate = gd->baudrate;
@@ -268,7 +249,7 @@ int do_save_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        if (argc >= 2) {
                offset = simple_strtoul(argv[1], NULL, 16);
        }
-#ifdef CFG_LOADS_BAUD_CHANGE
+#ifdef CONFIG_SYS_LOADS_BAUD_CHANGE
        if (argc >= 3) {
                size = simple_strtoul(argv[2], NULL, 16);
        }
@@ -280,41 +261,41 @@ int do_save_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                        save_baudrate = current_baudrate;
        }
        if (save_baudrate != current_baudrate) {
-               printf ("## Switch baudrate to %d bps and press ENTER ...\n",
+               printf("## Switch baudrate to %d bps and press ENTER ...\n",
                        save_baudrate);
                udelay(50000);
                gd->baudrate = save_baudrate;
-               serial_setbrg ();
+               serial_setbrg();
                udelay(50000);
                for (;;) {
                        if (getc() == '\r')
                                break;
                }
        }
-#else  /* ! CFG_LOADS_BAUD_CHANGE */
+#else  /* ! CONFIG_SYS_LOADS_BAUD_CHANGE */
        if (argc == 3) {
                size = simple_strtoul(argv[2], NULL, 16);
        }
-#endif /* CFG_LOADS_BAUD_CHANGE */
+#endif /* CONFIG_SYS_LOADS_BAUD_CHANGE */
 
-       printf ("## Ready for S-Record upload, press ENTER to proceed ...\n");
+       printf("## Ready for S-Record upload, press ENTER to proceed ...\n");
        for (;;) {
                if (getc() == '\r')
                        break;
        }
-       if(save_serial (offset, size)) {
-               printf ("## S-Record upload aborted\n");
+       if (save_serial(offset, size)) {
+               printf("## S-Record upload aborted\n");
        } else {
-               printf ("## S-Record upload complete\n");
+               printf("## S-Record upload complete\n");
        }
-#ifdef CFG_LOADS_BAUD_CHANGE
+#ifdef CONFIG_SYS_LOADS_BAUD_CHANGE
        if (save_baudrate != current_baudrate) {
-               printf ("## Switch baudrate to %d bps and press ESC ...\n",
+               printf("## Switch baudrate to %d bps and press ESC ...\n",
                        (int)current_baudrate);
-               udelay (50000);
+               udelay(50000);
                gd->baudrate = current_baudrate;
-               serial_setbrg ();
-               udelay (50000);
+               serial_setbrg();
+               udelay(50000);
                for (;;) {
                        if (getc() == 0x1B) /* ESC */
                                break;
@@ -329,7 +310,7 @@ int do_save_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 #define SREC3_END                              "S70500000000FA\n"
 #define SREC_BYTES_PER_RECORD  16
 
-static int save_serial (ulong address, ulong count)
+static int save_serial(ulong address, ulong count)
 {
        int i, c, reclen, checksum, length;
        char *hex = "0123456789ABCDEF";
@@ -384,8 +365,7 @@ static int save_serial (ulong address, ulong count)
        return(0);
 }
 
-static int
-write_record (char *buf)
+static int write_record(char *buf)
 {
        char c;
 
@@ -399,13 +379,15 @@ write_record (char *buf)
        }
        return (0);
 }
-# endif /* CFG_CMD_SAVES */
-
-#endif /* CFG_CMD_LOADS */
+# endif
 
+#endif
 
-#if (CONFIG_COMMANDS & CFG_CMD_LOADB)  /* loadb command (load binary) included */
 
+#if defined(CONFIG_CMD_LOADB)
+/*
+ * loadb command (load binary) included
+ */
 #define XON_CHAR        17
 #define XOFF_CHAR       19
 #define START_CHAR      0x01
@@ -421,20 +403,18 @@ write_record (char *buf)
 #define tochar(x) ((char) (((x) + SPACE) & 0xff))
 #define untochar(x) ((int) (((x) - SPACE) & 0xff))
 
-extern int os_data_count;
-extern int os_data_header[8];
-
 static void set_kerm_bin_mode(unsigned long *);
 static int k_recv(void);
-static ulong load_serial_bin (ulong offset);
+static ulong load_serial_bin(ulong offset);
 
 
-char his_eol;        /* character he needs at end of packet */
-int  his_pad_count;  /* number of pad chars he needs */
-char his_pad_char;   /* pad chars he needs */
-char his_quote;      /* quote chars he'll use */
+static char his_eol;        /* character he needs at end of packet */
+static int  his_pad_count;  /* number of pad chars he needs */
+static char his_pad_char;   /* pad chars he needs */
+static char his_quote;      /* quote chars he'll use */
 
-int do_load_serial_bin (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+static int do_load_serial_bin(cmd_tbl_t *cmdtp, int flag, int argc,
+                             char * const argv[])
 {
        ulong offset = 0;
        ulong addr;
@@ -442,8 +422,8 @@ int do_load_serial_bin (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        int rcode = 0;
        char *s;
 
-       /* pre-set offset from CFG_LOAD_ADDR */
-       offset = CFG_LOAD_ADDR;
+       /* pre-set offset from CONFIG_SYS_LOAD_ADDR */
+       offset = CONFIG_SYS_LOAD_ADDR;
 
        /* pre-set offset from $loadaddr */
        if ((s = getenv("loadaddr")) != NULL) {
@@ -464,11 +444,11 @@ int do_load_serial_bin (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        }
 
        if (load_baudrate != current_baudrate) {
-               printf ("## Switch baudrate to %d bps and press ENTER ...\n",
+               printf("## Switch baudrate to %d bps and press ENTER ...\n",
                        load_baudrate);
                udelay(50000);
                gd->baudrate = load_baudrate;
-               serial_setbrg ();
+               serial_setbrg();
                udelay(50000);
                for (;;) {
                        if (getc() == '\r')
@@ -477,64 +457,61 @@ int do_load_serial_bin (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        }
 
        if (strcmp(argv[0],"loady")==0) {
-               printf ("## Ready for binary (ymodem) download "
+               printf("## Ready for binary (ymodem) download "
+                       "to 0x%08lX at %d bps...\n",
+                       offset,
+                       load_baudrate);
+
+               addr = load_serial_ymodem(offset, xyzModem_ymodem);
+
+       } else if (strcmp(argv[0],"loadx")==0) {
+               printf("## Ready for binary (xmodem) download "
                        "to 0x%08lX at %d bps...\n",
                        offset,
                        load_baudrate);
 
-               addr = load_serial_ymodem (offset);
+               addr = load_serial_ymodem(offset, xyzModem_xmodem);
 
        } else {
 
-               printf ("## Ready for binary (kermit) download "
+               printf("## Ready for binary (kermit) download "
                        "to 0x%08lX at %d bps...\n",
                        offset,
                        load_baudrate);
-               addr = load_serial_bin (offset);
+               addr = load_serial_bin(offset);
 
                if (addr == ~0) {
                        load_addr = 0;
-                       printf ("## Binary (kermit) download aborted\n");
+                       printf("## Binary (kermit) download aborted\n");
                        rcode = 1;
                } else {
-                       printf ("## Start Addr      = 0x%08lX\n", addr);
+                       printf("## Start Addr      = 0x%08lX\n", addr);
                        load_addr = addr;
                }
        }
        if (load_baudrate != current_baudrate) {
-               printf ("## Switch baudrate to %d bps and press ESC ...\n",
+               printf("## Switch baudrate to %d bps and press ESC ...\n",
                        current_baudrate);
-               udelay (50000);
+               udelay(50000);
                gd->baudrate = current_baudrate;
-               serial_setbrg ();
-               udelay (50000);
+               serial_setbrg();
+               udelay(50000);
                for (;;) {
                        if (getc() == 0x1B) /* ESC */
                                break;
                }
        }
 
-#ifdef CONFIG_AUTOSCRIPT
-       if (load_addr) {
-               char *s;
-
-               if (((s = getenv("autoscript")) != NULL) && (strcmp(s,"yes") == 0)) {
-                       printf("Running autoscript at addr 0x%08lX ...\n", load_addr);
-                       rcode = autoscript (load_addr);
-               }
-       }
-#endif
        return rcode;
 }
 
 
-static ulong load_serial_bin (ulong offset)
+static ulong load_serial_bin(ulong offset)
 {
        int size, i;
-       char buf[32];
 
-       set_kerm_bin_mode ((ulong *) offset);
-       size = k_recv ();
+       set_kerm_bin_mode((ulong *) offset);
+       size = k_recv();
 
        /*
         * Gather any trailing characters (for instance, the ^D which
@@ -548,25 +525,24 @@ static ulong load_serial_bin (ulong offset)
                udelay(1000);
        }
 
-       flush_cache (offset, size);
+       flush_cache(offset, size);
 
        printf("## Total Size      = 0x%08x = %d Bytes\n", size, size);
-       sprintf(buf, "%X", size);
-       setenv("filesize", buf);
+       setenv_hex("filesize", size);
 
        return offset;
 }
 
-void send_pad (void)
+static void send_pad(void)
 {
        int count = his_pad_count;
 
        while (count-- > 0)
-               putc (his_pad_char);
+               putc(his_pad_char);
 }
 
 /* converts escaped kermit char to binary char */
-char ktrans (char in)
+static char ktrans(char in)
 {
        if ((in & 0x60) == 0x40) {
                return (char) (in & ~0x40);
@@ -576,7 +552,7 @@ char ktrans (char in)
                return in;
 }
 
-int chk1 (char *buffer)
+static int chk1(char *buffer)
 {
        int total = 0;
 
@@ -586,83 +562,76 @@ int chk1 (char *buffer)
        return (int) ((total + ((total >> 6) & 0x03)) & 0x3f);
 }
 
-void s1_sendpacket (char *packet)
+static void s1_sendpacket(char *packet)
 {
-       send_pad ();
+       send_pad();
        while (*packet) {
-               putc (*packet++);
+               putc(*packet++);
        }
 }
 
 static char a_b[24];
-void send_ack (int n)
+static void send_ack(int n)
 {
        a_b[0] = START_CHAR;
-       a_b[1] = tochar (3);
-       a_b[2] = tochar (n);
+       a_b[1] = tochar(3);
+       a_b[2] = tochar(n);
        a_b[3] = ACK_TYPE;
        a_b[4] = '\0';
-       a_b[4] = tochar (chk1 (&a_b[1]));
+       a_b[4] = tochar(chk1(&a_b[1]));
        a_b[5] = his_eol;
        a_b[6] = '\0';
-       s1_sendpacket (a_b);
+       s1_sendpacket(a_b);
 }
 
-void send_nack (int n)
+static void send_nack(int n)
 {
        a_b[0] = START_CHAR;
-       a_b[1] = tochar (3);
-       a_b[2] = tochar (n);
+       a_b[1] = tochar(3);
+       a_b[2] = tochar(n);
        a_b[3] = NACK_TYPE;
        a_b[4] = '\0';
-       a_b[4] = tochar (chk1 (&a_b[1]));
+       a_b[4] = tochar(chk1(&a_b[1]));
        a_b[5] = his_eol;
        a_b[6] = '\0';
-       s1_sendpacket (a_b);
+       s1_sendpacket(a_b);
 }
 
 
-/* os_data_* takes an OS Open image and puts it into memory, and
-   puts the boot header in an array named os_data_header
-
-   if image is binary, no header is stored in os_data_header.
-*/
-void (*os_data_init) (void);
-void (*os_data_char) (char new_char);
+static void (*os_data_init)(void);
+static void (*os_data_char)(char new_char);
 static int os_data_state, os_data_state_saved;
-int os_data_count;
-static int os_data_count_saved;
 static char *os_data_addr, *os_data_addr_saved;
 static char *bin_start_address;
-int os_data_header[8];
-static void bin_data_init (void)
+
+static void bin_data_init(void)
 {
        os_data_state = 0;
-       os_data_count = 0;
        os_data_addr = bin_start_address;
 }
-static void os_data_save (void)
+
+static void os_data_save(void)
 {
        os_data_state_saved = os_data_state;
-       os_data_count_saved = os_data_count;
        os_data_addr_saved = os_data_addr;
 }
-static void os_data_restore (void)
+
+static void os_data_restore(void)
 {
        os_data_state = os_data_state_saved;
-       os_data_count = os_data_count_saved;
        os_data_addr = os_data_addr_saved;
 }
-static void bin_data_char (char new_char)
+
+static void bin_data_char(char new_char)
 {
        switch (os_data_state) {
        case 0:                                 /* data */
                *os_data_addr++ = new_char;
-               --os_data_count;
                break;
        }
 }
-static void set_kerm_bin_mode (unsigned long *addr)
+
+static void set_kerm_bin_mode(unsigned long *addr)
 {
        bin_start_address = (char *) addr;
        os_data_init = bin_data_init;
@@ -672,26 +641,29 @@ static void set_kerm_bin_mode (unsigned long *addr)
 
 /* k_data_* simply handles the kermit escape translations */
 static int k_data_escape, k_data_escape_saved;
-void k_data_init (void)
+static void k_data_init(void)
 {
        k_data_escape = 0;
-       os_data_init ();
+       os_data_init();
 }
-void k_data_save (void)
+
+static void k_data_save(void)
 {
        k_data_escape_saved = k_data_escape;
-       os_data_save ();
+       os_data_save();
 }
-void k_data_restore (void)
+
+static void k_data_restore(void)
 {
        k_data_escape = k_data_escape_saved;
-       os_data_restore ();
+       os_data_restore();
 }
-void k_data_char (char new_char)
+
+static void k_data_char(char new_char)
 {
        if (k_data_escape) {
                /* last char was escape - translate this character */
-               os_data_char (ktrans (new_char));
+               os_data_char(ktrans(new_char));
                k_data_escape = 0;
        } else {
                if (new_char == his_quote) {
@@ -699,18 +671,18 @@ void k_data_char (char new_char)
                        k_data_escape = 1;
                } else {
                        /* otherwise send this char as-is */
-                       os_data_char (new_char);
+                       os_data_char(new_char);
                }
        }
 }
 
 #define SEND_DATA_SIZE  20
-char send_parms[SEND_DATA_SIZE];
-char *send_ptr;
+static char send_parms[SEND_DATA_SIZE];
+static char *send_ptr;
 
 /* handle_send_packet interprits the protocol info and builds and
    sends an appropriate ack for what we can do */
-void handle_send_packet (int n)
+static void handle_send_packet(int n)
 {
        int length = 3;
        int bytes;
@@ -730,30 +702,30 @@ void handle_send_packet (int n)
                        break;
                /* handle MAXL - max length */
                /* ignore what he says - most I'll take (here) is 94 */
-               a_b[++length] = tochar (94);
+               a_b[++length] = tochar(94);
                if (bytes-- <= 0)
                        break;
                /* handle TIME - time you should wait for my packets */
                /* ignore what he says - don't wait for my ack longer than 1 second */
-               a_b[++length] = tochar (1);
+               a_b[++length] = tochar(1);
                if (bytes-- <= 0)
                        break;
                /* handle NPAD - number of pad chars I need */
                /* remember what he says - I need none */
-               his_pad_count = untochar (send_parms[2]);
-               a_b[++length] = tochar (0);
+               his_pad_count = untochar(send_parms[2]);
+               a_b[++length] = tochar(0);
                if (bytes-- <= 0)
                        break;
                /* handle PADC - pad chars I need */
                /* remember what he says - I need none */
-               his_pad_char = ktrans (send_parms[3]);
+               his_pad_char = ktrans(send_parms[3]);
                a_b[++length] = 0x40;   /* He should ignore this */
                if (bytes-- <= 0)
                        break;
                /* handle EOL - end of line he needs */
                /* remember what he says - I need CR */
-               his_eol = untochar (send_parms[4]);
-               a_b[++length] = tochar (END_CHAR);
+               his_eol = untochar(send_parms[4]);
+               a_b[++length] = tochar(END_CHAR);
                if (bytes-- <= 0)
                        break;
                /* handle QCTL - quote control char he'll use */
@@ -779,25 +751,25 @@ void handle_send_packet (int n)
                        break;
                /* handle CAPAS - the capabilities mask */
                /* ignore what he says - I only do long packets - I don't do windows */
-               a_b[++length] = tochar (2);     /* only long packets */
-               a_b[++length] = tochar (0);     /* no windows */
-               a_b[++length] = tochar (94);    /* large packet msb */
-               a_b[++length] = tochar (94);    /* large packet lsb */
+               a_b[++length] = tochar(2);      /* only long packets */
+               a_b[++length] = tochar(0);      /* no windows */
+               a_b[++length] = tochar(94);     /* large packet msb */
+               a_b[++length] = tochar(94);     /* large packet lsb */
        } while (0);
 
        a_b[0] = START_CHAR;
-       a_b[1] = tochar (length);
-       a_b[2] = tochar (n);
+       a_b[1] = tochar(length);
+       a_b[2] = tochar(n);
        a_b[3] = ACK_TYPE;
        a_b[++length] = '\0';
-       a_b[length] = tochar (chk1 (&a_b[1]));
+       a_b[length] = tochar(chk1(&a_b[1]));
        a_b[++length] = his_eol;
        a_b[++length] = '\0';
-       s1_sendpacket (a_b);
+       s1_sendpacket(a_b);
 }
 
 /* k_recv receives a OS Open image file over kermit line */
-static int k_recv (void)
+static int k_recv(void)
 {
        char new_char;
        char k_state, k_state_saved;
@@ -805,7 +777,6 @@ static int k_recv (void)
        int done;
        int length;
        int n, last_n;
-       int z = 0;
        int len_lo, len_hi;
 
        /* initialize some protocol parameters */
@@ -817,9 +788,9 @@ static int k_recv (void)
        /* initialize the k_recv and k_data state machine */
        done = 0;
        k_state = 0;
-       k_data_init ();
+       k_data_init();
        k_state_saved = k_state;
-       k_data_save ();
+       k_data_save();
        n = 0;                          /* just to get rid of a warning */
        last_n = -1;
 
@@ -864,17 +835,17 @@ static int k_recv (void)
 START:
                /* get length of packet */
                sum = 0;
-               new_char = getc ();
+               new_char = getc();
                if ((new_char & 0xE0) == 0)
                        goto packet_error;
                sum += new_char & 0xff;
-               length = untochar (new_char);
+               length = untochar(new_char);
                /* get sequence number */
-               new_char = getc ();
+               new_char = getc();
                if ((new_char & 0xE0) == 0)
                        goto packet_error;
                sum += new_char & 0xff;
-               n = untochar (new_char);
+               n = untochar(new_char);
                --length;
 
                /* NEW CODE - check sequence numbers for retried packets */
@@ -887,17 +858,17 @@ START:
                if (n == last_n) {
                        /* same sequence number, restore the previous state */
                        k_state = k_state_saved;
-                       k_data_restore ();
+                       k_data_restore();
                } else {
                        /* new sequence number, checkpoint the download */
                        last_n = n;
                        k_state_saved = k_state;
-                       k_data_save ();
+                       k_data_save();
                }
                /* END NEW CODE */
 
                /* get packet type */
-               new_char = getc ();
+               new_char = getc();
                if ((new_char & 0xE0) == 0)
                        goto packet_error;
                sum += new_char & 0xff;
@@ -907,29 +878,29 @@ START:
                if (length == -2) {
                        /* (length byte was 0, decremented twice) */
                        /* get the two length bytes */
-                       new_char = getc ();
+                       new_char = getc();
                        if ((new_char & 0xE0) == 0)
                                goto packet_error;
                        sum += new_char & 0xff;
-                       len_hi = untochar (new_char);
-                       new_char = getc ();
+                       len_hi = untochar(new_char);
+                       new_char = getc();
                        if ((new_char & 0xE0) == 0)
                                goto packet_error;
                        sum += new_char & 0xff;
-                       len_lo = untochar (new_char);
+                       len_lo = untochar(new_char);
                        length = len_hi * 95 + len_lo;
                        /* check header checksum */
-                       new_char = getc ();
+                       new_char = getc();
                        if ((new_char & 0xE0) == 0)
                                goto packet_error;
-                       if (new_char != tochar ((sum + ((sum >> 6) & 0x03)) & 0x3f))
+                       if (new_char != tochar((sum + ((sum >> 6) & 0x03)) & 0x3f))
                                goto packet_error;
                        sum += new_char & 0xff;
 /* --length; */ /* new length includes only data and block check to come */
                }
                /* bring in rest of packet */
                while (length > 1) {
-                       new_char = getc ();
+                       new_char = getc();
                        if ((new_char & 0xE0) == 0)
                                goto packet_error;
                        sum += new_char & 0xff;
@@ -946,31 +917,30 @@ START:
                        }
                }
                /* get and validate checksum character */
-               new_char = getc ();
+               new_char = getc();
                if ((new_char & 0xE0) == 0)
                        goto packet_error;
-               if (new_char != tochar ((sum + ((sum >> 6) & 0x03)) & 0x3f))
+               if (new_char != tochar((sum + ((sum >> 6) & 0x03)) & 0x3f))
                        goto packet_error;
                /* get END_CHAR */
-               new_char = getc ();
+               new_char = getc();
                if (new_char != END_CHAR) {
                  packet_error:
                        /* restore state machines */
                        k_state = k_state_saved;
-                       k_data_restore ();
+                       k_data_restore();
                        /* send a negative acknowledge packet in */
-                       send_nack (n);
+                       send_nack(n);
                } else if (k_state == SEND_TYPE) {
                        /* crack the protocol parms, build an appropriate ack packet */
-                       handle_send_packet (n);
+                       handle_send_packet(n);
                } else {
                        /* send simple acknowledge packet in */
-                       send_ack (n);
+                       send_ack(n);
                        /* quit if end of transmission */
                        if (k_state == BREAK_TYPE)
                                done = 1;
                }
-               ++z;
        }
        return ((ulong) os_data_addr - (ulong) bin_start_address);
 }
@@ -980,10 +950,9 @@ static int getcxmodem(void) {
                return (getc());
        return -1;
 }
-static ulong load_serial_ymodem (ulong offset)
+static ulong load_serial_ymodem(ulong offset, int mode)
 {
        int size;
-       char buf[32];
        int err;
        int res;
        connection_info_t info;
@@ -992,20 +961,20 @@ static ulong load_serial_ymodem (ulong offset)
        ulong addr = 0;
 
        size = 0;
-       info.mode = xyzModem_ymodem;
-       res = xyzModem_stream_open (&info, &err);
+       info.mode = mode;
+       res = xyzModem_stream_open(&info, &err);
        if (!res) {
 
                while ((res =
-                       xyzModem_stream_read (ymodemBuf, 1024, &err)) > 0) {
+                       xyzModem_stream_read(ymodemBuf, 1024, &err)) > 0) {
                        store_addr = addr + offset;
                        size += res;
                        addr += res;
-#ifndef CFG_NO_FLASH
-                       if (addr2info (store_addr)) {
+#ifndef CONFIG_SYS_NO_FLASH
+                       if (addr2info(store_addr)) {
                                int rc;
 
-                               rc = flash_write ((char *) ymodemBuf,
+                               rc = flash_write((char *) ymodemBuf,
                                                  store_addr, res);
                                if (rc != 0) {
                                        flash_perror (rc);
@@ -1014,101 +983,108 @@ static ulong load_serial_ymodem (ulong offset)
                        } else
 #endif
                        {
-                               memcpy ((char *) (store_addr), ymodemBuf,
+                               memcpy((char *)(store_addr), ymodemBuf,
                                        res);
                        }
 
                }
        } else {
-               printf ("%s\n", xyzModem_error (err));
+               printf("%s\n", xyzModem_error(err));
        }
 
-       xyzModem_stream_close (&err);
-       xyzModem_stream_terminate (false, &getcxmodem);
+       xyzModem_stream_close(&err);
+       xyzModem_stream_terminate(false, &getcxmodem);
 
 
-       flush_cache (offset, size);
+       flush_cache(offset, size);
 
-       printf ("## Total Size      = 0x%08x = %d Bytes\n", size, size);
-       sprintf (buf, "%X", size);
-       setenv ("filesize", buf);
+       printf("## Total Size      = 0x%08x = %d Bytes\n", size, size);
+       setenv_hex("filesize", size);
 
        return offset;
 }
 
-#endif /* CFG_CMD_LOADB */
+#endif
 
 /* -------------------------------------------------------------------- */
 
-#if (CONFIG_COMMANDS & CFG_CMD_LOADS)
+#if defined(CONFIG_CMD_LOADS)
 
-#ifdef CFG_LOADS_BAUD_CHANGE
+#ifdef CONFIG_SYS_LOADS_BAUD_CHANGE
 U_BOOT_CMD(
        loads, 3, 0,    do_load_serial,
-       "loads   - load S-Record file over serial line\n",
+       "load S-Record file over serial line",
        "[ off ] [ baud ]\n"
        "    - load S-Record file over serial line"
-       " with offset 'off' and baudrate 'baud'\n"
+       " with offset 'off' and baudrate 'baud'"
 );
 
-#else  /* ! CFG_LOADS_BAUD_CHANGE */
+#else  /* ! CONFIG_SYS_LOADS_BAUD_CHANGE */
 U_BOOT_CMD(
        loads, 2, 0,    do_load_serial,
-       "loads   - load S-Record file over serial line\n",
+       "load S-Record file over serial line",
        "[ off ]\n"
-       "    - load S-Record file over serial line with offset 'off'\n"
+       "    - load S-Record file over serial line with offset 'off'"
 );
-#endif /* CFG_LOADS_BAUD_CHANGE */
+#endif /* CONFIG_SYS_LOADS_BAUD_CHANGE */
 
 /*
  * SAVES always requires LOADS support, but not vice versa
  */
 
 
-#if (CONFIG_COMMANDS & CFG_CMD_SAVES)
-#ifdef CFG_LOADS_BAUD_CHANGE
+#if defined(CONFIG_CMD_SAVES)
+#ifdef CONFIG_SYS_LOADS_BAUD_CHANGE
 U_BOOT_CMD(
        saves, 4, 0,    do_save_serial,
-       "saves   - save S-Record file over serial line\n",
+       "save S-Record file over serial line",
        "[ off ] [size] [ baud ]\n"
        "    - save S-Record file over serial line"
-       " with offset 'off', size 'size' and baudrate 'baud'\n"
+       " with offset 'off', size 'size' and baudrate 'baud'"
 );
-#else  /* ! CFG_LOADS_BAUD_CHANGE */
+#else  /* ! CONFIG_SYS_LOADS_BAUD_CHANGE */
 U_BOOT_CMD(
        saves, 3, 0,    do_save_serial,
-       "saves   - save S-Record file over serial line\n",
+       "save S-Record file over serial line",
        "[ off ] [size]\n"
-       "    - save S-Record file over serial line with offset 'off' and size 'size'\n"
+       "    - save S-Record file over serial line with offset 'off' and size 'size'"
 );
-#endif /* CFG_LOADS_BAUD_CHANGE */
-#endif /* CFG_CMD_SAVES */
-#endif /* CFG_CMD_LOADS */
+#endif /* CONFIG_SYS_LOADS_BAUD_CHANGE */
+#endif /* CONFIG_CMD_SAVES */
+#endif /* CONFIG_CMD_LOADS */
 
 
-#if (CONFIG_COMMANDS & CFG_CMD_LOADB)
+#if defined(CONFIG_CMD_LOADB)
 U_BOOT_CMD(
        loadb, 3, 0,    do_load_serial_bin,
-       "loadb   - load binary file over serial line (kermit mode)\n",
+       "load binary file over serial line (kermit mode)",
+       "[ off ] [ baud ]\n"
+       "    - load binary file over serial line"
+       " with offset 'off' and baudrate 'baud'"
+);
+
+U_BOOT_CMD(
+       loadx, 3, 0,    do_load_serial_bin,
+       "load binary file over serial line (xmodem mode)",
        "[ off ] [ baud ]\n"
        "    - load binary file over serial line"
-       " with offset 'off' and baudrate 'baud'\n"
+       " with offset 'off' and baudrate 'baud'"
 );
 
 U_BOOT_CMD(
        loady, 3, 0,    do_load_serial_bin,
-       "loady   - load binary file over serial line (ymodem mode)\n",
+       "load binary file over serial line (ymodem mode)",
        "[ off ] [ baud ]\n"
        "    - load binary file over serial line"
-       " with offset 'off' and baudrate 'baud'\n"
+       " with offset 'off' and baudrate 'baud'"
 );
 
-#endif /* CFG_CMD_LOADB */
+#endif /* CONFIG_CMD_LOADB */
 
 /* -------------------------------------------------------------------- */
 
-#if (CONFIG_COMMANDS & CFG_CMD_HWFLOW)
-int do_hwflow (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+#if defined(CONFIG_CMD_HWFLOW)
+int do_hwflow(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        extern int hwflow_onoff(int);
 
@@ -1119,7 +1095,7 @@ int do_hwflow (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                        if (strcmp(argv[1], "on") == 0)
                                hwflow_onoff(1);
                        else
-                               printf("Usage: %s\n", cmdtp->usage);
+                               return CMD_RET_USAGE;
        }
        printf("RTS/CTS hardware flow control: %s\n", hwflow_onoff(0) ? "on" : "off");
        return 0;
@@ -1129,8 +1105,8 @@ int do_hwflow (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 U_BOOT_CMD(
        hwflow, 2, 0,   do_hwflow,
-       "hwflow  - turn the harwdare flow control on/off\n",
-       "[on|off]\n - change RTS/CTS hardware flow control over serial line\n"
+       "turn RTS/CTS hardware flow control in serial line on/off",
+       "[on|off]"
 );
 
-#endif /* CFG_CMD_HWFLOW */
+#endif /* CONFIG_CMD_HWFLOW */