1*0b66513bSYork Sun /* 2*0b66513bSYork Sun * Copyright 2010-2011 Freescale Semiconductor, Inc. 3*0b66513bSYork Sun * Author: Dipen Dudhat <dipen.dudhat@freescale.com> 4*0b66513bSYork Sun * 5*0b66513bSYork Sun * SPDX-License-Identifier: GPL-2.0+ 6*0b66513bSYork Sun */ 7*0b66513bSYork Sun 8*0b66513bSYork Sun #ifndef __FSL_IFC_H 9*0b66513bSYork Sun #define __FSL_IFC_H 10*0b66513bSYork Sun 11*0b66513bSYork Sun #ifdef CONFIG_FSL_IFC 12*0b66513bSYork Sun #include <config.h> 13*0b66513bSYork Sun #include <common.h> 14*0b66513bSYork Sun 15*0b66513bSYork Sun /* 16*0b66513bSYork Sun * CSPR - Chip Select Property Register 17*0b66513bSYork Sun */ 18*0b66513bSYork Sun #define CSPR_BA 0xFFFF0000 19*0b66513bSYork Sun #define CSPR_BA_SHIFT 16 20*0b66513bSYork Sun #define CSPR_PORT_SIZE 0x00000180 21*0b66513bSYork Sun #define CSPR_PORT_SIZE_SHIFT 7 22*0b66513bSYork Sun /* Port Size 8 bit */ 23*0b66513bSYork Sun #define CSPR_PORT_SIZE_8 0x00000080 24*0b66513bSYork Sun /* Port Size 16 bit */ 25*0b66513bSYork Sun #define CSPR_PORT_SIZE_16 0x00000100 26*0b66513bSYork Sun /* Port Size 32 bit */ 27*0b66513bSYork Sun #define CSPR_PORT_SIZE_32 0x00000180 28*0b66513bSYork Sun /* Write Protect */ 29*0b66513bSYork Sun #define CSPR_WP 0x00000040 30*0b66513bSYork Sun #define CSPR_WP_SHIFT 6 31*0b66513bSYork Sun /* Machine Select */ 32*0b66513bSYork Sun #define CSPR_MSEL 0x00000006 33*0b66513bSYork Sun #define CSPR_MSEL_SHIFT 1 34*0b66513bSYork Sun /* NOR */ 35*0b66513bSYork Sun #define CSPR_MSEL_NOR 0x00000000 36*0b66513bSYork Sun /* NAND */ 37*0b66513bSYork Sun #define CSPR_MSEL_NAND 0x00000002 38*0b66513bSYork Sun /* GPCM */ 39*0b66513bSYork Sun #define CSPR_MSEL_GPCM 0x00000004 40*0b66513bSYork Sun /* Bank Valid */ 41*0b66513bSYork Sun #define CSPR_V 0x00000001 42*0b66513bSYork Sun #define CSPR_V_SHIFT 0 43*0b66513bSYork Sun 44*0b66513bSYork Sun /* Convert an address into the right format for the CSPR Registers */ 45*0b66513bSYork Sun #define CSPR_PHYS_ADDR(x) (((uint64_t)x) & 0xffff0000) 46*0b66513bSYork Sun 47*0b66513bSYork Sun /* 48*0b66513bSYork Sun * Address Mask Register 49*0b66513bSYork Sun */ 50*0b66513bSYork Sun #define IFC_AMASK_MASK 0xFFFF0000 51*0b66513bSYork Sun #define IFC_AMASK_SHIFT 16 52*0b66513bSYork Sun #define IFC_AMASK(n) (IFC_AMASK_MASK << \ 53*0b66513bSYork Sun (__ilog2(n) - IFC_AMASK_SHIFT)) 54*0b66513bSYork Sun 55*0b66513bSYork Sun /* 56*0b66513bSYork Sun * Chip Select Option Register IFC_NAND Machine 57*0b66513bSYork Sun */ 58*0b66513bSYork Sun /* Enable ECC Encoder */ 59*0b66513bSYork Sun #define CSOR_NAND_ECC_ENC_EN 0x80000000 60*0b66513bSYork Sun #define CSOR_NAND_ECC_MODE_MASK 0x30000000 61*0b66513bSYork Sun /* 4 bit correction per 520 Byte sector */ 62*0b66513bSYork Sun #define CSOR_NAND_ECC_MODE_4 0x00000000 63*0b66513bSYork Sun /* 8 bit correction per 528 Byte sector */ 64*0b66513bSYork Sun #define CSOR_NAND_ECC_MODE_8 0x10000000 65*0b66513bSYork Sun /* Enable ECC Decoder */ 66*0b66513bSYork Sun #define CSOR_NAND_ECC_DEC_EN 0x04000000 67*0b66513bSYork Sun /* Row Address Length */ 68*0b66513bSYork Sun #define CSOR_NAND_RAL_MASK 0x01800000 69*0b66513bSYork Sun #define CSOR_NAND_RAL_SHIFT 20 70*0b66513bSYork Sun #define CSOR_NAND_RAL_1 0x00000000 71*0b66513bSYork Sun #define CSOR_NAND_RAL_2 0x00800000 72*0b66513bSYork Sun #define CSOR_NAND_RAL_3 0x01000000 73*0b66513bSYork Sun #define CSOR_NAND_RAL_4 0x01800000 74*0b66513bSYork Sun /* Page Size 512b, 2k, 4k */ 75*0b66513bSYork Sun #define CSOR_NAND_PGS_MASK 0x00180000 76*0b66513bSYork Sun #define CSOR_NAND_PGS_SHIFT 16 77*0b66513bSYork Sun #define CSOR_NAND_PGS_512 0x00000000 78*0b66513bSYork Sun #define CSOR_NAND_PGS_2K 0x00080000 79*0b66513bSYork Sun #define CSOR_NAND_PGS_4K 0x00100000 80*0b66513bSYork Sun /* Spare region Size */ 81*0b66513bSYork Sun #define CSOR_NAND_SPRZ_MASK 0x0000E000 82*0b66513bSYork Sun #define CSOR_NAND_SPRZ_SHIFT 13 83*0b66513bSYork Sun #define CSOR_NAND_SPRZ_16 0x00000000 84*0b66513bSYork Sun #define CSOR_NAND_SPRZ_64 0x00002000 85*0b66513bSYork Sun #define CSOR_NAND_SPRZ_128 0x00004000 86*0b66513bSYork Sun #define CSOR_NAND_SPRZ_210 0x00006000 87*0b66513bSYork Sun #define CSOR_NAND_SPRZ_218 0x00008000 88*0b66513bSYork Sun #define CSOR_NAND_SPRZ_224 0x0000A000 89*0b66513bSYork Sun /* Pages Per Block */ 90*0b66513bSYork Sun #define CSOR_NAND_PB_MASK 0x00000700 91*0b66513bSYork Sun #define CSOR_NAND_PB_SHIFT 8 92*0b66513bSYork Sun #define CSOR_NAND_PB(n) ((__ilog2(n) - 5) << CSOR_NAND_PB_SHIFT) 93*0b66513bSYork Sun /* Time for Read Enable High to Output High Impedance */ 94*0b66513bSYork Sun #define CSOR_NAND_TRHZ_MASK 0x0000001C 95*0b66513bSYork Sun #define CSOR_NAND_TRHZ_SHIFT 2 96*0b66513bSYork Sun #define CSOR_NAND_TRHZ_20 0x00000000 97*0b66513bSYork Sun #define CSOR_NAND_TRHZ_40 0x00000004 98*0b66513bSYork Sun #define CSOR_NAND_TRHZ_60 0x00000008 99*0b66513bSYork Sun #define CSOR_NAND_TRHZ_80 0x0000000C 100*0b66513bSYork Sun #define CSOR_NAND_TRHZ_100 0x00000010 101*0b66513bSYork Sun /* Buffer control disable */ 102*0b66513bSYork Sun #define CSOR_NAND_BCTLD 0x00000001 103*0b66513bSYork Sun 104*0b66513bSYork Sun /* 105*0b66513bSYork Sun * Chip Select Option Register - NOR Flash Mode 106*0b66513bSYork Sun */ 107*0b66513bSYork Sun /* Enable Address shift Mode */ 108*0b66513bSYork Sun #define CSOR_NOR_ADM_SHFT_MODE_EN 0x80000000 109*0b66513bSYork Sun /* Page Read Enable from NOR device */ 110*0b66513bSYork Sun #define CSOR_NOR_PGRD_EN 0x10000000 111*0b66513bSYork Sun /* AVD Toggle Enable during Burst Program */ 112*0b66513bSYork Sun #define CSOR_NOR_AVD_TGL_PGM_EN 0x01000000 113*0b66513bSYork Sun /* Address Data Multiplexing Shift */ 114*0b66513bSYork Sun #define CSOR_NOR_ADM_MASK 0x0003E000 115*0b66513bSYork Sun #define CSOR_NOR_ADM_SHIFT_SHIFT 13 116*0b66513bSYork Sun #define CSOR_NOR_ADM_SHIFT(n) ((n) << CSOR_NOR_ADM_SHIFT_SHIFT) 117*0b66513bSYork Sun /* Type of the NOR device hooked */ 118*0b66513bSYork Sun #define CSOR_NOR_NOR_MODE_AYSNC_NOR 0x00000000 119*0b66513bSYork Sun #define CSOR_NOR_NOR_MODE_AVD_NOR 0x00000020 120*0b66513bSYork Sun /* Time for Read Enable High to Output High Impedance */ 121*0b66513bSYork Sun #define CSOR_NOR_TRHZ_MASK 0x0000001C 122*0b66513bSYork Sun #define CSOR_NOR_TRHZ_SHIFT 2 123*0b66513bSYork Sun #define CSOR_NOR_TRHZ_20 0x00000000 124*0b66513bSYork Sun #define CSOR_NOR_TRHZ_40 0x00000004 125*0b66513bSYork Sun #define CSOR_NOR_TRHZ_60 0x00000008 126*0b66513bSYork Sun #define CSOR_NOR_TRHZ_80 0x0000000C 127*0b66513bSYork Sun #define CSOR_NOR_TRHZ_100 0x00000010 128*0b66513bSYork Sun /* Buffer control disable */ 129*0b66513bSYork Sun #define CSOR_NOR_BCTLD 0x00000001 130*0b66513bSYork Sun 131*0b66513bSYork Sun /* 132*0b66513bSYork Sun * Chip Select Option Register - GPCM Mode 133*0b66513bSYork Sun */ 134*0b66513bSYork Sun /* GPCM Mode - Normal */ 135*0b66513bSYork Sun #define CSOR_GPCM_GPMODE_NORMAL 0x00000000 136*0b66513bSYork Sun /* GPCM Mode - GenericASIC */ 137*0b66513bSYork Sun #define CSOR_GPCM_GPMODE_ASIC 0x80000000 138*0b66513bSYork Sun /* Parity Mode odd/even */ 139*0b66513bSYork Sun #define CSOR_GPCM_PARITY_EVEN 0x40000000 140*0b66513bSYork Sun /* Parity Checking enable/disable */ 141*0b66513bSYork Sun #define CSOR_GPCM_PAR_EN 0x20000000 142*0b66513bSYork Sun /* GPCM Timeout Count */ 143*0b66513bSYork Sun #define CSOR_GPCM_GPTO_MASK 0x0F000000 144*0b66513bSYork Sun #define CSOR_GPCM_GPTO_SHIFT 24 145*0b66513bSYork Sun #define CSOR_GPCM_GPTO(n) ((__ilog2(n) - 8) << CSOR_GPCM_GPTO_SHIFT) 146*0b66513bSYork Sun /* GPCM External Access Termination mode for read access */ 147*0b66513bSYork Sun #define CSOR_GPCM_RGETA_EXT 0x00080000 148*0b66513bSYork Sun /* GPCM External Access Termination mode for write access */ 149*0b66513bSYork Sun #define CSOR_GPCM_WGETA_EXT 0x00040000 150*0b66513bSYork Sun /* Address Data Multiplexing Shift */ 151*0b66513bSYork Sun #define CSOR_GPCM_ADM_MASK 0x0003E000 152*0b66513bSYork Sun #define CSOR_GPCM_ADM_SHIFT_SHIFT 13 153*0b66513bSYork Sun #define CSOR_GPCM_ADM_SHIFT(n) ((n) << CSOR_GPCM_ADM_SHIFT_SHIFT) 154*0b66513bSYork Sun /* Generic ASIC Parity error indication delay */ 155*0b66513bSYork Sun #define CSOR_GPCM_GAPERRD_MASK 0x00000180 156*0b66513bSYork Sun #define CSOR_GPCM_GAPERRD_SHIFT 7 157*0b66513bSYork Sun #define CSOR_GPCM_GAPERRD(n) (((n) - 1) << CSOR_GPCM_GAPERRD_SHIFT) 158*0b66513bSYork Sun /* Time for Read Enable High to Output High Impedance */ 159*0b66513bSYork Sun #define CSOR_GPCM_TRHZ_MASK 0x0000001C 160*0b66513bSYork Sun #define CSOR_GPCM_TRHZ_20 0x00000000 161*0b66513bSYork Sun #define CSOR_GPCM_TRHZ_40 0x00000004 162*0b66513bSYork Sun #define CSOR_GPCM_TRHZ_60 0x00000008 163*0b66513bSYork Sun #define CSOR_GPCM_TRHZ_80 0x0000000C 164*0b66513bSYork Sun #define CSOR_GPCM_TRHZ_100 0x00000010 165*0b66513bSYork Sun /* Buffer control disable */ 166*0b66513bSYork Sun #define CSOR_GPCM_BCTLD 0x00000001 167*0b66513bSYork Sun 168*0b66513bSYork Sun /* 169*0b66513bSYork Sun * Flash Timing Registers (FTIM0 - FTIM2_CSn) 170*0b66513bSYork Sun */ 171*0b66513bSYork Sun /* 172*0b66513bSYork Sun * FTIM0 - NAND Flash Mode 173*0b66513bSYork Sun */ 174*0b66513bSYork Sun #define FTIM0_NAND 0x7EFF3F3F 175*0b66513bSYork Sun #define FTIM0_NAND_TCCST_SHIFT 25 176*0b66513bSYork Sun #define FTIM0_NAND_TCCST(n) ((n) << FTIM0_NAND_TCCST_SHIFT) 177*0b66513bSYork Sun #define FTIM0_NAND_TWP_SHIFT 16 178*0b66513bSYork Sun #define FTIM0_NAND_TWP(n) ((n) << FTIM0_NAND_TWP_SHIFT) 179*0b66513bSYork Sun #define FTIM0_NAND_TWCHT_SHIFT 8 180*0b66513bSYork Sun #define FTIM0_NAND_TWCHT(n) ((n) << FTIM0_NAND_TWCHT_SHIFT) 181*0b66513bSYork Sun #define FTIM0_NAND_TWH_SHIFT 0 182*0b66513bSYork Sun #define FTIM0_NAND_TWH(n) ((n) << FTIM0_NAND_TWH_SHIFT) 183*0b66513bSYork Sun /* 184*0b66513bSYork Sun * FTIM1 - NAND Flash Mode 185*0b66513bSYork Sun */ 186*0b66513bSYork Sun #define FTIM1_NAND 0xFFFF3FFF 187*0b66513bSYork Sun #define FTIM1_NAND_TADLE_SHIFT 24 188*0b66513bSYork Sun #define FTIM1_NAND_TADLE(n) ((n) << FTIM1_NAND_TADLE_SHIFT) 189*0b66513bSYork Sun #define FTIM1_NAND_TWBE_SHIFT 16 190*0b66513bSYork Sun #define FTIM1_NAND_TWBE(n) ((n) << FTIM1_NAND_TWBE_SHIFT) 191*0b66513bSYork Sun #define FTIM1_NAND_TRR_SHIFT 8 192*0b66513bSYork Sun #define FTIM1_NAND_TRR(n) ((n) << FTIM1_NAND_TRR_SHIFT) 193*0b66513bSYork Sun #define FTIM1_NAND_TRP_SHIFT 0 194*0b66513bSYork Sun #define FTIM1_NAND_TRP(n) ((n) << FTIM1_NAND_TRP_SHIFT) 195*0b66513bSYork Sun /* 196*0b66513bSYork Sun * FTIM2 - NAND Flash Mode 197*0b66513bSYork Sun */ 198*0b66513bSYork Sun #define FTIM2_NAND 0x1FE1F8FF 199*0b66513bSYork Sun #define FTIM2_NAND_TRAD_SHIFT 21 200*0b66513bSYork Sun #define FTIM2_NAND_TRAD(n) ((n) << FTIM2_NAND_TRAD_SHIFT) 201*0b66513bSYork Sun #define FTIM2_NAND_TREH_SHIFT 11 202*0b66513bSYork Sun #define FTIM2_NAND_TREH(n) ((n) << FTIM2_NAND_TREH_SHIFT) 203*0b66513bSYork Sun #define FTIM2_NAND_TWHRE_SHIFT 0 204*0b66513bSYork Sun #define FTIM2_NAND_TWHRE(n) ((n) << FTIM2_NAND_TWHRE_SHIFT) 205*0b66513bSYork Sun /* 206*0b66513bSYork Sun * FTIM3 - NAND Flash Mode 207*0b66513bSYork Sun */ 208*0b66513bSYork Sun #define FTIM3_NAND 0xFF000000 209*0b66513bSYork Sun #define FTIM3_NAND_TWW_SHIFT 24 210*0b66513bSYork Sun #define FTIM3_NAND_TWW(n) ((n) << FTIM3_NAND_TWW_SHIFT) 211*0b66513bSYork Sun 212*0b66513bSYork Sun /* 213*0b66513bSYork Sun * FTIM0 - NOR Flash Mode 214*0b66513bSYork Sun */ 215*0b66513bSYork Sun #define FTIM0_NOR 0xF03F3F3F 216*0b66513bSYork Sun #define FTIM0_NOR_TACSE_SHIFT 28 217*0b66513bSYork Sun #define FTIM0_NOR_TACSE(n) ((n) << FTIM0_NOR_TACSE_SHIFT) 218*0b66513bSYork Sun #define FTIM0_NOR_TEADC_SHIFT 16 219*0b66513bSYork Sun #define FTIM0_NOR_TEADC(n) ((n) << FTIM0_NOR_TEADC_SHIFT) 220*0b66513bSYork Sun #define FTIM0_NOR_TAVDS_SHIFT 8 221*0b66513bSYork Sun #define FTIM0_NOR_TAVDS(n) ((n) << FTIM0_NOR_TAVDS_SHIFT) 222*0b66513bSYork Sun #define FTIM0_NOR_TEAHC_SHIFT 0 223*0b66513bSYork Sun #define FTIM0_NOR_TEAHC(n) ((n) << FTIM0_NOR_TEAHC_SHIFT) 224*0b66513bSYork Sun /* 225*0b66513bSYork Sun * FTIM1 - NOR Flash Mode 226*0b66513bSYork Sun */ 227*0b66513bSYork Sun #define FTIM1_NOR 0xFF003F3F 228*0b66513bSYork Sun #define FTIM1_NOR_TACO_SHIFT 24 229*0b66513bSYork Sun #define FTIM1_NOR_TACO(n) ((n) << FTIM1_NOR_TACO_SHIFT) 230*0b66513bSYork Sun #define FTIM1_NOR_TRAD_NOR_SHIFT 8 231*0b66513bSYork Sun #define FTIM1_NOR_TRAD_NOR(n) ((n) << FTIM1_NOR_TRAD_NOR_SHIFT) 232*0b66513bSYork Sun #define FTIM1_NOR_TSEQRAD_NOR_SHIFT 0 233*0b66513bSYork Sun #define FTIM1_NOR_TSEQRAD_NOR(n) ((n) << FTIM1_NOR_TSEQRAD_NOR_SHIFT) 234*0b66513bSYork Sun /* 235*0b66513bSYork Sun * FTIM2 - NOR Flash Mode 236*0b66513bSYork Sun */ 237*0b66513bSYork Sun #define FTIM2_NOR 0x0F3CFCFF 238*0b66513bSYork Sun #define FTIM2_NOR_TCS_SHIFT 24 239*0b66513bSYork Sun #define FTIM2_NOR_TCS(n) ((n) << FTIM2_NOR_TCS_SHIFT) 240*0b66513bSYork Sun #define FTIM2_NOR_TCH_SHIFT 18 241*0b66513bSYork Sun #define FTIM2_NOR_TCH(n) ((n) << FTIM2_NOR_TCH_SHIFT) 242*0b66513bSYork Sun #define FTIM2_NOR_TWPH_SHIFT 10 243*0b66513bSYork Sun #define FTIM2_NOR_TWPH(n) ((n) << FTIM2_NOR_TWPH_SHIFT) 244*0b66513bSYork Sun #define FTIM2_NOR_TWP_SHIFT 0 245*0b66513bSYork Sun #define FTIM2_NOR_TWP(n) ((n) << FTIM2_NOR_TWP_SHIFT) 246*0b66513bSYork Sun 247*0b66513bSYork Sun /* 248*0b66513bSYork Sun * FTIM0 - Normal GPCM Mode 249*0b66513bSYork Sun */ 250*0b66513bSYork Sun #define FTIM0_GPCM 0xF03F3F3F 251*0b66513bSYork Sun #define FTIM0_GPCM_TACSE_SHIFT 28 252*0b66513bSYork Sun #define FTIM0_GPCM_TACSE(n) ((n) << FTIM0_GPCM_TACSE_SHIFT) 253*0b66513bSYork Sun #define FTIM0_GPCM_TEADC_SHIFT 16 254*0b66513bSYork Sun #define FTIM0_GPCM_TEADC(n) ((n) << FTIM0_GPCM_TEADC_SHIFT) 255*0b66513bSYork Sun #define FTIM0_GPCM_TAVDS_SHIFT 8 256*0b66513bSYork Sun #define FTIM0_GPCM_TAVDS(n) ((n) << FTIM0_GPCM_TAVDS_SHIFT) 257*0b66513bSYork Sun #define FTIM0_GPCM_TEAHC_SHIFT 0 258*0b66513bSYork Sun #define FTIM0_GPCM_TEAHC(n) ((n) << FTIM0_GPCM_TEAHC_SHIFT) 259*0b66513bSYork Sun /* 260*0b66513bSYork Sun * FTIM1 - Normal GPCM Mode 261*0b66513bSYork Sun */ 262*0b66513bSYork Sun #define FTIM1_GPCM 0xFF003F00 263*0b66513bSYork Sun #define FTIM1_GPCM_TACO_SHIFT 24 264*0b66513bSYork Sun #define FTIM1_GPCM_TACO(n) ((n) << FTIM1_GPCM_TACO_SHIFT) 265*0b66513bSYork Sun #define FTIM1_GPCM_TRAD_SHIFT 8 266*0b66513bSYork Sun #define FTIM1_GPCM_TRAD(n) ((n) << FTIM1_GPCM_TRAD_SHIFT) 267*0b66513bSYork Sun /* 268*0b66513bSYork Sun * FTIM2 - Normal GPCM Mode 269*0b66513bSYork Sun */ 270*0b66513bSYork Sun #define FTIM2_GPCM 0x0F3C00FF 271*0b66513bSYork Sun #define FTIM2_GPCM_TCS_SHIFT 24 272*0b66513bSYork Sun #define FTIM2_GPCM_TCS(n) ((n) << FTIM2_GPCM_TCS_SHIFT) 273*0b66513bSYork Sun #define FTIM2_GPCM_TCH_SHIFT 18 274*0b66513bSYork Sun #define FTIM2_GPCM_TCH(n) ((n) << FTIM2_GPCM_TCH_SHIFT) 275*0b66513bSYork Sun #define FTIM2_GPCM_TWP_SHIFT 0 276*0b66513bSYork Sun #define FTIM2_GPCM_TWP(n) ((n) << FTIM2_GPCM_TWP_SHIFT) 277*0b66513bSYork Sun 278*0b66513bSYork Sun /* 279*0b66513bSYork Sun * Ready Busy Status Register (RB_STAT) 280*0b66513bSYork Sun */ 281*0b66513bSYork Sun /* CSn is READY */ 282*0b66513bSYork Sun #define IFC_RB_STAT_READY_CS0 0x80000000 283*0b66513bSYork Sun #define IFC_RB_STAT_READY_CS1 0x40000000 284*0b66513bSYork Sun #define IFC_RB_STAT_READY_CS2 0x20000000 285*0b66513bSYork Sun #define IFC_RB_STAT_READY_CS3 0x10000000 286*0b66513bSYork Sun 287*0b66513bSYork Sun /* 288*0b66513bSYork Sun * General Control Register (GCR) 289*0b66513bSYork Sun */ 290*0b66513bSYork Sun #define IFC_GCR_MASK 0x8000F800 291*0b66513bSYork Sun /* reset all IFC hardware */ 292*0b66513bSYork Sun #define IFC_GCR_SOFT_RST_ALL 0x80000000 293*0b66513bSYork Sun /* Turnaroud Time of external buffer */ 294*0b66513bSYork Sun #define IFC_GCR_TBCTL_TRN_TIME 0x0000F800 295*0b66513bSYork Sun #define IFC_GCR_TBCTL_TRN_TIME_SHIFT 11 296*0b66513bSYork Sun 297*0b66513bSYork Sun /* 298*0b66513bSYork Sun * Common Event and Error Status Register (CM_EVTER_STAT) 299*0b66513bSYork Sun */ 300*0b66513bSYork Sun /* Chip select error */ 301*0b66513bSYork Sun #define IFC_CM_EVTER_STAT_CSER 0x80000000 302*0b66513bSYork Sun 303*0b66513bSYork Sun /* 304*0b66513bSYork Sun * Common Event and Error Enable Register (CM_EVTER_EN) 305*0b66513bSYork Sun */ 306*0b66513bSYork Sun /* Chip select error checking enable */ 307*0b66513bSYork Sun #define IFC_CM_EVTER_EN_CSEREN 0x80000000 308*0b66513bSYork Sun 309*0b66513bSYork Sun /* 310*0b66513bSYork Sun * Common Event and Error Interrupt Enable Register (CM_EVTER_INTR_EN) 311*0b66513bSYork Sun */ 312*0b66513bSYork Sun /* Chip select error interrupt enable */ 313*0b66513bSYork Sun #define IFC_CM_EVTER_INTR_EN_CSERIREN 0x80000000 314*0b66513bSYork Sun 315*0b66513bSYork Sun /* 316*0b66513bSYork Sun * Common Transfer Error Attribute Register-0 (CM_ERATTR0) 317*0b66513bSYork Sun */ 318*0b66513bSYork Sun /* transaction type of error Read/Write */ 319*0b66513bSYork Sun #define IFC_CM_ERATTR0_ERTYP_READ 0x80000000 320*0b66513bSYork Sun #define IFC_CM_ERATTR0_ERAID 0x0FF00000 321*0b66513bSYork Sun #define IFC_CM_ERATTR0_ESRCID 0x0000FF00 322*0b66513bSYork Sun 323*0b66513bSYork Sun /* 324*0b66513bSYork Sun * Clock Control Register (CCR) 325*0b66513bSYork Sun */ 326*0b66513bSYork Sun #define IFC_CCR_MASK 0x0F0F8800 327*0b66513bSYork Sun /* Clock division ratio */ 328*0b66513bSYork Sun #define IFC_CCR_CLK_DIV_MASK 0x0F000000 329*0b66513bSYork Sun #define IFC_CCR_CLK_DIV_SHIFT 24 330*0b66513bSYork Sun #define IFC_CCR_CLK_DIV(n) ((n-1) << IFC_CCR_CLK_DIV_SHIFT) 331*0b66513bSYork Sun /* IFC Clock Delay */ 332*0b66513bSYork Sun #define IFC_CCR_CLK_DLY_MASK 0x000F0000 333*0b66513bSYork Sun #define IFC_CCR_CLK_DLY_SHIFT 16 334*0b66513bSYork Sun #define IFC_CCR_CLK_DLY(n) ((n) << IFC_CCR_CLK_DLY_SHIFT) 335*0b66513bSYork Sun /* Invert IFC clock before sending out */ 336*0b66513bSYork Sun #define IFC_CCR_INV_CLK_EN 0x00008000 337*0b66513bSYork Sun /* Fedback IFC Clock */ 338*0b66513bSYork Sun #define IFC_CCR_FB_IFC_CLK_SEL 0x00000800 339*0b66513bSYork Sun 340*0b66513bSYork Sun /* 341*0b66513bSYork Sun * Clock Status Register (CSR) 342*0b66513bSYork Sun */ 343*0b66513bSYork Sun /* Clk is stable */ 344*0b66513bSYork Sun #define IFC_CSR_CLK_STAT_STABLE 0x80000000 345*0b66513bSYork Sun 346*0b66513bSYork Sun /* 347*0b66513bSYork Sun * IFC_NAND Machine Specific Registers 348*0b66513bSYork Sun */ 349*0b66513bSYork Sun /* 350*0b66513bSYork Sun * NAND Configuration Register (NCFGR) 351*0b66513bSYork Sun */ 352*0b66513bSYork Sun /* Auto Boot Mode */ 353*0b66513bSYork Sun #define IFC_NAND_NCFGR_BOOT 0x80000000 354*0b66513bSYork Sun /* Addressing Mode-ROW0+n/COL0 */ 355*0b66513bSYork Sun #define IFC_NAND_NCFGR_ADDR_MODE_RC0 0x00000000 356*0b66513bSYork Sun /* Addressing Mode-ROW0+n/COL0+n */ 357*0b66513bSYork Sun #define IFC_NAND_NCFGR_ADDR_MODE_RC1 0x00400000 358*0b66513bSYork Sun /* Number of loop iterations of FIR sequences for multi page operations */ 359*0b66513bSYork Sun #define IFC_NAND_NCFGR_NUM_LOOP_MASK 0x0000F000 360*0b66513bSYork Sun #define IFC_NAND_NCFGR_NUM_LOOP_SHIFT 12 361*0b66513bSYork Sun #define IFC_NAND_NCFGR_NUM_LOOP(n) ((n) << IFC_NAND_NCFGR_NUM_LOOP_SHIFT) 362*0b66513bSYork Sun /* Number of wait cycles */ 363*0b66513bSYork Sun #define IFC_NAND_NCFGR_NUM_WAIT_MASK 0x000000FF 364*0b66513bSYork Sun #define IFC_NAND_NCFGR_NUM_WAIT_SHIFT 0 365*0b66513bSYork Sun 366*0b66513bSYork Sun /* 367*0b66513bSYork Sun * NAND Flash Command Registers (NAND_FCR0/NAND_FCR1) 368*0b66513bSYork Sun */ 369*0b66513bSYork Sun /* General purpose FCM flash command bytes CMD0-CMD7 */ 370*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD0 0xFF000000 371*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD0_SHIFT 24 372*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD1 0x00FF0000 373*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD1_SHIFT 16 374*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD2 0x0000FF00 375*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD2_SHIFT 8 376*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD3 0x000000FF 377*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD3_SHIFT 0 378*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD4 0xFF000000 379*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD4_SHIFT 24 380*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD5 0x00FF0000 381*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD5_SHIFT 16 382*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD6 0x0000FF00 383*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD6_SHIFT 8 384*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD7 0x000000FF 385*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD7_SHIFT 0 386*0b66513bSYork Sun 387*0b66513bSYork Sun /* 388*0b66513bSYork Sun * Flash ROW and COL Address Register (ROWn, COLn) 389*0b66513bSYork Sun */ 390*0b66513bSYork Sun /* Main/spare region locator */ 391*0b66513bSYork Sun #define IFC_NAND_COL_MS 0x80000000 392*0b66513bSYork Sun /* Column Address */ 393*0b66513bSYork Sun #define IFC_NAND_COL_CA_MASK 0x00000FFF 394*0b66513bSYork Sun 395*0b66513bSYork Sun /* 396*0b66513bSYork Sun * NAND Flash Byte Count Register (NAND_BC) 397*0b66513bSYork Sun */ 398*0b66513bSYork Sun /* Byte Count for read/Write */ 399*0b66513bSYork Sun #define IFC_NAND_BC 0x000001FF 400*0b66513bSYork Sun 401*0b66513bSYork Sun /* 402*0b66513bSYork Sun * NAND Flash Instruction Registers (NAND_FIR0/NAND_FIR1/NAND_FIR2) 403*0b66513bSYork Sun */ 404*0b66513bSYork Sun /* NAND Machine specific opcodes OP0-OP14*/ 405*0b66513bSYork Sun #define IFC_NAND_FIR0_OP0 0xFC000000 406*0b66513bSYork Sun #define IFC_NAND_FIR0_OP0_SHIFT 26 407*0b66513bSYork Sun #define IFC_NAND_FIR0_OP1 0x03F00000 408*0b66513bSYork Sun #define IFC_NAND_FIR0_OP1_SHIFT 20 409*0b66513bSYork Sun #define IFC_NAND_FIR0_OP2 0x000FC000 410*0b66513bSYork Sun #define IFC_NAND_FIR0_OP2_SHIFT 14 411*0b66513bSYork Sun #define IFC_NAND_FIR0_OP3 0x00003F00 412*0b66513bSYork Sun #define IFC_NAND_FIR0_OP3_SHIFT 8 413*0b66513bSYork Sun #define IFC_NAND_FIR0_OP4 0x000000FC 414*0b66513bSYork Sun #define IFC_NAND_FIR0_OP4_SHIFT 2 415*0b66513bSYork Sun #define IFC_NAND_FIR1_OP5 0xFC000000 416*0b66513bSYork Sun #define IFC_NAND_FIR1_OP5_SHIFT 26 417*0b66513bSYork Sun #define IFC_NAND_FIR1_OP6 0x03F00000 418*0b66513bSYork Sun #define IFC_NAND_FIR1_OP6_SHIFT 20 419*0b66513bSYork Sun #define IFC_NAND_FIR1_OP7 0x000FC000 420*0b66513bSYork Sun #define IFC_NAND_FIR1_OP7_SHIFT 14 421*0b66513bSYork Sun #define IFC_NAND_FIR1_OP8 0x00003F00 422*0b66513bSYork Sun #define IFC_NAND_FIR1_OP8_SHIFT 8 423*0b66513bSYork Sun #define IFC_NAND_FIR1_OP9 0x000000FC 424*0b66513bSYork Sun #define IFC_NAND_FIR1_OP9_SHIFT 2 425*0b66513bSYork Sun #define IFC_NAND_FIR2_OP10 0xFC000000 426*0b66513bSYork Sun #define IFC_NAND_FIR2_OP10_SHIFT 26 427*0b66513bSYork Sun #define IFC_NAND_FIR2_OP11 0x03F00000 428*0b66513bSYork Sun #define IFC_NAND_FIR2_OP11_SHIFT 20 429*0b66513bSYork Sun #define IFC_NAND_FIR2_OP12 0x000FC000 430*0b66513bSYork Sun #define IFC_NAND_FIR2_OP12_SHIFT 14 431*0b66513bSYork Sun #define IFC_NAND_FIR2_OP13 0x00003F00 432*0b66513bSYork Sun #define IFC_NAND_FIR2_OP13_SHIFT 8 433*0b66513bSYork Sun #define IFC_NAND_FIR2_OP14 0x000000FC 434*0b66513bSYork Sun #define IFC_NAND_FIR2_OP14_SHIFT 2 435*0b66513bSYork Sun 436*0b66513bSYork Sun /* 437*0b66513bSYork Sun * Instruction opcodes to be programmed 438*0b66513bSYork Sun * in FIR registers- 6bits 439*0b66513bSYork Sun */ 440*0b66513bSYork Sun enum ifc_nand_fir_opcodes { 441*0b66513bSYork Sun IFC_FIR_OP_NOP, 442*0b66513bSYork Sun IFC_FIR_OP_CA0, 443*0b66513bSYork Sun IFC_FIR_OP_CA1, 444*0b66513bSYork Sun IFC_FIR_OP_CA2, 445*0b66513bSYork Sun IFC_FIR_OP_CA3, 446*0b66513bSYork Sun IFC_FIR_OP_RA0, 447*0b66513bSYork Sun IFC_FIR_OP_RA1, 448*0b66513bSYork Sun IFC_FIR_OP_RA2, 449*0b66513bSYork Sun IFC_FIR_OP_RA3, 450*0b66513bSYork Sun IFC_FIR_OP_CMD0, 451*0b66513bSYork Sun IFC_FIR_OP_CMD1, 452*0b66513bSYork Sun IFC_FIR_OP_CMD2, 453*0b66513bSYork Sun IFC_FIR_OP_CMD3, 454*0b66513bSYork Sun IFC_FIR_OP_CMD4, 455*0b66513bSYork Sun IFC_FIR_OP_CMD5, 456*0b66513bSYork Sun IFC_FIR_OP_CMD6, 457*0b66513bSYork Sun IFC_FIR_OP_CMD7, 458*0b66513bSYork Sun IFC_FIR_OP_CW0, 459*0b66513bSYork Sun IFC_FIR_OP_CW1, 460*0b66513bSYork Sun IFC_FIR_OP_CW2, 461*0b66513bSYork Sun IFC_FIR_OP_CW3, 462*0b66513bSYork Sun IFC_FIR_OP_CW4, 463*0b66513bSYork Sun IFC_FIR_OP_CW5, 464*0b66513bSYork Sun IFC_FIR_OP_CW6, 465*0b66513bSYork Sun IFC_FIR_OP_CW7, 466*0b66513bSYork Sun IFC_FIR_OP_WBCD, 467*0b66513bSYork Sun IFC_FIR_OP_RBCD, 468*0b66513bSYork Sun IFC_FIR_OP_BTRD, 469*0b66513bSYork Sun IFC_FIR_OP_RDSTAT, 470*0b66513bSYork Sun IFC_FIR_OP_NWAIT, 471*0b66513bSYork Sun IFC_FIR_OP_WFR, 472*0b66513bSYork Sun IFC_FIR_OP_SBRD, 473*0b66513bSYork Sun IFC_FIR_OP_UA, 474*0b66513bSYork Sun IFC_FIR_OP_RB, 475*0b66513bSYork Sun }; 476*0b66513bSYork Sun 477*0b66513bSYork Sun /* 478*0b66513bSYork Sun * NAND Chip Select Register (NAND_CSEL) 479*0b66513bSYork Sun */ 480*0b66513bSYork Sun #define IFC_NAND_CSEL 0x0C000000 481*0b66513bSYork Sun #define IFC_NAND_CSEL_SHIFT 26 482*0b66513bSYork Sun #define IFC_NAND_CSEL_CS0 0x00000000 483*0b66513bSYork Sun #define IFC_NAND_CSEL_CS1 0x04000000 484*0b66513bSYork Sun #define IFC_NAND_CSEL_CS2 0x08000000 485*0b66513bSYork Sun #define IFC_NAND_CSEL_CS3 0x0C000000 486*0b66513bSYork Sun 487*0b66513bSYork Sun /* 488*0b66513bSYork Sun * NAND Operation Sequence Start (NANDSEQ_STRT) 489*0b66513bSYork Sun */ 490*0b66513bSYork Sun /* NAND Flash Operation Start */ 491*0b66513bSYork Sun #define IFC_NAND_SEQ_STRT_FIR_STRT 0x80000000 492*0b66513bSYork Sun /* Automatic Erase */ 493*0b66513bSYork Sun #define IFC_NAND_SEQ_STRT_AUTO_ERS 0x00800000 494*0b66513bSYork Sun /* Automatic Program */ 495*0b66513bSYork Sun #define IFC_NAND_SEQ_STRT_AUTO_PGM 0x00100000 496*0b66513bSYork Sun /* Automatic Copyback */ 497*0b66513bSYork Sun #define IFC_NAND_SEQ_STRT_AUTO_CPB 0x00020000 498*0b66513bSYork Sun /* Automatic Read Operation */ 499*0b66513bSYork Sun #define IFC_NAND_SEQ_STRT_AUTO_RD 0x00004000 500*0b66513bSYork Sun /* Automatic Status Read */ 501*0b66513bSYork Sun #define IFC_NAND_SEQ_STRT_AUTO_STAT_RD 0x00000800 502*0b66513bSYork Sun 503*0b66513bSYork Sun /* 504*0b66513bSYork Sun * NAND Event and Error Status Register (NAND_EVTER_STAT) 505*0b66513bSYork Sun */ 506*0b66513bSYork Sun /* Operation Complete */ 507*0b66513bSYork Sun #define IFC_NAND_EVTER_STAT_OPC 0x80000000 508*0b66513bSYork Sun /* Flash Timeout Error */ 509*0b66513bSYork Sun #define IFC_NAND_EVTER_STAT_FTOER 0x08000000 510*0b66513bSYork Sun /* Write Protect Error */ 511*0b66513bSYork Sun #define IFC_NAND_EVTER_STAT_WPER 0x04000000 512*0b66513bSYork Sun /* ECC Error */ 513*0b66513bSYork Sun #define IFC_NAND_EVTER_STAT_ECCER 0x02000000 514*0b66513bSYork Sun /* RCW Load Done */ 515*0b66513bSYork Sun #define IFC_NAND_EVTER_STAT_RCW_DN 0x00008000 516*0b66513bSYork Sun /* Boot Loadr Done */ 517*0b66513bSYork Sun #define IFC_NAND_EVTER_STAT_BOOT_DN 0x00004000 518*0b66513bSYork Sun /* Bad Block Indicator search select */ 519*0b66513bSYork Sun #define IFC_NAND_EVTER_STAT_BBI_SRCH_SE 0x00000800 520*0b66513bSYork Sun 521*0b66513bSYork Sun /* 522*0b66513bSYork Sun * NAND Flash Page Read Completion Event Status Register 523*0b66513bSYork Sun * (PGRDCMPL_EVT_STAT) 524*0b66513bSYork Sun */ 525*0b66513bSYork Sun #define PGRDCMPL_EVT_STAT_MASK 0xFFFF0000 526*0b66513bSYork Sun /* Small Page 0-15 Done */ 527*0b66513bSYork Sun #define PGRDCMPL_EVT_STAT_SECTION_SP(n) (1 << (31 - (n))) 528*0b66513bSYork Sun /* Large Page(2K) 0-3 Done */ 529*0b66513bSYork Sun #define PGRDCMPL_EVT_STAT_LP_2K(n) (0xF << (28 - (n)*4)) 530*0b66513bSYork Sun /* Large Page(4K) 0-1 Done */ 531*0b66513bSYork Sun #define PGRDCMPL_EVT_STAT_LP_4K(n) (0xFF << (24 - (n)*8)) 532*0b66513bSYork Sun 533*0b66513bSYork Sun /* 534*0b66513bSYork Sun * NAND Event and Error Enable Register (NAND_EVTER_EN) 535*0b66513bSYork Sun */ 536*0b66513bSYork Sun /* Operation complete event enable */ 537*0b66513bSYork Sun #define IFC_NAND_EVTER_EN_OPC_EN 0x80000000 538*0b66513bSYork Sun /* Page read complete event enable */ 539*0b66513bSYork Sun #define IFC_NAND_EVTER_EN_PGRDCMPL_EN 0x20000000 540*0b66513bSYork Sun /* Flash Timeout error enable */ 541*0b66513bSYork Sun #define IFC_NAND_EVTER_EN_FTOER_EN 0x08000000 542*0b66513bSYork Sun /* Write Protect error enable */ 543*0b66513bSYork Sun #define IFC_NAND_EVTER_EN_WPER_EN 0x04000000 544*0b66513bSYork Sun /* ECC error logging enable */ 545*0b66513bSYork Sun #define IFC_NAND_EVTER_EN_ECCER_EN 0x02000000 546*0b66513bSYork Sun 547*0b66513bSYork Sun /* 548*0b66513bSYork Sun * NAND Event and Error Interrupt Enable Register (NAND_EVTER_INTR_EN) 549*0b66513bSYork Sun */ 550*0b66513bSYork Sun /* Enable interrupt for operation complete */ 551*0b66513bSYork Sun #define IFC_NAND_EVTER_INTR_OPCIR_EN 0x80000000 552*0b66513bSYork Sun /* Enable interrupt for Page read complete */ 553*0b66513bSYork Sun #define IFC_NAND_EVTER_INTR_PGRDCMPLIR_EN 0x20000000 554*0b66513bSYork Sun /* Enable interrupt for Flash timeout error */ 555*0b66513bSYork Sun #define IFC_NAND_EVTER_INTR_FTOERIR_EN 0x08000000 556*0b66513bSYork Sun /* Enable interrupt for Write protect error */ 557*0b66513bSYork Sun #define IFC_NAND_EVTER_INTR_WPERIR_EN 0x04000000 558*0b66513bSYork Sun /* Enable interrupt for ECC error*/ 559*0b66513bSYork Sun #define IFC_NAND_EVTER_INTR_ECCERIR_EN 0x02000000 560*0b66513bSYork Sun 561*0b66513bSYork Sun /* 562*0b66513bSYork Sun * NAND Transfer Error Attribute Register-0 (NAND_ERATTR0) 563*0b66513bSYork Sun */ 564*0b66513bSYork Sun #define IFC_NAND_ERATTR0_MASK 0x0C080000 565*0b66513bSYork Sun /* Error on CS0-3 for NAND */ 566*0b66513bSYork Sun #define IFC_NAND_ERATTR0_ERCS_CS0 0x00000000 567*0b66513bSYork Sun #define IFC_NAND_ERATTR0_ERCS_CS1 0x04000000 568*0b66513bSYork Sun #define IFC_NAND_ERATTR0_ERCS_CS2 0x08000000 569*0b66513bSYork Sun #define IFC_NAND_ERATTR0_ERCS_CS3 0x0C000000 570*0b66513bSYork Sun /* Transaction type of error Read/Write */ 571*0b66513bSYork Sun #define IFC_NAND_ERATTR0_ERTTYPE_READ 0x00080000 572*0b66513bSYork Sun 573*0b66513bSYork Sun /* 574*0b66513bSYork Sun * NAND Flash Status Register (NAND_FSR) 575*0b66513bSYork Sun */ 576*0b66513bSYork Sun /* First byte of data read from read status op */ 577*0b66513bSYork Sun #define IFC_NAND_NFSR_RS0 0xFF000000 578*0b66513bSYork Sun /* Second byte of data read from read status op */ 579*0b66513bSYork Sun #define IFC_NAND_NFSR_RS1 0x00FF0000 580*0b66513bSYork Sun 581*0b66513bSYork Sun /* 582*0b66513bSYork Sun * ECC Error Status Registers (ECCSTAT0-ECCSTAT3) 583*0b66513bSYork Sun */ 584*0b66513bSYork Sun /* Number of ECC errors on sector n (n = 0-15) */ 585*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR0_MASK 0x0F000000 586*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR0_SHIFT 24 587*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR1_MASK 0x000F0000 588*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR1_SHIFT 16 589*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR2_MASK 0x00000F00 590*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR2_SHIFT 8 591*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR3_MASK 0x0000000F 592*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR3_SHIFT 0 593*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR4_MASK 0x0F000000 594*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR4_SHIFT 24 595*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR5_MASK 0x000F0000 596*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR5_SHIFT 16 597*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR6_MASK 0x00000F00 598*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR6_SHIFT 8 599*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR7_MASK 0x0000000F 600*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR7_SHIFT 0 601*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR8_MASK 0x0F000000 602*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR8_SHIFT 24 603*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR9_MASK 0x000F0000 604*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR9_SHIFT 16 605*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR10_MASK 0x00000F00 606*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR10_SHIFT 8 607*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR11_MASK 0x0000000F 608*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR11_SHIFT 0 609*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR12_MASK 0x0F000000 610*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR12_SHIFT 24 611*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR13_MASK 0x000F0000 612*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR13_SHIFT 16 613*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR14_MASK 0x00000F00 614*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR14_SHIFT 8 615*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR15_MASK 0x0000000F 616*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR15_SHIFT 0 617*0b66513bSYork Sun 618*0b66513bSYork Sun /* 619*0b66513bSYork Sun * NAND Control Register (NANDCR) 620*0b66513bSYork Sun */ 621*0b66513bSYork Sun #define IFC_NAND_NCR_FTOCNT_MASK 0x1E000000 622*0b66513bSYork Sun #define IFC_NAND_NCR_FTOCNT_SHIFT 25 623*0b66513bSYork Sun #define IFC_NAND_NCR_FTOCNT(n) ((_ilog2(n) - 8) << IFC_NAND_NCR_FTOCNT_SHIFT) 624*0b66513bSYork Sun 625*0b66513bSYork Sun /* 626*0b66513bSYork Sun * NAND_AUTOBOOT_TRGR 627*0b66513bSYork Sun */ 628*0b66513bSYork Sun /* Trigger RCW load */ 629*0b66513bSYork Sun #define IFC_NAND_AUTOBOOT_TRGR_RCW_LD 0x80000000 630*0b66513bSYork Sun /* Trigget Auto Boot */ 631*0b66513bSYork Sun #define IFC_NAND_AUTOBOOT_TRGR_BOOT_LD 0x20000000 632*0b66513bSYork Sun 633*0b66513bSYork Sun /* 634*0b66513bSYork Sun * NAND_MDR 635*0b66513bSYork Sun */ 636*0b66513bSYork Sun /* 1st read data byte when opcode SBRD */ 637*0b66513bSYork Sun #define IFC_NAND_MDR_RDATA0 0xFF000000 638*0b66513bSYork Sun /* 2nd read data byte when opcode SBRD */ 639*0b66513bSYork Sun #define IFC_NAND_MDR_RDATA1 0x00FF0000 640*0b66513bSYork Sun 641*0b66513bSYork Sun /* 642*0b66513bSYork Sun * NOR Machine Specific Registers 643*0b66513bSYork Sun */ 644*0b66513bSYork Sun /* 645*0b66513bSYork Sun * NOR Event and Error Status Register (NOR_EVTER_STAT) 646*0b66513bSYork Sun */ 647*0b66513bSYork Sun /* NOR Command Sequence Operation Complete */ 648*0b66513bSYork Sun #define IFC_NOR_EVTER_STAT_OPC_NOR 0x80000000 649*0b66513bSYork Sun /* Write Protect Error */ 650*0b66513bSYork Sun #define IFC_NOR_EVTER_STAT_WPER 0x04000000 651*0b66513bSYork Sun /* Command Sequence Timeout Error */ 652*0b66513bSYork Sun #define IFC_NOR_EVTER_STAT_STOER 0x01000000 653*0b66513bSYork Sun 654*0b66513bSYork Sun /* 655*0b66513bSYork Sun * NOR Event and Error Enable Register (NOR_EVTER_EN) 656*0b66513bSYork Sun */ 657*0b66513bSYork Sun /* NOR Command Seq complete event enable */ 658*0b66513bSYork Sun #define IFC_NOR_EVTER_EN_OPCEN_NOR 0x80000000 659*0b66513bSYork Sun /* Write Protect Error Checking Enable */ 660*0b66513bSYork Sun #define IFC_NOR_EVTER_EN_WPEREN 0x04000000 661*0b66513bSYork Sun /* Timeout Error Enable */ 662*0b66513bSYork Sun #define IFC_NOR_EVTER_EN_STOEREN 0x01000000 663*0b66513bSYork Sun 664*0b66513bSYork Sun /* 665*0b66513bSYork Sun * NOR Event and Error Interrupt Enable Register (NOR_EVTER_INTR_EN) 666*0b66513bSYork Sun */ 667*0b66513bSYork Sun /* Enable interrupt for OPC complete */ 668*0b66513bSYork Sun #define IFC_NOR_EVTER_INTR_OPCEN_NOR 0x80000000 669*0b66513bSYork Sun /* Enable interrupt for write protect error */ 670*0b66513bSYork Sun #define IFC_NOR_EVTER_INTR_WPEREN 0x04000000 671*0b66513bSYork Sun /* Enable interrupt for timeout error */ 672*0b66513bSYork Sun #define IFC_NOR_EVTER_INTR_STOEREN 0x01000000 673*0b66513bSYork Sun 674*0b66513bSYork Sun /* 675*0b66513bSYork Sun * NOR Transfer Error Attribute Register-0 (NOR_ERATTR0) 676*0b66513bSYork Sun */ 677*0b66513bSYork Sun /* Source ID for error transaction */ 678*0b66513bSYork Sun #define IFC_NOR_ERATTR0_ERSRCID 0xFF000000 679*0b66513bSYork Sun /* AXI ID for error transation */ 680*0b66513bSYork Sun #define IFC_NOR_ERATTR0_ERAID 0x000FF000 681*0b66513bSYork Sun /* Chip select corresponds to NOR error */ 682*0b66513bSYork Sun #define IFC_NOR_ERATTR0_ERCS_CS0 0x00000000 683*0b66513bSYork Sun #define IFC_NOR_ERATTR0_ERCS_CS1 0x00000010 684*0b66513bSYork Sun #define IFC_NOR_ERATTR0_ERCS_CS2 0x00000020 685*0b66513bSYork Sun #define IFC_NOR_ERATTR0_ERCS_CS3 0x00000030 686*0b66513bSYork Sun /* Type of transaction read/write */ 687*0b66513bSYork Sun #define IFC_NOR_ERATTR0_ERTYPE_READ 0x00000001 688*0b66513bSYork Sun 689*0b66513bSYork Sun /* 690*0b66513bSYork Sun * NOR Transfer Error Attribute Register-2 (NOR_ERATTR2) 691*0b66513bSYork Sun */ 692*0b66513bSYork Sun #define IFC_NOR_ERATTR2_ER_NUM_PHASE_EXP 0x000F0000 693*0b66513bSYork Sun #define IFC_NOR_ERATTR2_ER_NUM_PHASE_PER 0x00000F00 694*0b66513bSYork Sun 695*0b66513bSYork Sun /* 696*0b66513bSYork Sun * NOR Control Register (NORCR) 697*0b66513bSYork Sun */ 698*0b66513bSYork Sun #define IFC_NORCR_MASK 0x0F0F0000 699*0b66513bSYork Sun /* No. of Address/Data Phase */ 700*0b66513bSYork Sun #define IFC_NORCR_NUM_PHASE_MASK 0x0F000000 701*0b66513bSYork Sun #define IFC_NORCR_NUM_PHASE_SHIFT 24 702*0b66513bSYork Sun #define IFC_NORCR_NUM_PHASE(n) ((n-1) << IFC_NORCR_NUM_PHASE_SHIFT) 703*0b66513bSYork Sun /* Sequence Timeout Count */ 704*0b66513bSYork Sun #define IFC_NORCR_STOCNT_MASK 0x000F0000 705*0b66513bSYork Sun #define IFC_NORCR_STOCNT_SHIFT 16 706*0b66513bSYork Sun #define IFC_NORCR_STOCNT(n) ((__ilog2(n) - 8) << IFC_NORCR_STOCNT_SHIFT) 707*0b66513bSYork Sun 708*0b66513bSYork Sun /* 709*0b66513bSYork Sun * GPCM Machine specific registers 710*0b66513bSYork Sun */ 711*0b66513bSYork Sun /* 712*0b66513bSYork Sun * GPCM Event and Error Status Register (GPCM_EVTER_STAT) 713*0b66513bSYork Sun */ 714*0b66513bSYork Sun /* Timeout error */ 715*0b66513bSYork Sun #define IFC_GPCM_EVTER_STAT_TOER 0x04000000 716*0b66513bSYork Sun /* Parity error */ 717*0b66513bSYork Sun #define IFC_GPCM_EVTER_STAT_PER 0x01000000 718*0b66513bSYork Sun 719*0b66513bSYork Sun /* 720*0b66513bSYork Sun * GPCM Event and Error Enable Register (GPCM_EVTER_EN) 721*0b66513bSYork Sun */ 722*0b66513bSYork Sun /* Timeout error enable */ 723*0b66513bSYork Sun #define IFC_GPCM_EVTER_EN_TOER_EN 0x04000000 724*0b66513bSYork Sun /* Parity error enable */ 725*0b66513bSYork Sun #define IFC_GPCM_EVTER_EN_PER_EN 0x01000000 726*0b66513bSYork Sun 727*0b66513bSYork Sun /* 728*0b66513bSYork Sun * GPCM Event and Error Interrupt Enable Register (GPCM_EVTER_INTR_EN) 729*0b66513bSYork Sun */ 730*0b66513bSYork Sun /* Enable Interrupt for timeout error */ 731*0b66513bSYork Sun #define IFC_GPCM_EEIER_TOERIR_EN 0x04000000 732*0b66513bSYork Sun /* Enable Interrupt for Parity error */ 733*0b66513bSYork Sun #define IFC_GPCM_EEIER_PERIR_EN 0x01000000 734*0b66513bSYork Sun 735*0b66513bSYork Sun /* 736*0b66513bSYork Sun * GPCM Transfer Error Attribute Register-0 (GPCM_ERATTR0) 737*0b66513bSYork Sun */ 738*0b66513bSYork Sun /* Source ID for error transaction */ 739*0b66513bSYork Sun #define IFC_GPCM_ERATTR0_ERSRCID 0xFF000000 740*0b66513bSYork Sun /* AXI ID for error transaction */ 741*0b66513bSYork Sun #define IFC_GPCM_ERATTR0_ERAID 0x000FF000 742*0b66513bSYork Sun /* Chip select corresponds to GPCM error */ 743*0b66513bSYork Sun #define IFC_GPCM_ERATTR0_ERCS_CS0 0x00000000 744*0b66513bSYork Sun #define IFC_GPCM_ERATTR0_ERCS_CS1 0x00000040 745*0b66513bSYork Sun #define IFC_GPCM_ERATTR0_ERCS_CS2 0x00000080 746*0b66513bSYork Sun #define IFC_GPCM_ERATTR0_ERCS_CS3 0x000000C0 747*0b66513bSYork Sun /* Type of transaction read/Write */ 748*0b66513bSYork Sun #define IFC_GPCM_ERATTR0_ERTYPE_READ 0x00000001 749*0b66513bSYork Sun 750*0b66513bSYork Sun /* 751*0b66513bSYork Sun * GPCM Transfer Error Attribute Register-2 (GPCM_ERATTR2) 752*0b66513bSYork Sun */ 753*0b66513bSYork Sun /* On which beat of address/data parity error is observed */ 754*0b66513bSYork Sun #define IFC_GPCM_ERATTR2_PERR_BEAT 0x00000C00 755*0b66513bSYork Sun /* Parity Error on byte */ 756*0b66513bSYork Sun #define IFC_GPCM_ERATTR2_PERR_BYTE 0x000000F0 757*0b66513bSYork Sun /* Parity Error reported in addr or data phase */ 758*0b66513bSYork Sun #define IFC_GPCM_ERATTR2_PERR_DATA_PHASE 0x00000001 759*0b66513bSYork Sun 760*0b66513bSYork Sun /* 761*0b66513bSYork Sun * GPCM Status Register (GPCM_STAT) 762*0b66513bSYork Sun */ 763*0b66513bSYork Sun #define IFC_GPCM_STAT_BSY 0x80000000 /* GPCM is busy */ 764*0b66513bSYork Sun 765*0b66513bSYork Sun 766*0b66513bSYork Sun #ifndef __ASSEMBLY__ 767*0b66513bSYork Sun #include <asm/io.h> 768*0b66513bSYork Sun 769*0b66513bSYork Sun extern void print_ifc_regs(void); 770*0b66513bSYork Sun extern void init_early_memctl_regs(void); 771*0b66513bSYork Sun 772*0b66513bSYork Sun #define IFC_BASE_ADDR ((struct fsl_ifc *)CONFIG_SYS_IFC_ADDR) 773*0b66513bSYork Sun 774*0b66513bSYork Sun #define get_ifc_cspr_ext(i) (in_be32(&(IFC_BASE_ADDR)->cspr_cs[i].cspr_ext)) 775*0b66513bSYork Sun #define get_ifc_cspr(i) (in_be32(&(IFC_BASE_ADDR)->cspr_cs[i].cspr)) 776*0b66513bSYork Sun #define get_ifc_csor_ext(i) (in_be32(&(IFC_BASE_ADDR)->csor_cs[i].csor_ext)) 777*0b66513bSYork Sun #define get_ifc_csor(i) (in_be32(&(IFC_BASE_ADDR)->csor_cs[i].csor)) 778*0b66513bSYork Sun #define get_ifc_amask(i) (in_be32(&(IFC_BASE_ADDR)->amask_cs[i].amask)) 779*0b66513bSYork Sun #define get_ifc_ftim(i, j) (in_be32(&(IFC_BASE_ADDR)->ftim_cs[i].ftim[j])) 780*0b66513bSYork Sun 781*0b66513bSYork Sun #define set_ifc_cspr_ext(i, v) (out_be32(&(IFC_BASE_ADDR)->cspr_cs[i].cspr_ext, v)) 782*0b66513bSYork Sun #define set_ifc_cspr(i, v) (out_be32(&(IFC_BASE_ADDR)->cspr_cs[i].cspr, v)) 783*0b66513bSYork Sun #define set_ifc_csor_ext(i, v) (out_be32(&(IFC_BASE_ADDR)->csor_cs[i].csor_ext, v)) 784*0b66513bSYork Sun #define set_ifc_csor(i, v) (out_be32(&(IFC_BASE_ADDR)->csor_cs[i].csor, v)) 785*0b66513bSYork Sun #define set_ifc_amask(i, v) (out_be32(&(IFC_BASE_ADDR)->amask_cs[i].amask, v)) 786*0b66513bSYork Sun #define set_ifc_ftim(i, j, v) \ 787*0b66513bSYork Sun (out_be32(&(IFC_BASE_ADDR)->ftim_cs[i].ftim[j], v)) 788*0b66513bSYork Sun 789*0b66513bSYork Sun enum ifc_chip_sel { 790*0b66513bSYork Sun IFC_CS0, 791*0b66513bSYork Sun IFC_CS1, 792*0b66513bSYork Sun IFC_CS2, 793*0b66513bSYork Sun IFC_CS3, 794*0b66513bSYork Sun IFC_CS4, 795*0b66513bSYork Sun IFC_CS5, 796*0b66513bSYork Sun IFC_CS6, 797*0b66513bSYork Sun IFC_CS7, 798*0b66513bSYork Sun }; 799*0b66513bSYork Sun 800*0b66513bSYork Sun enum ifc_ftims { 801*0b66513bSYork Sun IFC_FTIM0, 802*0b66513bSYork Sun IFC_FTIM1, 803*0b66513bSYork Sun IFC_FTIM2, 804*0b66513bSYork Sun IFC_FTIM3, 805*0b66513bSYork Sun }; 806*0b66513bSYork Sun 807*0b66513bSYork Sun /* 808*0b66513bSYork Sun * IFC Controller NAND Machine registers 809*0b66513bSYork Sun */ 810*0b66513bSYork Sun struct fsl_ifc_nand { 811*0b66513bSYork Sun u32 ncfgr; 812*0b66513bSYork Sun u32 res1[0x4]; 813*0b66513bSYork Sun u32 nand_fcr0; 814*0b66513bSYork Sun u32 nand_fcr1; 815*0b66513bSYork Sun u32 res2[0x8]; 816*0b66513bSYork Sun u32 row0; 817*0b66513bSYork Sun u32 res3; 818*0b66513bSYork Sun u32 col0; 819*0b66513bSYork Sun u32 res4; 820*0b66513bSYork Sun u32 row1; 821*0b66513bSYork Sun u32 res5; 822*0b66513bSYork Sun u32 col1; 823*0b66513bSYork Sun u32 res6; 824*0b66513bSYork Sun u32 row2; 825*0b66513bSYork Sun u32 res7; 826*0b66513bSYork Sun u32 col2; 827*0b66513bSYork Sun u32 res8; 828*0b66513bSYork Sun u32 row3; 829*0b66513bSYork Sun u32 res9; 830*0b66513bSYork Sun u32 col3; 831*0b66513bSYork Sun u32 res10[0x24]; 832*0b66513bSYork Sun u32 nand_fbcr; 833*0b66513bSYork Sun u32 res11; 834*0b66513bSYork Sun u32 nand_fir0; 835*0b66513bSYork Sun u32 nand_fir1; 836*0b66513bSYork Sun u32 nand_fir2; 837*0b66513bSYork Sun u32 res12[0x10]; 838*0b66513bSYork Sun u32 nand_csel; 839*0b66513bSYork Sun u32 res13; 840*0b66513bSYork Sun u32 nandseq_strt; 841*0b66513bSYork Sun u32 res14; 842*0b66513bSYork Sun u32 nand_evter_stat; 843*0b66513bSYork Sun u32 res15; 844*0b66513bSYork Sun u32 pgrdcmpl_evt_stat; 845*0b66513bSYork Sun u32 res16[0x2]; 846*0b66513bSYork Sun u32 nand_evter_en; 847*0b66513bSYork Sun u32 res17[0x2]; 848*0b66513bSYork Sun u32 nand_evter_intr_en; 849*0b66513bSYork Sun u32 res18[0x2]; 850*0b66513bSYork Sun u32 nand_erattr0; 851*0b66513bSYork Sun u32 nand_erattr1; 852*0b66513bSYork Sun u32 res19[0x10]; 853*0b66513bSYork Sun u32 nand_fsr; 854*0b66513bSYork Sun u32 res20; 855*0b66513bSYork Sun u32 nand_eccstat[4]; 856*0b66513bSYork Sun u32 res21[0x20]; 857*0b66513bSYork Sun u32 nanndcr; 858*0b66513bSYork Sun u32 res22[0x2]; 859*0b66513bSYork Sun u32 nand_autoboot_trgr; 860*0b66513bSYork Sun u32 res23; 861*0b66513bSYork Sun u32 nand_mdr; 862*0b66513bSYork Sun u32 res24[0x5C]; 863*0b66513bSYork Sun }; 864*0b66513bSYork Sun 865*0b66513bSYork Sun /* 866*0b66513bSYork Sun * IFC controller NOR Machine registers 867*0b66513bSYork Sun */ 868*0b66513bSYork Sun struct fsl_ifc_nor { 869*0b66513bSYork Sun u32 nor_evter_stat; 870*0b66513bSYork Sun u32 res1[0x2]; 871*0b66513bSYork Sun u32 nor_evter_en; 872*0b66513bSYork Sun u32 res2[0x2]; 873*0b66513bSYork Sun u32 nor_evter_intr_en; 874*0b66513bSYork Sun u32 res3[0x2]; 875*0b66513bSYork Sun u32 nor_erattr0; 876*0b66513bSYork Sun u32 nor_erattr1; 877*0b66513bSYork Sun u32 nor_erattr2; 878*0b66513bSYork Sun u32 res4[0x4]; 879*0b66513bSYork Sun u32 norcr; 880*0b66513bSYork Sun u32 res5[0xEF]; 881*0b66513bSYork Sun }; 882*0b66513bSYork Sun 883*0b66513bSYork Sun /* 884*0b66513bSYork Sun * IFC controller GPCM Machine registers 885*0b66513bSYork Sun */ 886*0b66513bSYork Sun struct fsl_ifc_gpcm { 887*0b66513bSYork Sun u32 gpcm_evter_stat; 888*0b66513bSYork Sun u32 res1[0x2]; 889*0b66513bSYork Sun u32 gpcm_evter_en; 890*0b66513bSYork Sun u32 res2[0x2]; 891*0b66513bSYork Sun u32 gpcm_evter_intr_en; 892*0b66513bSYork Sun u32 res3[0x2]; 893*0b66513bSYork Sun u32 gpcm_erattr0; 894*0b66513bSYork Sun u32 gpcm_erattr1; 895*0b66513bSYork Sun u32 gpcm_erattr2; 896*0b66513bSYork Sun u32 gpcm_stat; 897*0b66513bSYork Sun u32 res4[0x1F3]; 898*0b66513bSYork Sun }; 899*0b66513bSYork Sun 900*0b66513bSYork Sun #ifdef CONFIG_SYS_FSL_IFC_BANK_COUNT 901*0b66513bSYork Sun #if (CONFIG_SYS_FSL_IFC_BANK_COUNT <= 8) 902*0b66513bSYork Sun #define IFC_CSPR_REG_LEN 148 903*0b66513bSYork Sun #define IFC_AMASK_REG_LEN 144 904*0b66513bSYork Sun #define IFC_CSOR_REG_LEN 144 905*0b66513bSYork Sun #define IFC_FTIM_REG_LEN 576 906*0b66513bSYork Sun 907*0b66513bSYork Sun #define IFC_CSPR_USED_LEN sizeof(struct fsl_ifc_cspr) * \ 908*0b66513bSYork Sun CONFIG_SYS_FSL_IFC_BANK_COUNT 909*0b66513bSYork Sun #define IFC_AMASK_USED_LEN sizeof(struct fsl_ifc_amask) * \ 910*0b66513bSYork Sun CONFIG_SYS_FSL_IFC_BANK_COUNT 911*0b66513bSYork Sun #define IFC_CSOR_USED_LEN sizeof(struct fsl_ifc_csor) * \ 912*0b66513bSYork Sun CONFIG_SYS_FSL_IFC_BANK_COUNT 913*0b66513bSYork Sun #define IFC_FTIM_USED_LEN sizeof(struct fsl_ifc_ftim) * \ 914*0b66513bSYork Sun CONFIG_SYS_FSL_IFC_BANK_COUNT 915*0b66513bSYork Sun #else 916*0b66513bSYork Sun #error IFC BANK count not vaild 917*0b66513bSYork Sun #endif 918*0b66513bSYork Sun #else 919*0b66513bSYork Sun #error IFC BANK count not defined 920*0b66513bSYork Sun #endif 921*0b66513bSYork Sun 922*0b66513bSYork Sun struct fsl_ifc_cspr { 923*0b66513bSYork Sun u32 cspr_ext; 924*0b66513bSYork Sun u32 cspr; 925*0b66513bSYork Sun u32 res; 926*0b66513bSYork Sun }; 927*0b66513bSYork Sun 928*0b66513bSYork Sun struct fsl_ifc_amask { 929*0b66513bSYork Sun u32 amask; 930*0b66513bSYork Sun u32 res[0x2]; 931*0b66513bSYork Sun }; 932*0b66513bSYork Sun 933*0b66513bSYork Sun struct fsl_ifc_csor { 934*0b66513bSYork Sun u32 csor; 935*0b66513bSYork Sun u32 csor_ext; 936*0b66513bSYork Sun u32 res; 937*0b66513bSYork Sun }; 938*0b66513bSYork Sun 939*0b66513bSYork Sun struct fsl_ifc_ftim { 940*0b66513bSYork Sun u32 ftim[4]; 941*0b66513bSYork Sun u32 res[0x8]; 942*0b66513bSYork Sun }; 943*0b66513bSYork Sun 944*0b66513bSYork Sun /* 945*0b66513bSYork Sun * IFC Controller Registers 946*0b66513bSYork Sun */ 947*0b66513bSYork Sun struct fsl_ifc { 948*0b66513bSYork Sun u32 ifc_rev; 949*0b66513bSYork Sun u32 res1[0x2]; 950*0b66513bSYork Sun struct fsl_ifc_cspr cspr_cs[CONFIG_SYS_FSL_IFC_BANK_COUNT]; 951*0b66513bSYork Sun u8 res2[IFC_CSPR_REG_LEN - IFC_CSPR_USED_LEN]; 952*0b66513bSYork Sun struct fsl_ifc_amask amask_cs[CONFIG_SYS_FSL_IFC_BANK_COUNT]; 953*0b66513bSYork Sun u8 res3[IFC_AMASK_REG_LEN - IFC_AMASK_USED_LEN]; 954*0b66513bSYork Sun struct fsl_ifc_csor csor_cs[CONFIG_SYS_FSL_IFC_BANK_COUNT]; 955*0b66513bSYork Sun u8 res4[IFC_CSOR_REG_LEN - IFC_CSOR_USED_LEN]; 956*0b66513bSYork Sun struct fsl_ifc_ftim ftim_cs[CONFIG_SYS_FSL_IFC_BANK_COUNT]; 957*0b66513bSYork Sun u8 res5[IFC_FTIM_REG_LEN - IFC_FTIM_USED_LEN]; 958*0b66513bSYork Sun u32 rb_stat; 959*0b66513bSYork Sun u32 res6[0x2]; 960*0b66513bSYork Sun u32 ifc_gcr; 961*0b66513bSYork Sun u32 res7[0x2]; 962*0b66513bSYork Sun u32 cm_evter_stat; 963*0b66513bSYork Sun u32 res8[0x2]; 964*0b66513bSYork Sun u32 cm_evter_en; 965*0b66513bSYork Sun u32 res9[0x2]; 966*0b66513bSYork Sun u32 cm_evter_intr_en; 967*0b66513bSYork Sun u32 res10[0x2]; 968*0b66513bSYork Sun u32 cm_erattr0; 969*0b66513bSYork Sun u32 cm_erattr1; 970*0b66513bSYork Sun u32 res11[0x2]; 971*0b66513bSYork Sun u32 ifc_ccr; 972*0b66513bSYork Sun u32 ifc_csr; 973*0b66513bSYork Sun u32 res12[0x2EB]; 974*0b66513bSYork Sun struct fsl_ifc_nand ifc_nand; 975*0b66513bSYork Sun struct fsl_ifc_nor ifc_nor; 976*0b66513bSYork Sun struct fsl_ifc_gpcm ifc_gpcm; 977*0b66513bSYork Sun }; 978*0b66513bSYork Sun 979*0b66513bSYork Sun #ifdef CONFIG_SYS_FSL_ERRATUM_IFC_A002769 980*0b66513bSYork Sun #undef CSPR_MSEL_NOR 981*0b66513bSYork Sun #define CSPR_MSEL_NOR CSPR_MSEL_GPCM 982*0b66513bSYork Sun #endif 983*0b66513bSYork Sun #endif /* CONFIG_FSL_IFC */ 984*0b66513bSYork Sun 985*0b66513bSYork Sun #endif /* __ASSEMBLY__ */ 986*0b66513bSYork Sun #endif /* __FSL_IFC_H */ 987