[U-Boot] [PATCHv2 3/3] 83xx, kmeter1: added NAND support

Stefan Roese sr at denx.de
Mon Jul 13 11:20:31 CEST 2009


On Saturday 11 July 2009 10:19:08 Heiko Schocher wrote:
> +++ b/drivers/mtd/nand/kmeter1_nand.c
> @@ -0,0 +1,153 @@
> +/*
> + * (C) Copyright 2009
> + * Heiko Schocher, DENX Software Engineering, hs at denx.de
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#include <common.h>
> +
> +#if defined(CONFIG_CMD_NAND)

This #if shouldn't be necessary.

> +#include <nand.h>
> +#include <asm/io.h>
> +
> +#define CONFIG_NAND_MODE_REG	(CONFIG_SYS_NAND_BASE + 0x20000)
> +#define CONFIG_NAND_DATA_REG	(CONFIG_SYS_NAND_BASE + 0x30000)
> +
> +#define read_mode()	in_8((volatile unsigned char __iomem *) \
> +				CONFIG_NAND_MODE_REG)
> +#define write_mode(val)	out_8((volatile unsigned char __iomem *) \
> +				CONFIG_NAND_MODE_REG, val)
> +#define read_data()	in_8((volatile unsigned char __iomem *) \
> +				CONFIG_NAND_DATA_REG)
> +#define write_data(val)	out_8((volatile unsigned char __iomem *) \
> +				CONFIG_NAND_DATA_REG, val)
> +
> +#define KPN_RDY2	(1 << 7)
> +#define KPN_RDY1	(1 << 6)
> +#define KPN_WPN		(1 << 4)
> +#define KPN_CE2N	(1 << 3)
> +#define KPN_CE1N	(1 << 2)
> +#define KPN_ALE		(1 << 1)
> +#define KPN_CLE		(1 << 0)
> +
> +#define KPN_DEFAULT_CHIP_DELAY 50
> +
> +static int kpn_chip_ready(void)
> +{
> +	if (read_mode() & KPN_RDY1)
> +		return 1;
> +
> +	return 0;
> +}
> +
> +static void kpn_wait_rdy(void)
> +{
> +	int cnt = 1000000;
> +
> +	while (--cnt && !kpn_chip_ready())
> +		udelay(1);
> +
> +	if (!cnt)
> +		printf ("timeout while waiting for RDY\n");
> +}
> +
> +static void kpn_nand_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int
> ctrl) +{
> +	u8	reg_val = read_mode();
> +
> +	if (ctrl & NAND_CTRL_CHANGE) {
> +		if ( ctrl & NAND_NCE)
> +			reg_val = reg_val & ~KPN_CE1N;
> +		else
> +			reg_val = reg_val | KPN_CE1N;
> +		write_mode(reg_val);
> +	}
> +	if (cmd == NAND_CMD_NONE)
> +		return;
> +
> +	reg_val = reg_val & ~(KPN_ALE + KPN_CLE);
> +	if (ctrl & NAND_CLE)
> +		reg_val = reg_val | KPN_CLE;
> +	if (ctrl & NAND_ALE)
> +		reg_val = reg_val | KPN_ALE;
> +
> +	/* select register */
> +	write_mode(reg_val);
> +
> +	/* write cmd */
> +	write_data(cmd);
> +
> +	/* deselect register */
> +	reg_val = reg_val & ~(KPN_ALE + KPN_CLE);
> +	write_mode(reg_val);
> +
> +	/* wait until flash is ready */
> +	kpn_wait_rdy();
> +}
> +
> +static u_char kpn_nand_read_byte(struct mtd_info *mtd)
> +{
> +	return read_data();
> +}
> +
> +static void kpn_nand_write_buf(struct mtd_info *mtd, const u_char *buf,
> int len) +{
> +	int i;
> +
> +	for (i = 0; i < len; i++) {
> +		write_data(buf[i]);
> +		kpn_wait_rdy();
> +	}
> +}
> +
> +static void kpn_nand_read_buf(struct mtd_info *mtd, u_char *buf, int len)
> +{
> +	int i;
> +
> +	for (i = 0; i < len; i++) {
> +		buf[i] = read_data();
> +	}

Nitpicking: The braces are not necessary (single line statement).

Best regards,
Stefan

=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office at denx.de
=====================================================================


More information about the U-Boot mailing list