mirror of
https://github.com/smaeul/u-boot.git
synced 2025-10-25 01:58:13 +01:00
This is a re-write of the NAND FSL UPM driver using the more universal
hwcontrol callback (instead of the cmdfunc callback). Here is a brief
list of furher modifications:
- For the time being, the UPM setup writing the UPM array has been
removed from the driver and must now be done by the board specific
code.
- The bus width definition in "struct fsl_upm_nand" is now in bits to
comply with the corresponding Linux driver and 8, 16 and 32 bit
accesses are supported.
- chip->dev_read is only set if fun->dev_ready != NULL, which is
required for boards not connecting the R/B pin.
- A few issue have been fixed with MxMR bit manipulation like in the
corresponding Linux driver.
Note: I think the "io_addr" field of "struct fsl_upm" could be removed
as well, because the address is already determined by
"nand->IO_ADDR_[RW]", but I'm not 100% sure.
This patch has been tested on a TQM8548 modules with the NAND chip
Micron MT29F8G08FABWP.
This patch is based on the following patches posted to this list a few
minutes ago:
PPC: add accessor macros to clear and set bits in one shot
83xx/85xx/86xx: add more MxMR local bus definitions
Signed-off-by: Wolfgang Grandegger <wg@grandegger.com>
Acked-by: Anton Vorontsov <avorontsov@ru.mvista.com>
39 lines
856 B
C
39 lines
856 B
C
/*
|
|
* FSL UPM NAND driver
|
|
*
|
|
* Copyright (C) 2007 MontaVista Software, Inc.
|
|
* Anton Vorontsov <avorontsov@ru.mvista.com>
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef __LINUX_MTD_NAND_FSL_UPM
|
|
#define __LINUX_MTD_NAND_FSL_UPM
|
|
|
|
#include <linux/mtd/nand.h>
|
|
|
|
struct fsl_upm {
|
|
void __iomem *mdr;
|
|
void __iomem *mxmr;
|
|
void __iomem *mar;
|
|
void __iomem *io_addr;
|
|
};
|
|
|
|
struct fsl_upm_nand {
|
|
struct fsl_upm upm;
|
|
|
|
int width;
|
|
int upm_cmd_offset;
|
|
int upm_addr_offset;
|
|
int wait_pattern;
|
|
int (*dev_ready)(void);
|
|
int chip_delay;
|
|
};
|
|
|
|
extern int fsl_upm_nand_init(struct nand_chip *chip, struct fsl_upm_nand *fun);
|
|
|
|
#endif
|