Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mmc: mmc: Add Command Queue definitions

Add definitions relating to Command Queuing.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>

authored by

Adrian Hunter and committed by
Ulf Hansson
925ff3a7 c5bda0ca

+37
+18
drivers/mmc/core/mmc.c
··· 618 618 (ext_csd[EXT_CSD_SUPPORTED_MODE] & 0x1) && 619 619 !(ext_csd[EXT_CSD_FW_CONFIG] & 0x1); 620 620 } 621 + 622 + /* eMMC v5.1 or later */ 623 + if (card->ext_csd.rev >= 8) { 624 + card->ext_csd.cmdq_support = ext_csd[EXT_CSD_CMDQ_SUPPORT] & 625 + EXT_CSD_CMDQ_SUPPORTED; 626 + card->ext_csd.cmdq_depth = (ext_csd[EXT_CSD_CMDQ_DEPTH] & 627 + EXT_CSD_CMDQ_DEPTH_MASK) + 1; 628 + /* Exclude inefficiently small queue depths */ 629 + if (card->ext_csd.cmdq_depth <= 2) { 630 + card->ext_csd.cmdq_support = false; 631 + card->ext_csd.cmdq_depth = 0; 632 + } 633 + if (card->ext_csd.cmdq_support) { 634 + pr_debug("%s: Command Queue supported depth %u\n", 635 + mmc_hostname(card->host), 636 + card->ext_csd.cmdq_depth); 637 + } 638 + } 621 639 out: 622 640 return err; 623 641 }
+2
include/linux/mmc/card.h
··· 89 89 unsigned int boot_ro_lock; /* ro lock support */ 90 90 bool boot_ro_lockable; 91 91 bool ffu_capable; /* Firmware upgrade support */ 92 + bool cmdq_support; /* Command Queue supported */ 93 + unsigned int cmdq_depth; /* Command Queue depth */ 92 94 #define MMC_FIRMWARE_LEN 8 93 95 u8 fwrev[MMC_FIRMWARE_LEN]; /* FW version */ 94 96 u8 raw_exception_status; /* 54 */
+17
include/linux/mmc/mmc.h
··· 84 84 #define MMC_APP_CMD 55 /* ac [31:16] RCA R1 */ 85 85 #define MMC_GEN_CMD 56 /* adtc [0] RD/WR R1 */ 86 86 87 + /* class 11 */ 88 + #define MMC_QUE_TASK_PARAMS 44 /* ac [20:16] task id R1 */ 89 + #define MMC_QUE_TASK_ADDR 45 /* ac [31:0] data addr R1 */ 90 + #define MMC_EXECUTE_READ_TASK 46 /* adtc [20:16] task id R1 */ 91 + #define MMC_EXECUTE_WRITE_TASK 47 /* adtc [20:16] task id R1 */ 92 + #define MMC_CMDQ_TASK_MGMT 48 /* ac [20:16] task id R1b */ 93 + 87 94 static inline bool mmc_op_multi(u32 opcode) 88 95 { 89 96 return opcode == MMC_WRITE_MULTIPLE_BLOCK || ··· 279 272 * EXT_CSD fields 280 273 */ 281 274 275 + #define EXT_CSD_CMDQ_MODE_EN 15 /* R/W */ 282 276 #define EXT_CSD_FLUSH_CACHE 32 /* W */ 283 277 #define EXT_CSD_CACHE_CTRL 33 /* R/W */ 284 278 #define EXT_CSD_POWER_OFF_NOTIFICATION 34 /* R/W */ ··· 339 331 #define EXT_CSD_CACHE_SIZE 249 /* RO, 4 bytes */ 340 332 #define EXT_CSD_PWR_CL_DDR_200_360 253 /* RO */ 341 333 #define EXT_CSD_FIRMWARE_VERSION 254 /* RO, 8 bytes */ 334 + #define EXT_CSD_CMDQ_DEPTH 307 /* RO */ 335 + #define EXT_CSD_CMDQ_SUPPORT 308 /* RO */ 342 336 #define EXT_CSD_SUPPORTED_MODE 493 /* RO */ 343 337 #define EXT_CSD_TAG_UNIT_SIZE 498 /* RO */ 344 338 #define EXT_CSD_DATA_TAG_SUPPORT 499 /* RO */ ··· 446 436 * BKOPS modes 447 437 */ 448 438 #define EXT_CSD_MANUAL_BKOPS_MASK 0x01 439 + 440 + /* 441 + * Command Queue 442 + */ 443 + #define EXT_CSD_CMDQ_MODE_ENABLED BIT(0) 444 + #define EXT_CSD_CMDQ_DEPTH_MASK GENMASK(4, 0) 445 + #define EXT_CSD_CMDQ_SUPPORTED BIT(0) 449 446 450 447 /* 451 448 * MMC_SWITCH access modes