0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #ifndef LINUX_MMC_MMC_H
0025 #define LINUX_MMC_MMC_H
0026
0027 #include <linux/types.h>
0028
0029
0030
0031 #define MMC_GO_IDLE_STATE 0
0032 #define MMC_SEND_OP_COND 1
0033 #define MMC_ALL_SEND_CID 2
0034 #define MMC_SET_RELATIVE_ADDR 3
0035 #define MMC_SET_DSR 4
0036 #define MMC_SLEEP_AWAKE 5
0037 #define MMC_SWITCH 6
0038 #define MMC_SELECT_CARD 7
0039 #define MMC_SEND_EXT_CSD 8
0040 #define MMC_SEND_CSD 9
0041 #define MMC_SEND_CID 10
0042 #define MMC_READ_DAT_UNTIL_STOP 11
0043 #define MMC_STOP_TRANSMISSION 12
0044 #define MMC_SEND_STATUS 13
0045 #define MMC_BUS_TEST_R 14
0046 #define MMC_GO_INACTIVE_STATE 15
0047 #define MMC_BUS_TEST_W 19
0048 #define MMC_SPI_READ_OCR 58
0049 #define MMC_SPI_CRC_ON_OFF 59
0050
0051
0052 #define MMC_SET_BLOCKLEN 16
0053 #define MMC_READ_SINGLE_BLOCK 17
0054 #define MMC_READ_MULTIPLE_BLOCK 18
0055 #define MMC_SEND_TUNING_BLOCK 19
0056 #define MMC_SEND_TUNING_BLOCK_HS200 21
0057
0058
0059 #define MMC_WRITE_DAT_UNTIL_STOP 20
0060
0061
0062 #define MMC_SET_BLOCK_COUNT 23
0063 #define MMC_WRITE_BLOCK 24
0064 #define MMC_WRITE_MULTIPLE_BLOCK 25
0065 #define MMC_PROGRAM_CID 26
0066 #define MMC_PROGRAM_CSD 27
0067
0068
0069 #define MMC_SET_WRITE_PROT 28
0070 #define MMC_CLR_WRITE_PROT 29
0071 #define MMC_SEND_WRITE_PROT 30
0072
0073
0074 #define MMC_ERASE_GROUP_START 35
0075 #define MMC_ERASE_GROUP_END 36
0076 #define MMC_ERASE 38
0077
0078
0079 #define MMC_FAST_IO 39
0080 #define MMC_GO_IRQ_STATE 40
0081
0082
0083 #define MMC_LOCK_UNLOCK 42
0084
0085
0086 #define MMC_APP_CMD 55
0087 #define MMC_GEN_CMD 56
0088
0089
0090 #define MMC_QUE_TASK_PARAMS 44
0091 #define MMC_QUE_TASK_ADDR 45
0092 #define MMC_EXECUTE_READ_TASK 46
0093 #define MMC_EXECUTE_WRITE_TASK 47
0094 #define MMC_CMDQ_TASK_MGMT 48
0095
0096 static inline bool mmc_op_multi(u32 opcode)
0097 {
0098 return opcode == MMC_WRITE_MULTIPLE_BLOCK ||
0099 opcode == MMC_READ_MULTIPLE_BLOCK;
0100 }
0101
0102 static inline bool mmc_op_tuning(u32 opcode)
0103 {
0104 return opcode == MMC_SEND_TUNING_BLOCK ||
0105 opcode == MMC_SEND_TUNING_BLOCK_HS200;
0106 }
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134 #define R1_OUT_OF_RANGE (1 << 31)
0135 #define R1_ADDRESS_ERROR (1 << 30)
0136 #define R1_BLOCK_LEN_ERROR (1 << 29)
0137 #define R1_ERASE_SEQ_ERROR (1 << 28)
0138 #define R1_ERASE_PARAM (1 << 27)
0139 #define R1_WP_VIOLATION (1 << 26)
0140 #define R1_CARD_IS_LOCKED (1 << 25)
0141 #define R1_LOCK_UNLOCK_FAILED (1 << 24)
0142 #define R1_COM_CRC_ERROR (1 << 23)
0143 #define R1_ILLEGAL_COMMAND (1 << 22)
0144 #define R1_CARD_ECC_FAILED (1 << 21)
0145 #define R1_CC_ERROR (1 << 20)
0146 #define R1_ERROR (1 << 19)
0147 #define R1_UNDERRUN (1 << 18)
0148 #define R1_OVERRUN (1 << 17)
0149 #define R1_CID_CSD_OVERWRITE (1 << 16)
0150 #define R1_WP_ERASE_SKIP (1 << 15)
0151 #define R1_CARD_ECC_DISABLED (1 << 14)
0152 #define R1_ERASE_RESET (1 << 13)
0153 #define R1_STATUS(x) (x & 0xFFF9A000)
0154 #define R1_CURRENT_STATE(x) ((x & 0x00001E00) >> 9)
0155 #define R1_READY_FOR_DATA (1 << 8)
0156 #define R1_SWITCH_ERROR (1 << 7)
0157 #define R1_EXCEPTION_EVENT (1 << 6)
0158 #define R1_APP_CMD (1 << 5)
0159
0160 #define R1_STATE_IDLE 0
0161 #define R1_STATE_READY 1
0162 #define R1_STATE_IDENT 2
0163 #define R1_STATE_STBY 3
0164 #define R1_STATE_TRAN 4
0165 #define R1_STATE_DATA 5
0166 #define R1_STATE_RCV 6
0167 #define R1_STATE_PRG 7
0168 #define R1_STATE_DIS 8
0169
0170 static inline bool mmc_ready_for_data(u32 status)
0171 {
0172
0173
0174
0175
0176 return status & R1_READY_FOR_DATA &&
0177 R1_CURRENT_STATE(status) == R1_STATE_TRAN;
0178 }
0179
0180
0181
0182
0183
0184 #define R1_SPI_IDLE (1 << 0)
0185 #define R1_SPI_ERASE_RESET (1 << 1)
0186 #define R1_SPI_ILLEGAL_COMMAND (1 << 2)
0187 #define R1_SPI_COM_CRC (1 << 3)
0188 #define R1_SPI_ERASE_SEQ (1 << 4)
0189 #define R1_SPI_ADDRESS (1 << 5)
0190 #define R1_SPI_PARAMETER (1 << 6)
0191
0192 #define R2_SPI_CARD_LOCKED (1 << 8)
0193 #define R2_SPI_WP_ERASE_SKIP (1 << 9)
0194 #define R2_SPI_LOCK_UNLOCK_FAIL R2_SPI_WP_ERASE_SKIP
0195 #define R2_SPI_ERROR (1 << 10)
0196 #define R2_SPI_CC_ERROR (1 << 11)
0197 #define R2_SPI_CARD_ECC_ERROR (1 << 12)
0198 #define R2_SPI_WP_VIOLATION (1 << 13)
0199 #define R2_SPI_ERASE_PARAM (1 << 14)
0200 #define R2_SPI_OUT_OF_RANGE (1 << 15)
0201 #define R2_SPI_CSD_OVERWRITE R2_SPI_OUT_OF_RANGE
0202
0203
0204
0205
0206 #define MMC_CARD_BUSY 0x80000000
0207
0208
0209
0210
0211 #define CCC_BASIC (1<<0)
0212
0213
0214 #define CCC_STREAM_READ (1<<1)
0215
0216 #define CCC_BLOCK_READ (1<<2)
0217
0218 #define CCC_STREAM_WRITE (1<<3)
0219
0220 #define CCC_BLOCK_WRITE (1<<4)
0221
0222 #define CCC_ERASE (1<<5)
0223
0224 #define CCC_WRITE_PROT (1<<6)
0225
0226 #define CCC_LOCK_CARD (1<<7)
0227
0228 #define CCC_APP_SPEC (1<<8)
0229
0230 #define CCC_IO_MODE (1<<9)
0231
0232 #define CCC_SWITCH (1<<10)
0233
0234
0235
0236
0237
0238
0239
0240
0241 #define CSD_STRUCT_VER_1_0 0
0242 #define CSD_STRUCT_VER_1_1 1
0243 #define CSD_STRUCT_VER_1_2 2
0244 #define CSD_STRUCT_EXT_CSD 3
0245
0246 #define CSD_SPEC_VER_0 0
0247 #define CSD_SPEC_VER_1 1
0248 #define CSD_SPEC_VER_2 2
0249 #define CSD_SPEC_VER_3 3
0250 #define CSD_SPEC_VER_4 4
0251
0252
0253
0254
0255
0256 #define EXT_CSD_CMDQ_MODE_EN 15
0257 #define EXT_CSD_FLUSH_CACHE 32
0258 #define EXT_CSD_CACHE_CTRL 33
0259 #define EXT_CSD_POWER_OFF_NOTIFICATION 34
0260 #define EXT_CSD_PACKED_FAILURE_INDEX 35
0261 #define EXT_CSD_PACKED_CMD_STATUS 36
0262 #define EXT_CSD_EXP_EVENTS_STATUS 54
0263 #define EXT_CSD_EXP_EVENTS_CTRL 56
0264 #define EXT_CSD_DATA_SECTOR_SIZE 61
0265 #define EXT_CSD_GP_SIZE_MULT 143
0266 #define EXT_CSD_PARTITION_SETTING_COMPLETED 155
0267 #define EXT_CSD_PARTITION_ATTRIBUTE 156
0268 #define EXT_CSD_PARTITION_SUPPORT 160
0269 #define EXT_CSD_HPI_MGMT 161
0270 #define EXT_CSD_RST_N_FUNCTION 162
0271 #define EXT_CSD_BKOPS_EN 163
0272 #define EXT_CSD_BKOPS_START 164
0273 #define EXT_CSD_SANITIZE_START 165
0274 #define EXT_CSD_WR_REL_PARAM 166
0275 #define EXT_CSD_RPMB_MULT 168
0276 #define EXT_CSD_FW_CONFIG 169
0277 #define EXT_CSD_BOOT_WP 173
0278 #define EXT_CSD_ERASE_GROUP_DEF 175
0279 #define EXT_CSD_PART_CONFIG 179
0280 #define EXT_CSD_ERASED_MEM_CONT 181
0281 #define EXT_CSD_BUS_WIDTH 183
0282 #define EXT_CSD_STROBE_SUPPORT 184
0283 #define EXT_CSD_HS_TIMING 185
0284 #define EXT_CSD_POWER_CLASS 187
0285 #define EXT_CSD_REV 192
0286 #define EXT_CSD_STRUCTURE 194
0287 #define EXT_CSD_CARD_TYPE 196
0288 #define EXT_CSD_DRIVER_STRENGTH 197
0289 #define EXT_CSD_OUT_OF_INTERRUPT_TIME 198
0290 #define EXT_CSD_PART_SWITCH_TIME 199
0291 #define EXT_CSD_PWR_CL_52_195 200
0292 #define EXT_CSD_PWR_CL_26_195 201
0293 #define EXT_CSD_PWR_CL_52_360 202
0294 #define EXT_CSD_PWR_CL_26_360 203
0295 #define EXT_CSD_SEC_CNT 212
0296 #define EXT_CSD_S_A_TIMEOUT 217
0297 #define EXT_CSD_REL_WR_SEC_C 222
0298 #define EXT_CSD_HC_WP_GRP_SIZE 221
0299 #define EXT_CSD_ERASE_TIMEOUT_MULT 223
0300 #define EXT_CSD_HC_ERASE_GRP_SIZE 224
0301 #define EXT_CSD_BOOT_MULT 226
0302 #define EXT_CSD_SEC_TRIM_MULT 229
0303 #define EXT_CSD_SEC_ERASE_MULT 230
0304 #define EXT_CSD_SEC_FEATURE_SUPPORT 231
0305 #define EXT_CSD_TRIM_MULT 232
0306 #define EXT_CSD_PWR_CL_200_195 236
0307 #define EXT_CSD_PWR_CL_200_360 237
0308 #define EXT_CSD_PWR_CL_DDR_52_195 238
0309 #define EXT_CSD_PWR_CL_DDR_52_360 239
0310 #define EXT_CSD_BKOPS_STATUS 246
0311 #define EXT_CSD_POWER_OFF_LONG_TIME 247
0312 #define EXT_CSD_GENERIC_CMD6_TIME 248
0313 #define EXT_CSD_CACHE_SIZE 249
0314 #define EXT_CSD_PWR_CL_DDR_200_360 253
0315 #define EXT_CSD_FIRMWARE_VERSION 254
0316 #define EXT_CSD_PRE_EOL_INFO 267
0317 #define EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A 268
0318 #define EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B 269
0319 #define EXT_CSD_CMDQ_DEPTH 307
0320 #define EXT_CSD_CMDQ_SUPPORT 308
0321 #define EXT_CSD_SUPPORTED_MODE 493
0322 #define EXT_CSD_TAG_UNIT_SIZE 498
0323 #define EXT_CSD_DATA_TAG_SUPPORT 499
0324 #define EXT_CSD_MAX_PACKED_WRITES 500
0325 #define EXT_CSD_MAX_PACKED_READS 501
0326 #define EXT_CSD_BKOPS_SUPPORT 502
0327 #define EXT_CSD_HPI_FEATURES 503
0328
0329
0330
0331
0332
0333 #define EXT_CSD_WR_REL_PARAM_EN (1<<2)
0334 #define EXT_CSD_WR_REL_PARAM_EN_RPMB_REL_WR (1<<4)
0335
0336 #define EXT_CSD_BOOT_WP_B_PWR_WP_DIS (0x40)
0337 #define EXT_CSD_BOOT_WP_B_PERM_WP_DIS (0x10)
0338 #define EXT_CSD_BOOT_WP_B_PERM_WP_EN (0x04)
0339 #define EXT_CSD_BOOT_WP_B_PWR_WP_EN (0x01)
0340
0341 #define EXT_CSD_PART_CONFIG_ACC_MASK (0x7)
0342 #define EXT_CSD_PART_CONFIG_ACC_BOOT0 (0x1)
0343 #define EXT_CSD_PART_CONFIG_ACC_RPMB (0x3)
0344 #define EXT_CSD_PART_CONFIG_ACC_GP0 (0x4)
0345
0346 #define EXT_CSD_PART_SETTING_COMPLETED (0x1)
0347 #define EXT_CSD_PART_SUPPORT_PART_EN (0x1)
0348
0349 #define EXT_CSD_CMD_SET_NORMAL (1<<0)
0350 #define EXT_CSD_CMD_SET_SECURE (1<<1)
0351 #define EXT_CSD_CMD_SET_CPSECURE (1<<2)
0352
0353 #define EXT_CSD_CARD_TYPE_HS_26 (1<<0)
0354 #define EXT_CSD_CARD_TYPE_HS_52 (1<<1)
0355 #define EXT_CSD_CARD_TYPE_HS (EXT_CSD_CARD_TYPE_HS_26 | \
0356 EXT_CSD_CARD_TYPE_HS_52)
0357 #define EXT_CSD_CARD_TYPE_DDR_1_8V (1<<2)
0358
0359 #define EXT_CSD_CARD_TYPE_DDR_1_2V (1<<3)
0360
0361 #define EXT_CSD_CARD_TYPE_DDR_52 (EXT_CSD_CARD_TYPE_DDR_1_8V \
0362 | EXT_CSD_CARD_TYPE_DDR_1_2V)
0363 #define EXT_CSD_CARD_TYPE_HS200_1_8V (1<<4)
0364 #define EXT_CSD_CARD_TYPE_HS200_1_2V (1<<5)
0365
0366 #define EXT_CSD_CARD_TYPE_HS200 (EXT_CSD_CARD_TYPE_HS200_1_8V | \
0367 EXT_CSD_CARD_TYPE_HS200_1_2V)
0368 #define EXT_CSD_CARD_TYPE_HS400_1_8V (1<<6)
0369 #define EXT_CSD_CARD_TYPE_HS400_1_2V (1<<7)
0370 #define EXT_CSD_CARD_TYPE_HS400 (EXT_CSD_CARD_TYPE_HS400_1_8V | \
0371 EXT_CSD_CARD_TYPE_HS400_1_2V)
0372 #define EXT_CSD_CARD_TYPE_HS400ES (1<<8)
0373
0374 #define EXT_CSD_BUS_WIDTH_1 0
0375 #define EXT_CSD_BUS_WIDTH_4 1
0376 #define EXT_CSD_BUS_WIDTH_8 2
0377 #define EXT_CSD_DDR_BUS_WIDTH_4 5
0378 #define EXT_CSD_DDR_BUS_WIDTH_8 6
0379 #define EXT_CSD_BUS_WIDTH_STROBE BIT(7)
0380
0381 #define EXT_CSD_TIMING_BC 0
0382 #define EXT_CSD_TIMING_HS 1
0383 #define EXT_CSD_TIMING_HS200 2
0384 #define EXT_CSD_TIMING_HS400 3
0385 #define EXT_CSD_DRV_STR_SHIFT 4
0386
0387 #define EXT_CSD_SEC_ER_EN BIT(0)
0388 #define EXT_CSD_SEC_BD_BLK_EN BIT(2)
0389 #define EXT_CSD_SEC_GB_CL_EN BIT(4)
0390 #define EXT_CSD_SEC_SANITIZE BIT(6)
0391
0392 #define EXT_CSD_RST_N_EN_MASK 0x3
0393 #define EXT_CSD_RST_N_ENABLED 1
0394
0395 #define EXT_CSD_NO_POWER_NOTIFICATION 0
0396 #define EXT_CSD_POWER_ON 1
0397 #define EXT_CSD_POWER_OFF_SHORT 2
0398 #define EXT_CSD_POWER_OFF_LONG 3
0399
0400 #define EXT_CSD_PWR_CL_8BIT_MASK 0xF0
0401 #define EXT_CSD_PWR_CL_4BIT_MASK 0x0F
0402 #define EXT_CSD_PWR_CL_8BIT_SHIFT 4
0403 #define EXT_CSD_PWR_CL_4BIT_SHIFT 0
0404
0405 #define EXT_CSD_PACKED_EVENT_EN BIT(3)
0406
0407
0408
0409
0410 #define EXT_CSD_URGENT_BKOPS BIT(0)
0411 #define EXT_CSD_DYNCAP_NEEDED BIT(1)
0412 #define EXT_CSD_SYSPOOL_EXHAUSTED BIT(2)
0413 #define EXT_CSD_PACKED_FAILURE BIT(3)
0414
0415 #define EXT_CSD_PACKED_GENERIC_ERROR BIT(0)
0416 #define EXT_CSD_PACKED_INDEXED_ERROR BIT(1)
0417
0418
0419
0420
0421 #define EXT_CSD_BKOPS_LEVEL_2 0x2
0422
0423
0424
0425
0426 #define EXT_CSD_MANUAL_BKOPS_MASK 0x01
0427 #define EXT_CSD_AUTO_BKOPS_MASK 0x02
0428
0429
0430
0431
0432 #define EXT_CSD_CMDQ_MODE_ENABLED BIT(0)
0433 #define EXT_CSD_CMDQ_DEPTH_MASK GENMASK(4, 0)
0434 #define EXT_CSD_CMDQ_SUPPORTED BIT(0)
0435
0436
0437
0438
0439 #define MMC_SWITCH_MODE_CMD_SET 0x00
0440 #define MMC_SWITCH_MODE_SET_BITS 0x01
0441 #define MMC_SWITCH_MODE_CLEAR_BITS 0x02
0442 #define MMC_SWITCH_MODE_WRITE_BYTE 0x03
0443
0444
0445
0446
0447 #define MMC_ERASE_ARG 0x00000000
0448 #define MMC_SECURE_ERASE_ARG 0x80000000
0449 #define MMC_TRIM_ARG 0x00000001
0450 #define MMC_DISCARD_ARG 0x00000003
0451 #define MMC_SECURE_TRIM1_ARG 0x80000001
0452 #define MMC_SECURE_TRIM2_ARG 0x80008000
0453 #define MMC_SECURE_ARGS 0x80000000
0454 #define MMC_TRIM_ARGS 0x00008001
0455
0456 #define mmc_driver_type_mask(n) (1 << (n))
0457
0458 #endif