1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Copyright 2010-2011 Freescale Semiconductor, Inc.
*
*/
/*
* The actual number of banks implemented depends on the IFC version
* - IFC version 1.0 implements 4 banks.
* - IFC version 1.1 onward implements 8 banks.
*/
#define FSL_IFC_BANK_COUNT 8
#define FSL_IFC_REV 0x0000
#define FSL_IFC_V1_1_0 0x01010000
#define FSL_IFC_V2_0_0 0x02000000
/*
* Version 1.1.0 adds offset 0x1000
* Version 2.0.0 adds offset 0x10000
*/
#define FSL_IFC_NCFGR 0x000
#define IFC_NAND_SRAM_INIT_EN 0x20000000
/*
* NAND Flash Command Registers (NAND_FCR0/NAND_FCR1)
*/
#define FSL_IFC_FCR0 0x014
/* General purpose FCM flash command bytes CMD0-CMD7 */
#define IFC_NAND_FCR0_CMD0_SHIFT 24
#define IFC_NAND_FCR0_CMD1_SHIFT 16
#define IFC_NAND_FCR0_CMD2_SHIFT 8
#define IFC_NAND_FCR0_CMD3_SHIFT 0
#define FSL_IFC_ROW0 0x03c
#define IFC_NAND_COL_MS 0x80000000
#define FSL_IFC_COL0 0x044
#define FSL_IFC_ROW3 0x06c
#define FSL_IFC_NAND_BC 0x108
/*
* NAND Flash Instruction Registers (NAND_FIR0/NAND_FIR1/NAND_FIR2)
*/
#define FSL_IFC_FIR0 0x110
/* NAND Machine specific opcodes OP0-OP14*/
#define IFC_NAND_FIR0_OP0_SHIFT 26
#define IFC_NAND_FIR0_OP1_SHIFT 20
#define IFC_NAND_FIR0_OP2_SHIFT 14
#define IFC_NAND_FIR0_OP3_SHIFT 8
#define IFC_NAND_FIR0_OP4_SHIFT 2
#define FSL_IFC_FIR1 0x114
#define IFC_NAND_FIR1_OP5_SHIFT 26
#define IFC_NAND_FIR1_OP6_SHIFT 20
#define IFC_NAND_FIR1_OP7_SHIFT 14
#define IFC_NAND_FIR1_OP8_SHIFT 8
#define FSL_IFC_NAND_CSEL 0x15c
#define IFC_NAND_CSEL_SHIFT 26
#define FSL_IFC_NANDSEQ_STRT 0x164
#define IFC_NAND_SEQ_STRT_FIR_STRT 0x80000000
/* NAND Event and Error Status Register */
#define FSL_IFC_NAND_EVTER_STAT 0x16c
#define IFC_NAND_EVTER_STAT_OPC 0x80000000
#define IFC_NAND_EVTER_STAT_FTOER 0x08000000
#define IFC_NAND_EVTER_STAT_WPER 0x04000000
/* NAND Flash Page Read Completion Event Status Register */
#define FSL_IFC_PGRDCMPL_EVT_STAT 0x174
/* NAND Event and Error Enable Register (NAND_EVTER_EN) */
#define FSL_IFC_EVTER_EN 0x180
#define IFC_NAND_EVTER_EN_OPC_EN 0x80000000
#define IFC_NAND_EVTER_EN_PGRDCMPL_EN 0x20000000
#define IFC_NAND_EVTER_EN_FTOER_EN 0x08000000
#define IFC_NAND_EVTER_EN_WPER_EN 0x04000000
#define FSL_IFC_NAND_FSR 0x1e0
#define FSL_IFC_ECCSTAT(v) (0x1e8 + (4 * v))
#define IFC_NAND_EVTER_STAT_ECCER 0x02000000
/*
* Instruction opcodes to be programmed
* in FIR registers- 6bits
*/
enum ifc_nand_fir_opcodes {
IFC_FIR_OP_NOP,
IFC_FIR_OP_CA0,
IFC_FIR_OP_CA1,
IFC_FIR_OP_CA2,
IFC_FIR_OP_CA3,
IFC_FIR_OP_RA0,
IFC_FIR_OP_RA1,
IFC_FIR_OP_RA2,
IFC_FIR_OP_RA3,
IFC_FIR_OP_CMD0,
IFC_FIR_OP_CMD1,
IFC_FIR_OP_CMD2,
IFC_FIR_OP_CMD3,
IFC_FIR_OP_CMD4,
IFC_FIR_OP_CMD5,
IFC_FIR_OP_CMD6,
IFC_FIR_OP_CMD7,
IFC_FIR_OP_CW0,
IFC_FIR_OP_CW1,
IFC_FIR_OP_CW2,
IFC_FIR_OP_CW3,
IFC_FIR_OP_CW4,
IFC_FIR_OP_CW5,
IFC_FIR_OP_CW6,
IFC_FIR_OP_CW7,
IFC_FIR_OP_WBCD,
IFC_FIR_OP_RBCD,
IFC_FIR_OP_BTRD,
IFC_FIR_OP_RDSTAT,
IFC_FIR_OP_NWAIT,
IFC_FIR_OP_WFR,
IFC_FIR_OP_SBRD,
IFC_FIR_OP_UA,
IFC_FIR_OP_RB,
};
|