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