1 /*
2  * Copyright (C) 2015-2020 Alibaba Group Holding Limited
3  */
4 #ifndef __SDMMCIP_REG_HW_H
5 #define __SDMMCIP_REG_HW_H
6 
7 #include "plat_types.h"
8 
9 #define SDMMCIP_REG_CTRL     0x000
10 #define SDMMCIP_REG_PWREN        0x004
11 #define SDMMCIP_REG_CLKDIV       0x008
12 #define SDMMCIP_REG_CLKSRC       0x00C
13 #define SDMMCIP_REG_CLKENA       0x010
14 #define SDMMCIP_REG_TMOUT        0x014
15 #define SDMMCIP_REG_CTYPE        0x018
16 #define SDMMCIP_REG_BLKSIZ       0x01C
17 #define SDMMCIP_REG_BYTCNT       0x020
18 #define SDMMCIP_REG_INTMASK      0x024
19 #define SDMMCIP_REG_CMDARG       0x028
20 #define SDMMCIP_REG_CMD      0x02C
21 #define SDMMCIP_REG_RESP0        0x030
22 #define SDMMCIP_REG_RESP1        0x034
23 #define SDMMCIP_REG_RESP2        0x038
24 #define SDMMCIP_REG_RESP3        0x03C
25 #define SDMMCIP_REG_MINTSTS      0x040
26 #define SDMMCIP_REG_RINTSTS      0x044
27 #define SDMMCIP_REG_STATUS       0x048
28 #define SDMMCIP_REG_FIFOTH       0x04C
29 #define SDMMCIP_REG_CDETECT      0x050
30 #define SDMMCIP_REG_WRTPRT       0x054
31 #define SDMMCIP_REG_GPIO     0x058
32 #define SDMMCIP_REG_TCMCNT       0x05C
33 #define SDMMCIP_REG_TBBCNT       0x060
34 #define SDMMCIP_REG_DEBNCE       0x064
35 #define SDMMCIP_REG_USRID        0x068
36 #define SDMMCIP_REG_VERID        0x06C
37 #define SDMMCIP_REG_HCON     0x070
38 #define SDMMCIP_REG_UHS_REG      0x074
39 #define SDMMCIP_REG_RESET_CARD      0x078
40 #define SDMMCIP_REG_BMOD     0x080
41 #define SDMMCIP_REG_PLDMND       0x084
42 #define SDMMCIP_REG_DBADDR       0x088
43 #define SDMMCIP_REG_IDSTS        0x08C
44 #define SDMMCIP_REG_IDINTEN      0x090
45 #define SDMMCIP_REG_DSCADDR      0x094
46 #define SDMMCIP_REG_BUFADDR      0x098
47 #define SDMMCIP_REG_DATA     0x200
48 
49 /* Interrupt Mask register */
50 #define SDMMCIP_REG_INTMSK_ALL   0xffffffff
51 #define SDMMCIP_REG_INTMSK_CD    (1 << 0)
52 #define SDMMCIP_REG_INTMSK_RE    (1 << 1)
53 #define SDMMCIP_REG_INTMSK_CDONE (1 << 2)
54 #define SDMMCIP_REG_INTMSK_DTO   (1 << 3)
55 #define SDMMCIP_REG_INTMSK_TXDR  (1 << 4)
56 #define SDMMCIP_REG_INTMSK_RXDR  (1 << 5)
57 #define SDMMCIP_REG_INTMSK_DCRC  (1 << 7)
58 #define SDMMCIP_REG_INTMSK_RTO   (1 << 8)
59 #define SDMMCIP_REG_INTMSK_DRTO  (1 << 9)
60 #define SDMMCIP_REG_INTMSK_HTO   (1 << 10)
61 #define SDMMCIP_REG_INTMSK_FRUN  (1 << 11)
62 #define SDMMCIP_REG_INTMSK_HLE   (1 << 12)
63 #define SDMMCIP_REG_INTMSK_SBE   (1 << 13)
64 #define SDMMCIP_REG_INTMSK_ACD   (1 << 14)
65 #define SDMMCIP_REG_INTMSK_EBE   (1 << 15)
66 
67 /* Raw interrupt Regsiter */
68 #define SDMMCIP_REG_DATA_ERR (SDMMCIP_REG_INTMSK_EBE | SDMMCIP_REG_INTMSK_SBE | SDMMCIP_REG_INTMSK_HLE |\
69             SDMMCIP_REG_INTMSK_FRUN | SDMMCIP_REG_INTMSK_EBE | SDMMCIP_REG_INTMSK_DCRC)
70 #define SDMMCIP_REG_DATA_TOUT    (SDMMCIP_REG_INTMSK_HTO | SDMMCIP_REG_INTMSK_DRTO)
71 /* CTRL register */
72 #define SDMMCIP_REG_CTRL_RESET   (1 << 0)
73 #define SDMMCIP_REG_CTRL_FIFO_RESET  (1 << 1)
74 #define SDMMCIP_REG_CTRL_DMA_RESET   (1 << 2)
75 #define SDMMCIP_REG_INT_EN       (1 << 4)
76 #define SDMMCIP_REG_DMA_EN       (1 << 5)
77 #define SDMMCIP_REG_CTRL_SEND_AS_CCSD    (1 << 10)
78 #define SDMMCIP_REG_IDMAC_EN     (1 << 25)
79 #define SDMMCIP_REG_RESET_ALL        (SDMMCIP_REG_CTRL_RESET | SDMMCIP_REG_CTRL_FIFO_RESET |\
80                 SDMMCIP_REG_CTRL_DMA_RESET)
81 
82 /* CMD register */
83 #define SDMMCIP_REG_CMD_RESP_EXP (1 << 6)
84 #define SDMMCIP_REG_CMD_RESP_LENGTH  (1 << 7)
85 #define SDMMCIP_REG_CMD_CHECK_CRC    (1 << 8)
86 #define SDMMCIP_REG_CMD_DATA_EXP (1 << 9)
87 #define SDMMCIP_REG_CMD_RW       (1 << 10)
88 #define SDMMCIP_REG_CMD_SEND_STOP    (1 << 12)
89 #define SDMMCIP_REG_CMD_ABORT_STOP   (1 << 14)
90 #define SDMMCIP_REG_CMD_PRV_DAT_WAIT (1 << 13)
91 #define SDMMCIP_REG_CMD_UPD_CLK  (1 << 21)
92 #define SDMMCIP_REG_CMD_USE_HOLD_REG (1 << 29)
93 #define SDMMCIP_REG_CMD_START        (1 << 31)
94 
95 /* CLKENA register */
96 #define SDMMCIP_REG_CLKEN_ENABLE (1 << 0)
97 #define SDMMCIP_REG_CLKEN_LOW_PWR    (1 << 16)
98 
99 /* Card-type registe */
100 #define SDMMCIP_REG_CTYPE_1BIT   0
101 #define SDMMCIP_REG_CTYPE_4BIT   (1 << 0)
102 #define SDMMCIP_REG_CTYPE_8BIT   (1 << 16)
103 
104 /* Status Register */
105 #define SDMMCIP_REG_BUSY     (1 << 9)
106 #define SDMMCIP_REG_FIFO_FULL        (1 << 3)
107 #define SDMMCIP_REG_FIFO_EMPTY       (1 << 2)
108 #define SDMMCIP_REG_FIFO_COUNT_SHIFT     (17)
109 #define SDMMCIP_REG_FIFO_COUNT_MASK      (0x1fff << SDMMCIP_REG_FIFO_COUNT_SHIFT)
110 
111 /* FIFOTH Register */
112 #define MSIZE(x)        ((x) << 28)
113 #define RX_WMARK(x)     ((x) << 16)
114 #define TX_WMARK(x)     (x)
115 #define RX_WMARK_SHIFT      16
116 #define RX_WMARK_MASK       (0xfff << RX_WMARK_SHIFT)
117 
118 #define SDMMCIP_REG_IDMAC_OWN        (1 << 31)
119 #define SDMMCIP_REG_IDMAC_CH     (1 << 4)
120 #define SDMMCIP_REG_IDMAC_FS     (1 << 3)
121 #define SDMMCIP_REG_IDMAC_LD     (1 << 2)
122 
123 /*  Bus Mode Register */
124 #define SDMMCIP_REG_BMOD_IDMAC_RESET (1 << 0)
125 #define SDMMCIP_REG_BMOD_IDMAC_FB    (1 << 1)
126 #define SDMMCIP_REG_BMOD_IDMAC_EN    (1 << 7)
127 
128 /* UHS register */
129 #define SDMMCIP_REG_DDR_MODE (1 << 16)
130 
131 /* quirks */
132 #define SDMMCIP_REG_QUIRK_DISABLE_SMU        (1 << 0)
133 
134 /* FIFO Register */
135 #define SDMMCIP_REG_FIFO_OFFSET 0x200
136 
137 #endif  /* __SDMMCIP_REG_HW_H */
138