2
* Copyright (C) 2005-2006 Atmel Corporation
4
* SPDX-License-Identifier: GPL-2.0+
6
#ifndef __ATMEL_MCI_H__
7
#define __ATMEL_MCI_H__
9
int atmel_mci_init(void *regs);
14
* Structure for struct SoC access.
15
* Names starting with '_' are fillers.
17
typedef struct atmel_mci {
43
#endif /* __ASSEMBLY__ */
46
#define MMCI_MCIEN_OFFSET 0
47
#define MMCI_MCIEN_SIZE 1
48
#define MMCI_MCIDIS_OFFSET 1
49
#define MMCI_MCIDIS_SIZE 1
50
#define MMCI_PWSEN_OFFSET 2
51
#define MMCI_PWSEN_SIZE 1
52
#define MMCI_PWSDIS_OFFSET 3
53
#define MMCI_PWSDIS_SIZE 1
54
#define MMCI_SWRST_OFFSET 7
55
#define MMCI_SWRST_SIZE 1
58
#define MMCI_CLKDIV_OFFSET 0
59
#define MMCI_CLKDIV_SIZE 8
60
#define MMCI_PWSDIV_OFFSET 8
61
#define MMCI_PWSDIV_SIZE 3
62
#define MMCI_RDPROOF_OFFSET 11
63
#define MMCI_RDPROOF_SIZE 1
64
#define MMCI_WRPROOF_OFFSET 12
65
#define MMCI_WRPROOF_SIZE 1
66
#define MMCI_PDCPADV_OFFSET 14
67
#define MMCI_PDCPADV_SIZE 1
68
#define MMCI_PDCMODE_OFFSET 15
69
#define MMCI_PDCMODE_SIZE 1
70
#define MMCI_BLKLEN_OFFSET 16
71
#define MMCI_BLKLEN_SIZE 16
73
/* Bitfields in DTOR */
74
#define MMCI_DTOCYC_OFFSET 0
75
#define MMCI_DTOCYC_SIZE 4
76
#define MMCI_DTOMUL_OFFSET 4
77
#define MMCI_DTOMUL_SIZE 3
79
/* Bitfields in SDCR */
80
#define MMCI_SCDSEL_OFFSET 0
81
#define MMCI_SCDSEL_SIZE 4
82
#define MMCI_SCDBUS_OFFSET 7
83
#define MMCI_SCDBUS_SIZE 1
85
/* Bitfields in ARGR */
86
#define MMCI_ARG_OFFSET 0
87
#define MMCI_ARG_SIZE 32
89
/* Bitfields in CMDR */
90
#define MMCI_CMDNB_OFFSET 0
91
#define MMCI_CMDNB_SIZE 6
92
#define MMCI_RSPTYP_OFFSET 6
93
#define MMCI_RSPTYP_SIZE 2
94
#define MMCI_SPCMD_OFFSET 8
95
#define MMCI_SPCMD_SIZE 3
96
#define MMCI_OPDCMD_OFFSET 11
97
#define MMCI_OPDCMD_SIZE 1
98
#define MMCI_MAXLAT_OFFSET 12
99
#define MMCI_MAXLAT_SIZE 1
100
#define MMCI_TRCMD_OFFSET 16
101
#define MMCI_TRCMD_SIZE 2
102
#define MMCI_TRDIR_OFFSET 18
103
#define MMCI_TRDIR_SIZE 1
104
#define MMCI_TRTYP_OFFSET 19
105
#define MMCI_TRTYP_SIZE 2
107
/* Bitfields in BLKR */
108
/* MMCI_BLKLEN_OFFSET/SIZE already defined in MR */
109
#define MMCI_BCNT_OFFSET 0
110
#define MMCI_BCNT_SIZE 16
112
/* Bitfields in RSPRx */
113
#define MMCI_RSP_OFFSET 0
114
#define MMCI_RSP_SIZE 32
116
/* Bitfields in SR/IER/IDR/IMR */
117
#define MMCI_CMDRDY_OFFSET 0
118
#define MMCI_CMDRDY_SIZE 1
119
#define MMCI_RXRDY_OFFSET 1
120
#define MMCI_RXRDY_SIZE 1
121
#define MMCI_TXRDY_OFFSET 2
122
#define MMCI_TXRDY_SIZE 1
123
#define MMCI_BLKE_OFFSET 3
124
#define MMCI_BLKE_SIZE 1
125
#define MMCI_DTIP_OFFSET 4
126
#define MMCI_DTIP_SIZE 1
127
#define MMCI_NOTBUSY_OFFSET 5
128
#define MMCI_NOTBUSY_SIZE 1
129
#define MMCI_ENDRX_OFFSET 6
130
#define MMCI_ENDRX_SIZE 1
131
#define MMCI_ENDTX_OFFSET 7
132
#define MMCI_ENDTX_SIZE 1
133
#define MMCI_RXBUFF_OFFSET 14
134
#define MMCI_RXBUFF_SIZE 1
135
#define MMCI_TXBUFE_OFFSET 15
136
#define MMCI_TXBUFE_SIZE 1
137
#define MMCI_RINDE_OFFSET 16
138
#define MMCI_RINDE_SIZE 1
139
#define MMCI_RDIRE_OFFSET 17
140
#define MMCI_RDIRE_SIZE 1
141
#define MMCI_RCRCE_OFFSET 18
142
#define MMCI_RCRCE_SIZE 1
143
#define MMCI_RENDE_OFFSET 19
144
#define MMCI_RENDE_SIZE 1
145
#define MMCI_RTOE_OFFSET 20
146
#define MMCI_RTOE_SIZE 1
147
#define MMCI_DCRCE_OFFSET 21
148
#define MMCI_DCRCE_SIZE 1
149
#define MMCI_DTOE_OFFSET 22
150
#define MMCI_DTOE_SIZE 1
151
#define MMCI_OVRE_OFFSET 30
152
#define MMCI_OVRE_SIZE 1
153
#define MMCI_UNRE_OFFSET 31
154
#define MMCI_UNRE_SIZE 1
156
/* Constants for DTOMUL */
157
#define MMCI_DTOMUL_1_CYCLE 0
158
#define MMCI_DTOMUL_16_CYCLES 1
159
#define MMCI_DTOMUL_128_CYCLES 2
160
#define MMCI_DTOMUL_256_CYCLES 3
161
#define MMCI_DTOMUL_1024_CYCLES 4
162
#define MMCI_DTOMUL_4096_CYCLES 5
163
#define MMCI_DTOMUL_65536_CYCLES 6
164
#define MMCI_DTOMUL_1048576_CYCLES 7
166
/* Constants for RSPTYP */
167
#define MMCI_RSPTYP_NO_RESP 0
168
#define MMCI_RSPTYP_48_BIT_RESP 1
169
#define MMCI_RSPTYP_136_BIT_RESP 2
171
/* Constants for SPCMD */
172
#define MMCI_SPCMD_NO_SPEC_CMD 0
173
#define MMCI_SPCMD_INIT_CMD 1
174
#define MMCI_SPCMD_SYNC_CMD 2
175
#define MMCI_SPCMD_INT_CMD 4
176
#define MMCI_SPCMD_INT_RESP 5
178
/* Constants for TRCMD */
179
#define MMCI_TRCMD_NO_TRANS 0
180
#define MMCI_TRCMD_START_TRANS 1
181
#define MMCI_TRCMD_STOP_TRANS 2
183
/* Constants for TRTYP */
184
#define MMCI_TRTYP_BLOCK 0
185
#define MMCI_TRTYP_MULTI_BLOCK 1
186
#define MMCI_TRTYP_STREAM 2
188
/* Bit manipulation macros */
189
#define MMCI_BIT(name) \
190
(1 << MMCI_##name##_OFFSET)
191
#define MMCI_BF(name,value) \
192
(((value) & ((1 << MMCI_##name##_SIZE) - 1)) \
193
<< MMCI_##name##_OFFSET)
194
#define MMCI_BFEXT(name,value) \
195
(((value) >> MMCI_##name##_OFFSET)\
196
& ((1 << MMCI_##name##_SIZE) - 1))
197
#define MMCI_BFINS(name,value,old) \
198
(((old) & ~(((1 << MMCI_##name##_SIZE) - 1) \
199
<< MMCI_##name##_OFFSET)) \
200
| MMCI_BF(name,value))
202
#endif /* __ATMEL_MCI_H__ */