Re: Au1200 and NAND Flash - K9F1G08U0A -

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thank you for this very quick answer ...

Am Donnerstag, den 12.02.2009, 09:17 +0100 schrieb Manuel Lauss:
> Here's the NAND portion of a DB1200 board support rewrite I did a while
> ago.  It uses gen_nand instead of the au1550nd.c driver (which seems to
I saw this gen_nand (plat_nand.c) never before (because it is not
configurable in the Makefile)

> only work on the Db1550 and small page devices).  It shouls also work on
> any Au1550 since the Au1200 has identical NAND hardware.
Do I understand right, this is not a handmade patch aginst
plat_nand.c ? 

I try to mix this code now with the plat_nand.c, rigth?

Kind regards,
 Frank

> 
> ---------- 8< --------------------------- 8< ---------------------
> 
> 
> #include <linux/mtd/mtd.h>
> #include <linux/mtd/nand.h>
> #include <linux/mtd/partitions.h>
> 
> [...]
> 
> static void au1200_nand_cmd_ctrl(struct mtd_info *mtd, int cmd,
> 				 unsigned int ctrl)
> {
> 	struct nand_chip *this = mtd->priv;
> 	unsigned long ioaddr = (unsigned long)this->IO_ADDR_W;
> 
> 	ioaddr &= 0xffffff00;
> 
> 	if (ctrl & NAND_CLE) {
> 		ioaddr += MEM_STNAND_CMD;
> 	} else if (ctrl & NAND_ALE) {
> 		ioaddr += MEM_STNAND_ADDR;
> 	} else {
> 		/* assume we want to r/w real data  by default */
> 		ioaddr += MEM_STNAND_DATA;
> 	}
> 	this->IO_ADDR_R = this->IO_ADDR_W = (void __iomem *)ioaddr;
> 	if (cmd != NAND_CMD_NONE) {
> 		au_writeb(cmd, ioaddr);
> 		au_sync();
> 	}
> }
> 
> static int au1200_nand_device_ready(struct mtd_info *mtd)
> {
> 	return au_readl(MEM_STSTAT) & 1;
> }
> 
> static const char *db1200_part_probes[] = { "cmdlinepart", NULL };
> 
> static struct mtd_partition db1200_nand_parts[] = {
> 	{
> 		.name	= "NAND FS 0",
> 		.offset	= 0,
> 		.size	= 8 * 1024 * 1024,
> 	},
> 	{
> 		.name	= "NAND FS 1",
> 		.offset	= MTDPART_OFS_APPEND,
> 		.size	= MTDPART_SIZ_FULL
> 	},
> };
> 
> struct platform_nand_data db1200_nand_platdata = {
> 	.chip = {
> 		.nr_chips	= 1,
> 		.chip_offset	= 0,
> 		.nr_partitions	= ARRAY_SIZE(db1200_nand_parts),
> 		.partitions	= db1200_nand_parts,
> 		.chip_delay	= 20,
> 		.part_probe_types = db1200_part_probes,
> 	},
> 	.ctrl = {
> 		.hwcontrol	= 0,
> 		.dev_ready	= au1200_nand_device_ready,
> 		.select_chip	= 0,
> 		.cmd_ctrl	= au1200_nand_cmd_ctrl,
> 	},
> };
> 
> static struct resource db1200_nand_res[] = {
> 	[0] = {
> 		.start	= 0x20000000,
> 		.end	= 0x200000ff,
> 		.flags	= IORESOURCE_MEM,
> 	},
> };
> 
> static struct platform_device nand_dev = {
> 	.name		= "gen_nand",
> 	.num_resources	= ARRAY_SIZE(db1200_nand_res),
> 	.resource	= db1200_nand_res,
> 	.id		= -1,
> 	.dev		= {
> 		.platform_data = &db1200_nand_platdata,
> 	}
> };
> 
> [...]
> 
> static struct platform_device *db1200_devs[] __initdata = {
>   [...]
> 	&nand_dev,
>   [...]
> };
> 
> -------------------- 8< ------------------------ 8< -------------------
> 
> 
> Best regards,
> 	Manuel Lauss
> 



[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux