summaryrefslogtreecommitdiff
path: root/sys/dev/marvell/mvsdioreg.h
blob: 3ece891ba1379cdff874bce89f10fc7ed4557f7c (plain)
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_ */