Skip to content
Snippets Groups Projects
  1. Jul 29, 2011
  2. May 12, 2011
    • Wolfgang Denk's avatar
      cmd_nvedit.c: make error message more helpful · a02a884b
      Wolfgang Denk authored
      
      When calling getenv_f() with a too small buffer, it would print an
      error message like this:
      
      	env_buf too small [32]
      
      This is not really helpful as it does not give any indication which of
      the calls might have failed.  Change this into:
      
      	env_buf [32 bytes] too small for value of "hwconfig"
      
      so we know at least which variable caused the overflow; this usually
      allows to quickly find the related code as well.
      
      Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
      a02a884b
  3. Apr 30, 2011
  4. Apr 27, 2011
    • Kim Phillips's avatar
      common: add a grepenv command · a000b795
      Kim Phillips authored
      
      u-boot environments, esp. when boards are shared across multiple
      users, can get pretty large and time consuming to visually parse.
      The grepenv command this patch adds can be used in lieu of printenv
      to facilitate searching.  grepenv works like printenv but limits
      its output only to environment strings (variable name and value
      pairs) that match the user specified substring.
      
      the following examples are on a board with a 5313 byte environment
      that spans multiple screen pages:
      
      Example 1:  summarize ethernet configuration:
      
      => grepenv eth TSEC
      etact=FM1@DTSEC2
      eth=FM1@DTSEC4
      ethact=FM1@DTSEC2
      eth1addr=00:E0:0C:00:8b:01
      eth2addr=00:E0:0C:00:8b:02
      eth3addr=00:E0:0C:00:8b:03
      eth4addr=00:E0:0C:00:8b:04
      eth5addr=00:E0:0C:00:8b:05
      eth6addr=00:E0:0C:00:8b:06
      eth7addr=00:E0:0C:00:8b:07
      eth8addr=00:E0:0C:00:8b:08
      eth9addr=00:E0:0C:00:8b:09
      ethaddr=00:E0:0C:00:8b:00
      netdev=eth0
      uprcw=setenv ethact $eth;setenv filename p4080ds/R_PPSXX_0xe/rcw_0xe_2sgmii_rev2_high.bin;setenv start 0xe8000000;protect off all;run upimage;protect on all
      upuboot=setenv ethact $eth;setenv filename u-boot.bin;setenv start eff80000;protect off all;run upimage;protect on all
      upucode=setenv ethact $eth;setenv filename fsl_fman_ucode_P4080_101_6.bin;setenv start 0xef000000;protect off all;run upimage;protect on all
      usdboot=setenv ethact $eth;tftp 1000000 $dir/$bootfile;tftp 2000000 $dir/initramfs.cpio.gz.uboot;tftp c00000 $dir/p4080ds-usdpaa.dtb;setenv bootargs root=/dev/ram rw console=ttyS0,115200 $othbootargs;bootm 1000000 2000000 c00000;
      =>
      
      Example 2: detect unused env vars:
      
      => grepenv etact
      etact=FM1@DTSEC2
      =>
      
      Example 3: reveal hardcoded variables; e.g., for fdtaddr:
      
      => grepenv fdtaddr
      fdtaddr=c00000
      nfsboot=setenv bootargs root=/dev/nfs rw nfsroot=$serverip:$rootpath ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off console=$consoledev,$baudrate $othbootargs;tftp $loadaddr $bootfile;tftp $fdtaddr $fdtfile;bootm $loadaddr - $fdtaddr
      ramboot=setenv bootargs root=/dev/ram rw console=$consoledev,$baudrate $othbootargs;tftp $ramdiskaddr $ramdiskfile;tftp $loadaddr $bootfile;tftp $fdtaddr $fdtfile;bootm $loadaddr $ramdiskaddr $fdtaddr
      => grep $fdtaddr
      fdtaddr=c00000
      my_boot=bootm 0x40000000 0x41000000 0x00c00000
      my_dtb=tftp 0x00c00000 $prefix/p4080ds.dtb
      nohvboot=tftp 1000000 $dir/$bootfile;tftp 2000000 $dir/$ramdiskfile;tftp c00000 $dir/$fdtfile;setenv bootargs root=/dev/ram rw ramdisk_size=0x10000000 console=ttyS0,115200;bootm 1000000 2000000 c00000;
      =>
      
      This patch also enables the grepenv command by default on
      corenet_ds based boards (and repositions the DHCP command
      entry to keep the list sorted).
      
      Signed-off-by: default avatarKim Phillips <kim.phillips@freescale.com>
      Cc: Kumar Gala <kumar.gala@freescale.com>
      Cc: Andy Fleming <afleming@freescale.com>
      a000b795
  5. Apr 25, 2011
  6. Apr 13, 2011
  7. Apr 12, 2011
  8. Jan 09, 2011
  9. Dec 17, 2010
    • Mike Frysinger's avatar
      hashtable: drop all non-reentrant versions · 2eb1573f
      Mike Frysinger authored
      
      The non-reentrant versions of the hashtable functions operate on a single
      shared hashtable.  So if two different people try using these funcs for
      two different purposes, they'll cause problems for the other.
      
      Avoid this by converting all existing hashtable consumers over to the
      reentrant versions and then punting the non-reentrant ones.
      
      Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
      2eb1573f
  10. Nov 28, 2010
    • Mike Frysinger's avatar
      autocomplete: remove runtime handler install · 722b061b
      Mike Frysinger authored
      
      Rather than add runtime overhead of installing completion handlers, do it
      statically at build time.  This requires a new build time helper macro to
      declare a command and the completion handler at the same time.  Then we
      convert the env related funcs over to this.
      
      This gives an opportunity to also unify the U_BOOT_CMD macros.
      
      Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
      722b061b
  11. Nov 27, 2010
  12. Oct 29, 2010
  13. Oct 06, 2010
    • Heiko Schocher's avatar
      env: fix cmd_env_sub fct pointers if CONFIG_RELOC_FIXUP_WORKS is not defined · 60f7da1f
      Heiko Schocher authored
      
      commit ea882baf introduces
      a command_sub_table for the "env" command. On arm, avr32, m68k,
      mips and sparc architectures, relocation needs manual fixups,
      so add these fixups for this sub command table too.
      
      Tested on arm/qong board.
                mips board (Ben NanoNote) from Xiangfu Liu
                arm/AT91 board from Reinhard Meyer
      
      Signed-off-by: default avatarHeiko Schocher <hs@denx.de>
      
      cc: Wolfgang Denk <wd@denx.de>
      cc: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
      cc: Xiangfu Liu <xiangfu@openmobilefree.net>
      cc: Reinhard Meyer <u-boot@emk-elektronik.de>
      cc: sshtylyov@mvista.com
      60f7da1f
  14. Sep 19, 2010
    • Wolfgang Denk's avatar
      New implementation for internal handling of environment variables. · ea882baf
      Wolfgang Denk authored
      
      Motivation:
      
      * Old environment code used a pessimizing implementation:
        - variable lookup used linear search => slow
        - changed/added variables were added at the end, i. e. most
          frequently used variables had the slowest access times => slow
        - each setenv() would calculate the CRC32 checksum over the whole
          environment block => slow
      * "redundant" envrionment was locked down to two copies
      * No easy way to implement features like "reset to factory defaults",
        or to select one out of several pre-defined (previously saved) sets
        of environment settings ("profiles")
      * No easy way to import or export environment settings
      
      ======================================================================
      
      API Changes:
      
      - Variable names starting with '#' are no longer allowed
      
        I didn't find any such variable names being used; it is highly
        recommended to follow standard conventions and start variable names
        with an alphanumeric character
      
      - "printenv" will now print a backslash at the end of all but the last
        lines of a multi-line variable value.
      
        Multi-line variables have never been formally defined, allthough
        there is no reason not to use them. Now we define rules how to deal
        with them, allowing for import and export.
      
      - Function forceenv() and the related code in saveenv() was removed.
        At the moment this is causing build problems for the only user of
        this code (schmoogie - which has no entry in MAINTAINERS); may be
        fixed later by implementing the "env set -f" feature.
      
      Inconsistencies:
      
      - "printenv" will '\\'-escape the '\n' in multi-line variables, while
        "printenv var" will not do that.
      
      ======================================================================
      
      Advantages:
      
      - "printenv" output much better readable (sorted)
      - faster!
      - extendable (additional variable properties can be added)
      - new, powerful features like "factory reset" or easy switching
        between several different environment settings ("profiles")
      
      Disadvantages:
      
      - Image size grows by typically 5...7 KiB (might shrink a bit again on
        systems with redundant environment with a following patch series)
      
      ======================================================================
      
      Implemented:
      
      - env command with subcommands:
      
        - env print [arg ...]
      
          same as "printenv": print environment
      
        - env set [-f] name [arg ...]
      
          same as "setenv": set (and delete) environment variables
      
          ["-f" - force setting even for read-only variables - not
          implemented yet.]
      
        - end delete [-f] name
      
          not implemented yet
      
          ["-f" - force delete even for read-only variables]
      
        - env save
      
          same as "saveenv": save environment
      
        - env export [-t | -b | -c] addr [size]
      
          export internal representation (hash table) in formats usable for
          persistent storage or processing:
      
      	-t:	export as text format; if size is given, data will be
      		padded with '\0' bytes; if not, one terminating '\0'
      		will be added (which is included in the "filesize"
      		setting so you can for exmple copy this to flash and
      		keep the termination).
      	-b:	export as binary format (name=value pairs separated by
      		'\0', list end marked by double "\0\0")
      	-c:	export as checksum protected environment format as
      		used for example by "saveenv" command
      	addr:	memory address where environment gets stored
      	size:	size of output buffer
      
      	With "-c" and size is NOT given, then the export command will
      	format the data as currently used for the persistent storage,
      	i. e. it will use CONFIG_ENV_SECT_SIZE as output block size and
      	prepend a valid CRC32 checksum and, in case of resundant
      	environment, a "current" redundancy flag. If size is given, this
      	value will be used instead of CONFIG_ENV_SECT_SIZE; again, CRC32
      	checksum and redundancy flag will be inserted.
      
      	With "-b" and "-t", always only the real data (including a
      	terminating '\0' byte) will be written; here the optional size
      	argument will be used to make sure not to overflow the user
      	provided buffer; the command will abort if the size is not
      	sufficient. Any remainign space will be '\0' padded.
      
              On successful return, the variable "filesize" will be set.
              Note that filesize includes the trailing/terminating '\0'
              byte(s).
      
              Usage szenario: create a text snapshot/backup of the current
      	settings:
      
      		=> env export -t 100000
      		=> era ${backup_addr} +${filesize}
      		=> cp.b 100000 ${backup_addr} ${filesize}
      
      	Re-import this snapshot, deleting all other settings:
      
      		=> env import -d -t ${backup_addr}
      
        - env import [-d] [-t | -b | -c] addr [size]
      
          import external format (text or binary) into hash table,
          optionally deleting existing values:
      
      	-d:	delete existing environment before importing;
      		otherwise overwrite / append to existion definitions
      	-t:	assume text format; either "size" must be given or the
      		text data must be '\0' terminated
      	-b:	assume binary format ('\0' separated, "\0\0" terminated)
      	-c:	assume checksum protected environment format
      	addr:	memory address to read from
      	size:	length of input data; if missing, proper '\0'
      		termination is mandatory
      
        - env default -f
      
          reset default environment: drop all environment settings and load
          default environment
      
        - env ask name [message] [size]
      
          same as "askenv": ask for environment variable
      
        - env edit name
      
          same as "editenv": edit environment variable
      
        - env run
      
          same as "run": run commands in an environment variable
      
      ======================================================================
      
      TODO:
      
      - drop default env as implemented now; provide a text file based
        initialization instead (eventually using several text files to
        incrementally build it from common blocks) and a tool to convert it
        into a binary blob / object file.
      
      - It would be nice if we could add wildcard support for environment
        variables; this is needed for variable name auto-completion,
        but it would also be nice to be able to say "printenv ip*" or
        "printenv *addr*"
      
      - Some boards don't link any more due to the grown code size:
        DU405, canyonlands, sequoia, socrates.
      
      	=> cc: Matthias Fuchs <matthias.fuchs@esd-electronics.com>,
      	       Stefan Roese <sr@denx.de>,
      	       Heiko Schocher <hs@denx.de>
      
      - Dropping forceenv() causes build problems on schmoogie
      
      	=> cc: Sergey Kubushyn <ksi@koi8.net>
      
      - Build tested on PPC and ARM only; runtime tested with NOR and NAND
        flash only => needs testing!!
      
      Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
      Cc: Matthias Fuchs <matthias.fuchs@esd-electronics.com>,
      Cc: Stefan Roese <sr@denx.de>,
      Cc: Heiko Schocher <hs@denx.de>
      Cc: Sergey Kubushyn <ksi@koi8.net>
      ea882baf
    • Wolfgang Denk's avatar
      Make getenv() work before relocation. · 91a76751
      Wolfgang Denk authored
      
      So far, getenv() would work before relocation is most cases, even
      though it was not intended to be used that way.  When switching to a
      hash table based implementation, this would break a number of boards.
      
      For convenience, we make getenv() check if it's running before
      relocation and, if so, use getenv_f() internally.
      
      Note that this is limited to simple cases, as we use a small static
      buffer (32 bytes) in the global data for this purpose.
      
      For this reason, it is also not a good idea to convert all current
      uses of getenv_f() into getenv() - some of the existing use cases need
      to be able to deal with longer variable values, so getenv_f() is still
      needed and recommended for use before relocation.
      
      Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
      91a76751
    • Wolfgang Denk's avatar
      Remove support for CONFIG_HAS_UID and "forceenv" command · 6d014adf
      Wolfgang Denk authored
      
      This (undocumented) concept was only in use for the MVSMR and
      davinci_schmoogie Sergey Kubushyn <ksi@koi8.net> boards.
      Drop it for now.  If really needed, it should be reimplemented
      later in the context of the new environment command set.
      
      Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
      Cc: Andre Schwarz <andre.schwarz@matrix-vision.de>
      Cc: Sergey Kubushyn <ksi@koi8.net>
      Acked-by: default avatarSergey Kubushyn <ksi@koi8.net>
      6d014adf
    • Terry Lv's avatar
      Save environment data to mmc. · a8060359
      Terry Lv authored
      
      This patch is to save environment data to mmc card.
      It uses interfaces defined in generic mmc.
      
      Signed-off-by: default avatarTerry Lv <r65388@freescale.com>
      Acked-by: default avatarStefano Babic <sbabic@denx.de>
      a8060359
  15. Aug 08, 2010
  16. Aug 03, 2010
    • Wolfgang Denk's avatar
      Rename getenv_r() into getenv_f() · cdb74977
      Wolfgang Denk authored
      
      While running from flash, i. e. before relocation, we have only a
      limited C runtime environment without writable data segment. In this
      phase, some configurations (for example with environment in EEPROM)
      must not use the normal getenv(), but a special function.  This
      function had been called getenv_r(), with the idea that the "_r"
      suffix would mean the same as in the _r_eentrant versions of some of
      the C library functions (for example getdate vs. getdate_r, getgrent
      vs. getgrent_r, etc.).
      
      Unfortunately this was a misleading name, as in U-Boot the "_r"
      generally means "running from RAM", i. e. _after_ relocation.
      
      To avoid confusion, rename into getenv_f() [as "running from flash"]
      
      Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
      Acked-by: default avatarDetlev Zundel <dzu@denx.de>
      cdb74977
  17. Jul 24, 2010
  18. Jul 04, 2010
    • Wolfgang Denk's avatar
      Make sure that argv[] argument pointers are not modified. · 54841ab5
      Wolfgang Denk authored
      
      The hush shell dynamically allocates (and re-allocates) memory for the
      argument strings in the "char *argv[]" argument vector passed to
      commands.  Any code that modifies these pointers will cause serious
      corruption of the malloc data structures and crash U-Boot, so make
      sure the compiler can check that no such modifications are being done
      by changing the code into "char * const argv[]".
      
      This modification is the result of debugging a strange crash caused
      after adding a new command, which used the following argument
      processing code which has been working perfectly fine in all Unix
      systems since version 6 - but not so in U-Boot:
      
      int main (int argc, char **argv)
      {
      	while (--argc > 0 && **++argv == '-') {
      /* ====> */	while (*++*argv) {
      			switch (**argv) {
      			case 'd':
      				debug++;
      				break;
      			...
      			default:
      				usage ();
      			}
      		}
      	}
      	...
      }
      
      The line marked "====>" will corrupt the malloc data structures and
      usually cause U-Boot to crash when the next command gets executed by
      the shell.  With the modification, the compiler will prevent this with
      an
      	error: increment of read-only location '*argv'
      
      N.B.: The code above can be trivially rewritten like this:
      
      	while (--argc > 0 && **++argv == '-') {
      		char *arg = *argv;
      		while (*++arg) {
      			switch (*arg) {
      			...
      
      Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
      Acked-by: default avatarMike Frysinger <vapier@gentoo.org>
      54841ab5
  19. Jun 23, 2010
    • Wolfgang Denk's avatar
      Remove AmigaOneG3SE board · 953b7e62
      Wolfgang Denk authored
      
      The AmigaOneG3SE board has been orphaned or a very long time, and
      broken for more than 12 releases resp. more than 3 years.  As nobody
      seems to be interested any more in this stuff we may as well ged rid
      of it, especially as it clutters many areas of the code so it is a
      continuous pain for all kinds of ongoing work.
      
      Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
      953b7e62
  20. Oct 27, 2009
    • Peter Tyser's avatar
      Add 'editenv' command · 246c6922
      Peter Tyser authored
      
      The editenv command can be used to edit an environment variable.
      Editing an environment variable is useful when one wants to tweak an
      existing variable, for example fix a typo or change the baudrate in the
      'bootargs' environment variable.
      
      Signed-off-by: default avatarPeter Tyser <ptyser@xes-inc.com>
      246c6922
    • Peter Tyser's avatar
      setenv(): Delete 0-length environment variables · b0fa8e50
      Peter Tyser authored
      
      Previously setenv() would only delete an environment variable if it
      was passed a NULL string pointer as a value.  It should also delete an
      environment variable when it encounters a valid string pointer of
      0-length.
      
      This change/fix is generally useful and is necessary for the upcoming
      "editenv" command.
      
      Signed-off-by: default avatarPeter Tyser <ptyser@xes-inc.com>
      b0fa8e50
  21. Oct 18, 2009
  22. Jun 12, 2009
    • Wolfgang Denk's avatar
      General help message cleanup · a89c33db
      Wolfgang Denk authored
      
      Many of the help messages were not really helpful; for example, many
      commands that take no arguments would not print a correct synopsis
      line, but "No additional help available." which is not exactly wrong,
      but not helpful either.
      
      Commit ``Make "usage" messages more helpful.'' changed this
      partially. But it also became clear that lots of "Usage" and "Help"
      messages (fields "usage" and "help" in struct cmd_tbl_s respective)
      were actually redundant.
      
      This patch cleans this up - for example:
      
      Before:
      	=> help dtt
      	dtt - Digital Thermometer and Thermostat
      
      	Usage:
      	dtt         - Read temperature from digital thermometer and thermostat.
      
      After:
      	=> help dtt
      	dtt - Read temperature from Digital Thermometer and Thermostat
      
      	Usage:
      	dtt
      
      Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
      a89c33db
    • Mike Frysinger's avatar
      nvedit: speed up printing of environment · 4c94f6c5
      Mike Frysinger authored
      
      The printing code would check the same environment byte multiple times and
      write to the console one byte at a time.  For some devices (such as the
      Blackfin JTAG console which operates in 8 bytes at a time), this is pretty
      damned slow.  So create a small 16 byte buffer to fill up and send to puts
      as needed.  In the process, unify the different print functions, shrink
      the resulting code (source and compiled), and avoid excess env reads as
      those too can be somewhat expensive depending on the board.
      
      Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
      4c94f6c5
  23. May 15, 2009
  24. Apr 03, 2009
    • unsik Kim's avatar
      mflash: Initial mflash support · 75eb82ec
      unsik Kim authored
      
      Mflash is fusion memory device mainly targeted consumer eletronic and
      mobile phone.
      Internally, it have nand flash and other hardware logics and supports
      some different operation (ATA, IO, XIP) modes.
      
      IO mode is custom mode for the host that doesn't have IDE interface.
      (Many mobile targeted SoC doesn't have IDE bus)
      
      This driver support mflash IO mode.
      
      Followings are brief descriptions about IO mode.
      
      1. IO mode based on ATA protocol and uses some custom command. (read
         confirm, write confirm)
      2. IO mode uses SRAM bus interface.
      
      Signed-off-by: default avatarunsik Kim <donari75@gmail.com>
      75eb82ec
  25. Mar 20, 2009
  26. Feb 23, 2009
  27. Feb 17, 2009
  28. Jan 28, 2009
  29. Jan 27, 2009
  30. Dec 07, 2008
    • Gary Jennejohn's avatar
      IOMUX: Add console multiplexing support. · 16a28ef2
      Gary Jennejohn authored
      
      Modifications to support console multiplexing.  This is controlled using
      CONFIG_SYS_CONSOLE_MUX in the board configuration file.
      
      This allows a user to specify multiple console devices in the environment
      with a command like this: setenv stdin serial,nc.  As a result, the user can
      enter text on both the serial and netconsole interfaces.
      
      All devices - stdin, stdout and stderr - can be set in this manner.
      
      1) common/iomux.c and include/iomux.h contain the environment setting
      implementation.
      2) doc/README.iomux contains a somewhat more detailed description.
      3) The implementation in (1) is called from common/cmd_nvedit.c to
      handle setenv and from common/console.c to handle initialization of
      input/output devices at boot time.
      4) common/console.c also contains the code needed to poll multiple console
      devices for input and send output to all devices registered for output.
      5) include/common.h includes iomux.h and common/Makefile generates iomux.o
      when CONFIG_SYS_CONSOLE_MUX is set.
      
      Signed-off-by: default avatarGary Jennejohn <garyj@denx.de>
      16a28ef2
  31. Oct 18, 2008
  32. Sep 10, 2008
Loading