1*bffde63dSSheetal Tigadoli /* 2*bffde63dSSheetal Tigadoli * Copyright (c) 2016 - 2020, Broadcom 3*bffde63dSSheetal Tigadoli * 4*bffde63dSSheetal Tigadoli * SPDX-License-Identifier: BSD-3-Clause 5*bffde63dSSheetal Tigadoli */ 6*bffde63dSSheetal Tigadoli 7*bffde63dSSheetal Tigadoli #ifndef CSL_SD_PROT_H 8*bffde63dSSheetal Tigadoli #define CSL_SD_PROT_H 9*bffde63dSSheetal Tigadoli 10*bffde63dSSheetal Tigadoli #define SD_CARD_UNKNOWN 0 /* bad type or unrecognized */ 11*bffde63dSSheetal Tigadoli #define SD_CARD_SD 1 /* IO only card */ 12*bffde63dSSheetal Tigadoli #define SD_CARD_SDIO 2 /* memory only card */ 13*bffde63dSSheetal Tigadoli #define SD_CARD_COMBO 3 /* IO and memory combo card */ 14*bffde63dSSheetal Tigadoli #define SD_CARD_MMC 4 /* memory only card */ 15*bffde63dSSheetal Tigadoli #define SD_CARD_CEATA 5 /* IO and memory combo card */ 16*bffde63dSSheetal Tigadoli 17*bffde63dSSheetal Tigadoli #define SD_IO_FIXED_ADDRESS 0 /* fix Address */ 18*bffde63dSSheetal Tigadoli #define SD_IO_INCREMENT_ADDRESS 1 19*bffde63dSSheetal Tigadoli 20*bffde63dSSheetal Tigadoli #define SD_HIGH_CAPACITY_CARD 0x40000000 21*bffde63dSSheetal Tigadoli 22*bffde63dSSheetal Tigadoli #define MMC_CMD_IDLE_RESET_ARG 0xF0F0F0F0 23*bffde63dSSheetal Tigadoli 24*bffde63dSSheetal Tigadoli /* Supported operating voltages are 3.2-3.3 and 3.3-3.4 */ 25*bffde63dSSheetal Tigadoli #define MMC_OCR_OP_VOLT 0x00300000 26*bffde63dSSheetal Tigadoli /* Enable sector access mode */ 27*bffde63dSSheetal Tigadoli #define MMC_OCR_SECTOR_ACCESS_MODE 0x40000000 28*bffde63dSSheetal Tigadoli 29*bffde63dSSheetal Tigadoli /* command index */ 30*bffde63dSSheetal Tigadoli #define SD_CMD_GO_IDLE_STATE 0 /* mandatory for SDIO */ 31*bffde63dSSheetal Tigadoli #define SD_CMD_SEND_OPCOND 1 32*bffde63dSSheetal Tigadoli #define SD_CMD_ALL_SEND_CID 2 33*bffde63dSSheetal Tigadoli #define SD_CMD_MMC_SET_RCA 3 34*bffde63dSSheetal Tigadoli #define SD_CMD_MMC_SET_DSR 4 35*bffde63dSSheetal Tigadoli #define SD_CMD_IO_SEND_OP_COND 5 /* mandatory for SDIO */ 36*bffde63dSSheetal Tigadoli #define SD_ACMD_SET_BUS_WIDTH 6 37*bffde63dSSheetal Tigadoli #define SD_CMD_SWITCH_FUNC 6 38*bffde63dSSheetal Tigadoli #define SD_CMD_SELECT_DESELECT_CARD 7 39*bffde63dSSheetal Tigadoli #define SD_CMD_READ_EXT_CSD 8 40*bffde63dSSheetal Tigadoli #define SD_CMD_SEND_CSD 9 41*bffde63dSSheetal Tigadoli #define SD_CMD_SEND_CID 10 42*bffde63dSSheetal Tigadoli #define SD_CMD_STOP_TRANSMISSION 12 43*bffde63dSSheetal Tigadoli #define SD_CMD_SEND_STATUS 13 44*bffde63dSSheetal Tigadoli #define SD_ACMD_SD_STATUS 13 45*bffde63dSSheetal Tigadoli #define SD_CMD_GO_INACTIVE_STATE 15 46*bffde63dSSheetal Tigadoli #define SD_CMD_SET_BLOCKLEN 16 47*bffde63dSSheetal Tigadoli #define SD_CMD_READ_SINGLE_BLOCK 17 48*bffde63dSSheetal Tigadoli #define SD_CMD_READ_MULTIPLE_BLOCK 18 49*bffde63dSSheetal Tigadoli #define SD_CMD_WRITE_BLOCK 24 50*bffde63dSSheetal Tigadoli #define SD_CMD_WRITE_MULTIPLE_BLOCK 25 51*bffde63dSSheetal Tigadoli #define SD_CMD_PROGRAM_CSD 27 52*bffde63dSSheetal Tigadoli #define SD_CMD_SET_WRITE_PROT 28 53*bffde63dSSheetal Tigadoli #define SD_CMD_CLR_WRITE_PROT 29 54*bffde63dSSheetal Tigadoli #define SD_CMD_SEND_WRITE_PROT 30 55*bffde63dSSheetal Tigadoli #define SD_CMD_ERASE_WR_BLK_START 32 56*bffde63dSSheetal Tigadoli #define SD_CMD_ERASE_WR_BLK_END 33 57*bffde63dSSheetal Tigadoli #define SD_CMD_ERASE_GROUP_START 35 58*bffde63dSSheetal Tigadoli #define SD_CMD_ERASE_GROUP_END 36 59*bffde63dSSheetal Tigadoli #define SD_CMD_ERASE 38 60*bffde63dSSheetal Tigadoli #define SD_CMD_LOCK_UNLOCK 42 61*bffde63dSSheetal Tigadoli #define SD_CMD_IO_RW_DIRECT 52 /* mandatory for SDIO */ 62*bffde63dSSheetal Tigadoli #define SD_CMD_IO_RW_EXTENDED 53 /* mandatory for SDIO */ 63*bffde63dSSheetal Tigadoli #define SD_CMD_APP_CMD 55 64*bffde63dSSheetal Tigadoli #define SD_CMD_GEN_CMD 56 65*bffde63dSSheetal Tigadoli #define SD_CMD_READ_OCR 58 66*bffde63dSSheetal Tigadoli #define SD_CMD_CRC_ON_OFF 59 /* mandatory for SDIO */ 67*bffde63dSSheetal Tigadoli #define SD_ACMD_SEND_NUM_WR_BLOCKS 22 68*bffde63dSSheetal Tigadoli #define SD_ACMD_SET_WR_BLOCK_ERASE_CNT 23 69*bffde63dSSheetal Tigadoli #define SD_ACMD_SD_SEND_OP_COND 41 70*bffde63dSSheetal Tigadoli #define SD_ACMD_SET_CLR_CARD_DETECT 42 71*bffde63dSSheetal Tigadoli #define SD_ACMD_SEND_SCR 51 72*bffde63dSSheetal Tigadoli 73*bffde63dSSheetal Tigadoli /* response parameters */ 74*bffde63dSSheetal Tigadoli #define SD_RSP_NO_NONE 0 75*bffde63dSSheetal Tigadoli #define SD_RSP_NO_1 1 76*bffde63dSSheetal Tigadoli #define SD_RSP_NO_2 2 77*bffde63dSSheetal Tigadoli #define SD_RSP_NO_3 3 78*bffde63dSSheetal Tigadoli #define SD_RSP_NO_4 4 79*bffde63dSSheetal Tigadoli #define SD_RSP_NO_5 5 80*bffde63dSSheetal Tigadoli #define SD_RSP_NO_6 6 81*bffde63dSSheetal Tigadoli 82*bffde63dSSheetal Tigadoli /* Modified R6 response (to CMD3) */ 83*bffde63dSSheetal Tigadoli #define SD_RSP_MR6_COM_CRC_ERROR 0x8000 84*bffde63dSSheetal Tigadoli #define SD_RSP_MR6_ILLEGAL_COMMAND 0x4000 85*bffde63dSSheetal Tigadoli #define SD_RSP_MR6_ERROR 0x2000 86*bffde63dSSheetal Tigadoli 87*bffde63dSSheetal Tigadoli /* Modified R1 in R4 Response (to CMD5) */ 88*bffde63dSSheetal Tigadoli #define SD_RSP_MR1_SBIT 0x80 89*bffde63dSSheetal Tigadoli #define SD_RSP_MR1_PARAMETER_ERROR 0x40 90*bffde63dSSheetal Tigadoli #define SD_RSP_MR1_RFU5 0x20 91*bffde63dSSheetal Tigadoli #define SD_RSP_MR1_FUNC_NUM_ERROR 0x10 92*bffde63dSSheetal Tigadoli #define SD_RSP_MR1_COM_CRC_ERROR 0x80 93*bffde63dSSheetal Tigadoli #define SD_RSP_MR1_ILLEGAL_COMMAND 0x40 94*bffde63dSSheetal Tigadoli #define SD_RSP_MR1_RFU1 0x20 95*bffde63dSSheetal Tigadoli #define SD_RSP_MR1_IDLE_STATE 0x01 96*bffde63dSSheetal Tigadoli 97*bffde63dSSheetal Tigadoli /* R5 response (to CMD52 and CMD53) */ 98*bffde63dSSheetal Tigadoli #define SD_RSP_R5_COM_CRC_ERROR 0x80 99*bffde63dSSheetal Tigadoli #define SD_RSP_R5_ILLEGAL_COMMAND 0x40 100*bffde63dSSheetal Tigadoli #define SD_RSP_R5_IO_CURRENTSTATE1 0x20 101*bffde63dSSheetal Tigadoli #define SD_RSP_R5_IO_CURRENTSTATE0 0x10 102*bffde63dSSheetal Tigadoli #define SD_RSP_R5_ERROR 0x80 103*bffde63dSSheetal Tigadoli #define SD_RSP_R5_RFU 0x40 104*bffde63dSSheetal Tigadoli #define SD_RSP_R5_FUNC_NUM_ERROR 0x20 105*bffde63dSSheetal Tigadoli #define SD_RSP_R5_OUT_OF_RANGE 0x01 106*bffde63dSSheetal Tigadoli 107*bffde63dSSheetal Tigadoli /* argument for SD_CMD_IO_RW_DIRECT and SD_CMD_IO_RW_EXTENDED */ 108*bffde63dSSheetal Tigadoli #define SD_OP_READ 0 /* Read_Write */ 109*bffde63dSSheetal Tigadoli #define SD_OP_WRITE 1 /* Read_Write */ 110*bffde63dSSheetal Tigadoli 111*bffde63dSSheetal Tigadoli #define SD_RW_NORMAL 0 /* no RAW */ 112*bffde63dSSheetal Tigadoli #define SD_RW_RAW 1 /* RAW */ 113*bffde63dSSheetal Tigadoli 114*bffde63dSSheetal Tigadoli #define SD_BYTE_MODE 0 /* Byte Mode */ 115*bffde63dSSheetal Tigadoli #define SD_BLOCK_MODE 1 /* BlockMode */ 116*bffde63dSSheetal Tigadoli 117*bffde63dSSheetal Tigadoli #define SD_FIXED_ADDRESS 0 /* fix Address */ 118*bffde63dSSheetal Tigadoli #define SD_INCREMENT_ADDRESS 1 /* IncrementAddress */ 119*bffde63dSSheetal Tigadoli 120*bffde63dSSheetal Tigadoli #define SD_CMD5_ARG_IO_OCR_MASK 0x00FFFFFF 121*bffde63dSSheetal Tigadoli #define SD_CMD5_ARG_IO_OCR_SHIFT 0 122*bffde63dSSheetal Tigadoli #define SD_CMD55_ARG_RCA_SHIFT 16 123*bffde63dSSheetal Tigadoli #define SD_CMD59_ARG_CRC_OPTION_MASK 0x01 124*bffde63dSSheetal Tigadoli #define SD_CMD59_ARG_CRC_OPTION_SHIFT 0 125*bffde63dSSheetal Tigadoli 126*bffde63dSSheetal Tigadoli /* SD_CMD_IO_RW_DIRECT Argument */ 127*bffde63dSSheetal Tigadoli #define SdioIoRWDirectArg(rw, raw, func, addr, data) \ 128*bffde63dSSheetal Tigadoli (((rw & 1) << 31) | ((func & 0x7) << 28) | \ 129*bffde63dSSheetal Tigadoli ((raw & 1) << 27) | ((addr & 0x1FFFF) << 9) | \ 130*bffde63dSSheetal Tigadoli (data & 0xFF)) 131*bffde63dSSheetal Tigadoli 132*bffde63dSSheetal Tigadoli /* build SD_CMD_IO_RW_EXTENDED Argument */ 133*bffde63dSSheetal Tigadoli #define SdioIoRWExtArg(rw, blk, func, addr, inc_addr, count) \ 134*bffde63dSSheetal Tigadoli (((rw & 1) << 31) | ((func & 0x7) << 28) | \ 135*bffde63dSSheetal Tigadoli ((blk & 1) << 27) | ((inc_addr & 1) << 26) | \ 136*bffde63dSSheetal Tigadoli ((addr & 0x1FFFF) << 9) | (count & 0x1FF)) 137*bffde63dSSheetal Tigadoli 138*bffde63dSSheetal Tigadoli /* 139*bffde63dSSheetal Tigadoli * The Common I/O area shall be implemented on all SDIO cards and 140*bffde63dSSheetal Tigadoli * is accessed the the host via I/O reads and writes to function 0, 141*bffde63dSSheetal Tigadoli * the registers within the CIA are provided to enable/disable 142*bffde63dSSheetal Tigadoli * the operationo fthe i/o funciton. 143*bffde63dSSheetal Tigadoli */ 144*bffde63dSSheetal Tigadoli 145*bffde63dSSheetal Tigadoli /* cccr_sdio_rev */ 146*bffde63dSSheetal Tigadoli #define SDIO_REV_SDIOID_MASK 0xf0 /* SDIO spec revision number */ 147*bffde63dSSheetal Tigadoli #define SDIO_REV_CCCRID_MASK 0x0f /* CCCR format version number */ 148*bffde63dSSheetal Tigadoli 149*bffde63dSSheetal Tigadoli /* sd_rev */ 150*bffde63dSSheetal Tigadoli #define SDIO_REV_PHY_MASK 0x0f /* SD format version number */ 151*bffde63dSSheetal Tigadoli #define SDIO_FUNC_ENABLE_1 0x02 /* function 1 I/O enable */ 152*bffde63dSSheetal Tigadoli #define SDIO_FUNC_READY_1 0x02 /* function 1 I/O ready */ 153*bffde63dSSheetal Tigadoli #define SDIO_INTR_CTL_FUNC1_EN 0x2 /* interrupt enable for function 1 */ 154*bffde63dSSheetal Tigadoli #define SDIO_INTR_CTL_MASTER_EN 0x1 /* interrupt enable master */ 155*bffde63dSSheetal Tigadoli #define SDIO_INTR_STATUS_FUNC1 0x2 /* interrupt pending for function 1 */ 156*bffde63dSSheetal Tigadoli #define SDIO_IO_ABORT_RESET_ALL 0x08 /* I/O card reset */ 157*bffde63dSSheetal Tigadoli #define SDIO_IO_ABORT_FUNC_MASK 0x07 /* abort selection: function x */ 158*bffde63dSSheetal Tigadoli #define SDIO_BUS_CARD_DETECT_DIS 0x80 /* Card Detect disable */ 159*bffde63dSSheetal Tigadoli #define SDIO_BUS_SPI_CONT_INTR_CAP 0x40 /* support continuous SPI interrupt */ 160*bffde63dSSheetal Tigadoli #define SDIO_BUS_SPI_CONT_INTR_EN 0x20 /* continuous SPI interrupt enable */ 161*bffde63dSSheetal Tigadoli #define SDIO_BUS_DATA_WIDTH_MASK 0x03 /* bus width mask */ 162*bffde63dSSheetal Tigadoli #define SDIO_BUS_DATA_WIDTH_4BIT 0x02 /* bus width 4-bit mode */ 163*bffde63dSSheetal Tigadoli #define SDIO_BUS_DATA_WIDTH_1BIT 0x00 /* bus width 1-bit mode */ 164*bffde63dSSheetal Tigadoli 165*bffde63dSSheetal Tigadoli /* capability */ 166*bffde63dSSheetal Tigadoli #define SDIO_CAP_4BLS 0x80 /* 4-bit support for low speed card */ 167*bffde63dSSheetal Tigadoli #define SDIO_CAP_LSC 0x40 /* low speed card */ 168*bffde63dSSheetal Tigadoli #define SDIO_CAP_E4MI 0x20 /* enable int between block in 4-bit mode */ 169*bffde63dSSheetal Tigadoli #define SDIO_CAP_S4MI 0x10 /* support int between block in 4-bit mode */ 170*bffde63dSSheetal Tigadoli #define SDIO_CAP_SBS 0x08 /* support suspend/resume */ 171*bffde63dSSheetal Tigadoli #define SDIO_CAP_SRW 0x04 /* support read wait */ 172*bffde63dSSheetal Tigadoli #define SDIO_CAP_SMB 0x02 /* support multi-block transfer */ 173*bffde63dSSheetal Tigadoli #define SDIO_CAP_SDC 0x01 /* Support Direct cmd during multi-uint8 transfer */ 174*bffde63dSSheetal Tigadoli 175*bffde63dSSheetal Tigadoli /* CIA FBR1 registers */ 176*bffde63dSSheetal Tigadoli #define SDIO_FUNC1_INFO 0x100 /* basic info for function 1 */ 177*bffde63dSSheetal Tigadoli #define SDIO_FUNC1_EXT 0x101 /* extension of standard I/O device */ 178*bffde63dSSheetal Tigadoli #define SDIO_CIS_FUNC1_BASE_LOW 0x109 /* function 1 cis address bit 0-7 */ 179*bffde63dSSheetal Tigadoli #define SDIO_CIS_FUNC1_BASE_MID 0x10A /* function 1 cis address bit 8-15 */ 180*bffde63dSSheetal Tigadoli #define SDIO_CIS_FUNC1_BASE_HIGH 0x10B /* function 1 cis address bit 16 */ 181*bffde63dSSheetal Tigadoli #define SDIO_CSA_BASE_LOW 0x10C /* CSA base address uint8_t 0 */ 182*bffde63dSSheetal Tigadoli #define SDIO_CSA_BASE_MID 0x10D /* CSA base address uint8_t 1 */ 183*bffde63dSSheetal Tigadoli #define SDIO_CSA_BASE_HIGH 0x10E /* CSA base address uint8_t 2 */ 184*bffde63dSSheetal Tigadoli #define SDIO_CSA_DATA_OFFSET 0x10F /* CSA data register */ 185*bffde63dSSheetal Tigadoli #define SDIO_IO_BLK_SIZE_LOW 0x110 /* I/O block size uint8_t 0 */ 186*bffde63dSSheetal Tigadoli #define SDIO_IO_BLK_SIZE_HIGH 0x111 /* I/O block size uint8_t 1 */ 187*bffde63dSSheetal Tigadoli 188*bffde63dSSheetal Tigadoli /* SD_SDIO_FUNC1_INFO bits */ 189*bffde63dSSheetal Tigadoli #define SDIO_FUNC1_INFO_DIC 0x0f /* device interface code */ 190*bffde63dSSheetal Tigadoli #define SDIO_FUNC1_INFO_CSA 0x40 /* CSA support flag */ 191*bffde63dSSheetal Tigadoli #define SDIO_FUNC1_INFO_CSA_EN 0x80 /* CSA enabled */ 192*bffde63dSSheetal Tigadoli 193*bffde63dSSheetal Tigadoli /* SD_SDIO_FUNC1_EXT bits */ 194*bffde63dSSheetal Tigadoli #define SDIO_FUNC1_EXT_SHP 0x03 /* support high power */ 195*bffde63dSSheetal Tigadoli #define SDIO_FUNC1_EXT_EHP 0x04 /* enable high power */ 196*bffde63dSSheetal Tigadoli 197*bffde63dSSheetal Tigadoli /* devctr */ 198*bffde63dSSheetal Tigadoli /* I/O device interface code */ 199*bffde63dSSheetal Tigadoli #define SDIO_DEVCTR_DEVINTER 0x0f 200*bffde63dSSheetal Tigadoli /* support CSA */ 201*bffde63dSSheetal Tigadoli #define SDIO_DEVCTR_CSA_SUP 0x40 202*bffde63dSSheetal Tigadoli /* enable CSA */ 203*bffde63dSSheetal Tigadoli #define SDIO_DEVCTR_CSA_EN 0x80 204*bffde63dSSheetal Tigadoli 205*bffde63dSSheetal Tigadoli /* ext_dev */ 206*bffde63dSSheetal Tigadoli /* supports high-power mask */ 207*bffde63dSSheetal Tigadoli #define SDIO_HIGHPWR_SUPPORT_M 0x3 208*bffde63dSSheetal Tigadoli /* enable high power */ 209*bffde63dSSheetal Tigadoli #define SDIO_HIGHPWR_EN 0x4 210*bffde63dSSheetal Tigadoli /* standard power function(up to 200mA */ 211*bffde63dSSheetal Tigadoli #define SDIO_HP_STD 0 212*bffde63dSSheetal Tigadoli /* need high power to operate */ 213*bffde63dSSheetal Tigadoli #define SDIO_HP_REQUIRED 0x2 214*bffde63dSSheetal Tigadoli /* can work with standard power, but prefer high power */ 215*bffde63dSSheetal Tigadoli #define SDIO_HP_DESIRED 0x3 216*bffde63dSSheetal Tigadoli 217*bffde63dSSheetal Tigadoli /* misc define */ 218*bffde63dSSheetal Tigadoli /* macro to calculate fbr register base */ 219*bffde63dSSheetal Tigadoli #define FBR_REG_BASE(n) (n*0x100) 220*bffde63dSSheetal Tigadoli #define SDIO_FUNC_0 0 221*bffde63dSSheetal Tigadoli #define SDIO_FUNC_1 1 222*bffde63dSSheetal Tigadoli #define SDIO_FUNC_2 2 223*bffde63dSSheetal Tigadoli #define SDIO_FUNC_3 3 224*bffde63dSSheetal Tigadoli #define SDIO_FUNC_4 4 225*bffde63dSSheetal Tigadoli #define SDIO_FUNC_5 5 226*bffde63dSSheetal Tigadoli #define SDIO_FUNC_6 6 227*bffde63dSSheetal Tigadoli #define SDIO_FUNC_7 7 228*bffde63dSSheetal Tigadoli 229*bffde63dSSheetal Tigadoli /* maximum block size for block mode operation */ 230*bffde63dSSheetal Tigadoli #define SDIO_MAX_BLOCK_SIZE 2048 231*bffde63dSSheetal Tigadoli /* minimum block size for block mode operation */ 232*bffde63dSSheetal Tigadoli #define SDIO_MIN_BLOCK_SIZE 1 233*bffde63dSSheetal Tigadoli 234*bffde63dSSheetal Tigadoli /* Card registers: status bit position */ 235*bffde63dSSheetal Tigadoli #define SDIO_STATUS_OUTOFRANGE 31 236*bffde63dSSheetal Tigadoli #define SDIO_STATUS_COMCRCERROR 23 237*bffde63dSSheetal Tigadoli #define SDIO_STATUS_ILLEGALCOMMAND 22 238*bffde63dSSheetal Tigadoli #define SDIO_STATUS_ERROR 19 239*bffde63dSSheetal Tigadoli #define SDIO_STATUS_IOCURRENTSTATE3 12 240*bffde63dSSheetal Tigadoli #define SDIO_STATUS_IOCURRENTSTATE2 11 241*bffde63dSSheetal Tigadoli #define SDIO_STATUS_IOCURRENTSTATE1 10 242*bffde63dSSheetal Tigadoli #define SDIO_STATUS_IOCURRENTSTATE0 9 243*bffde63dSSheetal Tigadoli #define SDIO_STATUS_FUN_NUM_ERROR 4 244*bffde63dSSheetal Tigadoli 245*bffde63dSSheetal Tigadoli #define GET_SDIOCARD_STATUS(x) ((x >> 9) & 0x0f) 246*bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_IDLE 0 247*bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_READY 1 248*bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_IDENT 2 249*bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_STBY 3 250*bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_TRAN 4 251*bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_DATA 5 252*bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_RCV 6 253*bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_PRG 7 254*bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_DIS 8 255*bffde63dSSheetal Tigadoli 256*bffde63dSSheetal Tigadoli /* sprom */ 257*bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_CS 0x10000 /* command and status */ 258*bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_INFO 0x10001 /* info register */ 259*bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_DATA_LOW 0x10002 /* indirect access data uint8_t 0 */ 260*bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_DATA_HIGH 0x10003 /* indirect access data uint8_t 1 */ 261*bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_ADDR_LOW 0x10004 /* indirect access addr uint8_t 0 */ 262*bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_ADDR_HIGH 0x10005 /* indirect access addr uint8_t 0 */ 263*bffde63dSSheetal Tigadoli #define SBSDIO_CHIP_CTRL_DATA 0x10006 /* xtal_pu data output */ 264*bffde63dSSheetal Tigadoli #define SBSDIO_CHIP_CTRL_EN 0x10007 /* xtal_pu enable */ 265*bffde63dSSheetal Tigadoli #define SBSDIO_WATERMARK 0x10008 /* retired in rev 7 */ 266*bffde63dSSheetal Tigadoli #define SBSDIO_DEVICE_CTL 0x10009 /* control busy signal generation */ 267*bffde63dSSheetal Tigadoli 268*bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_IDLE 0 269*bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_WRITE 1 270*bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_READ 2 271*bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_WEN 4 272*bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_WDS 7 273*bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_DONE 8 274*bffde63dSSheetal Tigadoli 275*bffde63dSSheetal Tigadoli /* SBSDIO_SPROM_INFO */ 276*bffde63dSSheetal Tigadoli #define SBSDIO_SROM_SZ_MASK 0x03 /* SROM size, 1: 4k, 2: 16k */ 277*bffde63dSSheetal Tigadoli #define SBSDIO_SROM_BLANK 0x04 /* depreciated in corerev 6 */ 278*bffde63dSSheetal Tigadoli #define SBSDIO_SROM_OTP 0x80 /* OTP present */ 279*bffde63dSSheetal Tigadoli 280*bffde63dSSheetal Tigadoli /* SBSDIO_CHIP_CTRL */ 281*bffde63dSSheetal Tigadoli /* or'd with onchip xtal_pu, 1: power on oscillator */ 282*bffde63dSSheetal Tigadoli #define SBSDIO_CHIP_CTRL_XTAL 0x01 283*bffde63dSSheetal Tigadoli 284*bffde63dSSheetal Tigadoli /* SBSDIO_WATERMARK */ 285*bffde63dSSheetal Tigadoli /* number of bytes minus 1 for sd device to wait before sending data to host */ 286*bffde63dSSheetal Tigadoli #define SBSDIO_WATERMARK_MASK 0x3f 287*bffde63dSSheetal Tigadoli 288*bffde63dSSheetal Tigadoli /* SBSDIO_DEVICE_CTL */ 289*bffde63dSSheetal Tigadoli /* 1: device will assert busy signal when receiving CMD53 */ 290*bffde63dSSheetal Tigadoli #define SBSDIO_DEVCTL_SETBUSY 0x01 291*bffde63dSSheetal Tigadoli /* 1: assertion of sdio interrupt is synchronous to the sdio clock */ 292*bffde63dSSheetal Tigadoli #define SBSDIO_DEVCTL_SPI_INTR_SYNC 0x02 293*bffde63dSSheetal Tigadoli 294*bffde63dSSheetal Tigadoli /* function 1 OCP space */ 295*bffde63dSSheetal Tigadoli /* sb offset addr is <= 15 bits, 32k */ 296*bffde63dSSheetal Tigadoli #define SBSDIO_SB_OFT_ADDR_MASK 0x07FFF 297*bffde63dSSheetal Tigadoli #define SBSDIO_SB_OFT_ADDR_LIMIT 0x08000 298*bffde63dSSheetal Tigadoli /* sdsdio function 1 OCP space has 16/32 bit section */ 299*bffde63dSSheetal Tigadoli #define SBSDIO_SB_ACCESS_2_4B_FLAG 0x08000 300*bffde63dSSheetal Tigadoli 301*bffde63dSSheetal Tigadoli /* direct(mapped) cis space */ 302*bffde63dSSheetal Tigadoli /* MAPPED common CIS address */ 303*bffde63dSSheetal Tigadoli #define SBSDIO_CIS_BASE_COMMON 0x1000 304*bffde63dSSheetal Tigadoli /* function 0(common) cis size in bytes */ 305*bffde63dSSheetal Tigadoli #define SBSDIO_CIS_FUNC0_LIMIT 0x020 306*bffde63dSSheetal Tigadoli /* funciton 1 cis size in bytes */ 307*bffde63dSSheetal Tigadoli #define SBSDIO_CIS_SIZE_LIMIT 0x200 308*bffde63dSSheetal Tigadoli /* cis offset addr is < 17 bits */ 309*bffde63dSSheetal Tigadoli #define SBSDIO_CIS_OFT_ADDR_MASK 0x1FFFF 310*bffde63dSSheetal Tigadoli /* manfid tuple length, include tuple, link bytes */ 311*bffde63dSSheetal Tigadoli #define SBSDIO_CIS_MANFID_TUPLE_LEN 6 312*bffde63dSSheetal Tigadoli 313*bffde63dSSheetal Tigadoli /* indirect cis access (in sprom) */ 314*bffde63dSSheetal Tigadoli /* 8 control bytes first, CIS starts from 8th uint8_t */ 315*bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_CIS_OFFSET 0x8 316*bffde63dSSheetal Tigadoli /* sdio uint8_t mode: maximum length of one data comamnd */ 317*bffde63dSSheetal Tigadoli #define SBSDIO_BYTEMODE_DATALEN_MAX 64 318*bffde63dSSheetal Tigadoli /* 4317 supports less */ 319*bffde63dSSheetal Tigadoli #define SBSDIO_BYTEMODE_DATALEN_MAX_4317 52 320*bffde63dSSheetal Tigadoli /* sdio core function one address mask */ 321*bffde63dSSheetal Tigadoli #define SBSDIO_CORE_ADDR_MASK 0x1FFFF 322*bffde63dSSheetal Tigadoli 323*bffde63dSSheetal Tigadoli /* CEATA defines */ 324*bffde63dSSheetal Tigadoli #define CEATA_EXT_CSDBLOCK_SIZE 512 325*bffde63dSSheetal Tigadoli #define CEATA_FAST_IO 39 326*bffde63dSSheetal Tigadoli #define CEATA_MULTIPLE_REGISTER_RW 60 327*bffde63dSSheetal Tigadoli #define CEATA_MULTIPLE_BLOCK_RW 61 328*bffde63dSSheetal Tigadoli 329*bffde63dSSheetal Tigadoli /* defines CE ATA task file registers */ 330*bffde63dSSheetal Tigadoli #define CEATA_SCT_CNT_EXP_REG 0x02 331*bffde63dSSheetal Tigadoli #define CEATA_LBA_LOW_EXP_REG 0x03 332*bffde63dSSheetal Tigadoli #define CEATA_LBA_MID_EXP_REG 0x04 333*bffde63dSSheetal Tigadoli #define CEATA_LBA_HIGH_EXP_REG 0x05 334*bffde63dSSheetal Tigadoli #define CEATA_CNTRL_REG 0x06 335*bffde63dSSheetal Tigadoli #define CEATA_FEATURE_REG 0x09 /* write */ 336*bffde63dSSheetal Tigadoli #define CEATA_ERROR_REG 0x09 /* read */ 337*bffde63dSSheetal Tigadoli #define CEATA_SCT_CNT_REG 0x0A 338*bffde63dSSheetal Tigadoli #define CEATA_LBA_LOW_REG 0x0B 339*bffde63dSSheetal Tigadoli #define CEATA_LBA_MID_REG 0x0C 340*bffde63dSSheetal Tigadoli #define CEATA_LBA_HIGH_REG 0x0D 341*bffde63dSSheetal Tigadoli #define CEATA_DEV_HEAD_REG 0x0E 342*bffde63dSSheetal Tigadoli #define CEATA_STA_REG 0x0F /* read */ 343*bffde63dSSheetal Tigadoli #define CEATA_CMD_REG 0x0F /* write */ 344*bffde63dSSheetal Tigadoli 345*bffde63dSSheetal Tigadoli /* defines CEATA control and status registers for ce ata client driver */ 346*bffde63dSSheetal Tigadoli #define CEATA_SCR_TEMPC_REG 0x80 347*bffde63dSSheetal Tigadoli #define CEATA_SCR_TEMPMAXP_REG 0x84 348*bffde63dSSheetal Tigadoli #define CEATA_TEMPMINP_REG 0x88 349*bffde63dSSheetal Tigadoli #define CEATA_SCR_STATUS_REG 0x8C 350*bffde63dSSheetal Tigadoli #define CEATA_SCR_REALLOCSA_REG 0x90 351*bffde63dSSheetal Tigadoli #define CEATA_SCR_ERETRACTSA_REG 0x94 352*bffde63dSSheetal Tigadoli #define CEATA_SCR_CAPABILITIES_REG 0x98 353*bffde63dSSheetal Tigadoli #define CEATA_SCR_CONTROL_REG 0xC0 354*bffde63dSSheetal Tigadoli 355*bffde63dSSheetal Tigadoli /* defines for SCR capabilities register bits for ce ata client driver */ 356*bffde63dSSheetal Tigadoli #define CEATA_SCR_CAP_512 0x00000001 357*bffde63dSSheetal Tigadoli #define CEATA_SCR_CAP_1K 0x00000002 358*bffde63dSSheetal Tigadoli #define CEATA_SCR_CAP_4K 0x00000004 359*bffde63dSSheetal Tigadoli 360*bffde63dSSheetal Tigadoli /* defines CE ATA Control reg bits for ce ata client driver */ 361*bffde63dSSheetal Tigadoli #define CEATA_CNTRL_ENABLE_INTR 0x00 362*bffde63dSSheetal Tigadoli #define CEATA_CNTRL_DISABLE_INTR 0x02 363*bffde63dSSheetal Tigadoli #define CEATA_CNTRL_SRST 0x04 364*bffde63dSSheetal Tigadoli #define CEATA_CNTRL_RSRST 0x00 365*bffde63dSSheetal Tigadoli 366*bffde63dSSheetal Tigadoli /* define CE ATA Status reg bits for ce ata client driver */ 367*bffde63dSSheetal Tigadoli #define CEATA_STA_ERROR_BIT 0x01 368*bffde63dSSheetal Tigadoli #define CEATA_STA_OVR_BIT 0x02 369*bffde63dSSheetal Tigadoli #define CEATA_STA_SPT_BIT 0x04 370*bffde63dSSheetal Tigadoli #define CEATA_STA_DRQ_BIT 0x08 371*bffde63dSSheetal Tigadoli #define CEATA_STA_DRDY_BIT 0x40 372*bffde63dSSheetal Tigadoli #define CEATA_STA_BSY_BIT 0x80 373*bffde63dSSheetal Tigadoli 374*bffde63dSSheetal Tigadoli /* define CE ATA Error reg bits for ce ata client driver */ 375*bffde63dSSheetal Tigadoli #define CEATA_ERROR_ABORTED_BIT 0x04 376*bffde63dSSheetal Tigadoli #define CEATA_ERROR_IDNF_BIT 0x10 377*bffde63dSSheetal Tigadoli #define CEATA_ERROR_UNCORRECTABLE_BIT 0x40 378*bffde63dSSheetal Tigadoli #define CEATA_ERROR_ICRC_BIT 0x80 379*bffde63dSSheetal Tigadoli 380*bffde63dSSheetal Tigadoli /* define CE ATA Commands for ce ata client driver */ 381*bffde63dSSheetal Tigadoli #define CEATA_CMD_IDENTIFY_DEVICE 0xEC 382*bffde63dSSheetal Tigadoli #define CEATA_CMD_READ_DMA_EXT 0x25 383*bffde63dSSheetal Tigadoli #define CEATA_CMD_WRITE_DMA_EXT 0x35 384*bffde63dSSheetal Tigadoli #define CEATA_CMD_STANDBY_IMMEDIATE 0xE0 385*bffde63dSSheetal Tigadoli #define CEATA_CMD_FLUSH_CACHE_EXT 0xEA 386*bffde63dSSheetal Tigadoli 387*bffde63dSSheetal Tigadoli struct csd_mmc { 388*bffde63dSSheetal Tigadoli uint32_t padding:8; 389*bffde63dSSheetal Tigadoli uint32_t structure:2; 390*bffde63dSSheetal Tigadoli uint32_t csdSpecVer:4; 391*bffde63dSSheetal Tigadoli uint32_t reserved1:2; 392*bffde63dSSheetal Tigadoli uint32_t taac:8; 393*bffde63dSSheetal Tigadoli uint32_t nsac:8; 394*bffde63dSSheetal Tigadoli uint32_t speed:8; 395*bffde63dSSheetal Tigadoli uint32_t classes:12; 396*bffde63dSSheetal Tigadoli uint32_t rdBlkLen:4; 397*bffde63dSSheetal Tigadoli uint32_t rdBlkPartial:1; 398*bffde63dSSheetal Tigadoli uint32_t wrBlkMisalign:1; 399*bffde63dSSheetal Tigadoli uint32_t rdBlkMisalign:1; 400*bffde63dSSheetal Tigadoli uint32_t dsr:1; 401*bffde63dSSheetal Tigadoli uint32_t reserved2:2; 402*bffde63dSSheetal Tigadoli uint32_t size:12; 403*bffde63dSSheetal Tigadoli uint32_t vddRdCurrMin:3; 404*bffde63dSSheetal Tigadoli uint32_t vddRdCurrMax:3; 405*bffde63dSSheetal Tigadoli uint32_t vddWrCurrMin:3; 406*bffde63dSSheetal Tigadoli uint32_t vddWrCurrMax:3; 407*bffde63dSSheetal Tigadoli uint32_t devSizeMulti:3; 408*bffde63dSSheetal Tigadoli uint32_t eraseGrpSize:5; 409*bffde63dSSheetal Tigadoli uint32_t eraseGrpSizeMulti:5; 410*bffde63dSSheetal Tigadoli uint32_t wrProtGroupSize:5; 411*bffde63dSSheetal Tigadoli uint32_t wrProtGroupEnable:1; 412*bffde63dSSheetal Tigadoli uint32_t manuDefEcc:2; 413*bffde63dSSheetal Tigadoli uint32_t wrSpeedFactor:3; 414*bffde63dSSheetal Tigadoli uint32_t wrBlkLen:4; 415*bffde63dSSheetal Tigadoli uint32_t wrBlkPartial:1; 416*bffde63dSSheetal Tigadoli uint32_t reserved5:4; 417*bffde63dSSheetal Tigadoli uint32_t protAppl:1; 418*bffde63dSSheetal Tigadoli uint32_t fileFormatGrp:1; 419*bffde63dSSheetal Tigadoli uint32_t copyFlag:1; 420*bffde63dSSheetal Tigadoli uint32_t permWrProt:1; 421*bffde63dSSheetal Tigadoli uint32_t tmpWrProt:1; 422*bffde63dSSheetal Tigadoli uint32_t fileFormat:2; 423*bffde63dSSheetal Tigadoli uint32_t eccCode:2; 424*bffde63dSSheetal Tigadoli }; 425*bffde63dSSheetal Tigadoli 426*bffde63dSSheetal Tigadoli /* CSD register*/ 427*bffde63dSSheetal Tigadoli union sd_csd { 428*bffde63dSSheetal Tigadoli uint32_t csd[4]; 429*bffde63dSSheetal Tigadoli struct csd_mmc mmc; 430*bffde63dSSheetal Tigadoli }; 431*bffde63dSSheetal Tigadoli 432*bffde63dSSheetal Tigadoli struct sd_card_data { 433*bffde63dSSheetal Tigadoli union sd_csd csd; 434*bffde63dSSheetal Tigadoli }; 435*bffde63dSSheetal Tigadoli #endif /* CSL_SD_PROT_H */ 436