• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * SDIO device core hardware definitions.
3  * sdio is a portion of the pcmcia core in core rev 3 - rev 8
4  *
5  * SDIO core support 1bit, 4 bit SDIO mode as well as SPI mode.
6  *
7  * Copyright (C) 1999-2019, Broadcom.
8  *
9  *      Unless you and Broadcom execute a separate written software license
10  * agreement governing use of this software, this software is licensed to you
11  * under the terms of the GNU General Public License version 2 (the "GPL"),
12  * available at http://www.broadcom.com/licenses/GPLv2.php, with the
13  * following added to such license:
14  *
15  *      As a special exception, the copyright holders of this software give you
16  * permission to link this software with independent modules, and to copy and
17  * distribute the resulting executable under terms of your choice, provided that
18  * you also meet, for each linked independent module, the terms and conditions
19  * of the license of that module.  An independent module is a module which is
20  * not derived from this software.  The special exception does not apply to any
21  * modifications of the software.
22  *
23  *      Notwithstanding the above, under no circumstances may you combine this
24  * software in any way with any other Broadcom software provided under a license
25  * other than the GPL, without Broadcom's express prior written consent.
26  *
27  *
28  * <<Broadcom-WL-IPTag/Open:>>
29  *
30  * $Id: sbsdio.h 665717 2016-10-18 23:29:25Z $
31  */
32 
33 #ifndef _SBSDIO_H
34 #define _SBSDIO_H
35 
36 #define SBSDIO_NUM_FUNCTION 3 /* as of sdiod rev 0, supports 3 functions */
37 
38 /* function 1 miscellaneous registers */
39 #define SBSDIO_SPROM_CS 0x10000        /* sprom command and status */
40 #define SBSDIO_SPROM_INFO 0x10001      /* sprom info register */
41 #define SBSDIO_SPROM_DATA_LOW 0x10002  /* sprom indirect access data byte 0 */
42 #define SBSDIO_SPROM_DATA_HIGH 0x10003 /* sprom indirect access data byte 1 */
43 #define SBSDIO_SPROM_ADDR_LOW 0x10004  /* sprom indirect access addr byte 0 */
44 #define SBSDIO_SPROM_ADDR_HIGH 0x10005 /* sprom indirect access addr byte 0 */
45 #define SBSDIO_CHIP_CTRL_DATA 0x10006  /* xtal_pu (gpio) output */
46 #define SBSDIO_CHIP_CTRL_EN 0x10007    /* xtal_pu (gpio) enable */
47 #define SBSDIO_WATERMARK 0x10008       /* rev < 7, watermark for sdio device */
48 #define SBSDIO_DEVICE_CTL 0x10009      /* control busy signal generation */
49 
50 /* registers introduced in rev 8, some content (mask/bits) defs in sbsdpcmdev.h
51  */
52 #define SBSDIO_FUNC1_SBADDRLOW 0x1000A /* SB Address Window Low (b15) */
53 #define SBSDIO_FUNC1_SBADDRMID 0x1000B /* SB Address Window Mid (b23:b16) */
54 #define SBSDIO_FUNC1_SBADDRHIGH                                                \
55     0x1000C                            /* SB Address Window High (b31:b24)    */
56 #define SBSDIO_FUNC1_FRAMECTRL 0x1000D /* Frame Control (frame term/abort) */
57 #define SBSDIO_FUNC1_CHIPCLKCSR 0x1000E  /* ChipClockCSR (ALP/HT ctl/status) */
58 #define SBSDIO_FUNC1_SDIOPULLUP 0x1000F  /* SdioPullUp (on cmd, d0-d2) */
59 #define SBSDIO_FUNC1_WFRAMEBCLO 0x10019  /* Write Frame Byte Count Low */
60 #define SBSDIO_FUNC1_WFRAMEBCHI 0x1001A  /* Write Frame Byte Count High */
61 #define SBSDIO_FUNC1_RFRAMEBCLO 0x1001B  /* Read Frame Byte Count Low */
62 #define SBSDIO_FUNC1_RFRAMEBCHI 0x1001C  /* Read Frame Byte Count High */
63 #define SBSDIO_FUNC1_MESBUSYCTRL 0x1001D /* MesBusyCtl at 0x1001D (rev 11) */
64 
65 #define SBSDIO_FUNC1_MISC_REG_START 0x10000 /* f1 misc register start */
66 #define SBSDIO_FUNC1_MISC_REG_LIMIT 0x1001C /* f1 misc register end */
67 
68 /* Sdio Core Rev 12 */
69 #define SBSDIO_FUNC1_WAKEUPCTRL 0x1001E
70 #define SBSDIO_FUNC1_WCTRL_ALPWAIT_MASK 0x1
71 #define SBSDIO_FUNC1_WCTRL_ALPWAIT_SHIFT 0
72 #define SBSDIO_FUNC1_WCTRL_HTWAIT_MASK 0x2
73 #define SBSDIO_FUNC1_WCTRL_HTWAIT_SHIFT 1
74 #define SBSDIO_FUNC1_SLEEPCSR 0x1001F
75 #define SBSDIO_FUNC1_SLEEPCSR_KSO_MASK 0x1
76 #define SBSDIO_FUNC1_SLEEPCSR_KSO_SHIFT 0
77 #define SBSDIO_FUNC1_SLEEPCSR_KSO_EN 1
78 #define SBSDIO_FUNC1_SLEEPCSR_DEVON_MASK 0x2
79 #define SBSDIO_FUNC1_SLEEPCSR_DEVON_SHIFT 1
80 
81 /* SBSDIO_SPROM_CS */
82 #define SBSDIO_SPROM_IDLE 0
83 #define SBSDIO_SPROM_WRITE 1
84 #define SBSDIO_SPROM_READ 2
85 #define SBSDIO_SPROM_WEN 4
86 #define SBSDIO_SPROM_WDS 7
87 #define SBSDIO_SPROM_DONE 8
88 
89 /* SBSDIO_SPROM_INFO */
90 #define SROM_SZ_MASK 0x03 /* SROM size, 1: 4k, 2: 16k */
91 #define SROM_BLANK 0x04   /* depreciated in corerev 6 */
92 #define SROM_OTP 0x80     /* OTP present */
93 
94 /* SBSDIO_WATERMARK */
95 #define SBSDIO_WATERMARK_MASK                                                  \
96     0x7f /* number of words - 1 for sd device                                  \
97           * to wait before sending data to host                                \
98           */
99 
100 /* SBSDIO_MESBUSYCTRL */
101 /* When RX FIFO has less entries than this & MBE is set
102  * => busy signal is asserted between data blocks.
103  */
104 #define SBSDIO_MESBUSYCTRL_MASK 0x7f
105 #define SBSDIO_MESBUSYCTRL_ENAB 0x80 /* Enable busy capability for MES access  \
106                                       */
107 
108 /* SBSDIO_DEVICE_CTL */
109 #define SBSDIO_DEVCTL_SETBUSY                                                  \
110     0x01 /* 1: device will assert busy signal when                             \
111           * receiving CMD53                                                    \
112           */
113 #define SBSDIO_DEVCTL_SPI_INTR_SYNC                                            \
114     0x02 /* 1: assertion of sdio interrupt is                                  \
115           * synchronous to the sdio clock                                      \
116           */
117 #define SBSDIO_DEVCTL_CA_INT_ONLY                                              \
118     0x04 /* 1: mask all interrupts to host                                     \
119           * except the chipActive (rev 8)                                      \
120           */
121 #define SBSDIO_DEVCTL_PADS_ISO                                                 \
122     0x08 /* 1: isolate internal sdio signals, put                              \
123           * external pads in tri-state; requires                               \
124           * sdio bus power cycle to clear (rev 9)                              \
125           */
126 #define SBSDIO_DEVCTL_EN_F2_BLK_WATERMARK                                      \
127     0x10                             /* Enable function 2 tx for each block */
128 #define SBSDIO_DEVCTL_F2WM_ENAB 0x10 /* Enable F2 Watermark */
129 #define SBSDIO_DEVCTL_NONDAT_PADS_ISO                                          \
130     0x20 /* Isolate sdio clk and cmd (non-data) */
131 
132 /* SBSDIO_FUNC1_CHIPCLKCSR */
133 #define SBSDIO_FORCE_ALP 0x01           /* Force ALP request to backplane */
134 #define SBSDIO_FORCE_HT 0x02            /* Force HT request to backplane */
135 #define SBSDIO_FORCE_ILP 0x04           /* Force ILP request to backplane */
136 #define SBSDIO_ALP_AVAIL_REQ 0x08       /* Make ALP ready (power up xtal) */
137 #define SBSDIO_HT_AVAIL_REQ 0x10        /* Make HT ready (power up PLL) */
138 #define SBSDIO_FORCE_HW_CLKREQ_OFF 0x20 /* Squelch clock requests from HW */
139 #define SBSDIO_ALP_AVAIL 0x40           /* Status: ALP is ready */
140 #define SBSDIO_HT_AVAIL 0x80            /* Status: HT is ready */
141 /* In rev8, actual avail bits followed original docs */
142 #define SBSDIO_Rev8_HT_AVAIL 0x40
143 #define SBSDIO_Rev8_ALP_AVAIL 0x80
144 #define SBSDIO_CSR_MASK 0x1F
145 
146 #define SBSDIO_AVBITS (SBSDIO_HT_AVAIL | SBSDIO_ALP_AVAIL)
147 #define SBSDIO_ALPAV(regval) ((regval)&SBSDIO_AVBITS)
148 #define SBSDIO_HTAV(regval) (((regval)&SBSDIO_AVBITS) == SBSDIO_AVBITS)
149 #define SBSDIO_ALPONLY(regval) (SBSDIO_ALPAV(regval) && !SBSDIO_HTAV(regval))
150 #define SBSDIO_CLKAV(regval, alponly)                                          \
151     (SBSDIO_ALPAV(regval) && (alponly ? 1 : SBSDIO_HTAV(regval)))
152 
153 /* SBSDIO_FUNC1_SDIOPULLUP */
154 #define SBSDIO_PULLUP_D0 0x01  /* Enable D0/MISO pullup */
155 #define SBSDIO_PULLUP_D1 0x02  /* Enable D1/INT# pullup */
156 #define SBSDIO_PULLUP_D2 0x04  /* Enable D2 pullup */
157 #define SBSDIO_PULLUP_CMD 0x08 /* Enable CMD/MOSI pullup */
158 #define SBSDIO_PULLUP_ALL 0x0f /* All valid bits */
159 
160 /* function 1 OCP space */
161 #define SBSDIO_SB_OFT_ADDR_MASK 0x07FFF /* sb offset addr is <= 15 bits, 32k   \
162                                          */
163 #define SBSDIO_SB_OFT_ADDR_LIMIT 0x08000
164 #define SBSDIO_SB_ACCESS_2_4B_FLAG                                             \
165     0x08000 /* with b15, maps to 32-bit SB access */
166 
167 /* some duplication with sbsdpcmdev.h here */
168 /* valid bits in SBSDIO_FUNC1_SBADDRxxx regs */
169 #define SBSDIO_SBADDRLOW_MASK 0x80      /* Valid bits in SBADDRLOW */
170 #define SBSDIO_SBADDRMID_MASK 0xff      /* Valid bits in SBADDRMID */
171 #define SBSDIO_SBADDRHIGH_MASK 0xffU    /* Valid bits in SBADDRHIGH */
172 #define SBSDIO_SBWINDOW_MASK 0xffff8000 /* Address bits from SBADDR regs */
173 
174 /* direct(mapped) cis space */
175 #define SBSDIO_CIS_BASE_COMMON 0x1000 /* MAPPED common CIS address */
176 #ifdef BCMSPI
177 #define SBSDIO_CIS_SIZE_LIMIT 0x100 /* maximum bytes in one spi CIS */
178 #else
179 #define SBSDIO_CIS_SIZE_LIMIT 0x200     /* maximum bytes in one CIS */
180 #endif                                  /* !BCMSPI */
181 #define SBSDIO_OTP_CIS_SIZE_LIMIT 0x078 /* maximum bytes OTP CIS */
182 
183 #define SBSDIO_CIS_OFT_ADDR_MASK 0x1FFFF /* cis offset addr is < 17 bits */
184 
185 #define SBSDIO_CIS_MANFID_TUPLE_LEN                                            \
186     6 /* manfid tuple length, include tuple,                                   \
187        * link bytes                                                            \
188        */
189 
190 /* indirect cis access (in sprom) */
191 #define SBSDIO_SPROM_CIS_OFFSET                                                \
192     0x8 /* 8 control bytes first, CIS starts from                              \
193          * 8th byte                                                            \
194          */
195 
196 #define SBSDIO_BYTEMODE_DATALEN_MAX                                            \
197     64 /* sdio byte mode: maximum length of one                                \
198         * data comamnd                                                         \
199         */
200 
201 #define SBSDIO_CORE_ADDR_MASK 0x1FFFF /* sdio core function one address mask   \
202                                        */
203 
204 #endif /* _SBSDIO_H */
205