|  | 
 | This document describes m[g]flash support in u-boot. | 
 |  | 
 | Contents | 
 |   1. Overview | 
 |   2. Porting mflash driver | 
 |   3. Mflash command | 
 |   4. Misc. | 
 |  | 
 | 1. Overview | 
 | Mflash and gflash are embedded flash drive. The only difference is mflash is | 
 | MCP(Multi Chip Package) device. These two device operate exactly same way. | 
 | So the rest mflash repersents mflash and gflash altogether. | 
 |  | 
 | 2. Porting mflash driver | 
 |  | 
 | 2-1. Board configuration | 
 | * Mflash driver support | 
 | #define CONFIG_CMD_MG_DISK | 
 | #define CONFIG_LIBATA | 
 |  | 
 | * Environment variable support (optional) | 
 | #define CONFIG_ENV_IS_IN_MG_DISK | 
 | Also CONFIG_ENV_ADDR and CONFIG_ENV_SIZE should be defined. | 
 | CONFIG_ENV_ADDR is byte offset starting from 0. | 
 |  | 
 | Following example sets environment variable location to 0x80000 (1024'th | 
 | sector) and size of 0x400 (1024 byte) | 
 | #define CONFIG_ENV_ADDR		0x80000 | 
 | #define CONFIG_ENV_SIZE		0x400 | 
 |  | 
 | * Reserved size config (optional) | 
 | If you want to use some reserved area for bootloader, environment variable or | 
 | whatever, use CONFIG_MG_DISK_RES. The unit is KB. Mflash's block operation | 
 | method use this value as start offset. So any u-boot's partition table parser | 
 | and file system command work consistently. You can access this area by using | 
 | mflash command. | 
 |  | 
 | Following example sets 10MB of reserved area. | 
 | #define CONFIG_MG_DISK_RES	10240 | 
 |  | 
 | 2-2. Porting mg_get_drv_data function | 
 | Mflash is active device and need some gpio control for proper operation. | 
 | This board dependency resolved by using mg_get_drv_data function. | 
 | Port this function at your board init file. See include/mg_disk.h | 
 |  | 
 | Here is some pseudo example. | 
 |  | 
 | static void custom_hdrst_pin (u8 level) | 
 | { | 
 | 	if (level) | 
 | 		/* set hard reset pin to high */ | 
 | 	else | 
 | 		/* set hard reset pin to low */ | 
 | } | 
 |  | 
 | static void custom_ctrl_pin_init (void) | 
 | { | 
 | 	/* Set hard reset, write protect, deep power down pins | 
 | 	 * to gpio. | 
 | 	 * Set these pins to output high | 
 | 	 */ | 
 | } | 
 |  | 
 | struct mg_drv_data* mg_get_drv_data (void) | 
 | { | 
 | 	static struct mg_drv_data prv; | 
 |  | 
 | 	prv.base = /* base address of mflash */ | 
 | 	prv.mg_ctrl_pin_init = custom_ctrl_pin_init; | 
 | 	prv.mg_hdrst_pin = custom_hdrst_pin; | 
 |  | 
 | 	return &prv; | 
 | } | 
 |  | 
 | 3. Mflash command | 
 |  | 
 | * initialize : mgd init | 
 | * random read : mgd read [from] [to] [size] | 
 |   ex) read 256 bytes from 0x300000 of mflash to 0xA0100000 of host memory | 
 |       mgd read 0x300000 0xA0100000 256 | 
 | * random write : mgd write [from] [to] [size] | 
 | * sector read : mgd readsec [sector] [to] [count] | 
 |   ex) read 10 sectors starts from 400 sector to 0xA0100000 | 
 |       mgd readsec 400 0xA0100000 10 | 
 | * sector write : mgd writesec [from] [sector] [count] | 
 |  | 
 | 4. Misc. | 
 | Mflash's device interface name for block driver is "mgd". | 
 | Here is ext2 file system access example. | 
 |  | 
 |  mgd init | 
 |  ext2ls mgd 0:1 /boot | 
 |  ext2load mgd 0:1 0xa0010000 /boot/uImage 1954156 |