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