mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-12 07:43:22 +09:00
![Wolfgang Grandegger](/assets/img/avatar_default.png)
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
|