summaryrefslogtreecommitdiff
path: root/drivers/mmc/host/uhs2i.h
blob: e0552974cf21ee1a72abd1567153ab2018d36478 (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
182
183
184
185
186
187
188
189
190
191
/*
 *  linux/drivers/mmc/host/uhs2i.h - Ultra High Speed II interface driver
 *
 * Header file for Host Controller registers and I/O accessors.
 *
 *  Copyright (C) 2011-2012 NVIDIA Corporation
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or (at
 * your option) any later version.
 */
#ifndef __UHS2I_HW_H
#define __UHS2I_HW_H

/*
 * Controller registers
 */

#define UHS2I_PRESET_DDR50_AND_SDR104	0x74
#define  UHS2I_SDCLK_FREQ_VAL_LOW_SHIFT	0
#define  UHS2I_SDCLK_FREQ_VAL_LOW_MASK	0x000003FF
#define  UHS2I_SDCLK_FREQ_VAL_HIGH_SHIFT	16
#define  UHS2I_SDCLK_FREQ_VAL_HIGH_MASK	0x03FF0000
#define  UHS2I_CLK_GEN_VAL_LOW_SHIFT	10
#define  UHS2I_CLK_GEN_VAL_LOW_MASK	0x00000400
#define  UHS2I_CLK_GEN_VAL_HIGH_SHIFT	26
#define  UHS2I_CLK_GEN_VAL_HIGH_MASK	0x04000000

#define UHS2I_BLOCK_SIZE	0x80
#define  UHS2I_BLOCK_SIZE_SHIFT	0
#define  UHS2I_BLOCK_SIZE_MASK	0x0FFF
#define  UHS2I_SDMA_BUFFER_BOUNDARY_SHIFT	12
#define  UHS2I_SDMA_BUFFER_BOUNDARY_MASK	0x7000

#define UHS2I_BLOCK_COUNT	0x84

#define UHS2I_COMMAND_PACKET_BYTE_3_to_0	0x88
#define UHS2I_COMMAND_PACKET_BYTE_7_to_4	0x8C
#define UHS2I_COMMAND_PACKET_BYTE_11_to_8	0x90
#define UHS2I_COMMAND_PACKET_BYTE_15_to_12	0x94
#define UHS2I_COMMAND_PACKET_BYTE_19_to_16	0x98

#define UHS2I_TRANSFER_MODE_COMMAND	0x9C
#define  UHS2I_DMA_ENABLE	0x00000001
#define  UHS2I_BLOCK_COUNT_ENABLE	0x00000002
#define  UHS2I_DATA_XFER_DIR_WRITE	0x00000010
#define  UHS2I_BYTE_MODE	0x00000020
#define  UHS2I_RES_TYPE_R5	0x00000040
#define  UHS2I_RES_ERR_CHK_ENABLE	0x00000080
#define  UHS2I_RES_INT_ENABLE	0x00000100
#define  UHS2I_EBSY_WAIT	0x00004000
#define  UHS2I_HALF_DUPLEX	0x00008000
#define  UHS2I_DATA_PRESENT	0x00200000
#define  UHS2I_COMMAND_TYPE_SHIFT	22
#define  UHS2I_COMMAND_TYPE_MASK	0x00C00000
#define   UHS2I_COMMAND_NORMAL	0
#define   UHS2I_COMMAND_CM_TRAN_ABORT	1
#define   UHS2I_COMMAND_SD_TRAN_ABORT	2
#define   UHS2I_COMMAND_GO_DORMANT	3
#define  UHS2I_PACKET_LENGTH_SHIFT	24
#define  UHS2I_PACKET_LENGTH_MASK	0x1F000000

#define UHS2I_RESPONSE_PACKET_BYTE_3_to_0 0xA0
#define UHS2I_RESPONSE_PACKET_BYTE_7_to_4 0xA4
#define UHS2I_RESPONSE_PACKET_BYTE_11_to_8 0xA8
#define UHS2I_RESPONSE_PACKET_BYTE_15_to_12 0xAC
#define UHS2I_RESPONSE_PACKET_BYTE_19_to_16 0xB0

#define UHS2I_MSG_SEL	0xB4
#define  UHS2I_MSG_SEL_MASK	0x00000003
#define  UHS2I_LATEST_MSG	0
#define  UHS2I_ONE_MSG_BEFORE	1
#define  UHS2I_TWO_MSG_BEFORE	2
#define  UHS2I_THREE_MSGS_BEFORE	3

#define UHS2I_MSG	0xB8

#define UHS2I_INT_STATUS	0xBC
#define  UHS2I_INT_STATUS_DEVID_SHIFT	0
#define  UHS2I_INT_STATUS_DEVID_MASK	0x0000FFFF
#define  UHS2I_DEV_SEL_SHIFT	16
#define  UHS2I_DEV_SEL_MASK	0x000F0000
#define  UHS2I_INT_MSG_EN	0x00800000
#define  UHS2I_INT_CODE_SHIFT	24
#define  UHS2I_INT_CODE_MASK	0xFF000000

#define UHS2I_SOFT_RST_TIMER_CNTL	0xC0
#define  UHS2I_HOST_FULL_RST	0x00000001
#define  UHS2I_HOST_SD_TRAN_RST	0x00000002
#define  UHS2I_CMD_RES_TIME_OUT_CNT_SHIFT	16
#define  UHS2I_CMD_RES_TIME_OUT_CNT_MASK	0x000F0000
#define  UHS2I_DEAD_LOCK_TIME_OUT_CNT_SHIFT	20
#define  UHS2I_DEAD_LOCK_TIME_OUT_CNT_MASK	0x00F00000

#define UHS2I_HOST_ERR_INT_STATUS	0xC4
#define UHS2I_HOST_ERR_INT_STATUS_EN	0xC8
#define UHS2I_HOST_ERR_INT_SIG_EN	0xCC
#define  UHS2I_INT_HEADER_ERR	0x00000001
#define  UHS2I_INT_RES_PKT_ERR	0x00000002
#define  UHS2I_INT_RETRY_EXP	0x00000004
#define  UHS2I_INT_CRC_ERR	0x00000008
#define  UHS2I_INT_FRAMING_ERR	0x00000010
#define  UHS2I_INT_TID_ERR	0x00000020
#define  UHS2I_INT_UN_RECOV_ERR	0x00000080
#define  UHS2I_INT_ADMA2_3_ERR	0x00008000
#define  UHS2I_INT_CMD_RES_TIME_OUT	0x00010000
#define  UHS2I_INT_DEAD_LOCK_TIME_OUT	0x00020000
#define  UHS2I_INT_VENDOR_SPECIFIC_ERR_SHIFT	27
#define  UHS2I_INT_VENDOR_SPECIFIC_ERR_MASK	0xF8000000

#define UHS2I_SETTINGS_CAPABILITIES_REGS_PTR	0xE0
#define  UHS2I_SETTINGS_PTR_SHIFT	0
#define  UHS2I_SETTINGS_PTR_MASK	0x000000FF
#define  UHS2I_CAPABILITIES_PTR_SHIFT	16
#define  UHS2I_CAPABILITIES_PTR_MASK	0x00FF0000

#define UHS2I_SHARED_BUS_TEST_REGS_PTR	0xE4
#define  UHS2I_TEST_PTR_SHIFT	0
#define  UHS2I_TEST_PTR_MASK	0x000000FF
#define  UHS2I_SHARED_BUS_PTR_SHIFT	16
#define  UHS2I_SHARED_BUS_PTR_MASK	0x00FF0000

#define UHS2I_VENDOR_REGS_PTR	0xE8
#define  UHS2I_VENDOR_PTR_SHIFT	0
#define  UHS2I_VENDOR_PTR_MASK	0x000000FF

#define UHS2I_GEN_SETTINGS	0x130
#define  UHS2I_LOW_POWER_MODE	0x00000001
#define  UHS2I_NUM_OF_LANES_SHIFT	8
#define  UHS2I_NUM_OF_LANES_MASK	0x00000F00

#define UHS2I_PHY_SETTINGS	0x134
#define  UHS2I_PHY_HYBERNATE_EN	0x00008000

#define UHS2I_LINK_TRAN_SETTINGS1	0x138
#define  UHS2I_N_FCU_MASK	0x0000FF00
#define  UHS2I_RETRY_CNT_SHIFT	16
#define  UHS2I_RETRY_CNT_MASK	0x00030000
#define   UHS2I_RETRY_ONE_TIMES	1
#define   UHS2I_RETRY_TWO_TIMES	2
#define   UHS2I_RETRY_THREE_TIMES	3
#define  UHS2I_MAX_BLK_LEN_SHIFT	20
#define  UHS2I_MAX_BLK_LEN_MASK	0xFFF00000

#define UHS2I_LINK_TRAN_SETTINGS2	0x13C
#define  UHS2I_N_DATA_GAP_MASK	0x000000FF

#define UHS2I_GEN_CAPABILITES	0x140
#define  UHS2I_DAP_MASK	0x0000000F
#define  UHS2I_GAP_SHIFT	4
#define  UHS2I_GAP_MASK	0x000000F0
#define  UHS2I_NUM_OF_LANES_SHIFT	8
#define  UHS2I_NUM_OF_LANES_MASK	0x00003F00
#define  UHS2I_32_AND_64_BIT_ADDRESSING	0x00004000
#define  UHS2I_REMOVABLE_EMBEDDED_SHIFT	16
#define  UHS2I_REMOVABLE_EMBEDDED_MASK	0x00030000
#define   UHS2I_REMOVABLE_CARD	0
#define   UHS2I_EMBEDDED_DEVICES	1
#define   UHS2I_EMBEDDED_REMOVABLE_CARD	2
#define  UHS2I_NUM_DEV_SUPPORTED_SHIFT	18
#define  UHS2I_NUM_DEV_SUPPORTED_MASK	0x003C0000
#define  UHS2I_BUS_TOPOLOGY_SHIFT	22
#define  UHS2I_BUS_TOPOLOGY_MASK	0x00C00000
#define   UHS2I_P2P	0
#define   UHS2I_RING	1
#define   UHS2I_HUB	2
#define   UHS2I_HUB_IN_RING	3

#define UHS2I_PHY_CAPABILITIES	0x144
#define  UHS2I_PHY_REV_MASK	0X0000003F
#define  UHS2I_SPEED_RANGE_SHIFT	6
#define  UHS2I_SPEED_RANGE_MASK	0x000000C0
#define  UHS2I_N_LSS_SYN_SHIFT	16
#define  UHS2I_N_LSS_SYN_MASK	0x000F0000
#define  UHS2I_N_LSS_DIR_SHIFT	20
#define  UHS2I_N_LSS_DIR_MASK	0x00F00000

#define UHS2I_LINK_TRAN_CAPABILITIES1	0x148
#define  UHS2I_LINK_REV_MASK	0x0000003F
#define  UHS2I_CAN_N_FCU_SHIFT	8
#define  UHS2I_CAN_N_FCU_MASK	0x0000FF00
#define  UHS2I_CAN_MAX_BLOCK_LENGTH_SHIFT	20
#define  UHS2I_CAN_MAX_BLOCK_LENGTH_MASK	0xFFF00000

#define UHS2I_LINK_TRAN_CAPABILITIES2	0x14C
#define  UHS2I_CAN_N_DAT_GAP_MASK	0x000000FF

#define UHS2I_FORCE_EVENT_ERR_INT	0x150

#endif /* __UHS2I_HW_H */