public inbox for linux-mmc@vger.kernel.org
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@intel.com>
To: Ritesh Harjani <riteshh@codeaurora.org>
Cc: Ulf Hansson <ulf.hansson@linaro.org>,
	linux-mmc <linux-mmc@vger.kernel.org>,
	Alex Lemberg <alex.lemberg@sandisk.com>,
	Mateusz Nowak <mateusz.nowak@intel.com>,
	Yuliy Izrailov <Yuliy.Izrailov@sandisk.com>,
	Jaehoon Chung <jh80.chung@samsung.com>,
	Dong Aisheng <dongas86@gmail.com>,
	Das Asutosh <asutoshd@codeaurora.org>,
	Zhangfei Gao <zhangfei.gao@gmail.com>,
	Dorfman Konstantin <kdorfman@codeaurora.org>,
	David Griego <david.griego@linaro.org>,
	Sahitya Tummala <stummala@codeaurora.org>,
	Venu Byravarasu <vbyravarasu@nvidia.com>,
	Linus Walleij <linus.walleij@linaro.org>
Subject: Re: [PATCH V7 09/25] mmc: mmc: Add Command Queue definitions
Date: Mon, 28 Nov 2016 15:08:13 +0200	[thread overview]
Message-ID: <140aaa7a-e922-4073-5366-771eb3d702fe@intel.com> (raw)
In-Reply-To: <6e1120e4-f13e-354c-9a5e-9dfc9239c9f3@codeaurora.org>

