1*72fa4679SSven Schnelle /* 2*72fa4679SSven Schnelle * Copyright (C) 2005-2006 Atmel Corporation 3*72fa4679SSven Schnelle * 4*72fa4679SSven Schnelle * See file CREDITS for list of people who contributed to this 5*72fa4679SSven Schnelle * project. 6*72fa4679SSven Schnelle * 7*72fa4679SSven Schnelle * This program is free software; you can redistribute it and/or 8*72fa4679SSven Schnelle * modify it under the terms of the GNU General Public License as 9*72fa4679SSven Schnelle * published by the Free Software Foundation; either version 2 of 10*72fa4679SSven Schnelle * the License, or (at your option) any later version. 11*72fa4679SSven Schnelle * 12*72fa4679SSven Schnelle * This program is distributed in the hope that it will be useful, 13*72fa4679SSven Schnelle * but WITHOUT ANY WARRANTY; without even the implied warranty of 14*72fa4679SSven Schnelle * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15*72fa4679SSven Schnelle * GNU General Public License for more details. 16*72fa4679SSven Schnelle * 17*72fa4679SSven Schnelle * You should have received a copy of the GNU General Public License 18*72fa4679SSven Schnelle * along with this program; if not, write to the Free Software 19*72fa4679SSven Schnelle * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 20*72fa4679SSven Schnelle * MA 02111-1307 USA 21*72fa4679SSven Schnelle */ 22*72fa4679SSven Schnelle #ifndef __ATMEL_MCI_H__ 23*72fa4679SSven Schnelle #define __ATMEL_MCI_H__ 24*72fa4679SSven Schnelle 25*72fa4679SSven Schnelle int atmel_mci_init(void *regs); 26*72fa4679SSven Schnelle 27*72fa4679SSven Schnelle #ifndef __ASSEMBLY__ 28*72fa4679SSven Schnelle 29*72fa4679SSven Schnelle /* 30*72fa4679SSven Schnelle * Structure for struct SoC access. 31*72fa4679SSven Schnelle * Names starting with '_' are fillers. 32*72fa4679SSven Schnelle */ 33*72fa4679SSven Schnelle typedef struct atmel_mci { 34*72fa4679SSven Schnelle /* reg Offset */ 35*72fa4679SSven Schnelle u32 cr; /* 0x00 */ 36*72fa4679SSven Schnelle u32 mr; /* 0x04 */ 37*72fa4679SSven Schnelle u32 dtor; /* 0x08 */ 38*72fa4679SSven Schnelle u32 sdcr; /* 0x0c */ 39*72fa4679SSven Schnelle u32 argr; /* 0x10 */ 40*72fa4679SSven Schnelle u32 cmdr; /* 0x14 */ 41*72fa4679SSven Schnelle u32 _18; /* 0x18 */ 42*72fa4679SSven Schnelle u32 _1c; /* 0x1c */ 43*72fa4679SSven Schnelle u32 rspr; /* 0x20 */ 44*72fa4679SSven Schnelle u32 rspr1; /* 0x24 */ 45*72fa4679SSven Schnelle u32 rspr2; /* 0x28 */ 46*72fa4679SSven Schnelle u32 rspr3; /* 0x2c */ 47*72fa4679SSven Schnelle u32 rdr; /* 0x30 */ 48*72fa4679SSven Schnelle u32 tdr; /* 0x34 */ 49*72fa4679SSven Schnelle u32 _38; /* 0x38 */ 50*72fa4679SSven Schnelle u32 _3c; /* 0x3c */ 51*72fa4679SSven Schnelle u32 sr; /* 0x40 */ 52*72fa4679SSven Schnelle u32 ier; /* 0x44 */ 53*72fa4679SSven Schnelle u32 idr; /* 0x48 */ 54*72fa4679SSven Schnelle u32 imr; /* 0x4c */ 55*72fa4679SSven Schnelle } atmel_mci_t; 56*72fa4679SSven Schnelle 57*72fa4679SSven Schnelle #endif /* __ASSEMBLY__ */ 58*72fa4679SSven Schnelle 59*72fa4679SSven Schnelle /* 60*72fa4679SSven Schnelle * NOTICE: Use of registers offsets is depreciated. 61*72fa4679SSven Schnelle * These defines will be removed once the old driver 62*72fa4679SSven Schnelle * is taken out of commision. 63*72fa4679SSven Schnelle * 64*72fa4679SSven Schnelle * Atmel MultiMedia Card Interface (MCI) registers 65*72fa4679SSven Schnelle */ 66*72fa4679SSven Schnelle #define MMCI_CR 0x0000 67*72fa4679SSven Schnelle #define MMCI_MR 0x0004 68*72fa4679SSven Schnelle #define MMCI_DTOR 0x0008 69*72fa4679SSven Schnelle #define MMCI_SDCR 0x000c 70*72fa4679SSven Schnelle #define MMCI_ARGR 0x0010 71*72fa4679SSven Schnelle #define MMCI_CMDR 0x0014 72*72fa4679SSven Schnelle #define MMCI_RSPR 0x0020 73*72fa4679SSven Schnelle #define MMCI_RSPR1 0x0024 74*72fa4679SSven Schnelle #define MMCI_RSPR2 0x0028 75*72fa4679SSven Schnelle #define MMCI_RSPR3 0x002c 76*72fa4679SSven Schnelle #define MMCI_RDR 0x0030 77*72fa4679SSven Schnelle #define MMCI_TDR 0x0034 78*72fa4679SSven Schnelle #define MMCI_SR 0x0040 79*72fa4679SSven Schnelle #define MMCI_IER 0x0044 80*72fa4679SSven Schnelle #define MMCI_IDR 0x0048 81*72fa4679SSven Schnelle #define MMCI_IMR 0x004c 82*72fa4679SSven Schnelle 83*72fa4679SSven Schnelle /* Bitfields in CR */ 84*72fa4679SSven Schnelle #define MMCI_MCIEN_OFFSET 0 85*72fa4679SSven Schnelle #define MMCI_MCIEN_SIZE 1 86*72fa4679SSven Schnelle #define MMCI_MCIDIS_OFFSET 1 87*72fa4679SSven Schnelle #define MMCI_MCIDIS_SIZE 1 88*72fa4679SSven Schnelle #define MMCI_PWSEN_OFFSET 2 89*72fa4679SSven Schnelle #define MMCI_PWSEN_SIZE 1 90*72fa4679SSven Schnelle #define MMCI_PWSDIS_OFFSET 3 91*72fa4679SSven Schnelle #define MMCI_PWSDIS_SIZE 1 92*72fa4679SSven Schnelle #define MMCI_SWRST_OFFSET 7 93*72fa4679SSven Schnelle #define MMCI_SWRST_SIZE 1 94*72fa4679SSven Schnelle 95*72fa4679SSven Schnelle /* Bitfields in MR */ 96*72fa4679SSven Schnelle #define MMCI_CLKDIV_OFFSET 0 97*72fa4679SSven Schnelle #define MMCI_CLKDIV_SIZE 8 98*72fa4679SSven Schnelle #define MMCI_PWSDIV_OFFSET 8 99*72fa4679SSven Schnelle #define MMCI_PWSDIV_SIZE 3 100*72fa4679SSven Schnelle #define MMCI_RDPROOF_OFFSET 11 101*72fa4679SSven Schnelle #define MMCI_RDPROOF_SIZE 1 102*72fa4679SSven Schnelle #define MMCI_WRPROOF_OFFSET 12 103*72fa4679SSven Schnelle #define MMCI_WRPROOF_SIZE 1 104*72fa4679SSven Schnelle #define MMCI_PDCPADV_OFFSET 14 105*72fa4679SSven Schnelle #define MMCI_PDCPADV_SIZE 1 106*72fa4679SSven Schnelle #define MMCI_PDCMODE_OFFSET 15 107*72fa4679SSven Schnelle #define MMCI_PDCMODE_SIZE 1 108*72fa4679SSven Schnelle #define MMCI_BLKLEN_OFFSET 16 109*72fa4679SSven Schnelle #define MMCI_BLKLEN_SIZE 16 110*72fa4679SSven Schnelle 111*72fa4679SSven Schnelle /* Bitfields in DTOR */ 112*72fa4679SSven Schnelle #define MMCI_DTOCYC_OFFSET 0 113*72fa4679SSven Schnelle #define MMCI_DTOCYC_SIZE 4 114*72fa4679SSven Schnelle #define MMCI_DTOMUL_OFFSET 4 115*72fa4679SSven Schnelle #define MMCI_DTOMUL_SIZE 3 116*72fa4679SSven Schnelle 117*72fa4679SSven Schnelle /* Bitfields in SDCR */ 118*72fa4679SSven Schnelle #define MMCI_SCDSEL_OFFSET 0 119*72fa4679SSven Schnelle #define MMCI_SCDSEL_SIZE 4 120*72fa4679SSven Schnelle #define MMCI_SCDBUS_OFFSET 7 121*72fa4679SSven Schnelle #define MMCI_SCDBUS_SIZE 1 122*72fa4679SSven Schnelle 123*72fa4679SSven Schnelle /* Bitfields in ARGR */ 124*72fa4679SSven Schnelle #define MMCI_ARG_OFFSET 0 125*72fa4679SSven Schnelle #define MMCI_ARG_SIZE 32 126*72fa4679SSven Schnelle 127*72fa4679SSven Schnelle /* Bitfields in CMDR */ 128*72fa4679SSven Schnelle #define MMCI_CMDNB_OFFSET 0 129*72fa4679SSven Schnelle #define MMCI_CMDNB_SIZE 6 130*72fa4679SSven Schnelle #define MMCI_RSPTYP_OFFSET 6 131*72fa4679SSven Schnelle #define MMCI_RSPTYP_SIZE 2 132*72fa4679SSven Schnelle #define MMCI_SPCMD_OFFSET 8 133*72fa4679SSven Schnelle #define MMCI_SPCMD_SIZE 3 134*72fa4679SSven Schnelle #define MMCI_OPDCMD_OFFSET 11 135*72fa4679SSven Schnelle #define MMCI_OPDCMD_SIZE 1 136*72fa4679SSven Schnelle #define MMCI_MAXLAT_OFFSET 12 137*72fa4679SSven Schnelle #define MMCI_MAXLAT_SIZE 1 138*72fa4679SSven Schnelle #define MMCI_TRCMD_OFFSET 16 139*72fa4679SSven Schnelle #define MMCI_TRCMD_SIZE 2 140*72fa4679SSven Schnelle #define MMCI_TRDIR_OFFSET 18 141*72fa4679SSven Schnelle #define MMCI_TRDIR_SIZE 1 142*72fa4679SSven Schnelle #define MMCI_TRTYP_OFFSET 19 143*72fa4679SSven Schnelle #define MMCI_TRTYP_SIZE 2 144*72fa4679SSven Schnelle 145*72fa4679SSven Schnelle /* Bitfields in RSPRx */ 146*72fa4679SSven Schnelle #define MMCI_RSP_OFFSET 0 147*72fa4679SSven Schnelle #define MMCI_RSP_SIZE 32 148*72fa4679SSven Schnelle 149*72fa4679SSven Schnelle /* Bitfields in SR/IER/IDR/IMR */ 150*72fa4679SSven Schnelle #define MMCI_CMDRDY_OFFSET 0 151*72fa4679SSven Schnelle #define MMCI_CMDRDY_SIZE 1 152*72fa4679SSven Schnelle #define MMCI_RXRDY_OFFSET 1 153*72fa4679SSven Schnelle #define MMCI_RXRDY_SIZE 1 154*72fa4679SSven Schnelle #define MMCI_TXRDY_OFFSET 2 155*72fa4679SSven Schnelle #define MMCI_TXRDY_SIZE 1 156*72fa4679SSven Schnelle #define MMCI_BLKE_OFFSET 3 157*72fa4679SSven Schnelle #define MMCI_BLKE_SIZE 1 158*72fa4679SSven Schnelle #define MMCI_DTIP_OFFSET 4 159*72fa4679SSven Schnelle #define MMCI_DTIP_SIZE 1 160*72fa4679SSven Schnelle #define MMCI_NOTBUSY_OFFSET 5 161*72fa4679SSven Schnelle #define MMCI_NOTBUSY_SIZE 1 162*72fa4679SSven Schnelle #define MMCI_ENDRX_OFFSET 6 163*72fa4679SSven Schnelle #define MMCI_ENDRX_SIZE 1 164*72fa4679SSven Schnelle #define MMCI_ENDTX_OFFSET 7 165*72fa4679SSven Schnelle #define MMCI_ENDTX_SIZE 1 166*72fa4679SSven Schnelle #define MMCI_RXBUFF_OFFSET 14 167*72fa4679SSven Schnelle #define MMCI_RXBUFF_SIZE 1 168*72fa4679SSven Schnelle #define MMCI_TXBUFE_OFFSET 15 169*72fa4679SSven Schnelle #define MMCI_TXBUFE_SIZE 1 170*72fa4679SSven Schnelle #define MMCI_RINDE_OFFSET 16 171*72fa4679SSven Schnelle #define MMCI_RINDE_SIZE 1 172*72fa4679SSven Schnelle #define MMCI_RDIRE_OFFSET 17 173*72fa4679SSven Schnelle #define MMCI_RDIRE_SIZE 1 174*72fa4679SSven Schnelle #define MMCI_RCRCE_OFFSET 18 175*72fa4679SSven Schnelle #define MMCI_RCRCE_SIZE 1 176*72fa4679SSven Schnelle #define MMCI_RENDE_OFFSET 19 177*72fa4679SSven Schnelle #define MMCI_RENDE_SIZE 1 178*72fa4679SSven Schnelle #define MMCI_RTOE_OFFSET 20 179*72fa4679SSven Schnelle #define MMCI_RTOE_SIZE 1 180*72fa4679SSven Schnelle #define MMCI_DCRCE_OFFSET 21 181*72fa4679SSven Schnelle #define MMCI_DCRCE_SIZE 1 182*72fa4679SSven Schnelle #define MMCI_DTOE_OFFSET 22 183*72fa4679SSven Schnelle #define MMCI_DTOE_SIZE 1 184*72fa4679SSven Schnelle #define MMCI_OVRE_OFFSET 30 185*72fa4679SSven Schnelle #define MMCI_OVRE_SIZE 1 186*72fa4679SSven Schnelle #define MMCI_UNRE_OFFSET 31 187*72fa4679SSven Schnelle #define MMCI_UNRE_SIZE 1 188*72fa4679SSven Schnelle 189*72fa4679SSven Schnelle /* Constants for DTOMUL */ 190*72fa4679SSven Schnelle #define MMCI_DTOMUL_1_CYCLE 0 191*72fa4679SSven Schnelle #define MMCI_DTOMUL_16_CYCLES 1 192*72fa4679SSven Schnelle #define MMCI_DTOMUL_128_CYCLES 2 193*72fa4679SSven Schnelle #define MMCI_DTOMUL_256_CYCLES 3 194*72fa4679SSven Schnelle #define MMCI_DTOMUL_1024_CYCLES 4 195*72fa4679SSven Schnelle #define MMCI_DTOMUL_4096_CYCLES 5 196*72fa4679SSven Schnelle #define MMCI_DTOMUL_65536_CYCLES 6 197*72fa4679SSven Schnelle #define MMCI_DTOMUL_1048576_CYCLES 7 198*72fa4679SSven Schnelle 199*72fa4679SSven Schnelle /* Constants for RSPTYP */ 200*72fa4679SSven Schnelle #define MMCI_RSPTYP_NO_RESP 0 201*72fa4679SSven Schnelle #define MMCI_RSPTYP_48_BIT_RESP 1 202*72fa4679SSven Schnelle #define MMCI_RSPTYP_136_BIT_RESP 2 203*72fa4679SSven Schnelle 204*72fa4679SSven Schnelle /* Constants for SPCMD */ 205*72fa4679SSven Schnelle #define MMCI_SPCMD_NO_SPEC_CMD 0 206*72fa4679SSven Schnelle #define MMCI_SPCMD_INIT_CMD 1 207*72fa4679SSven Schnelle #define MMCI_SPCMD_SYNC_CMD 2 208*72fa4679SSven Schnelle #define MMCI_SPCMD_INT_CMD 4 209*72fa4679SSven Schnelle #define MMCI_SPCMD_INT_RESP 5 210*72fa4679SSven Schnelle 211*72fa4679SSven Schnelle /* Constants for TRCMD */ 212*72fa4679SSven Schnelle #define MMCI_TRCMD_NO_TRANS 0 213*72fa4679SSven Schnelle #define MMCI_TRCMD_START_TRANS 1 214*72fa4679SSven Schnelle #define MMCI_TRCMD_STOP_TRANS 2 215*72fa4679SSven Schnelle 216*72fa4679SSven Schnelle /* Constants for TRTYP */ 217*72fa4679SSven Schnelle #define MMCI_TRTYP_BLOCK 0 218*72fa4679SSven Schnelle #define MMCI_TRTYP_MULTI_BLOCK 1 219*72fa4679SSven Schnelle #define MMCI_TRTYP_STREAM 2 220*72fa4679SSven Schnelle 221*72fa4679SSven Schnelle /* Bit manipulation macros */ 222*72fa4679SSven Schnelle #define MMCI_BIT(name) \ 223*72fa4679SSven Schnelle (1 << MMCI_##name##_OFFSET) 224*72fa4679SSven Schnelle #define MMCI_BF(name,value) \ 225*72fa4679SSven Schnelle (((value) & ((1 << MMCI_##name##_SIZE) - 1)) \ 226*72fa4679SSven Schnelle << MMCI_##name##_OFFSET) 227*72fa4679SSven Schnelle #define MMCI_BFEXT(name,value) \ 228*72fa4679SSven Schnelle (((value) >> MMCI_##name##_OFFSET)\ 229*72fa4679SSven Schnelle & ((1 << MMCI_##name##_SIZE) - 1)) 230*72fa4679SSven Schnelle #define MMCI_BFINS(name,value,old) \ 231*72fa4679SSven Schnelle (((old) & ~(((1 << MMCI_##name##_SIZE) - 1) \ 232*72fa4679SSven Schnelle << MMCI_##name##_OFFSET)) \ 233*72fa4679SSven Schnelle | MMCI_BF(name,value)) 234*72fa4679SSven Schnelle 235*72fa4679SSven Schnelle /* 236*72fa4679SSven Schnelle * NOTICE: Use of registers offsets is depreciated. 237*72fa4679SSven Schnelle * These defines will be removed once the old driver 238*72fa4679SSven Schnelle * is taken out of commision. 239*72fa4679SSven Schnelle * 240*72fa4679SSven Schnelle * Register access macros 241*72fa4679SSven Schnelle */ 242*72fa4679SSven Schnelle #define mmci_readl(reg) \ 243*72fa4679SSven Schnelle readl((void *)ATMEL_BASE_MMCI + MMCI_##reg) 244*72fa4679SSven Schnelle #define mmci_writel(reg,value) \ 245*72fa4679SSven Schnelle writel((value), (void *)ATMEL_BASE_MMCI + MMCI_##reg) 246*72fa4679SSven Schnelle 247*72fa4679SSven Schnelle #endif /* __ATMEL_MCI_H__ */ 248