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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
/* $NetBSD: mvsdioreg.h,v 1.2 2016/03/12 00:41:31 jklos Exp $ */
/*
* Copyright (c) 2010 KIYOHARA Takashi
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _MVSDIOREG_H_
#define _MVSDIOREG_H_
#define MVSDIO_SIZE 0x10000
#ifndef MVSDIO_MAX_CLOCK
#define MVSDIO_MAX_CLOCK (50 * 1000) /* 50,000 kHz */
#endif /* MVSDIO_MAX_CLOCK */
#define MVSDIO_DMABA16LSB 0x0000 /* DMA Buffer Address 16 LSB */
#define MVSDIO_DMABA16MSB 0x0004 /* DMA Buffer Address 16 MSB */
#define MVSDIO_DBS 0x0008 /* Data Block Size */
#define DBS_BLOCKSIZE_MASK 0xfff
#define DBS_BLOCKSIZE(s) ((s) & DBS_BLOCKSIZE_MASK)
#define DBS_BLOCKSIZE_MAX 0x800
#define MVSDIO_DBC 0x000c /* Data Block Count */
#define DBC_BLOCKCOUNT_MASK 0xfff
#define DBC_BLOCKCOUNT(c) ((c) & DBC_BLOCKCOUNT_MASK)
#define MVSDIO_AC16LSB 0x0010 /* Argument in Command 16 LSB */
#define MVSDIO_AC16MSB 0x0014 /* Argument in Command 16 MSB */
#define MVSDIO_TM 0x0018 /* Transfer Mode */
#define TM_SWWRDATASTART (1 << 0) /* InitWrDataXfer */
#define TM_HWWRDATAEN (1 << 1) /* SWInitWrDataXfer */
#define TM_AUTOCMD12EN (1 << 2) /* SWIssuesCMD12 */
#define TM_INTCHKEN (1 << 3) /* CheckInterrupts */
#define TM_DATAXFERTOWARDHOST (1 << 4) /* XferDataToSDHost */
#define TM_STOPCLKEN (1 << 5) /* StopSDClocks */
#define TM_HOSTXFERMODE (1 << 6) /* SW Write */
#define MVSDIO_C 0x001c /* Command */
#define C_RESPTYPE_NR (0 << 0) /* NoResponse */
#define C_RESPTYPE_136BR (1 << 0) /* 136BitResponse */
#define C_RESPTYPE_48BR (2 << 0) /* 48BitResponse */
#define C_RESPTYPE_48BRCB (3 << 0) /*48BitResponseChkBusy*/
#define C_DATACRC16CHKEN (1 << 2) /* EnableCrc16Chk */
#define C_CMDCRCCHKEN (1 << 3) /* HCCrcChk */
#define C_CMDINDEXCHKEN (1 << 4) /* HCChkIndex */
#define C_DATAPRESENT (1 << 5) /* DataAwaitsTransfer */
#define C_UNEXPECTEDRESPEN (1 << 7) /* UnexpectedRespEn */
#define C_CMDINDEX(c) ((c) << 8)
#define MVSDIO_NRH 8
#define MVSDIO_RH(n) (0x0020 + ((n) << 2)) /* Response Halfword n */
#define RH_MASK 0xffff
#define MVSDIO_16DWACPU 0x0040 /* 16-bit Data Word Accessed by CPU */
#define MVSDIO_CRC7lR 0x0044 /* CRC7 of l Response */
#define CRC7lR_CRC7RESPTOKEN_MASK 0x7f
#define MVSDIO_HPS16LSB 0x0048 /* Host Present State 16 LSB */
#define HPS16LSB_CMDINHIBITCMD (1 << 0) /* CmdRegWrite */
#define HPS16LSB_CARDBUSY (1 << 1) /* Card Busy */
#define HPS16LSB_DATLEVEL(x) (((x) >> 3) & 0xf) /* DAT[3:0] Line Signal Level */
#define HPS16LSB_CMDLEVEL (1 << 7) /* CMD line Signal Level */
#define HPS16LSB_TXACTIVE (1 << 8) /* TxEnabled */
#define HPS16LSB_RXACTIVE (1 << 9) /* RxDisabled */
#define HPS16LSB_FIFOFULL (1 << 12) /* FIFO Full */
#define HPS16LSB_FIFOEMPTY (1 << 13) /* FIFO Empty */
#define HPS16LSB_AUTOCMD12ACTIVE (1 << 14) /*auto_cmd12 is active*/
#define MVSDIO_HC 0x0050 /* Host Control */
#define HC_PUSHPULLEN (1 << 0) /* PushPullEn */
#define HC_CARDTYPE_MASK (3 << 1) /* Card type */
#define HC_CARDTYPE_MEMORYONLY (0 << 1) /* Mem only SD card */
#define HC_CARDTYPE_IOONLY (1 << 1) /* IO only SD card */
#define HC_CARDTYPE_IOMEMCOMBO (2 << 1) /* IO and mem combo */
#define HC_CARDTYPE_MMC (3 << 1) /* MMC card */
#define HC_BIGENDIAN (1 << 3) /* BigEndian */
#define HC_LSBFIRST (1 << 4) /* LSB */
#define HC_DATAWIDTH (1 << 9) /* Data Width */
#define HC_HISPEEDEN (1 << 10) /* HighSpeedEnable */
#define HC_TIMEOUTVALUE_MAX (0xf << 11)
#define HC_TIMEOUTEN (1 << 15) /* Timeout */
#define MVSDIO_DBGC 0x0054 /* Data Block Gap Control */
#define DBGC_STOPATBLOCKGAPREQ (1 << 0) /* Stop at block gap request */
#define DBGC_CONTREQ (1 << 1) /* Continue request */
#define DBGC_RDWAITCTL (1 << 2) /* EnableRdWait */
#define DBGC_STOPDATXFER (1 << 3) /* StopDataXferEn */
#define DBGC_RESUME (1 << 4)
#define DBGC_SUSPEND (1 << 5)
#define MVSDIO_CC 0x0058 /* Clock Control */
#define CC_SCLKMASTEREN (1 << 0) /* SdclkEn */
#define MVSDIO_SR 0x005c /* Software Reset */
#define SR_SWRESET (1 << 8)
#define MVSDIO_NIS 0x0060 /* Normal Interrupt Status */
#define MVSDIO_NISE 0x0068 /* Normal Interrupt Status Enable */
#define MVSDIO_NISIE 0x0070 /* Normal Intr Status Intr Enable */
#define NIS_CMDCOMPLETE (1 << 0) /* Command Complete */
#define NIS_XFERCOMPLETE (1 << 1) /* Transfer Complete */
#define NIS_BLOCKGAPEV (1 << 2) /* Block gap event */
#define NIS_DMAINT (1 << 3) /* DMA interrupt */
#define NIS_TXRDY (1 << 4)
#define NIS_RXRDY (1 << 5)
#define NIS_CARDINT (1 << 8) /* Card interrupt */
#define NIS_READWAITON (1 << 9) /* Read Wait state is on */
#define NIS_IMBFIFO8WFULL (1 << 10)
#define NIS_IMBFIFO8WAVAIL (1 << 11)
#define NIS_SUSPENSEON (1 << 12)
#define NIS_AUTOCMD12COMPLETE (1 << 13) /* Auto_cmd12 is comp */
#define NIS_UNEXPECTEDRESPDET (1 << 14)
#define NIS_ERRINT (1 << 15) /* Error interrupt */
#define MVSDIO_EIS 0x0064 /* Error Interrupt Status */
#define MVSDIO_EISE 0x006c /* Error Interrupt Status Enable */
#define MVSDIO_EISIE 0x0074 /* Error Intr Status Interrupt Enable */
#define EIS_CMDTIMEOUTERR (1 << 0) /*Command timeout err*/
#define EIS_CMDCRCERR (1 << 1) /* Command CRC Error */
#define EIS_CMDENDBITERR (1 << 2) /*Command end bit err*/
#define EIS_CMDINDEXERR (1 << 3) /*Command Index Error*/
#define EIS_DATATIMEOUTERR (1 << 4) /* Data timeout error */
#define EIS_RDDATACRCERR (1 << 5) /* Read data CRC err */
#define EIS_RDDATAENDBITERR (1 << 6) /*Rd data end bit err*/
#define EIS_AUTOCMD12ERR (1 << 8) /* Auto CMD12 error */
#define EIS_CMDSTARTBITERR (1 << 9) /*Cmd start bit error*/
#define EIS_XFERSIZEERR (1 << 10) /*Tx size mismatched err*/
#define EIS_RESPTBITERR (1 << 11) /* Response T bit err */
#define EIS_CRCENDBITERR (1 << 12) /* CRC end bit error */
#define EIS_CRCSTARTBITERR (1 << 13) /* CRC start bit err */
#define EIS_CRCSTATERR (1 << 14) /* CRC status error */
#define MVSDIO_ACMD12IS 0x0078 /* Auto CMD12 Interrupt Status */
#define ACMD12IS_AUTOCMD12NOTEXE (1 << 0)
#define ACMD12IS_AUTOCMD12TIMEOUTER (1 << 1)
#define ACMD12IS_AUTOCMD12CRCER (1 << 2)
#define ACMD12IS_AUTOCMD12ENDBITER (1 << 3)
#define ACMD12IS_AUTOCMD12INDEXER (1 << 4)
#define ACMD12IS_AUTOCMD12RESPTBITER (1 << 5)
#define ACMD12IS_AUTOCMD12RESPSTARTBITER (1 << 6)
#define MVSDIO_CNBRDB 0x007c/*Current Num of Bytes Remaining in Data*/
#define MVSDIO_CNDBLBT 0x0080/*Current Num of Data Blk Left ToBe Txed*/
#define MVSDIO_AACC16LSBT 0x0084 /*Arg in Auto Cmd12 Command 16 LSB Txed*/
#define MVSDIO_AACC16MSBT 0x0088 /*Arg in Auto Cmd12 Command 16 MSB Txed*/
#define MVSDIO_IACCT 0x008c /* Index of Auto Cmd12 Commands Tx-ed */
#define IACCT_AUTOCMD12BUSYCHKEN (1 << 0)
#define IACCT_AUTOCMD12INDEXCHKEN (1 << 1)
#define IACCT_AUTOCMD12INDEX (MMC_STOP_TRANSMISSION << 8)
#define MVSDIO_ACRH(n) (0x0090 + ((n) << 2)) /* Auto Cmd12 Response Halfword n */
#define MVSDIO_MCL 0x0100 /* Mbus Control Low */
#define MVSDIO_MCH 0x0104 /* Mbus Control High */
#define MCL_SDARBENTRY(n, x) (((x) & 0xf) << ((n) << 2))
#define MVSDIO_NWINDOW 4
#define MVSDIO_WC(n) (0x0108 + ((n) << 3)) /* Window n Control */
#define WC_WINEN (1 << 0) /* Window n Enable */
#define WC_TARGET(t) (((t) & 0xf) << 4)
#define WC_ATTR(a) (((a) & 0xff) << 8)
#define WC_SIZE(s) (((s) - 1) & 0xffff0000)
#define MVSDIO_WB(n) (0x010c + ((n) << 3)) /* Window n Base */
#define WB_BASE(b) ((b) & 0xffff0000)
#define MVSDIO_CDV 0x0128 /* Clock Divider Value */
#define CDV_CLKDVDRMVALUE_MASK 0x7ff
#define MVSDIO_ADE 0x012c /* Address Decoder Error */
#define ADE_ADD_DEC_MISS_ERR (1 << 0)
#define ADE_ADD_DEC_MULTI_ERR (1 << 1)
#define MVSDIO_ADEM 0x0130 /* Address Decoder Error Mask */
#define ADEM_VARIOUS(x) ((x) << 0) /* Do not mask */
#endif /* _MVSDIOREG_H_ */
|