Specifications

the autonegotiation <-> fixed configuration case because the odds of it
working properly are poor anyway.
Rule:
Always try to set up your PHY for autonegotiation.
If you must use some fixed setting, then set it to half duplex mode.
If you really must use a fixed full-duplex setting, then you absolutley must make sure that the link
partner is configured exactly the same.
See also:
Wikipedia: Autonegotiation and Wikipedia: Duplex mismatch
14.2.17. How the Command Line Parsing Works
There are two different command line parsers available with U-Boot: the old "simple" one, and the much
more powerful "hush" shell:
14.2.17.1. Old, simple command line parser
supports environment variables (through setenv / saveenv commands)
several commands on one line, separated by ';'
variable substitution using "... ${_variablename_} ..." syntax
NOTE: Older versions of U-Boot used "$(...)" for variable substitution. Support for this
syntax is still present in current versions, but will be removed soon. Please use "${...}" instead,
which has the additional benefit that your environment definitions are compatible with the Hush shell,
too.
special characters ('$', ';') can be escaped by prefixing with '\', for example:
setenv bootcmd bootm \${address}
You can also escape text by enclosing in single apostrophes, for example:
setenv addip 'setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}:${netdev}:off'
14.2.17.2. Hush shell
similar to Bourne shell, with control structures like if...then...else...fi,
for...do...done, while...do...done, until...do...done, ...
supports environment ("global") variables (through setenv / saveenv commands) and local shell
variables (through standard shell syntax name=value ); only environment variables can be used
with the run command, especially as the variable to run (i. e. the first argument).
In the current implementation, the local variables space and global environment variables space are
separated. Local variables are those you define by simply typing like name=value. To access a
local variable later on, you have to write '$name' or '${name}'; to execute the contents of a
variable directly you can type '$name' at the command prompt. Note that local variables can only
be used for simple commands, not for compound commands etc.
Global environment variables are those you can set and print using setenv and printenv. To run
a command stored in such a variable, you need to use the run command, and you must not use the '$'
sign to access them.
To store commands and special characters in a variable, use single quotation marks surrounding the
whole text of the variable, instead of the backslashes before semicolons and special symbols.
Be careful when using the hash ('#') character - like with a "real" Bourne shell it is the comment
character, so you have to escape it when you use it in the value of a variable.
Examples:
14.2.17. How the Command Line Parsing Works 169