95 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
 | 
						|
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
 |