1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2015, 2016 Freescale Semiconductor, Inc. 3*91f16700Schasinglulu * Copyright 2017-2021 NXP 4*91f16700Schasinglulu * 5*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 6*91f16700Schasinglulu * 7*91f16700Schasinglulu */ 8*91f16700Schasinglulu 9*91f16700Schasinglulu #ifndef SD_MMC_H 10*91f16700Schasinglulu #define SD_MMC_H 11*91f16700Schasinglulu 12*91f16700Schasinglulu #include <lib/mmio.h> 13*91f16700Schasinglulu 14*91f16700Schasinglulu /* operating freq */ 15*91f16700Schasinglulu #define CARD_IDENTIFICATION_FREQ 400000 16*91f16700Schasinglulu #define SD_SS_25MHZ 20000000 17*91f16700Schasinglulu #define SD_HS_50MHZ 40000000 18*91f16700Schasinglulu #define MMC_SS_20MHZ 15000000 19*91f16700Schasinglulu #define MMC_HS_26MHZ 20000000 20*91f16700Schasinglulu #define MMC_HS_52MHZ 40000000 21*91f16700Schasinglulu 22*91f16700Schasinglulu /* Need to check this value ? */ 23*91f16700Schasinglulu #define MAX_PLATFORM_CLOCK 800000000 24*91f16700Schasinglulu 25*91f16700Schasinglulu /* eSDHC system control register defines */ 26*91f16700Schasinglulu #define ESDHC_SYSCTL_DTOCV(t) (((t) & 0xF) << 16) 27*91f16700Schasinglulu #define ESDHC_SYSCTL_SDCLKFS(f) (((f) & 0xFF) << 8) 28*91f16700Schasinglulu #define ESDHC_SYSCTL_DVS(d) (((d) & 0xF) << 4) 29*91f16700Schasinglulu #define ESDHC_SYSCTL_SDCLKEN (0x00000008) 30*91f16700Schasinglulu #define ESDHC_SYSCTL_RSTA (0x01000000) 31*91f16700Schasinglulu 32*91f16700Schasinglulu /* Data timeout counter value. SDHC_CLK x 227 */ 33*91f16700Schasinglulu #define TIMEOUT_COUNTER_SDCLK_2_27 0xE 34*91f16700Schasinglulu #define ESDHC_SYSCTL_INITA 0x08000000 35*91f16700Schasinglulu 36*91f16700Schasinglulu /* eSDHC interrupt status enable register defines */ 37*91f16700Schasinglulu #define ESDHC_IRQSTATEN_CINS 0x00000040 38*91f16700Schasinglulu #define ESDHC_IRQSTATEN_BWR 0x00000010 39*91f16700Schasinglulu 40*91f16700Schasinglulu /* eSDHC interrupt status register defines */ 41*91f16700Schasinglulu #define ESDHC_IRQSTAT_DMAE (0x10000000) 42*91f16700Schasinglulu #define ESDHC_IRQSTAT_AC12E (0x01000000) 43*91f16700Schasinglulu #define ESDHC_IRQSTAT_DEBE (0x00400000) 44*91f16700Schasinglulu #define ESDHC_IRQSTAT_DCE (0x00200000) 45*91f16700Schasinglulu #define ESDHC_IRQSTAT_DTOE (0x00100000) 46*91f16700Schasinglulu #define ESDHC_IRQSTAT_CIE (0x00080000) 47*91f16700Schasinglulu #define ESDHC_IRQSTAT_CEBE (0x00040000) 48*91f16700Schasinglulu #define ESDHC_IRQSTAT_CCE (0x00020000) 49*91f16700Schasinglulu #define ESDHC_IRQSTAT_CTOE (0x00010000) 50*91f16700Schasinglulu #define ESDHC_IRQSTAT_CINT (0x00000100) 51*91f16700Schasinglulu #define ESDHC_IRQSTAT_CRM (0x00000080) 52*91f16700Schasinglulu #define ESDHC_IRQSTAT_CINS (0x00000040) 53*91f16700Schasinglulu #define ESDHC_IRQSTAT_BRR (0x00000020) 54*91f16700Schasinglulu #define ESDHC_IRQSTAT_BWR (0x00000010) 55*91f16700Schasinglulu #define ESDHC_IRQSTAT_DINT (0x00000008) 56*91f16700Schasinglulu #define ESDHC_IRQSTAT_BGE (0x00000004) 57*91f16700Schasinglulu #define ESDHC_IRQSTAT_TC (0x00000002) 58*91f16700Schasinglulu #define ESDHC_IRQSTAT_CC (0x00000001) 59*91f16700Schasinglulu #define ESDHC_IRQSTAT_CMD_ERR (ESDHC_IRQSTAT_CIE |\ 60*91f16700Schasinglulu ESDHC_IRQSTAT_CEBE |\ 61*91f16700Schasinglulu ESDHC_IRQSTAT_CCE) 62*91f16700Schasinglulu #define ESDHC_IRQSTAT_DATA_ERR (ESDHC_IRQSTAT_DEBE |\ 63*91f16700Schasinglulu ESDHC_IRQSTAT_DCE |\ 64*91f16700Schasinglulu ESDHC_IRQSTAT_DTOE) 65*91f16700Schasinglulu #define ESDHC_IRQSTAT_CLEAR_ALL (0xFFFFFFFF) 66*91f16700Schasinglulu 67*91f16700Schasinglulu /* eSDHC present state register defines */ 68*91f16700Schasinglulu #define ESDHC_PRSSTAT_CLSL 0x00800000 69*91f16700Schasinglulu #define ESDHC_PRSSTAT_WPSPL 0x00080000 70*91f16700Schasinglulu #define ESDHC_PRSSTAT_CDPL 0x00040000 71*91f16700Schasinglulu #define ESDHC_PRSSTAT_CINS 0x00010000 72*91f16700Schasinglulu #define ESDHC_PRSSTAT_BREN 0x00000800 73*91f16700Schasinglulu #define ESDHC_PRSSTAT_BWEN 0x00000400 74*91f16700Schasinglulu #define ESDHC_PRSSTAT_RTA 0x00000200 75*91f16700Schasinglulu #define ESDHC_PRSSTAT_WTA 0x00000100 76*91f16700Schasinglulu #define ESDHC_PRSSTAT_SDOFF 0x00000080 77*91f16700Schasinglulu #define ESDHC_PRSSTAT_PEROFF 0x00000040 78*91f16700Schasinglulu #define ESDHC_PRSSTAT_HCKOFF 0x00000020 79*91f16700Schasinglulu #define ESDHC_PRSSTAT_IPGOFF 0x00000010 80*91f16700Schasinglulu #define ESDHC_PRSSTAT_DLA 0x00000004 81*91f16700Schasinglulu #define ESDHC_PRSSTAT_CDIHB 0x00000002 82*91f16700Schasinglulu #define ESDHC_PRSSTAT_CIHB 0x00000001 83*91f16700Schasinglulu 84*91f16700Schasinglulu /* eSDHC protocol control register defines */ 85*91f16700Schasinglulu #define ESDHC_PROCTL_EMODE_LE 0x00000020 86*91f16700Schasinglulu #define ESDHC_PROCTL_DTW_1BIT 0x00000000 87*91f16700Schasinglulu #define ESDHC_PROCTL_DTW_4BIT 0x00000002 88*91f16700Schasinglulu #define ESDHC_PROCTL_DTW_8BIT 0x00000004 89*91f16700Schasinglulu 90*91f16700Schasinglulu /* Watermark Level Register (WML) */ 91*91f16700Schasinglulu #define ESDHC_WML_RD_WML(w) ((w) & 0x7F) 92*91f16700Schasinglulu #define ESDHC_WML_WR_WML(w) (((w) & 0x7F) << 16) 93*91f16700Schasinglulu #define ESDHC_WML_RD_BRST(w) (((w) & 0xF) << 8) 94*91f16700Schasinglulu #define ESDHC_WML_WR_BRST(w) (((w) & 0xF) << 24) 95*91f16700Schasinglulu #define ESDHC_WML_WR_BRST_MASK (0x0F000000) 96*91f16700Schasinglulu #define ESDHC_WML_RD_BRST_MASK (0x00000F00) 97*91f16700Schasinglulu #define ESDHC_WML_RD_WML_MASK (0x0000007F) 98*91f16700Schasinglulu #define ESDHC_WML_WR_WML_MASK (0x007F0000) 99*91f16700Schasinglulu #define WML_512_BYTES (0x0) 100*91f16700Schasinglulu #define BURST_128_BYTES (0x0) 101*91f16700Schasinglulu 102*91f16700Schasinglulu /* eSDHC control register define */ 103*91f16700Schasinglulu #define ESDHC_DCR_SNOOP 0x00000040 104*91f16700Schasinglulu 105*91f16700Schasinglulu /* ESDHC Block attributes register */ 106*91f16700Schasinglulu #define ESDHC_BLKATTR_BLKCNT(c) (((c) & 0xffff) << 16) 107*91f16700Schasinglulu #define ESDHC_BLKATTR_BLKSZE(s) ((s) & 0xfff) 108*91f16700Schasinglulu 109*91f16700Schasinglulu /* Transfer Type Register */ 110*91f16700Schasinglulu #define ESDHC_XFERTYP_CMD(c) (((c) & 0x3F) << 24) 111*91f16700Schasinglulu #define ESDHC_XFERTYP_CMDTYP_NORMAL (0x0) 112*91f16700Schasinglulu #define ESDHC_XFERTYP_CMDTYP_SUSPEND (0x00400000) 113*91f16700Schasinglulu #define ESDHC_XFERTYP_CMDTYP_RESUME (0x00800000) 114*91f16700Schasinglulu #define ESDHC_XFERTYP_CMDTYP_ABORT (0x00C00000) 115*91f16700Schasinglulu #define ESDHC_XFERTYP_DPSEL (0x00200000) 116*91f16700Schasinglulu #define ESDHC_XFERTYP_CICEN (0x00100000) 117*91f16700Schasinglulu #define ESDHC_XFERTYP_CCCEN (0x00080000) 118*91f16700Schasinglulu #define ESDHC_XFERTYP_RSPTYP_NONE (0x0) 119*91f16700Schasinglulu #define ESDHC_XFERTYP_RSPTYP_136 (0x00010000) 120*91f16700Schasinglulu #define ESDHC_XFERTYP_RSPTYP_48 (0x00020000) 121*91f16700Schasinglulu #define ESDHC_XFERTYP_RSPTYP_48_BUSY (0x00030000) 122*91f16700Schasinglulu #define ESDHC_XFERTYP_MSBSEL (0x00000020) 123*91f16700Schasinglulu #define ESDHC_XFERTYP_DTDSEL (0x00000010) 124*91f16700Schasinglulu #define ESDHC_XFERTYP_AC12EN (0x00000004) 125*91f16700Schasinglulu #define ESDHC_XFERTYP_BCEN (0x00000002) 126*91f16700Schasinglulu #define ESDHC_XFERTYP_DMAEN (0x00000001) 127*91f16700Schasinglulu 128*91f16700Schasinglulu #define MMC_VDD_HIGH_VOLTAGE 0x00000100 129*91f16700Schasinglulu 130*91f16700Schasinglulu /* command index */ 131*91f16700Schasinglulu #define CMD0 0 132*91f16700Schasinglulu #define CMD1 1 133*91f16700Schasinglulu #define CMD2 2 134*91f16700Schasinglulu #define CMD3 3 135*91f16700Schasinglulu #define CMD5 5 136*91f16700Schasinglulu #define CMD6 6 137*91f16700Schasinglulu #define CMD7 7 138*91f16700Schasinglulu #define CMD8 8 139*91f16700Schasinglulu #define CMD9 9 140*91f16700Schasinglulu #define CMD12 12 141*91f16700Schasinglulu #define CMD13 13 142*91f16700Schasinglulu #define CMD14 14 143*91f16700Schasinglulu #define CMD16 16 144*91f16700Schasinglulu #define CMD17 17 145*91f16700Schasinglulu #define CMD18 18 146*91f16700Schasinglulu #define CMD19 19 147*91f16700Schasinglulu #define CMD24 24 148*91f16700Schasinglulu #define CMD41 41 149*91f16700Schasinglulu #define CMD42 42 150*91f16700Schasinglulu #define CMD51 51 151*91f16700Schasinglulu #define CMD55 55 152*91f16700Schasinglulu #define CMD56 56 153*91f16700Schasinglulu #define ACMD6 CMD6 154*91f16700Schasinglulu #define ACMD13 CMD13 155*91f16700Schasinglulu #define ACMD41 CMD41 156*91f16700Schasinglulu #define ACMD42 CMD42 157*91f16700Schasinglulu #define ACMD51 CMD51 158*91f16700Schasinglulu 159*91f16700Schasinglulu /* commands abbreviations */ 160*91f16700Schasinglulu #define CMD_GO_IDLE_STATE CMD0 161*91f16700Schasinglulu #define CMD_MMC_SEND_OP_COND CMD1 162*91f16700Schasinglulu #define CMD_ALL_SEND_CID CMD2 163*91f16700Schasinglulu #define CMD_SEND_RELATIVE_ADDR CMD3 164*91f16700Schasinglulu #define CMD_SET_DSR CMD4 165*91f16700Schasinglulu #define CMD_SWITCH_FUNC CMD6 166*91f16700Schasinglulu #define CMD_SELECT_CARD CMD7 167*91f16700Schasinglulu #define CMD_DESELECT_CARD CMD7 168*91f16700Schasinglulu #define CMD_SEND_IF_COND CMD8 169*91f16700Schasinglulu #define CMD_MMC_SEND_EXT_CSD CMD8 170*91f16700Schasinglulu #define CMD_SEND_CSD CMD9 171*91f16700Schasinglulu #define CMD_SEND_CID CMD10 172*91f16700Schasinglulu #define CMD_STOP_TRANSMISSION CMD12 173*91f16700Schasinglulu #define CMD_SEND_STATUS CMD13 174*91f16700Schasinglulu #define CMD_BUS_TEST_R CMD14 175*91f16700Schasinglulu #define CMD_GO_INACTIVE_STATE CMD15 176*91f16700Schasinglulu #define CMD_SET_BLOCKLEN CMD16 177*91f16700Schasinglulu #define CMD_READ_SINGLE_BLOCK CMD17 178*91f16700Schasinglulu #define CMD_READ_MULTIPLE_BLOCK CMD18 179*91f16700Schasinglulu #define CMD_WRITE_SINGLE_BLOCK CMD24 180*91f16700Schasinglulu #define CMD_BUS_TEST_W CMD19 181*91f16700Schasinglulu #define CMD_APP_CMD CMD55 182*91f16700Schasinglulu #define CMD_GEN_CMD CMD56 183*91f16700Schasinglulu #define CMD_SET_BUS_WIDTH ACMD6 184*91f16700Schasinglulu #define CMD_SD_STATUS ACMD13 185*91f16700Schasinglulu #define CMD_SD_SEND_OP_COND ACMD41 186*91f16700Schasinglulu #define CMD_SET_CLR_CARD_DETECT ACMD42 187*91f16700Schasinglulu #define CMD_SEND_SCR ACMD51 188*91f16700Schasinglulu 189*91f16700Schasinglulu /* MMC card spec version */ 190*91f16700Schasinglulu #define MMC_CARD_VERSION_1_2 0 191*91f16700Schasinglulu #define MMC_CARD_VERSION_1_4 1 192*91f16700Schasinglulu #define MMC_CARD_VERSION_2_X 2 193*91f16700Schasinglulu #define MMC_CARD_VERSION_3_X 3 194*91f16700Schasinglulu #define MMC_CARD_VERSION_4_X 4 195*91f16700Schasinglulu 196*91f16700Schasinglulu /* SD Card Spec Version */ 197*91f16700Schasinglulu /* May need to add version 3 here? */ 198*91f16700Schasinglulu #define SD_CARD_VERSION_1_0 0 199*91f16700Schasinglulu #define SD_CARD_VERSION_1_10 1 200*91f16700Schasinglulu #define SD_CARD_VERSION_2_0 2 201*91f16700Schasinglulu 202*91f16700Schasinglulu /* card types */ 203*91f16700Schasinglulu #define MMC_CARD 0 204*91f16700Schasinglulu #define SD_CARD 1 205*91f16700Schasinglulu #define NOT_SD_CARD MMC_CARD 206*91f16700Schasinglulu 207*91f16700Schasinglulu /* Card rca */ 208*91f16700Schasinglulu #define SD_MMC_CARD_RCA 0x1 209*91f16700Schasinglulu #define BLOCK_LEN_512 512 210*91f16700Schasinglulu 211*91f16700Schasinglulu /* card state */ 212*91f16700Schasinglulu #define STATE_IDLE 0 213*91f16700Schasinglulu #define STATE_READY 1 214*91f16700Schasinglulu #define STATE_IDENT 2 215*91f16700Schasinglulu #define STATE_STBY 3 216*91f16700Schasinglulu #define STATE_TRAN 4 217*91f16700Schasinglulu #define STATE_DATA 5 218*91f16700Schasinglulu #define STATE_RCV 6 219*91f16700Schasinglulu #define STATE_PRG 7 220*91f16700Schasinglulu #define STATE_DIS 8 221*91f16700Schasinglulu 222*91f16700Schasinglulu /* Card OCR register */ 223*91f16700Schasinglulu /* VDD voltage window 1,65 to 1.95 */ 224*91f16700Schasinglulu #define MMC_OCR_VDD_165_195 0x00000080 225*91f16700Schasinglulu /* VDD voltage window 2.7-2.8 */ 226*91f16700Schasinglulu #define MMC_OCR_VDD_FF8 0x00FF8000 227*91f16700Schasinglulu #define MMC_OCR_CCS 0x40000000/* Card Capacity */ 228*91f16700Schasinglulu #define MMC_OCR_BUSY 0x80000000/* busy bit */ 229*91f16700Schasinglulu #define SD_OCR_HCS 0x40000000/* High capacity host */ 230*91f16700Schasinglulu #define MMC_OCR_SECTOR_MODE 0x40000000/* Access Mode as Sector */ 231*91f16700Schasinglulu 232*91f16700Schasinglulu /* mmc Switch function */ 233*91f16700Schasinglulu #define SET_EXT_CSD_HS_TIMING 0x03B90100/* set High speed */ 234*91f16700Schasinglulu 235*91f16700Schasinglulu /* check supports switching or not */ 236*91f16700Schasinglulu #define SD_SWITCH_FUNC_CHECK_MODE 0x00FFFFF1 237*91f16700Schasinglulu #define SD_SWITCH_FUNC_SWITCH_MODE 0x80FFFFF1/* switch */ 238*91f16700Schasinglulu #define SD_SWITCH_FUNC_HIGH_SPEED 0x02/* HIGH SPEED FUNC */ 239*91f16700Schasinglulu #define SWITCH_ERROR 0x00000080 240*91f16700Schasinglulu 241*91f16700Schasinglulu /* errors in sending commands */ 242*91f16700Schasinglulu #define RESP_TIMEOUT 0x1 243*91f16700Schasinglulu #define COMMAND_ERROR 0x2 244*91f16700Schasinglulu /* error in response */ 245*91f16700Schasinglulu #define R1_ERROR (1 << 19) 246*91f16700Schasinglulu #define R1_CURRENT_STATE(x) (((x) & 0x00001E00) >> 9) 247*91f16700Schasinglulu 248*91f16700Schasinglulu /* Host Controller Capabilities */ 249*91f16700Schasinglulu #define ESDHC_HOSTCAPBLT_DMAS (0x00400000) 250*91f16700Schasinglulu 251*91f16700Schasinglulu 252*91f16700Schasinglulu /* SD/MMC memory map */ 253*91f16700Schasinglulu struct esdhc_regs { 254*91f16700Schasinglulu uint32_t dsaddr; /* dma system address */ 255*91f16700Schasinglulu uint32_t blkattr; /* Block attributes */ 256*91f16700Schasinglulu uint32_t cmdarg; /* Command argument */ 257*91f16700Schasinglulu uint32_t xfertyp; /* Command transfer type */ 258*91f16700Schasinglulu uint32_t cmdrsp[4]; /* Command response0,1,2,3 */ 259*91f16700Schasinglulu uint32_t datport; /* Data buffer access port */ 260*91f16700Schasinglulu uint32_t prsstat; /* Present state */ 261*91f16700Schasinglulu uint32_t proctl; /* Protocol control */ 262*91f16700Schasinglulu uint32_t sysctl; /* System control */ 263*91f16700Schasinglulu uint32_t irqstat; /* Interrupt status */ 264*91f16700Schasinglulu uint32_t irqstaten; /* Interrupt status enable */ 265*91f16700Schasinglulu uint32_t irqsigen; /* Interrupt signal enable */ 266*91f16700Schasinglulu uint32_t autoc12err; /* Auto CMD12 status */ 267*91f16700Schasinglulu uint32_t hostcapblt; /* Host controller capabilities */ 268*91f16700Schasinglulu uint32_t wml; /* Watermark level */ 269*91f16700Schasinglulu uint32_t res1[2]; 270*91f16700Schasinglulu uint32_t fevt; /* Force event */ 271*91f16700Schasinglulu uint32_t res2; 272*91f16700Schasinglulu uint32_t adsaddrl; 273*91f16700Schasinglulu uint32_t adsaddrh; 274*91f16700Schasinglulu uint32_t res3[39]; 275*91f16700Schasinglulu uint32_t hostver; /* Host controller version */ 276*91f16700Schasinglulu uint32_t res4; 277*91f16700Schasinglulu uint32_t dmaerr; /* DMA error address */ 278*91f16700Schasinglulu uint32_t dmaerrh; /* DMA error address high */ 279*91f16700Schasinglulu uint32_t dmaerrattr; /* DMA error atrribute */ 280*91f16700Schasinglulu uint32_t res5; 281*91f16700Schasinglulu uint32_t hostcapblt2;/* Host controller capabilities2 */ 282*91f16700Schasinglulu uint32_t res6[2]; 283*91f16700Schasinglulu uint32_t tcr; /* Tuning control */ 284*91f16700Schasinglulu uint32_t res7[7]; 285*91f16700Schasinglulu uint32_t dirctrl; /* Direction control */ 286*91f16700Schasinglulu uint32_t ccr; /* Clock control */ 287*91f16700Schasinglulu uint32_t res8[177]; 288*91f16700Schasinglulu uint32_t ctl; /* Control register */ 289*91f16700Schasinglulu }; 290*91f16700Schasinglulu 291*91f16700Schasinglulu /* SD/MMC card attributes */ 292*91f16700Schasinglulu struct card_attributes { 293*91f16700Schasinglulu uint32_t type; /* sd or mmc card */ 294*91f16700Schasinglulu uint32_t version; /* version */ 295*91f16700Schasinglulu uint32_t block_len; /* block length */ 296*91f16700Schasinglulu uint32_t bus_freq; /* sdhc bus frequency */ 297*91f16700Schasinglulu uint16_t rca; /* relative card address */ 298*91f16700Schasinglulu uint8_t is_high_capacity; /* high capacity */ 299*91f16700Schasinglulu }; 300*91f16700Schasinglulu 301*91f16700Schasinglulu struct mmc { 302*91f16700Schasinglulu struct esdhc_regs *esdhc_regs; 303*91f16700Schasinglulu struct card_attributes card; 304*91f16700Schasinglulu 305*91f16700Schasinglulu uint32_t block_len; 306*91f16700Schasinglulu uint32_t voltages_caps; /* supported voltaes */ 307*91f16700Schasinglulu uint32_t dma_support; /* DMA support */ 308*91f16700Schasinglulu }; 309*91f16700Schasinglulu 310*91f16700Schasinglulu enum cntrl_num { 311*91f16700Schasinglulu SDHC1 = 0, 312*91f16700Schasinglulu SDHC2 313*91f16700Schasinglulu }; 314*91f16700Schasinglulu 315*91f16700Schasinglulu int sd_emmc_init(uintptr_t *block_dev_spec, 316*91f16700Schasinglulu uintptr_t nxp_esdhc_addr, 317*91f16700Schasinglulu size_t nxp_sd_block_offset, 318*91f16700Schasinglulu size_t nxp_sd_block_size, 319*91f16700Schasinglulu bool card_detect); 320*91f16700Schasinglulu 321*91f16700Schasinglulu int esdhc_emmc_init(struct mmc *mmc, bool card_detect); 322*91f16700Schasinglulu int esdhc_read(struct mmc *mmc, uint32_t src_offset, uintptr_t dst, 323*91f16700Schasinglulu size_t size); 324*91f16700Schasinglulu int esdhc_write(struct mmc *mmc, uintptr_t src, uint32_t dst_offset, 325*91f16700Schasinglulu size_t size); 326*91f16700Schasinglulu 327*91f16700Schasinglulu #ifdef NXP_ESDHC_BE 328*91f16700Schasinglulu #define esdhc_in32(a) bswap32(mmio_read_32((uintptr_t)(a))) 329*91f16700Schasinglulu #define esdhc_out32(a, v) mmio_write_32((uintptr_t)(a), bswap32(v)) 330*91f16700Schasinglulu #elif defined(NXP_ESDHC_LE) 331*91f16700Schasinglulu #define esdhc_in32(a) mmio_read_32((uintptr_t)(a)) 332*91f16700Schasinglulu #define esdhc_out32(a, v) mmio_write_32((uintptr_t)(a), (v)) 333*91f16700Schasinglulu #else 334*91f16700Schasinglulu #error Please define CCSR ESDHC register endianness 335*91f16700Schasinglulu #endif 336*91f16700Schasinglulu 337*91f16700Schasinglulu #endif /*SD_MMC_H*/ 338