1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Freescale i.MX28 SSP Register Definitions 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com> 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Based on code from LTIB: 7*4882a593Smuzhiyun * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifndef __MX28_REGS_SSP_H__ 13*4882a593Smuzhiyun #define __MX28_REGS_SSP_H__ 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #include <asm/mach-imx/regs-common.h> 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 18*4882a593Smuzhiyun #if defined(CONFIG_MX23) 19*4882a593Smuzhiyun struct mxs_ssp_regs { 20*4882a593Smuzhiyun mxs_reg_32(hw_ssp_ctrl0) 21*4882a593Smuzhiyun mxs_reg_32(hw_ssp_cmd0) 22*4882a593Smuzhiyun mxs_reg_32(hw_ssp_cmd1) 23*4882a593Smuzhiyun mxs_reg_32(hw_ssp_compref) 24*4882a593Smuzhiyun mxs_reg_32(hw_ssp_compmask) 25*4882a593Smuzhiyun mxs_reg_32(hw_ssp_timing) 26*4882a593Smuzhiyun mxs_reg_32(hw_ssp_ctrl1) 27*4882a593Smuzhiyun mxs_reg_32(hw_ssp_data) 28*4882a593Smuzhiyun mxs_reg_32(hw_ssp_sdresp0) 29*4882a593Smuzhiyun mxs_reg_32(hw_ssp_sdresp1) 30*4882a593Smuzhiyun mxs_reg_32(hw_ssp_sdresp2) 31*4882a593Smuzhiyun mxs_reg_32(hw_ssp_sdresp3) 32*4882a593Smuzhiyun mxs_reg_32(hw_ssp_status) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun uint32_t reserved1[12]; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun mxs_reg_32(hw_ssp_debug) 37*4882a593Smuzhiyun mxs_reg_32(hw_ssp_version) 38*4882a593Smuzhiyun }; 39*4882a593Smuzhiyun #elif defined(CONFIG_MX28) 40*4882a593Smuzhiyun struct mxs_ssp_regs { 41*4882a593Smuzhiyun mxs_reg_32(hw_ssp_ctrl0) 42*4882a593Smuzhiyun mxs_reg_32(hw_ssp_cmd0) 43*4882a593Smuzhiyun mxs_reg_32(hw_ssp_cmd1) 44*4882a593Smuzhiyun mxs_reg_32(hw_ssp_xfer_size) 45*4882a593Smuzhiyun mxs_reg_32(hw_ssp_block_size) 46*4882a593Smuzhiyun mxs_reg_32(hw_ssp_compref) 47*4882a593Smuzhiyun mxs_reg_32(hw_ssp_compmask) 48*4882a593Smuzhiyun mxs_reg_32(hw_ssp_timing) 49*4882a593Smuzhiyun mxs_reg_32(hw_ssp_ctrl1) 50*4882a593Smuzhiyun mxs_reg_32(hw_ssp_data) 51*4882a593Smuzhiyun mxs_reg_32(hw_ssp_sdresp0) 52*4882a593Smuzhiyun mxs_reg_32(hw_ssp_sdresp1) 53*4882a593Smuzhiyun mxs_reg_32(hw_ssp_sdresp2) 54*4882a593Smuzhiyun mxs_reg_32(hw_ssp_sdresp3) 55*4882a593Smuzhiyun mxs_reg_32(hw_ssp_ddr_ctrl) 56*4882a593Smuzhiyun mxs_reg_32(hw_ssp_dll_ctrl) 57*4882a593Smuzhiyun mxs_reg_32(hw_ssp_status) 58*4882a593Smuzhiyun mxs_reg_32(hw_ssp_dll_sts) 59*4882a593Smuzhiyun mxs_reg_32(hw_ssp_debug) 60*4882a593Smuzhiyun mxs_reg_32(hw_ssp_version) 61*4882a593Smuzhiyun }; 62*4882a593Smuzhiyun #endif 63*4882a593Smuzhiyun mxs_ssp_bus_id_valid(int bus)64*4882a593Smuzhiyunstatic inline int mxs_ssp_bus_id_valid(int bus) 65*4882a593Smuzhiyun { 66*4882a593Smuzhiyun #if defined(CONFIG_MX23) 67*4882a593Smuzhiyun const unsigned int mxs_ssp_chan_count = 2; 68*4882a593Smuzhiyun #elif defined(CONFIG_MX28) 69*4882a593Smuzhiyun const unsigned int mxs_ssp_chan_count = 4; 70*4882a593Smuzhiyun #endif 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun if (bus >= mxs_ssp_chan_count) 73*4882a593Smuzhiyun return 0; 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun if (bus < 0) 76*4882a593Smuzhiyun return 0; 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun return 1; 79*4882a593Smuzhiyun } 80*4882a593Smuzhiyun mxs_ssp_clock_by_bus(unsigned int clock)81*4882a593Smuzhiyunstatic inline int mxs_ssp_clock_by_bus(unsigned int clock) 82*4882a593Smuzhiyun { 83*4882a593Smuzhiyun #if defined(CONFIG_MX23) 84*4882a593Smuzhiyun return 0; 85*4882a593Smuzhiyun #elif defined(CONFIG_MX28) 86*4882a593Smuzhiyun return clock; 87*4882a593Smuzhiyun #endif 88*4882a593Smuzhiyun } 89*4882a593Smuzhiyun mxs_ssp_regs_by_bus(unsigned int port)90*4882a593Smuzhiyunstatic inline struct mxs_ssp_regs *mxs_ssp_regs_by_bus(unsigned int port) 91*4882a593Smuzhiyun { 92*4882a593Smuzhiyun switch (port) { 93*4882a593Smuzhiyun case 0: 94*4882a593Smuzhiyun return (struct mxs_ssp_regs *)MXS_SSP0_BASE; 95*4882a593Smuzhiyun case 1: 96*4882a593Smuzhiyun return (struct mxs_ssp_regs *)MXS_SSP1_BASE; 97*4882a593Smuzhiyun #ifdef CONFIG_MX28 98*4882a593Smuzhiyun case 2: 99*4882a593Smuzhiyun return (struct mxs_ssp_regs *)MXS_SSP2_BASE; 100*4882a593Smuzhiyun case 3: 101*4882a593Smuzhiyun return (struct mxs_ssp_regs *)MXS_SSP3_BASE; 102*4882a593Smuzhiyun #endif 103*4882a593Smuzhiyun default: 104*4882a593Smuzhiyun return NULL; 105*4882a593Smuzhiyun } 106*4882a593Smuzhiyun } 107*4882a593Smuzhiyun #endif 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun #define SSP_CTRL0_SFTRST (1 << 31) 110*4882a593Smuzhiyun #define SSP_CTRL0_CLKGATE (1 << 30) 111*4882a593Smuzhiyun #define SSP_CTRL0_RUN (1 << 29) 112*4882a593Smuzhiyun #define SSP_CTRL0_SDIO_IRQ_CHECK (1 << 28) 113*4882a593Smuzhiyun #define SSP_CTRL0_LOCK_CS (1 << 27) 114*4882a593Smuzhiyun #define SSP_CTRL0_IGNORE_CRC (1 << 26) 115*4882a593Smuzhiyun #define SSP_CTRL0_READ (1 << 25) 116*4882a593Smuzhiyun #define SSP_CTRL0_DATA_XFER (1 << 24) 117*4882a593Smuzhiyun #define SSP_CTRL0_BUS_WIDTH_MASK (0x3 << 22) 118*4882a593Smuzhiyun #define SSP_CTRL0_BUS_WIDTH_OFFSET 22 119*4882a593Smuzhiyun #define SSP_CTRL0_BUS_WIDTH_ONE_BIT (0x0 << 22) 120*4882a593Smuzhiyun #define SSP_CTRL0_BUS_WIDTH_FOUR_BIT (0x1 << 22) 121*4882a593Smuzhiyun #define SSP_CTRL0_BUS_WIDTH_EIGHT_BIT (0x2 << 22) 122*4882a593Smuzhiyun #define SSP_CTRL0_WAIT_FOR_IRQ (1 << 21) 123*4882a593Smuzhiyun #define SSP_CTRL0_WAIT_FOR_CMD (1 << 20) 124*4882a593Smuzhiyun #define SSP_CTRL0_LONG_RESP (1 << 19) 125*4882a593Smuzhiyun #define SSP_CTRL0_CHECK_RESP (1 << 18) 126*4882a593Smuzhiyun #define SSP_CTRL0_GET_RESP (1 << 17) 127*4882a593Smuzhiyun #define SSP_CTRL0_ENABLE (1 << 16) 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun #ifdef CONFIG_MX23 130*4882a593Smuzhiyun #define SSP_CTRL0_XFER_COUNT_OFFSET 0 131*4882a593Smuzhiyun #define SSP_CTRL0_XFER_COUNT_MASK 0xffff 132*4882a593Smuzhiyun #endif 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun #define SSP_CMD0_SOFT_TERMINATE (1 << 26) 135*4882a593Smuzhiyun #define SSP_CMD0_DBL_DATA_RATE_EN (1 << 25) 136*4882a593Smuzhiyun #define SSP_CMD0_PRIM_BOOT_OP_EN (1 << 24) 137*4882a593Smuzhiyun #define SSP_CMD0_BOOT_ACK_EN (1 << 23) 138*4882a593Smuzhiyun #define SSP_CMD0_SLOW_CLKING_EN (1 << 22) 139*4882a593Smuzhiyun #define SSP_CMD0_CONT_CLKING_EN (1 << 21) 140*4882a593Smuzhiyun #define SSP_CMD0_APPEND_8CYC (1 << 20) 141*4882a593Smuzhiyun #if defined(CONFIG_MX23) 142*4882a593Smuzhiyun #define SSP_CMD0_BLOCK_SIZE_MASK (0xf << 16) 143*4882a593Smuzhiyun #define SSP_CMD0_BLOCK_SIZE_OFFSET 16 144*4882a593Smuzhiyun #define SSP_CMD0_BLOCK_COUNT_MASK (0xff << 8) 145*4882a593Smuzhiyun #define SSP_CMD0_BLOCK_COUNT_OFFSET 8 146*4882a593Smuzhiyun #endif 147*4882a593Smuzhiyun #define SSP_CMD0_CMD_MASK 0xff 148*4882a593Smuzhiyun #define SSP_CMD0_CMD_OFFSET 0 149*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_GO_IDLE_STATE 0x00 150*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_SEND_OP_COND 0x01 151*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_ALL_SEND_CID 0x02 152*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_SET_RELATIVE_ADDR 0x03 153*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_SET_DSR 0x04 154*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_RESERVED_5 0x05 155*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_SWITCH 0x06 156*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_SELECT_DESELECT_CARD 0x07 157*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_SEND_EXT_CSD 0x08 158*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_SEND_CSD 0x09 159*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_SEND_CID 0x0a 160*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_READ_DAT_UNTIL_STOP 0x0b 161*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_STOP_TRANSMISSION 0x0c 162*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_SEND_STATUS 0x0d 163*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_BUSTEST_R 0x0e 164*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_GO_INACTIVE_STATE 0x0f 165*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_SET_BLOCKLEN 0x10 166*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_READ_SINGLE_BLOCK 0x11 167*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_READ_MULTIPLE_BLOCK 0x12 168*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_BUSTEST_W 0x13 169*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_WRITE_DAT_UNTIL_STOP 0x14 170*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_SET_BLOCK_COUNT 0x17 171*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_WRITE_BLOCK 0x18 172*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_WRITE_MULTIPLE_BLOCK 0x19 173*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_PROGRAM_CID 0x1a 174*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_PROGRAM_CSD 0x1b 175*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_SET_WRITE_PROT 0x1c 176*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_CLR_WRITE_PROT 0x1d 177*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_SEND_WRITE_PROT 0x1e 178*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_ERASE_GROUP_START 0x23 179*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_ERASE_GROUP_END 0x24 180*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_ERASE 0x26 181*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_FAST_IO 0x27 182*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_GO_IRQ_STATE 0x28 183*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_LOCK_UNLOCK 0x2a 184*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_APP_CMD 0x37 185*4882a593Smuzhiyun #define SSP_CMD0_CMD_MMC_GEN_CMD 0x38 186*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_GO_IDLE_STATE 0x00 187*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_ALL_SEND_CID 0x02 188*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_SEND_RELATIVE_ADDR 0x03 189*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_SET_DSR 0x04 190*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_IO_SEND_OP_COND 0x05 191*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_SELECT_DESELECT_CARD 0x07 192*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_SEND_CSD 0x09 193*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_SEND_CID 0x0a 194*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_STOP_TRANSMISSION 0x0c 195*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_SEND_STATUS 0x0d 196*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_GO_INACTIVE_STATE 0x0f 197*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_SET_BLOCKLEN 0x10 198*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_READ_SINGLE_BLOCK 0x11 199*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_READ_MULTIPLE_BLOCK 0x12 200*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_WRITE_BLOCK 0x18 201*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_WRITE_MULTIPLE_BLOCK 0x19 202*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_PROGRAM_CSD 0x1b 203*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_SET_WRITE_PROT 0x1c 204*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_CLR_WRITE_PROT 0x1d 205*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_SEND_WRITE_PROT 0x1e 206*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_ERASE_WR_BLK_START 0x20 207*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_ERASE_WR_BLK_END 0x21 208*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_ERASE_GROUP_START 0x23 209*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_ERASE_GROUP_END 0x24 210*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_ERASE 0x26 211*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_LOCK_UNLOCK 0x2a 212*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_IO_RW_DIRECT 0x34 213*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_IO_RW_EXTENDED 0x35 214*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_APP_CMD 0x37 215*4882a593Smuzhiyun #define SSP_CMD0_CMD_SD_GEN_CMD 0x38 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun #define SSP_CMD1_CMD_ARG_MASK 0xffffffff 218*4882a593Smuzhiyun #define SSP_CMD1_CMD_ARG_OFFSET 0 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun #if defined(CONFIG_MX28) 221*4882a593Smuzhiyun #define SSP_XFER_SIZE_XFER_COUNT_MASK 0xffffffff 222*4882a593Smuzhiyun #define SSP_XFER_SIZE_XFER_COUNT_OFFSET 0 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun #define SSP_BLOCK_SIZE_BLOCK_COUNT_MASK (0xffffff << 4) 225*4882a593Smuzhiyun #define SSP_BLOCK_SIZE_BLOCK_COUNT_OFFSET 4 226*4882a593Smuzhiyun #define SSP_BLOCK_SIZE_BLOCK_SIZE_MASK 0xf 227*4882a593Smuzhiyun #define SSP_BLOCK_SIZE_BLOCK_SIZE_OFFSET 0 228*4882a593Smuzhiyun #endif 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun #define SSP_COMPREF_REFERENCE_MASK 0xffffffff 231*4882a593Smuzhiyun #define SSP_COMPREF_REFERENCE_OFFSET 0 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun #define SSP_COMPMASK_MASK_MASK 0xffffffff 234*4882a593Smuzhiyun #define SSP_COMPMASK_MASK_OFFSET 0 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun #define SSP_TIMING_TIMEOUT_MASK (0xffff << 16) 237*4882a593Smuzhiyun #define SSP_TIMING_TIMEOUT_OFFSET 16 238*4882a593Smuzhiyun #define SSP_TIMING_CLOCK_DIVIDE_MASK (0xff << 8) 239*4882a593Smuzhiyun #define SSP_TIMING_CLOCK_DIVIDE_OFFSET 8 240*4882a593Smuzhiyun #define SSP_TIMING_CLOCK_RATE_MASK 0xff 241*4882a593Smuzhiyun #define SSP_TIMING_CLOCK_RATE_OFFSET 0 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun #define SSP_CTRL1_SDIO_IRQ (1 << 31) 244*4882a593Smuzhiyun #define SSP_CTRL1_SDIO_IRQ_EN (1 << 30) 245*4882a593Smuzhiyun #define SSP_CTRL1_RESP_ERR_IRQ (1 << 29) 246*4882a593Smuzhiyun #define SSP_CTRL1_RESP_ERR_IRQ_EN (1 << 28) 247*4882a593Smuzhiyun #define SSP_CTRL1_RESP_TIMEOUT_IRQ (1 << 27) 248*4882a593Smuzhiyun #define SSP_CTRL1_RESP_TIMEOUT_IRQ_EN (1 << 26) 249*4882a593Smuzhiyun #define SSP_CTRL1_DATA_TIMEOUT_IRQ (1 << 25) 250*4882a593Smuzhiyun #define SSP_CTRL1_DATA_TIMEOUT_IRQ_EN (1 << 24) 251*4882a593Smuzhiyun #define SSP_CTRL1_DATA_CRC_IRQ (1 << 23) 252*4882a593Smuzhiyun #define SSP_CTRL1_DATA_CRC_IRQ_EN (1 << 22) 253*4882a593Smuzhiyun #define SSP_CTRL1_FIFO_UNDERRUN_IRQ (1 << 21) 254*4882a593Smuzhiyun #define SSP_CTRL1_FIFO_UNDERRUN_EN (1 << 20) 255*4882a593Smuzhiyun #define SSP_CTRL1_CEATA_CCS_ERR_IRQ (1 << 19) 256*4882a593Smuzhiyun #define SSP_CTRL1_CEATA_CCS_ERR_IRQ_EN (1 << 18) 257*4882a593Smuzhiyun #define SSP_CTRL1_RECV_TIMEOUT_IRQ (1 << 17) 258*4882a593Smuzhiyun #define SSP_CTRL1_RECV_TIMEOUT_IRQ_EN (1 << 16) 259*4882a593Smuzhiyun #define SSP_CTRL1_FIFO_OVERRUN_IRQ (1 << 15) 260*4882a593Smuzhiyun #define SSP_CTRL1_FIFO_OVERRUN_IRQ_EN (1 << 14) 261*4882a593Smuzhiyun #define SSP_CTRL1_DMA_ENABLE (1 << 13) 262*4882a593Smuzhiyun #define SSP_CTRL1_CEATA_CCS_ERR_EN (1 << 12) 263*4882a593Smuzhiyun #define SSP_CTRL1_SLAVE_OUT_DISABLE (1 << 11) 264*4882a593Smuzhiyun #define SSP_CTRL1_PHASE (1 << 10) 265*4882a593Smuzhiyun #define SSP_CTRL1_POLARITY (1 << 9) 266*4882a593Smuzhiyun #define SSP_CTRL1_SLAVE_MODE (1 << 8) 267*4882a593Smuzhiyun #define SSP_CTRL1_WORD_LENGTH_MASK (0xf << 4) 268*4882a593Smuzhiyun #define SSP_CTRL1_WORD_LENGTH_OFFSET 4 269*4882a593Smuzhiyun #define SSP_CTRL1_WORD_LENGTH_RESERVED0 (0x0 << 4) 270*4882a593Smuzhiyun #define SSP_CTRL1_WORD_LENGTH_RESERVED1 (0x1 << 4) 271*4882a593Smuzhiyun #define SSP_CTRL1_WORD_LENGTH_RESERVED2 (0x2 << 4) 272*4882a593Smuzhiyun #define SSP_CTRL1_WORD_LENGTH_FOUR_BITS (0x3 << 4) 273*4882a593Smuzhiyun #define SSP_CTRL1_WORD_LENGTH_EIGHT_BITS (0x7 << 4) 274*4882a593Smuzhiyun #define SSP_CTRL1_WORD_LENGTH_SIXTEEN_BITS (0xf << 4) 275*4882a593Smuzhiyun #define SSP_CTRL1_SSP_MODE_MASK 0xf 276*4882a593Smuzhiyun #define SSP_CTRL1_SSP_MODE_OFFSET 0 277*4882a593Smuzhiyun #define SSP_CTRL1_SSP_MODE_SPI 0x0 278*4882a593Smuzhiyun #define SSP_CTRL1_SSP_MODE_SSI 0x1 279*4882a593Smuzhiyun #define SSP_CTRL1_SSP_MODE_SD_MMC 0x3 280*4882a593Smuzhiyun #define SSP_CTRL1_SSP_MODE_MS 0x4 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun #define SSP_DATA_DATA_MASK 0xffffffff 283*4882a593Smuzhiyun #define SSP_DATA_DATA_OFFSET 0 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun #define SSP_SDRESP0_RESP0_MASK 0xffffffff 286*4882a593Smuzhiyun #define SSP_SDRESP0_RESP0_OFFSET 0 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun #define SSP_SDRESP1_RESP1_MASK 0xffffffff 289*4882a593Smuzhiyun #define SSP_SDRESP1_RESP1_OFFSET 0 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun #define SSP_SDRESP2_RESP2_MASK 0xffffffff 292*4882a593Smuzhiyun #define SSP_SDRESP2_RESP2_OFFSET 0 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun #define SSP_SDRESP3_RESP3_MASK 0xffffffff 295*4882a593Smuzhiyun #define SSP_SDRESP3_RESP3_OFFSET 0 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun #define SSP_DDR_CTRL_DMA_BURST_TYPE_MASK (0x3 << 30) 298*4882a593Smuzhiyun #define SSP_DDR_CTRL_DMA_BURST_TYPE_OFFSET 30 299*4882a593Smuzhiyun #define SSP_DDR_CTRL_NIBBLE_POS (1 << 1) 300*4882a593Smuzhiyun #define SSP_DDR_CTRL_TXCLK_DELAY_TYPE (1 << 0) 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun #define SSP_DLL_CTRL_REF_UPDATE_INT_MASK (0xf << 28) 303*4882a593Smuzhiyun #define SSP_DLL_CTRL_REF_UPDATE_INT_OFFSET 28 304*4882a593Smuzhiyun #define SSP_DLL_CTRL_SLV_UPDATE_INT_MASK (0xff << 20) 305*4882a593Smuzhiyun #define SSP_DLL_CTRL_SLV_UPDATE_INT_OFFSET 20 306*4882a593Smuzhiyun #define SSP_DLL_CTRL_SLV_OVERRIDE_VAL_MASK (0x3f << 10) 307*4882a593Smuzhiyun #define SSP_DLL_CTRL_SLV_OVERRIDE_VAL_OFFSET 10 308*4882a593Smuzhiyun #define SSP_DLL_CTRL_SLV_OVERRIDE (1 << 9) 309*4882a593Smuzhiyun #define SSP_DLL_CTRL_GATE_UPDATE (1 << 7) 310*4882a593Smuzhiyun #define SSP_DLL_CTRL_SLV_DLY_TARGET_MASK (0xf << 3) 311*4882a593Smuzhiyun #define SSP_DLL_CTRL_SLV_DLY_TARGET_OFFSET 3 312*4882a593Smuzhiyun #define SSP_DLL_CTRL_SLV_FORCE_UPD (1 << 2) 313*4882a593Smuzhiyun #define SSP_DLL_CTRL_RESET (1 << 1) 314*4882a593Smuzhiyun #define SSP_DLL_CTRL_ENABLE (1 << 0) 315*4882a593Smuzhiyun 316*4882a593Smuzhiyun #define SSP_STATUS_PRESENT (1 << 31) 317*4882a593Smuzhiyun #define SSP_STATUS_MS_PRESENT (1 << 30) 318*4882a593Smuzhiyun #define SSP_STATUS_SD_PRESENT (1 << 29) 319*4882a593Smuzhiyun #define SSP_STATUS_CARD_DETECT (1 << 28) 320*4882a593Smuzhiyun #define SSP_STATUS_DMABURST (1 << 22) 321*4882a593Smuzhiyun #define SSP_STATUS_DMASENSE (1 << 21) 322*4882a593Smuzhiyun #define SSP_STATUS_DMATERM (1 << 20) 323*4882a593Smuzhiyun #define SSP_STATUS_DMAREQ (1 << 19) 324*4882a593Smuzhiyun #define SSP_STATUS_DMAEND (1 << 18) 325*4882a593Smuzhiyun #define SSP_STATUS_SDIO_IRQ (1 << 17) 326*4882a593Smuzhiyun #define SSP_STATUS_RESP_CRC_ERR (1 << 16) 327*4882a593Smuzhiyun #define SSP_STATUS_RESP_ERR (1 << 15) 328*4882a593Smuzhiyun #define SSP_STATUS_RESP_TIMEOUT (1 << 14) 329*4882a593Smuzhiyun #define SSP_STATUS_DATA_CRC_ERR (1 << 13) 330*4882a593Smuzhiyun #define SSP_STATUS_TIMEOUT (1 << 12) 331*4882a593Smuzhiyun #define SSP_STATUS_RECV_TIMEOUT_STAT (1 << 11) 332*4882a593Smuzhiyun #define SSP_STATUS_CEATA_CCS_ERR (1 << 10) 333*4882a593Smuzhiyun #define SSP_STATUS_FIFO_OVRFLW (1 << 9) 334*4882a593Smuzhiyun #define SSP_STATUS_FIFO_FULL (1 << 8) 335*4882a593Smuzhiyun #define SSP_STATUS_FIFO_EMPTY (1 << 5) 336*4882a593Smuzhiyun #define SSP_STATUS_FIFO_UNDRFLW (1 << 4) 337*4882a593Smuzhiyun #define SSP_STATUS_CMD_BUSY (1 << 3) 338*4882a593Smuzhiyun #define SSP_STATUS_DATA_BUSY (1 << 2) 339*4882a593Smuzhiyun #define SSP_STATUS_BUSY (1 << 0) 340*4882a593Smuzhiyun 341*4882a593Smuzhiyun #define SSP_DLL_STS_REF_SEL_MASK (0x3f << 8) 342*4882a593Smuzhiyun #define SSP_DLL_STS_REF_SEL_OFFSET 8 343*4882a593Smuzhiyun #define SSP_DLL_STS_SLV_SEL_MASK (0x3f << 2) 344*4882a593Smuzhiyun #define SSP_DLL_STS_SLV_SEL_OFFSET 2 345*4882a593Smuzhiyun #define SSP_DLL_STS_REF_LOCK (1 << 1) 346*4882a593Smuzhiyun #define SSP_DLL_STS_SLV_LOCK (1 << 0) 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun #define SSP_DEBUG_DATACRC_ERR_MASK (0xf << 28) 349*4882a593Smuzhiyun #define SSP_DEBUG_DATACRC_ERR_OFFSET 28 350*4882a593Smuzhiyun #define SSP_DEBUG_DATA_STALL (1 << 27) 351*4882a593Smuzhiyun #define SSP_DEBUG_DAT_SM_MASK (0x7 << 24) 352*4882a593Smuzhiyun #define SSP_DEBUG_DAT_SM_OFFSET 24 353*4882a593Smuzhiyun #define SSP_DEBUG_DAT_SM_DSM_IDLE (0x0 << 24) 354*4882a593Smuzhiyun #define SSP_DEBUG_DAT_SM_DSM_WORD (0x2 << 24) 355*4882a593Smuzhiyun #define SSP_DEBUG_DAT_SM_DSM_CRC1 (0x3 << 24) 356*4882a593Smuzhiyun #define SSP_DEBUG_DAT_SM_DSM_CRC2 (0x4 << 24) 357*4882a593Smuzhiyun #define SSP_DEBUG_DAT_SM_DSM_END (0x5 << 24) 358*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MASK (0xf << 20) 359*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_OFFSET 20 360*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_IDLE (0x0 << 20) 361*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_CKON (0x1 << 20) 362*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_BS1 (0x2 << 20) 363*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_TPC (0x3 << 20) 364*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_BS2 (0x4 << 20) 365*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_HDSHK (0x5 << 20) 366*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_BS3 (0x6 << 20) 367*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_RW (0x7 << 20) 368*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_CRC1 (0x8 << 20) 369*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_CRC2 (0x9 << 20) 370*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_BS0 (0xa << 20) 371*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_END1 (0xb << 20) 372*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_END2W (0xc << 20) 373*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_END2R (0xd << 20) 374*4882a593Smuzhiyun #define SSP_DEBUG_MSTK_SM_MSTK_DONE (0xe << 20) 375*4882a593Smuzhiyun #define SSP_DEBUG_CMD_OE (1 << 19) 376*4882a593Smuzhiyun #define SSP_DEBUG_DMA_SM_MASK (0x7 << 16) 377*4882a593Smuzhiyun #define SSP_DEBUG_DMA_SM_OFFSET 16 378*4882a593Smuzhiyun #define SSP_DEBUG_DMA_SM_DMA_IDLE (0x0 << 16) 379*4882a593Smuzhiyun #define SSP_DEBUG_DMA_SM_DMA_DMAREQ (0x1 << 16) 380*4882a593Smuzhiyun #define SSP_DEBUG_DMA_SM_DMA_DMAACK (0x2 << 16) 381*4882a593Smuzhiyun #define SSP_DEBUG_DMA_SM_DMA_STALL (0x3 << 16) 382*4882a593Smuzhiyun #define SSP_DEBUG_DMA_SM_DMA_BUSY (0x4 << 16) 383*4882a593Smuzhiyun #define SSP_DEBUG_DMA_SM_DMA_DONE (0x5 << 16) 384*4882a593Smuzhiyun #define SSP_DEBUG_DMA_SM_DMA_COUNT (0x6 << 16) 385*4882a593Smuzhiyun #define SSP_DEBUG_MMC_SM_MASK (0xf << 12) 386*4882a593Smuzhiyun #define SSP_DEBUG_MMC_SM_OFFSET 12 387*4882a593Smuzhiyun #define SSP_DEBUG_MMC_SM_MMC_IDLE (0x0 << 12) 388*4882a593Smuzhiyun #define SSP_DEBUG_MMC_SM_MMC_CMD (0x1 << 12) 389*4882a593Smuzhiyun #define SSP_DEBUG_MMC_SM_MMC_TRC (0x2 << 12) 390*4882a593Smuzhiyun #define SSP_DEBUG_MMC_SM_MMC_RESP (0x3 << 12) 391*4882a593Smuzhiyun #define SSP_DEBUG_MMC_SM_MMC_RPRX (0x4 << 12) 392*4882a593Smuzhiyun #define SSP_DEBUG_MMC_SM_MMC_TX (0x5 << 12) 393*4882a593Smuzhiyun #define SSP_DEBUG_MMC_SM_MMC_CTOK (0x6 << 12) 394*4882a593Smuzhiyun #define SSP_DEBUG_MMC_SM_MMC_RX (0x7 << 12) 395*4882a593Smuzhiyun #define SSP_DEBUG_MMC_SM_MMC_CCS (0x8 << 12) 396*4882a593Smuzhiyun #define SSP_DEBUG_MMC_SM_MMC_PUP (0x9 << 12) 397*4882a593Smuzhiyun #define SSP_DEBUG_MMC_SM_MMC_WAIT (0xa << 12) 398*4882a593Smuzhiyun #define SSP_DEBUG_CMD_SM_MASK (0x3 << 10) 399*4882a593Smuzhiyun #define SSP_DEBUG_CMD_SM_OFFSET 10 400*4882a593Smuzhiyun #define SSP_DEBUG_CMD_SM_CSM_IDLE (0x0 << 10) 401*4882a593Smuzhiyun #define SSP_DEBUG_CMD_SM_CSM_INDEX (0x1 << 10) 402*4882a593Smuzhiyun #define SSP_DEBUG_CMD_SM_CSM_ARG (0x2 << 10) 403*4882a593Smuzhiyun #define SSP_DEBUG_CMD_SM_CSM_CRC (0x3 << 10) 404*4882a593Smuzhiyun #define SSP_DEBUG_SSP_CMD (1 << 9) 405*4882a593Smuzhiyun #define SSP_DEBUG_SSP_RESP (1 << 8) 406*4882a593Smuzhiyun #define SSP_DEBUG_SSP_RXD_MASK 0xff 407*4882a593Smuzhiyun #define SSP_DEBUG_SSP_RXD_OFFSET 0 408*4882a593Smuzhiyun 409*4882a593Smuzhiyun #define SSP_VERSION_MAJOR_MASK (0xff << 24) 410*4882a593Smuzhiyun #define SSP_VERSION_MAJOR_OFFSET 24 411*4882a593Smuzhiyun #define SSP_VERSION_MINOR_MASK (0xff << 16) 412*4882a593Smuzhiyun #define SSP_VERSION_MINOR_OFFSET 16 413*4882a593Smuzhiyun #define SSP_VERSION_STEP_MASK 0xffff 414*4882a593Smuzhiyun #define SSP_VERSION_STEP_OFFSET 0 415*4882a593Smuzhiyun 416*4882a593Smuzhiyun #endif /* __MX28_REGS_SSP_H__ */ 417