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