To enable this feature just define CONFIG_HWCONFIG in your board
config file.

This implements a simple hwconfig infrastructure: an
interface for software knobs to control hardware.

This a is very simple implementation, i.e. it is implemented
via the `hwconfig' environment variable. Later we could write
some "hwconfig <enable|disable|list>" commands, ncurses
interface for Award BIOS-like interface, and frame-buffer
interface for AMI GUI[1] BIOS-like interface with mouse
support[2].

Current implementation details/limitations:

1. Doesn't support options dependencies and mutual exclusion.
   We can implement this by integrating apt-get[3] into Das
   U-Boot. But I haven't bothered yet.

2. Since we don't implement a hwconfig command, i.e. we're working
   with the environment directly, there is no way to tell that
   toggling a particular option will need a reboot to take
   effect. So, for now it's advised to always reboot the
   target after modifying the hwconfig variable.

3. We support hwconfig options with arguments. For example,

   set hwconfig "dr_usb:mode=peripheral,phy_type=ulpi"

   This selects three hwconfig options:
   1. dr_usb - enable Dual-Role USB controller;
   2. dr_usb_mode:peripheral - USB in Function mode;
   3. dr_usb_phy_type:ulpi - USB should work with ULPI PHYs.

The purpose of this simple implementation is to refine the
internal API and then we can continue improving the user
experience by adding more mature interfaces, like a hwconfig
command with bells and whistles. Or not adding, if we feel
that the current interface fits people's needs.

[1] http://en.wikipedia.org/wiki/American_Megatrends
[2] Regarding ncurses and GUI with mouse support -- I'm just
    kidding.
[3] The comment regarding apt-get is also a joke, meaning that
    dependency tracking could be non-trivial. For example, for
    enabling HW feature X we may need to disable Y, and turn Z
    into reduced mode (like RMII-only interface for ethernet,
    no MII).

    It's quite trivial to implement simple cases though.
