1b28c29d0SBiju Das /* 2b28c29d0SBiju Das * Copyright (c) 2015-2020, Renesas Electronics Corporation. All rights reserved. 3b28c29d0SBiju Das * 4b28c29d0SBiju Das * SPDX-License-Identifier: BSD-3-Clause 5b28c29d0SBiju Das */ 6b28c29d0SBiju Das 7b28c29d0SBiju Das #ifndef EMMC_HAL_H 8b28c29d0SBiju Das #define EMMC_HAL_H 9b28c29d0SBiju Das 10b28c29d0SBiju Das /* memory card error/status types */ 11b28c29d0SBiju Das #define HAL_MEMCARD_OUT_OF_RANGE 0x80000000L 12b28c29d0SBiju Das #define HAL_MEMCARD_ADDRESS_ERROR 0x40000000L 13b28c29d0SBiju Das #define HAL_MEMCARD_BLOCK_LEN_ERROR 0x20000000L 14b28c29d0SBiju Das #define HAL_MEMCARD_ERASE_SEQ_ERROR 0x10000000L 15b28c29d0SBiju Das #define HAL_MEMCARD_ERASE_PARAM 0x08000000L 16b28c29d0SBiju Das #define HAL_MEMCARD_WP_VIOLATION 0x04000000L 17b28c29d0SBiju Das #define HAL_MEMCARD_CARD_IS_LOCKED 0x02000000L 18b28c29d0SBiju Das #define HAL_MEMCARD_LOCK_UNLOCK_FAILED 0x01000000L 19b28c29d0SBiju Das #define HAL_MEMCARD_COM_CRC_ERROR 0x00800000L 20b28c29d0SBiju Das #define HAL_MEMCARD_ILEGAL_COMMAND 0x00400000L 21b28c29d0SBiju Das #define HAL_MEMCARD_CARD_ECC_FAILED 0x00200000L 22b28c29d0SBiju Das #define HAL_MEMCARD_CC_ERROR 0x00100000L 23b28c29d0SBiju Das #define HAL_MEMCARD_ERROR 0x00080000L 24b28c29d0SBiju Das #define HAL_MEMCARD_UNDERRUN 0x00040000L 25b28c29d0SBiju Das #define HAL_MEMCARD_OVERRUN 0x00020000L 26b28c29d0SBiju Das #define HAL_MEMCARD_CIDCSD_OVERWRITE 0x00010000L 27b28c29d0SBiju Das #define HAL_MEMCARD_WP_ERASE_SKIP 0x00008000L 28b28c29d0SBiju Das #define HAL_MEMCARD_CARD_ECC_DISABLED 0x00004000L 29b28c29d0SBiju Das #define HAL_MEMCARD_ERASE_RESET 0x00002000L 30b28c29d0SBiju Das #define HAL_MEMCARD_CARD_STATE 0x00001E00L 31b28c29d0SBiju Das #define HAL_MEMCARD_CARD_READY_FOR_DATA 0x00000100L 32b28c29d0SBiju Das #define HAL_MEMCARD_APP_CMD 0x00000020L 33b28c29d0SBiju Das #define HAL_MEMCARD_SWITCH_ERROR 0x00000080L 34b28c29d0SBiju Das #define HAL_MEMCARD_AKE_SEQ_ERROR 0x00000008L 35b28c29d0SBiju Das #define HAL_MEMCARD_NO_ERRORS 0x00000000L 36b28c29d0SBiju Das 37b28c29d0SBiju Das /* Memory card response types */ 38b28c29d0SBiju Das #define HAL_MEMCARD_COMMAND_INDEX_MASK 0x0003f 39b28c29d0SBiju Das 40b28c29d0SBiju Das /* Type of the return value. */ 41b28c29d0SBiju Das typedef enum { 42b28c29d0SBiju Das HAL_MEMCARD_FAIL = 0U, 43b28c29d0SBiju Das HAL_MEMCARD_OK = 1U, 44b28c29d0SBiju Das HAL_MEMCARD_DMA_ALLOC_FAIL = 2U, /* DMA channel allocation failed */ 45b28c29d0SBiju Das HAL_MEMCARD_DMA_TRANSFER_FAIL = 3U, /* DMA transfer failed */ 46b28c29d0SBiju Das HAL_MEMCARD_CARD_STATUS_ERROR = 4U, /* card status non-masked error */ 47b28c29d0SBiju Das HAL_MEMCARD_CMD_TIMEOUT = 5U, /* Command timeout occurred */ 48b28c29d0SBiju Das HAL_MEMCARD_DATA_TIMEOUT = 6U, /* Data timeout occurred */ 49b28c29d0SBiju Das HAL_MEMCARD_CMD_CRC_ERROR = 7U, /* Command CRC error occurred */ 50b28c29d0SBiju Das HAL_MEMCARD_DATA_CRC_ERROR = 8U /* Data CRC error occurred */ 51b28c29d0SBiju Das } HAL_MEMCARD_RETURN; 52b28c29d0SBiju Das 53b28c29d0SBiju Das /* memory access operation */ 54b28c29d0SBiju Das typedef enum { 55b28c29d0SBiju Das HAL_MEMCARD_READ = 0U, /* read */ 56b28c29d0SBiju Das HAL_MEMCARD_WRITE = 1U /* write */ 57b28c29d0SBiju Das } HAL_MEMCARD_OPERATION; 58b28c29d0SBiju Das 59b28c29d0SBiju Das /* Type of data width on memorycard bus */ 60b28c29d0SBiju Das typedef enum { 61b28c29d0SBiju Das HAL_MEMCARD_DATA_WIDTH_1_BIT = 0U, 62b28c29d0SBiju Das HAL_MEMCARD_DATA_WIDTH_4_BIT = 1U, 63b28c29d0SBiju Das HAL_MEMCARD_DATA_WIDTH_8_BIT = 2U 64b28c29d0SBiju Das } HAL_MEMCARD_DATA_WIDTH; /* data (bus) width types */ 65b28c29d0SBiju Das 66b28c29d0SBiju Das /* Presence of the memory card */ 67b28c29d0SBiju Das typedef enum { 68b28c29d0SBiju Das HAL_MEMCARD_CARD_IS_IN = 0U, 69b28c29d0SBiju Das HAL_MEMCARD_CARD_IS_OUT = 1U 70b28c29d0SBiju Das } HAL_MEMCARD_PRESENCE_STATUS; /* presence status of the memory card */ 71b28c29d0SBiju Das 72b28c29d0SBiju Das /* mode of data transfer */ 73b28c29d0SBiju Das typedef enum { 74b28c29d0SBiju Das HAL_MEMCARD_DMA = 0U, 75b28c29d0SBiju Das HAL_MEMCARD_NOT_DMA = 1U 76b28c29d0SBiju Das } HAL_MEMCARD_DATA_TRANSFER_MODE; 77b28c29d0SBiju Das 78b28c29d0SBiju Das /* Memory card response types. */ 79b28c29d0SBiju Das typedef enum hal_memcard_response_type { 80b28c29d0SBiju Das HAL_MEMCARD_RESPONSE_NONE = 0x00000U, 81b28c29d0SBiju Das HAL_MEMCARD_RESPONSE_R1 = 0x00100U, 82b28c29d0SBiju Das HAL_MEMCARD_RESPONSE_R1b = 0x00200U, 83b28c29d0SBiju Das HAL_MEMCARD_RESPONSE_R2 = 0x00300U, 84b28c29d0SBiju Das HAL_MEMCARD_RESPONSE_R3 = 0x00400U, 85b28c29d0SBiju Das HAL_MEMCARD_RESPONSE_R4 = 0x00500U, 86b28c29d0SBiju Das HAL_MEMCARD_RESPONSE_R5 = 0x00600U, 87b28c29d0SBiju Das HAL_MEMCARD_RESPONSE_R6 = 0x00700U, 88b28c29d0SBiju Das HAL_MEMCARD_RESPONSE_R7 = 0x00800U, 89b28c29d0SBiju Das HAL_MEMCARD_RESPONSE_TYPE_MASK = 0x00f00U 90b28c29d0SBiju Das } HAL_MEMCARD_RESPONSE_TYPE; 91b28c29d0SBiju Das 92b28c29d0SBiju Das /* Memory card command types. */ 93b28c29d0SBiju Das typedef enum hal_memcard_command_type { 94b28c29d0SBiju Das HAL_MEMCARD_COMMAND_TYPE_BC = 0x00000U, 95b28c29d0SBiju Das HAL_MEMCARD_COMMAND_TYPE_BCR = 0x01000U, 96b28c29d0SBiju Das HAL_MEMCARD_COMMAND_TYPE_AC = 0x02000U, 97b28c29d0SBiju Das HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE = 0x03000U, 98b28c29d0SBiju Das HAL_MEMCARD_COMMAND_TYPE_ADTC_READ = 0x04000U, 99b28c29d0SBiju Das HAL_MEMCARD_COMMAND_TYPE_MASK = 0x07000U 100b28c29d0SBiju Das } HAL_MEMCARD_COMMAND_TYPE; 101b28c29d0SBiju Das 102b28c29d0SBiju Das /* Type of memory card */ 103b28c29d0SBiju Das typedef enum hal_memcard_command_card_type { 104b28c29d0SBiju Das HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON = 0x00000U, 105b28c29d0SBiju Das HAL_MEMCARD_COMMAND_CARD_TYPE_MMC = 0x08000U, 106b28c29d0SBiju Das HAL_MEMCARD_COMMAND_CARD_TYPE_SD = 0x10000U, 107b28c29d0SBiju Das HAL_MEMCARD_COMMAND_CARD_TYPE_MASK = 0x18000U 108b28c29d0SBiju Das } HAL_MEMCARD_COMMAND_CARD_TYPE; 109b28c29d0SBiju Das 110b28c29d0SBiju Das /* Memory card application command. */ 111b28c29d0SBiju Das typedef enum hal_memcard_command_app_norm { 112b28c29d0SBiju Das HAL_MEMCARD_COMMAND_NORMAL = 0x00000U, 113b28c29d0SBiju Das HAL_MEMCARD_COMMAND_APP = 0x20000U, 114b28c29d0SBiju Das HAL_MEMCARD_COMMAND_APP_NORM_MASK = 0x20000U 115b28c29d0SBiju Das } HAL_MEMCARD_COMMAND_APP_NORM; 116b28c29d0SBiju Das 117b28c29d0SBiju Das /* Memory card command codes. */ 118b28c29d0SBiju Das typedef enum { 119b28c29d0SBiju Das /* class 0 and class 1 */ 120b28c29d0SBiju Das /* CMD0 */ 121b28c29d0SBiju Das CMD0_GO_IDLE_STATE = 122b28c29d0SBiju Das 0U | (uint32_t)HAL_MEMCARD_RESPONSE_NONE | 123b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BC | 124b28c29d0SBiju Das (uint32_t) HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 125b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 126b28c29d0SBiju Das /* CMD1 */ 127b28c29d0SBiju Das CMD1_SEND_OP_COND = 128b28c29d0SBiju Das 1U | (uint32_t)HAL_MEMCARD_RESPONSE_R3 | 129b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BCR | 130b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 131b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 132b28c29d0SBiju Das /* CMD2 */ 133b28c29d0SBiju Das CMD2_ALL_SEND_CID_MMC = 134b28c29d0SBiju Das 2U | (uint32_t)HAL_MEMCARD_RESPONSE_R2 | 135b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BCR | 136b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 137b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 138b28c29d0SBiju Das CMD2_ALL_SEND_CID_SD = 139b28c29d0SBiju Das 2U | (uint32_t)HAL_MEMCARD_RESPONSE_R2 | 140b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BCR | 141b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD | 142b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 143b28c29d0SBiju Das /* CMD3 */ 144b28c29d0SBiju Das CMD3_SET_RELATIVE_ADDR = 145b28c29d0SBiju Das 3U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 146b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 147b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 148b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 149b28c29d0SBiju Das CMD3_SEND_RELATIVE_ADDR = 150b28c29d0SBiju Das 3U | (uint32_t)HAL_MEMCARD_RESPONSE_R6 | 151b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 152b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD | 153b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 154b28c29d0SBiju Das /* CMD4 */ 155b28c29d0SBiju Das CMD4_SET_DSR = 156b28c29d0SBiju Das 4U | (uint32_t)HAL_MEMCARD_RESPONSE_NONE | 157b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BC | 158b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 159b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 160b28c29d0SBiju Das /* CMD5 */ 161b28c29d0SBiju Das CMD5_SLEEP_AWAKE = 162b28c29d0SBiju Das 5U | (uint32_t)HAL_MEMCARD_RESPONSE_R1b | 163b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 164b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 165b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 166b28c29d0SBiju Das /* CMD6 */ 167b28c29d0SBiju Das CMD6_SWITCH = 168b28c29d0SBiju Das 6U | (uint32_t)HAL_MEMCARD_RESPONSE_R1b | 169b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 170b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 171b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 172b28c29d0SBiju Das CMD6_SWITCH_FUNC = 173b28c29d0SBiju Das 6U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 174b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 175b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD | 176b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 177b28c29d0SBiju Das ACMD6_SET_BUS_WIDTH = 178b28c29d0SBiju Das 6U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 179b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 180b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD | 181b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_APP, 182b28c29d0SBiju Das /* CMD7 */ 183b28c29d0SBiju Das CMD7_SELECT_CARD = 184b28c29d0SBiju Das 7U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 185b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 186b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 187b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 188b28c29d0SBiju Das /* CMD7(from Disconnected State to Programming State) */ 189b28c29d0SBiju Das CMD7_SELECT_CARD_PROG = 190b28c29d0SBiju Das 7U | (uint32_t)HAL_MEMCARD_RESPONSE_R1b | 191b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 192b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 193b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 194b28c29d0SBiju Das CMD7_DESELECT_CARD = 195b28c29d0SBiju Das 7U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 196b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 197b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 198b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 199b28c29d0SBiju Das /* CMD8 */ 200b28c29d0SBiju Das CMD8_SEND_EXT_CSD = 201b28c29d0SBiju Das 8U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 202b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ | 203b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 204b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 205b28c29d0SBiju Das CMD8_SEND_IF_COND = 206b28c29d0SBiju Das 8U | (uint32_t)HAL_MEMCARD_RESPONSE_R7 | 207b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BCR | 208b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD | 209b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 210b28c29d0SBiju Das /* CMD9 */ 211b28c29d0SBiju Das CMD9_SEND_CSD = 212b28c29d0SBiju Das 9U | (uint32_t)HAL_MEMCARD_RESPONSE_R2 | 213b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 214b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 215b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 216b28c29d0SBiju Das /* CMD10 */ 217b28c29d0SBiju Das CMD10_SEND_CID = 218b28c29d0SBiju Das 10U | (uint32_t)HAL_MEMCARD_RESPONSE_R2 | 219b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 220b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 221b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 222b28c29d0SBiju Das /* CMD11 */ 223b28c29d0SBiju Das CMD11_READ_DAT_UNTIL_STOP = 224b28c29d0SBiju Das 11U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 225b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ | 226b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD | 227b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 228b28c29d0SBiju Das /* CMD12 */ 229b28c29d0SBiju Das CMD12_STOP_TRANSMISSION = 230b28c29d0SBiju Das 12U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 231b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 232b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 233b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 234b28c29d0SBiju Das /* CMD12(R1b : write case) */ 235b28c29d0SBiju Das CMD12_STOP_TRANSMISSION_WRITE = 236b28c29d0SBiju Das 12U | (uint32_t)HAL_MEMCARD_RESPONSE_R1b | 237b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 238b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 239b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 240b28c29d0SBiju Das /* CMD13 */ 241b28c29d0SBiju Das CMD13_SEND_STATUS = 242b28c29d0SBiju Das 13U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 243b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 244b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 245b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 246b28c29d0SBiju Das ACMD13_SD_STATUS = 247b28c29d0SBiju Das 13U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 248b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ | 249b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD | 250b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_APP, 251b28c29d0SBiju Das /* CMD14 */ 252b28c29d0SBiju Das CMD14_BUSTEST_R = 253b28c29d0SBiju Das 14U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 254b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ | 255b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 256b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 257b28c29d0SBiju Das /* CMD15 */ 258b28c29d0SBiju Das CMD15_GO_INACTIVE_STATE = 259b28c29d0SBiju Das 15U | (uint32_t)HAL_MEMCARD_RESPONSE_NONE | 260b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 261b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 262b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 263b28c29d0SBiju Das 264b28c29d0SBiju Das /* class 2 */ 265b28c29d0SBiju Das /* CMD16 */ 266b28c29d0SBiju Das CMD16_SET_BLOCKLEN = 267b28c29d0SBiju Das 16U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 268b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 269b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 270b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 271b28c29d0SBiju Das /* CMD17 */ 272b28c29d0SBiju Das CMD17_READ_SINGLE_BLOCK = 273b28c29d0SBiju Das 17U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 274b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ | 275b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 276b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 277b28c29d0SBiju Das /* CMD18 */ 278b28c29d0SBiju Das CMD18_READ_MULTIPLE_BLOCK = 279b28c29d0SBiju Das 18U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 280b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ | 281b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 282b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 283b28c29d0SBiju Das /* CMD19 */ 284b28c29d0SBiju Das CMD19_BUS_TEST_W = 285b28c29d0SBiju Das 19U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 286b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE | 287b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 288b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 289b28c29d0SBiju Das 290b28c29d0SBiju Das /* class 3 */ 291b28c29d0SBiju Das /* CMD20 */ 292b28c29d0SBiju Das CMD20_WRITE_DAT_UNTIL_STOP = 293b28c29d0SBiju Das 20U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 294b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE | 295b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 296b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 297b28c29d0SBiju Das /* CMD21 */ 298b28c29d0SBiju Das CMD21 = 21U, 299b28c29d0SBiju Das /* CMD22 */ 300b28c29d0SBiju Das CMD22 = 22U, 301b28c29d0SBiju Das ACMD22_SEND_NUM_WR_BLOCKS = 302b28c29d0SBiju Das 22U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 303b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 304b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD | 305b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_APP, 306b28c29d0SBiju Das 307b28c29d0SBiju Das /* class 4 */ 308b28c29d0SBiju Das /* CMD23 */ 309b28c29d0SBiju Das CMD23_SET_BLOCK_COUNT = 310b28c29d0SBiju Das 23U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 311b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 312b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 313b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 314b28c29d0SBiju Das ACMD23_SET_WR_BLK_ERASE_COUNT = 315b28c29d0SBiju Das 23U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 316b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 317b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD | 318b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_APP, 319b28c29d0SBiju Das /* CMD24 */ 320b28c29d0SBiju Das CMD24_WRITE_BLOCK = 321b28c29d0SBiju Das 24U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 322b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE | 323b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 324b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 325b28c29d0SBiju Das /* CMD25 */ 326b28c29d0SBiju Das CMD25_WRITE_MULTIPLE_BLOCK = 327b28c29d0SBiju Das 25U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 328b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE | 329b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 330b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 331b28c29d0SBiju Das /* CMD26 */ 332b28c29d0SBiju Das CMD26_PROGRAM_CID = 333b28c29d0SBiju Das 26U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 334b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE | 335b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 336b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 337b28c29d0SBiju Das /* CMD27 */ 338b28c29d0SBiju Das CMD27_PROGRAM_CSD = 339b28c29d0SBiju Das 27U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 340b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE | 341b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 342b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 343b28c29d0SBiju Das 344b28c29d0SBiju Das /* class 6 */ 345b28c29d0SBiju Das /* CMD28 */ 346b28c29d0SBiju Das CMD28_SET_WRITE_PROT = 347b28c29d0SBiju Das 28U | (uint32_t)HAL_MEMCARD_RESPONSE_R1b | 348b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 349b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 350b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 351b28c29d0SBiju Das /* CMD29 */ 352b28c29d0SBiju Das CMD29_CLR_WRITE_PROT = 353b28c29d0SBiju Das 29U | (uint32_t)HAL_MEMCARD_RESPONSE_R1b | 354b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 355b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 356b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 357b28c29d0SBiju Das /* CMD30 */ 358b28c29d0SBiju Das CMD30_SEND_WRITE_PROT = 359b28c29d0SBiju Das 30U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 360b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ | 361b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 362b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 363b28c29d0SBiju Das /* CMD31 */ 364b28c29d0SBiju Das CMD30_SEND_WRITE_PROT_TYPE = 365b28c29d0SBiju Das 31U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 366b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ | 367b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 368b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 369b28c29d0SBiju Das 370b28c29d0SBiju Das /* class 5 */ 371b28c29d0SBiju Das /* CMD32 */ 372b28c29d0SBiju Das CMD32_ERASE_WR_BLK_START = 373b28c29d0SBiju Das 32U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 374b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 375b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD | 376b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 377b28c29d0SBiju Das /* CMD33 */ 378b28c29d0SBiju Das CMD33_ERASE_WR_BLK_END = 379b28c29d0SBiju Das 33U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 380b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 381b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD | 382b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 383b28c29d0SBiju Das /* CMD34 */ 384b28c29d0SBiju Das CMD34 = 34U, 385b28c29d0SBiju Das /* CMD35 */ 386b28c29d0SBiju Das CMD35_ERASE_GROUP_START = 387b28c29d0SBiju Das 35U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 388b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 389b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 390b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 391b28c29d0SBiju Das /* CMD36 */ 392b28c29d0SBiju Das CMD36_ERASE_GROUP_END = 393b28c29d0SBiju Das 36U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 394b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 395b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 396b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 397b28c29d0SBiju Das /* CMD37 */ 398b28c29d0SBiju Das CMD37 = 37U, 399b28c29d0SBiju Das /* CMD38 */ 400b28c29d0SBiju Das CMD38_ERASE = 401b28c29d0SBiju Das 38U | (uint32_t)HAL_MEMCARD_RESPONSE_R1b | 402b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 403b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 404b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 405b28c29d0SBiju Das 406b28c29d0SBiju Das /* class 9 */ 407b28c29d0SBiju Das /* CMD39 */ 408b28c29d0SBiju Das CMD39_FASTIO = 409b28c29d0SBiju Das 39U | (uint32_t)HAL_MEMCARD_RESPONSE_R4 | 410b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 411b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 412b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 413b28c29d0SBiju Das /* CMD40 */ 414b28c29d0SBiju Das CMD40_GO_IRQSTATE = 415b28c29d0SBiju Das 40U | (uint32_t)HAL_MEMCARD_RESPONSE_R5 | 416b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BCR | 417b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC | 418b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 419b28c29d0SBiju Das /* CMD41 */ 420b28c29d0SBiju Das CMD41 = 41, 421b28c29d0SBiju Das ACMD41_SD_SEND_OP_COND = 422b28c29d0SBiju Das 41U | (uint32_t)HAL_MEMCARD_RESPONSE_R3 | 423b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BCR | 424b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD | 425b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_APP, 426b28c29d0SBiju Das 427b28c29d0SBiju Das /* class 7 */ 428b28c29d0SBiju Das /* CMD42 */ 429b28c29d0SBiju Das CMD42_LOCK_UNLOCK = 430b28c29d0SBiju Das 42U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 431b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE | 432b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 433b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 434b28c29d0SBiju Das ACMD42_SET_CLR_CARD_DETECT = 435b28c29d0SBiju Das 42U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 436b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 437b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD | 438b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_APP, 439b28c29d0SBiju Das CMD43 = 43U, /* CMD43 */ 440b28c29d0SBiju Das CMD44 = 44U, /* CMD44 */ 441b28c29d0SBiju Das CMD45 = 45U, /* CMD45 */ 442b28c29d0SBiju Das CMD46 = 46U, /* CMD46 */ 443b28c29d0SBiju Das CMD47 = 47U, /* CMD47 */ 444b28c29d0SBiju Das CMD48 = 48U, /* CMD48 */ 445b28c29d0SBiju Das CMD49 = 49U, /* CMD49 */ 446b28c29d0SBiju Das CMD50 = 50U, /* CMD50 */ 447b28c29d0SBiju Das CMD51 = 51U, /* CMD51 */ 448b28c29d0SBiju Das ACMD51_SEND_SCR = 449b28c29d0SBiju Das 51U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 450b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ | 451b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD | 452b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_APP, 453b28c29d0SBiju Das CMD52 = 52U, /* CMD52 */ 454b28c29d0SBiju Das CMD53 = 53U, /* CMD53 */ 455b28c29d0SBiju Das CMD54 = 54U, /* CMD54 */ 456b28c29d0SBiju Das 457b28c29d0SBiju Das /* class 8 */ 458b28c29d0SBiju Das /* CMD55 */ 459b28c29d0SBiju Das CMD55_APP_CMD = 460b28c29d0SBiju Das 55U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 461b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC | 462b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 463b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 464b28c29d0SBiju Das /* CMD56 */ 465b28c29d0SBiju Das CMD56_GEN_CMD = 466b28c29d0SBiju Das 56U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 | 467b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE | 468b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON | 469b28c29d0SBiju Das (uint32_t)HAL_MEMCARD_COMMAND_NORMAL, 470b28c29d0SBiju Das CMD57 = 57U, /* CMD57 */ 471b28c29d0SBiju Das CMD58 = 58U, /* CMD58 */ 472b28c29d0SBiju Das CMD59 = 59U, /* CMD59 */ 473b28c29d0SBiju Das CMD60 = 60U, /* CMD60 */ 474b28c29d0SBiju Das CMD61 = 61U, /* CMD61 */ 475b28c29d0SBiju Das CMD62 = 62U, /* CMD62 */ 476b28c29d0SBiju Das CMD63 = 63U /* CMD63 */ 477b28c29d0SBiju Das } HAL_MEMCARD_COMMAND; 478b28c29d0SBiju Das 479b28c29d0SBiju Das /* 480b28c29d0SBiju Das * Configuration structure from HAL layer. 481b28c29d0SBiju Das * 482b28c29d0SBiju Das * If some field is not available it should be filled with 0xFF. 483b28c29d0SBiju Das * The API version is 32-bit unsigned integer telling the version of the API. 484b28c29d0SBiju Das * The integer is divided to four sections which each can be treated as a 8-bit 485b28c29d0SBiju Das * unsigned number: 486b28c29d0SBiju Das * Bits 31-24 make the most significant part of the version number. This number 487b28c29d0SBiju Das * starts from 1 i.e. the second version of the API will be 0x02xxxxxx. This 488b28c29d0SBiju Das * number changes only, if the API itself changes so much that it is not 489b28c29d0SBiju Das * compatible anymore with older releases. 490b28c29d0SBiju Das * Bits 23-16 API minor version number. For example API version 2.1 would be 491b28c29d0SBiju Das * 0x0201xxxx. 492b28c29d0SBiju Das * Bits 15-8 are the number of the year when release is done. The 0 is year 493b28c29d0SBiju Das * 2000, 1 is year 2001 and so on 494b28c29d0SBiju Das * Bits 7- are the week number when release is done. First full week of the 495b28c29d0SBiju Das * year is 1 496b28c29d0SBiju Das * 497b28c29d0SBiju Das * Example: let's assume that release 2.1 is done on week 10 year 2008 498b28c29d0SBiju Das * the version will get the value 0x0201080A 499b28c29d0SBiju Das */ 500b28c29d0SBiju Das typedef struct { 501b28c29d0SBiju Das /* 502b28c29d0SBiju Das * Version of the chipset API implementation 503b28c29d0SBiju Das * 504b28c29d0SBiju Das * bits [31:24] API specification major version number.<br> 505b28c29d0SBiju Das * bits [23:16] API specification minor version number.<br> 506b28c29d0SBiju Das * bits [15:8] API implementation year. (2000 = 0, 2001 = 1, ...) 507b28c29d0SBiju Das * bits [7:0] API implementation week. 508b28c29d0SBiju Das * Example: API spec version 4.0, implementation w46 2008 => 0x0400082E 509b28c29d0SBiju Das */ 510b28c29d0SBiju Das uint32_t api_version; 511b28c29d0SBiju Das 512b28c29d0SBiju Das /* maximum block count which can be transferred at once */ 513b28c29d0SBiju Das uint32_t max_block_count; 514b28c29d0SBiju Das 515*1b491eeaSElyes Haouas /* maximum clock frequency in Hz supported by HW */ 516b28c29d0SBiju Das uint32_t max_clock_freq; 517b28c29d0SBiju Das 518b28c29d0SBiju Das /* maximum data bus width supported by HW */ 519b28c29d0SBiju Das uint16_t max_data_width; 520b28c29d0SBiju Das 521b28c29d0SBiju Das /* Is high-speed mode supported by HW (yes=1, no=0) */ 522b28c29d0SBiju Das uint8_t hs_mode_supported; 523b28c29d0SBiju Das 524b28c29d0SBiju Das /* Is memory card removable (yes=1, no=0) */ 525b28c29d0SBiju Das uint8_t card_removable; 526b28c29d0SBiju Das 527b28c29d0SBiju Das } HAL_MEMCARD_HW_CONF; 528b28c29d0SBiju Das 529b28c29d0SBiju Das /* Configuration structure to HAL layer. */ 530b28c29d0SBiju Das typedef struct { 531b28c29d0SBiju Das /* how many times to try after fail, for instance sending command */ 532b28c29d0SBiju Das uint32_t retries_after_fail; 533b28c29d0SBiju Das } HAL_MEMCARD_INIT_CONF; 534b28c29d0SBiju Das 535b28c29d0SBiju Das #endif /* EMMC_HAL_H */ 536