On 28/11/16 06:29, Ritesh Harjani wrote:
> 
> 
> On 11/25/2016 3:37 PM, Adrian Hunter wrote:
>> Add definitions relating to Command Queuing.
>>
>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
>> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
>> ---
>>  drivers/mmc/core/mmc.c   | 17 +++++++++++++++++
>>  include/linux/mmc/card.h |  2 ++
>>  include/linux/mmc/mmc.h  | 17 +++++++++++++++++
>>  3 files changed, 36 insertions(+)
>>
>> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
>> index 3268fcd3378d..6e9830997eef 100644
>> --- a/drivers/mmc/core/mmc.c
>> +++ b/drivers/mmc/core/mmc.c
>> @@ -618,6 +618,23 @@ static int mmc_decode_ext_csd(struct mmc_card *card,
>> u8 *ext_csd)
>>              (ext_csd[EXT_CSD_SUPPORTED_MODE] & 0x1) &&
>>              !(ext_csd[EXT_CSD_FW_CONFIG] & 0x1);
>>      }
>> +
>> +    /* eMMC v5.1 or later */
>> +    if (card->ext_csd.rev >= 8) {
>> +        card->ext_csd.cmdq_support = ext_csd[EXT_CSD_CMDQ_SUPPORT] &
>> +                         EXT_CSD_CMDQ_SUPPORTED;
>> +        card->ext_csd.cmdq_depth = (ext_csd[EXT_CSD_CMDQ_DEPTH] &
>> +                        EXT_CSD_CMDQ_DEPTH_MASK) + 1;
>> +        if (card->ext_csd.cmdq_depth <= 2) {
>> +            card->ext_csd.cmdq_support = false;
>> +            card->ext_csd.cmdq_depth = 0;
>> +        }
> Could you please explain, why for cmdq_depth <=2, we are disabling
> cmdq_support ? Maybe we can add a comment there.

It was in the original code.  I presumed it was because such a small queue
did not give a performance advantage.  Certainly a qdepth of 1 is not a
queue at all.  However all the eMMC I have come in contact with have a queue
depth of at least 16, so it is unlikely to have any affect in practice.  I
can add a comment.

> 
> 
>> +        if (card->ext_csd.cmdq_support) {
>> +            pr_debug("%s: Command Queue supported depth %u\n",
>> +                 mmc_hostname(card->host),
>> +                 card->ext_csd.cmdq_depth);
>> +        }
>> +    }
>>  out:
>>      return err;
>>  }
>> diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
>> index e49a3ff9d0e0..95d69d498296 100644
>> --- a/include/linux/mmc/card.h
>> +++ b/include/linux/mmc/card.h
>> @@ -89,6 +89,8 @@ struct mmc_ext_csd {
>>      unsigned int        boot_ro_lock;        /* ro lock support */
>>      bool            boot_ro_lockable;
>>      bool            ffu_capable;    /* Firmware upgrade support */
>> +    bool            cmdq_support;    /* Command Queue supported */
>> +    unsigned int        cmdq_depth;    /* Command Queue depth */
>>  #define MMC_FIRMWARE_LEN 8
>>      u8            fwrev[MMC_FIRMWARE_LEN];  /* FW version */
>>      u8            raw_exception_status;    /* 54 */
>> diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h
>> index c376209c70ef..672730acc705 100644
>> --- a/include/linux/mmc/mmc.h
>> +++ b/include/linux/mmc/mmc.h
>> @@ -84,6 +84,13 @@
>>  #define MMC_APP_CMD              55   /* ac   [31:16] RCA        R1  */
>>  #define MMC_GEN_CMD              56   /* adtc [0] RD/WR          R1  */
>>
>> +  /* class 11 */
>> +#define MMC_QUE_TASK_PARAMS      44   /* ac   [20:16] task id    R1  */
>> +#define MMC_QUE_TASK_ADDR        45   /* ac   [31:0] data addr   R1  */
>> +#define MMC_EXECUTE_READ_TASK    46   /* adtc [20:16] task id    R1  */
>> +#define MMC_EXECUTE_WRITE_TASK   47   /* adtc [20:16] task id    R1  */
>> +#define MMC_CMDQ_TASK_MGMT       48   /* ac   [20:16] task id    R1b */
>> +
>>  static inline bool mmc_op_multi(u32 opcode)
>>  {
>>      return opcode == MMC_WRITE_MULTIPLE_BLOCK ||
>> @@ -272,6 +279,7 @@ struct _mmc_csd {
>>   * EXT_CSD fields
>>   */
>>
>> +#define EXT_CSD_CMDQ_MODE_EN        15    /* R/W */
>>  #define EXT_CSD_FLUSH_CACHE        32      /* W */
>>  #define EXT_CSD_CACHE_CTRL        33      /* R/W */
>>  #define EXT_CSD_POWER_OFF_NOTIFICATION    34    /* R/W */
>> @@ -331,6 +339,8 @@ struct _mmc_csd {
>>  #define EXT_CSD_CACHE_SIZE        249    /* RO, 4 bytes */
>>  #define EXT_CSD_PWR_CL_DDR_200_360    253    /* RO */
>>  #define EXT_CSD_FIRMWARE_VERSION    254    /* RO, 8 bytes */
>> +#define EXT_CSD_CMDQ_DEPTH        307    /* RO */
>> +#define EXT_CSD_CMDQ_SUPPORT        308    /* RO */
>>  #define EXT_CSD_SUPPORTED_MODE        493    /* RO */
>>  #define EXT_CSD_TAG_UNIT_SIZE        498    /* RO */
>>  #define EXT_CSD_DATA_TAG_SUPPORT    499    /* RO */
>> @@ -438,6 +448,13 @@ struct _mmc_csd {
>>  #define EXT_CSD_MANUAL_BKOPS_MASK    0x01
>>
>>  /*
>> + * Command Queue
>> + */
>> +#define EXT_CSD_CMDQ_MODE_ENABLED    BIT(0)
> 
> Is there a need for both EXT_CSD_CMDQ_MODE_ENABLED and
> EXT_CSD_CMDQ_MODE_SUPPORTED. Arent they doing same thing?

They are bits in different ext-csd bytes. EXT_CSD_CMDQ_MODE_ENABLED is in
the CMDQ_MODE_EN byte (15), and EXT_CSD_CMDQ_SUPPORTED is in CMDQ_SUPPORT
(308).  AFAIK being the same bit number is coincidence.

> 
> 
>> +#define EXT_CSD_CMDQ_DEPTH_MASK        GENMASK(4, 0)
>> +#define EXT_CSD_CMDQ_SUPPORTED        BIT(0)
> Ditto
> 
>> +
>> +/*
>>   * MMC_SWITCH access modes
>>   */
>>
>>
> 


  reply	other threads:[~2016-11-28 13:13 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-25 10:06 [PATCH V7 00/25] mmc: mmc: Add Software Command Queuing Adrian Hunter
2016-11-25 10:06 ` [PATCH V7 01/25] mmc: queue: Fix queue thread wake-up Adrian Hunter
2016-11-25 14:37   ` Linus Walleij
2016-11-28  3:32   ` Ritesh Harjani
2016-11-25 10:06 ` [PATCH V7 02/25] mmc: queue: Factor out mmc_queue_alloc_bounce_bufs() Adrian Hunter
2016-11-25 14:38   ` Linus Walleij
2016-11-28  3:36   ` Ritesh Harjani
2016-11-25 10:07 ` [PATCH V7 03/25] mmc: queue: Factor out mmc_queue_alloc_bounce_sgs() Adrian Hunter
2016-11-25 14:39   ` Linus Walleij
2016-11-28  3:48   ` Ritesh Harjani
2016-11-25 10:07 ` [PATCH V7 04/25] mmc: queue: Factor out mmc_queue_alloc_sgs() Adrian Hunter
2016-11-25 14:41   ` Linus Walleij
2016-11-28  3:49   ` Ritesh Harjani
2016-11-25 10:07 ` [PATCH V7 05/25] mmc: queue: Factor out mmc_queue_reqs_free_bufs() Adrian Hunter
2016-11-25 14:42   ` Linus Walleij
2016-11-28  3:50   ` Ritesh Harjani
2016-11-25 10:07 ` [PATCH V7 06/25] mmc: queue: Introduce queue depth Adrian Hunter
2016-11-25 14:43   ` Linus Walleij
2016-11-25 17:20     ` Adrian Hunter
2016-11-28  4:19   ` Ritesh Harjani
2016-11-28 12:45     ` Adrian Hunter
2016-11-25 10:07 ` [PATCH V7 07/25] mmc: queue: Use queue depth to allocate and free Adrian Hunter
2016-11-28  4:21   ` Ritesh Harjani
2016-11-25 10:07 ` [PATCH V7 08/25] mmc: queue: Allocate queue of size qdepth Adrian Hunter
2016-11-28  4:22   ` Ritesh Harjani
2016-11-25 10:07 ` [PATCH V7 09/25] mmc: mmc: Add Command Queue definitions Adrian Hunter
2016-11-28  4:29   ` Ritesh Harjani
2016-11-28 13:08     ` Adrian Hunter [this message]
2016-11-25 10:07 ` [PATCH V7 10/25] mmc: mmc: Add functions to enable / disable the Command Queue Adrian Hunter
2016-11-28  4:36   ` Ritesh Harjani
2016-11-28 13:23     ` Adrian Hunter
2016-11-28 14:00       ` Ritesh Harjani
2016-11-25 10:07 ` [PATCH V7 11/25] mmc: mmc_test: Disable Command Queue while mmc_test is used Adrian Hunter
2016-11-28  4:40   ` Ritesh Harjani
2016-11-25 10:07 ` [PATCH V7 12/25] mmc: block: Disable Command Queue while RPMB " Adrian Hunter
2016-11-28  4:46   ` Ritesh Harjani
2016-11-25 10:07 ` [PATCH V7 13/25] mmc: core: Do not prepare a new request twice Adrian Hunter
2016-11-28  4:48   ` Ritesh Harjani
2016-11-25 10:07 ` [PATCH V7 14/25] mmc: core: Export mmc_retune_hold() and mmc_retune_release() Adrian Hunter
2016-11-28  4:49   ` Ritesh Harjani
2016-11-25 10:07 ` [PATCH V7 15/25] mmc: block: Factor out mmc_blk_requeue() Adrian Hunter
2016-11-28  4:51   ` Ritesh Harjani
2016-11-25 10:07 ` [PATCH V7 16/25] mmc: block: Fix 4K native sector check Adrian Hunter
2016-11-25 14:51   ` Linus Walleij
2016-11-25 10:07 ` [PATCH V7 17/25] mmc: block: Use local var for mqrq_cur Adrian Hunter
2016-11-25 14:52   ` Linus Walleij
2016-11-25 10:07 ` [PATCH V7 18/25] mmc: block: Pass mqrq to mmc_blk_prep_packed_list() Adrian Hunter
2016-11-25 14:53   ` Linus Walleij
2016-11-25 10:07 ` [PATCH V7 19/25] mmc: block: Introduce queue semantics Adrian Hunter
2016-11-25 10:07 ` [PATCH V7 20/25] mmc: queue: Share mmc request array between partitions Adrian Hunter
2016-11-25 15:01   ` Linus Walleij
2016-11-29 10:14     ` Adrian Hunter
2016-11-25 10:07 ` [PATCH V7 21/25] mmc: queue: Add a function to control wake-up on new requests Adrian Hunter
2016-11-25 10:07 ` [PATCH V7 22/25] mmc: block: Add Software Command Queuing Adrian Hunter
2016-11-25 10:07 ` [PATCH V7 23/25] mmc: mmc: Enable " Adrian Hunter
2016-11-25 10:07 ` [PATCH V7 24/25] mmc: sdhci-pci: Enable Software Command Queuing for some Intel controllers Adrian Hunter
2016-11-25 10:07 ` [PATCH V7 25/25] mmc: sdhci-acpi: " Adrian Hunter
2016-11-25 15:15   ` Linus Walleij
2016-11-28 13:55     ` Adrian Hunter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=140aaa7a-e922-4073-5366-771eb3d702fe@intel.com \
    --to=adrian.hunter@intel.com \
    --cc=Yuliy.Izrailov@sandisk.com \
    --cc=alex.lemberg@sandisk.com \
    --cc=asutoshd@codeaurora.org \
    --cc=david.griego@linaro.org \
    --cc=dongas86@gmail.com \
    --cc=jh80.chung@samsung.com \
    --cc=kdorfman@codeaurora.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=mateusz.nowak@intel.com \
    --cc=riteshh@codeaurora.org \
    --cc=stummala@codeaurora.org \
    --cc=ulf.hansson@linaro.org \
    --cc=vbyravarasu@nvidia.com \
    --cc=zhangfei.gao@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox