This document describes m[g]flash support in linux.

Contents
  1. Overview
  2. Reserved area configuration
  3. Example of mflash platform driver registration

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.

Internally, mflash has nand flash and other hardware logics and supports
2 different operation (ATA, IO) modes. ATA mode doesn't need any new
driver and currently works well under standard IDE subsystem. Actually it's
one chip SSD. IO mode is ATA-like custom mode for the host that doesn't have
IDE interface.

Followings are brief descriptions about IO mode.
A. IO mode based on ATA protocol and uses some custom command. (read confirm,
write confirm)
B. IO mode uses SRAM bus interface.
C. IO mode supports 4kB boot area, so host can boot from mflash.

2. Reserved area configuration
If host boot from mflash, usually needs raw area for boot loader image. All of
the mflash's block device operation will be taken this value as start offset.
Note that boot loader's size of reserved area and kernel configuration value
must be same.

3. Example of mflash platform driver registration
Working mflash is very straight forward. Adding platform device stuff to board
configuration file is all. Here is some pseudo example.

static struct mg_drv_data mflash_drv_data = {
	/* If you want to polling driver set to 1 */
	.use_polling = 0,
	/* device attribution */
	.dev_attr = MG_BOOT_DEV
};

static struct resource mg_mflash_rsc[] = {
	/* Base address of mflash */
	[0] = {
		.start = 0x08000000,
		.end = 0x08000000 + SZ_64K - 1,
		.flags = IORESOURCE_MEM
	},
	/* mflash interrupt pin */
	[1] = {
		.start = IRQ_GPIO(84),
		.end = IRQ_GPIO(84),
		.flags = IORESOURCE_IRQ
	},
	/* mflash reset pin */
	[2] = {
		.start = 43,
		.end = 43,
		.name = MG_RST_PIN,
		.flags = IORESOURCE_IO
	},
	/* mflash reset-out pin
	 * If you use mflash as storage device (i.e. other than MG_BOOT_DEV),
	 * should assign this */
	[3] = {
		.start = 51,
		.end = 51,
		.name = MG_RSTOUT_PIN,
		.flags = IORESOURCE_IO
	}
};

static struct platform_device mflash_dev = {
	.name = MG_DEV_NAME,
	.id = -1,
	.dev = {
		.platform_data = &mflash_drv_data,
	},
	.num_resources = ARRAY_SIZE(mg_mflash_rsc),
	.resource = mg_mflash_rsc
};

platform_device_register(&mflash_dev);
