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 environement 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.
