|
@@ -20,8 +20,9 @@
|
|
#include <linux/mtd/compat.h>
|
|
#include <linux/mtd/compat.h>
|
|
#include <linux/mtd/bbm.h>
|
|
#include <linux/mtd/bbm.h>
|
|
|
|
|
|
|
|
+#define MAX_DIES 2
|
|
#define MAX_BUFFERRAM 2
|
|
#define MAX_BUFFERRAM 2
|
|
-#define MAX_ONENAND_PAGESIZE (2048 + 64)
|
|
|
|
|
|
+#define MAX_ONENAND_PAGESIZE (4096 + 128)
|
|
|
|
|
|
/* Scan and identify a OneNAND device */
|
|
/* Scan and identify a OneNAND device */
|
|
extern int onenand_scan (struct mtd_info *mtd, int max_chips);
|
|
extern int onenand_scan (struct mtd_info *mtd, int max_chips);
|
|
@@ -39,9 +40,14 @@ struct onenand_bufferram {
|
|
/**
|
|
/**
|
|
* struct onenand_chip - OneNAND Private Flash Chip Data
|
|
* struct onenand_chip - OneNAND Private Flash Chip Data
|
|
* @param base [BOARDSPECIFIC] address to access OneNAND
|
|
* @param base [BOARDSPECIFIC] address to access OneNAND
|
|
|
|
+ * @dies: [INTERN][FLEXONENAND] number of dies on chip
|
|
|
|
+ * @boundary: [INTERN][FLEXONENAND] Boundary of the dies
|
|
|
|
+ * @diesize: [INTERN][FLEXONENAND] Size of the dies
|
|
* @param chipsize [INTERN] the size of one chip for multichip arrays
|
|
* @param chipsize [INTERN] the size of one chip for multichip arrays
|
|
* @param device_id [INTERN] device ID
|
|
* @param device_id [INTERN] device ID
|
|
* @param verstion_id [INTERN] version ID
|
|
* @param verstion_id [INTERN] version ID
|
|
|
|
+ * @technology [INTERN] describes the internal NAND array technology such as SLC or MLC.
|
|
|
|
+ * @density_mask: [INTERN] chip density, used for DDP devices
|
|
* @param options [BOARDSPECIFIC] various chip options. They can partly be set to inform onenand_scan about
|
|
* @param options [BOARDSPECIFIC] various chip options. They can partly be set to inform onenand_scan about
|
|
* @param erase_shift [INTERN] number of address bits in a block
|
|
* @param erase_shift [INTERN] number of address bits in a block
|
|
* @param page_shift [INTERN] number of address bits in a page
|
|
* @param page_shift [INTERN] number of address bits in a page
|
|
@@ -64,9 +70,13 @@ struct onenand_bufferram {
|
|
*/
|
|
*/
|
|
struct onenand_chip {
|
|
struct onenand_chip {
|
|
void __iomem *base;
|
|
void __iomem *base;
|
|
|
|
+ unsigned int dies;
|
|
|
|
+ unsigned int boundary[MAX_DIES];
|
|
|
|
+ unsigned int diesize[MAX_DIES];
|
|
unsigned int chipsize;
|
|
unsigned int chipsize;
|
|
unsigned int device_id;
|
|
unsigned int device_id;
|
|
unsigned int version_id;
|
|
unsigned int version_id;
|
|
|
|
+ unsigned int technology;
|
|
unsigned int density_mask;
|
|
unsigned int density_mask;
|
|
unsigned int options;
|
|
unsigned int options;
|
|
|
|
|
|
@@ -124,6 +134,8 @@ struct onenand_chip {
|
|
#define ONENAND_SET_BUFFERRAM0(this) (this->bufferram_index = 0)
|
|
#define ONENAND_SET_BUFFERRAM0(this) (this->bufferram_index = 0)
|
|
#define ONENAND_SET_BUFFERRAM1(this) (this->bufferram_index = 1)
|
|
#define ONENAND_SET_BUFFERRAM1(this) (this->bufferram_index = 1)
|
|
|
|
|
|
|
|
+#define FLEXONENAND(this) (this->device_id & DEVICE_IS_FLEXONENAND)
|
|
|
|
+#define ONENAND_IS_MLC(this) (this->technology & ONENAND_TECHNOLOGY_IS_MLC)
|
|
#define ONENAND_IS_DDP(this) \
|
|
#define ONENAND_IS_DDP(this) \
|
|
(this->device_id & ONENAND_DEVICE_IS_DDP)
|
|
(this->device_id & ONENAND_DEVICE_IS_DDP)
|
|
|
|
|
|
@@ -157,4 +169,6 @@ struct onenand_manufacturers {
|
|
int onenand_bbt_read_oob(struct mtd_info *mtd, loff_t from,
|
|
int onenand_bbt_read_oob(struct mtd_info *mtd, loff_t from,
|
|
struct mtd_oob_ops *ops);
|
|
struct mtd_oob_ops *ops);
|
|
|
|
|
|
|
|
+unsigned int onenand_block(struct onenand_chip *this, loff_t addr);
|
|
|
|
+int flexonenand_region(struct mtd_info *mtd, loff_t addr);
|
|
#endif /* __LINUX_MTD_ONENAND_H */
|
|
#endif /* __LINUX_MTD_ONENAND_H */
|