This patch series adds support for ext4 ls,load and write features in uboot
Journaling is supported for write feature.

To enable support for the ext4 (and ext2) filesystem implementation,
#define CONFIG_FS_EXT4

If you want write support,
#define CONFIG_EXT4_WRITE

To Enable ext2 ls and load commands, modify the board specific config file with
#define CONFIG_CMD_EXT2
This automatically defines CONFIG_FS_EXT4 for you.

To Enable ext4 ls and load commands, modify the board specific config file with
#define CONFIG_CMD_EXT4
This automatically defines CONFIG_FS_EXT4 for you.

To enable ext4 write command, modify the board specific config file with
#define CONFIG_CMD_EXT4
#define CONFIG_CMD_EXT4_WRITE
These automatically define CONFIG_FS_EXT4 and CONFIG_EXT4_WRITE for you.

Also relevant are the generic filesystem commands,
#define CONFIG_CMD_FS_GENERIC
This does not automatically enable EXT4 support for you.

Steps to test:

1. After applying the patch, ext4 specific commands can be seen
   in the boot loader prompt using
	UBOOT #help

	ext4load- load binary file from a Ext4 file system
	ext4ls  - list files in a directory (default /)
	ext4write- create a file in ext4 formatted partition

2. To list the files in ext4 formatted partition, execute
	ext4ls <interface> <dev[:part]> [directory]
	For example:
	UBOOT #ext4ls mmc 0:5 /usr/lib

3. To read and load a file from an ext4 formatted partition to RAM, execute
	ext4load <interface> <dev[:part]> [addr] [filename] [bytes]
	For example:
	UBOOT #ext4load mmc 2:2 0x30007fc0 uImage

4. To write a file to a ext4 formatted partition.
	a) First load a file to RAM at a particular address for example 0x30007fc0.
	Now execute ext4write command
	ext4write <interface> <dev[:part]> [filename] [Address] [sizebytes]
	For example:
	UBOOT #ext4write mmc 2:2 /boot/uImage 0x30007fc0 6183120
	(here 6183120 is the size of the file to be written)
	Note: Absolute path is required for the file to be written

References :
	-- ext4 implementation in Linux Kernel
	-- Uboot existing ext2 load and ls implementation
	-- Journaling block device JBD2 implementation in linux Kernel
