All of lore.kernel.org
 help / color / mirror / Atom feed
From: khilman@baylibre.com (Kevin Hilman)
To: linus-amlogic@lists.infradead.org
Subject: [PATCH 04/18] mmc: meson-gx: improve meson_mmc_start_cmd
Date: Wed, 15 Feb 2017 15:58:09 -0800	[thread overview]
Message-ID: <m2zihn57n2.fsf@baylibre.com> (raw)
In-Reply-To: <a29bf3be-143a-1ed1-9076-d07f8013c2b4@gmail.com> (Heiner Kallweit's message of "Wed, 15 Feb 2017 22:10:20 +0100")

Heiner Kallweit <hkallweit1@gmail.com> writes:

> Am 15.02.2017 um 20:43 schrieb Heiner Kallweit:
>> Am 15.02.2017 um 18:04 schrieb Kevin Hilman:
>>> Heiner Kallweit <hkallweit1@gmail.com> writes:
>>>
>>>> Remove use of unneeded members cmd_arg and cmd_resp.
>>>> Setting SD_EMMC_CMD_RSP is only needed if CMD_CFG_RESP_NUM is set,
>>>> so don't write this register in all other cases.
>>>>
>>>> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
>>>
>>> I'm not sure I like this change.  This works now because there is only
>>> one descriptor used, but one of the next things to work on in this
>>> driver is taking advantage of the internal DMA capabilities, which means
>>> having a chain of descriptorsall filled out in memory.
>>>
>> For testing purposes I temporarily changed the driver from passing the
>> descriptor in registers to passing the descriptor via DMA and it worked.
>> 
>> I'm not very familiar (yet) with descriptor chains and have to check
>> the MMC core code a little bit more ..
>> If we can actually benefit from it then I'd agree with you.
>> 
> After having had a little bit closer look at the MMC core and descriptor
> chains in general:
> I'm not really sure where descriptor chains would help us. SG lists in
> read / write commands are linearized by the driver via
> sg_copy_[to,from]_buffer already.

Copying to the bounce buffer would be replaced by creating a descriptor
for each SG entry, and creating a descriptor chain.

> Beyond that I don't see any command chaining support in the core
> (prerequisite for command chaining most likely would be that a
> subsequent command must not depend on the response of a previous one).
>
> Maybe somebody with more knowledge about the MMC core and MMC in general
> can shed some light on this ..

I don't know if it's a feature of the core, but the Amlogic vendor
driver does the chained descriptor handling in the driver itself.

Kevin

>>> Kevin
>>>
>>>> ---
>>>>  drivers/mmc/host/meson-gx-mmc.c | 6 ++----
>>>>  1 file changed, 2 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
>>>> index ece38b44..630e0590 100644
>>>> --- a/drivers/mmc/host/meson-gx-mmc.c
>>>> +++ b/drivers/mmc/host/meson-gx-mmc.c
>>>> @@ -456,7 +456,6 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>>>>  	desc->cmd_cfg |= (cmd->opcode & CMD_CFG_CMD_INDEX_MASK)	<<
>>>>  		CMD_CFG_CMD_INDEX_SHIFT;
>>>>  	desc->cmd_cfg |= CMD_CFG_OWNER;  /* owned by CPU */
>>>> -	desc->cmd_arg = cmd->arg;
>>>>  
>>>>  	/* Response */
>>>>  	if (cmd->flags & MMC_RSP_PRESENT) {
>>>> @@ -464,7 +463,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>>>>  		if (cmd->flags & MMC_RSP_136)
>>>>  			desc->cmd_cfg |= CMD_CFG_RESP_128;
>>>>  		desc->cmd_cfg |= CMD_CFG_RESP_NUM;
>>>> -		desc->cmd_resp = 0;
>>>> +		writel(0, host->regs + SD_EMMC_CMD_RSP);
>>>>  
>>>>  		if (!(cmd->flags & MMC_RSP_CRC))
>>>>  			desc->cmd_cfg |= CMD_CFG_RESP_NOCRC;
>>>> @@ -540,9 +539,8 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>>>>  	desc->cmd_cfg |= CMD_CFG_END_OF_CHAIN;
>>>>  	writel(desc->cmd_cfg, host->regs + SD_EMMC_CMD_CFG);
>>>>  	writel(desc->cmd_data, host->regs + SD_EMMC_CMD_DAT);
>>>> -	writel(desc->cmd_resp, host->regs + SD_EMMC_CMD_RSP);
>>>>  	wmb(); /* ensure descriptor is written before kicked */
>>>> -	writel(desc->cmd_arg, host->regs + SD_EMMC_CMD_ARG);
>>>> +	writel(cmd->arg, host->regs + SD_EMMC_CMD_ARG);
>>>>  }
>>>>  
>>>>  static void meson_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
>>>
>> 

WARNING: multiple messages have this Message-ID (diff)
From: Kevin Hilman <khilman@baylibre.com>
To: Heiner Kallweit <hkallweit1@gmail.com>
Cc: Ulf Hansson <ulf.hansson@linaro.org>,
	Carlo Caione <carlo@caione.org>,
	"linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>,
	linux-amlogic@lists.infradead.org
Subject: Re: [PATCH 04/18] mmc: meson-gx: improve meson_mmc_start_cmd
Date: Wed, 15 Feb 2017 15:58:09 -0800	[thread overview]
Message-ID: <m2zihn57n2.fsf@baylibre.com> (raw)
In-Reply-To: <a29bf3be-143a-1ed1-9076-d07f8013c2b4@gmail.com> (Heiner Kallweit's message of "Wed, 15 Feb 2017 22:10:20 +0100")

Heiner Kallweit <hkallweit1@gmail.com> writes:

> Am 15.02.2017 um 20:43 schrieb Heiner Kallweit:
>> Am 15.02.2017 um 18:04 schrieb Kevin Hilman:
>>> Heiner Kallweit <hkallweit1@gmail.com> writes:
>>>
>>>> Remove use of unneeded members cmd_arg and cmd_resp.
>>>> Setting SD_EMMC_CMD_RSP is only needed if CMD_CFG_RESP_NUM is set,
>>>> so don't write this register in all other cases.
>>>>
>>>> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
>>>
>>> I'm not sure I like this change.  This works now because there is only
>>> one descriptor used, but one of the next things to work on in this
>>> driver is taking advantage of the internal DMA capabilities, which means
>>> having a chain of descriptorsall filled out in memory.
>>>
>> For testing purposes I temporarily changed the driver from passing the
>> descriptor in registers to passing the descriptor via DMA and it worked.
>> 
>> I'm not very familiar (yet) with descriptor chains and have to check
>> the MMC core code a little bit more ..
>> If we can actually benefit from it then I'd agree with you.
>> 
> After having had a little bit closer look at the MMC core and descriptor
> chains in general:
> I'm not really sure where descriptor chains would help us. SG lists in
> read / write commands are linearized by the driver via
> sg_copy_[to,from]_buffer already.

Copying to the bounce buffer would be replaced by creating a descriptor
for each SG entry, and creating a descriptor chain.

> Beyond that I don't see any command chaining support in the core
> (prerequisite for command chaining most likely would be that a
> subsequent command must not depend on the response of a previous one).
>
> Maybe somebody with more knowledge about the MMC core and MMC in general
> can shed some light on this ..

I don't know if it's a feature of the core, but the Amlogic vendor
driver does the chained descriptor handling in the driver itself.

Kevin

>>> Kevin
>>>
>>>> ---
>>>>  drivers/mmc/host/meson-gx-mmc.c | 6 ++----
>>>>  1 file changed, 2 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
>>>> index ece38b44..630e0590 100644
>>>> --- a/drivers/mmc/host/meson-gx-mmc.c
>>>> +++ b/drivers/mmc/host/meson-gx-mmc.c
>>>> @@ -456,7 +456,6 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>>>>  	desc->cmd_cfg |= (cmd->opcode & CMD_CFG_CMD_INDEX_MASK)	<<
>>>>  		CMD_CFG_CMD_INDEX_SHIFT;
>>>>  	desc->cmd_cfg |= CMD_CFG_OWNER;  /* owned by CPU */
>>>> -	desc->cmd_arg = cmd->arg;
>>>>  
>>>>  	/* Response */
>>>>  	if (cmd->flags & MMC_RSP_PRESENT) {
>>>> @@ -464,7 +463,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>>>>  		if (cmd->flags & MMC_RSP_136)
>>>>  			desc->cmd_cfg |= CMD_CFG_RESP_128;
>>>>  		desc->cmd_cfg |= CMD_CFG_RESP_NUM;
>>>> -		desc->cmd_resp = 0;
>>>> +		writel(0, host->regs + SD_EMMC_CMD_RSP);
>>>>  
>>>>  		if (!(cmd->flags & MMC_RSP_CRC))
>>>>  			desc->cmd_cfg |= CMD_CFG_RESP_NOCRC;
>>>> @@ -540,9 +539,8 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>>>>  	desc->cmd_cfg |= CMD_CFG_END_OF_CHAIN;
>>>>  	writel(desc->cmd_cfg, host->regs + SD_EMMC_CMD_CFG);
>>>>  	writel(desc->cmd_data, host->regs + SD_EMMC_CMD_DAT);
>>>> -	writel(desc->cmd_resp, host->regs + SD_EMMC_CMD_RSP);
>>>>  	wmb(); /* ensure descriptor is written before kicked */
>>>> -	writel(desc->cmd_arg, host->regs + SD_EMMC_CMD_ARG);
>>>> +	writel(cmd->arg, host->regs + SD_EMMC_CMD_ARG);
>>>>  }
>>>>  
>>>>  static void meson_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
>>>
>> 

  reply	other threads:[~2017-02-15 23:58 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <420b75a9-b8c2-b3d7-ae60-3ed8a5a18ead@gmail.com>
2017-02-14 20:05 ` [PATCH 01/18] mmc: meson-gx: set segment host parameters Heiner Kallweit
2017-02-14 20:05   ` Heiner Kallweit
2017-02-14 20:05 ` [PATCH 02/18] mmc: meson-gx: remove code for unsupported CMD23 Heiner Kallweit
2017-02-14 20:05   ` Heiner Kallweit
2017-02-15 16:54   ` Kevin Hilman
2017-02-15 16:54     ` Kevin Hilman
2017-02-16  7:03     ` Heiner Kallweit
2017-02-16  7:03       ` Heiner Kallweit
2017-02-16  8:14       ` Ulf Hansson
2017-02-16  8:14         ` Ulf Hansson
2017-02-16 17:49         ` Heiner Kallweit
2017-02-16 17:49           ` Heiner Kallweit
2017-02-19 19:36     ` Heiner Kallweit
2017-02-19 19:36       ` Heiner Kallweit
2017-02-14 20:06 ` [PATCH 03/18] mmc: meson-gx: explicitely call stop command for multi-block commands only Heiner Kallweit
2017-02-14 20:06   ` Heiner Kallweit
2017-02-14 20:06 ` [PATCH 04/18] mmc: meson-gx: improve meson_mmc_start_cmd Heiner Kallweit
2017-02-14 20:06   ` Heiner Kallweit
2017-02-15 17:04   ` Kevin Hilman
2017-02-15 17:04     ` Kevin Hilman
2017-02-15 19:43     ` Heiner Kallweit
2017-02-15 19:43       ` Heiner Kallweit
2017-02-15 21:10       ` Heiner Kallweit
2017-02-15 21:10         ` Heiner Kallweit
2017-02-15 23:58         ` Kevin Hilman [this message]
2017-02-15 23:58           ` Kevin Hilman
2017-02-19 19:41     ` Heiner Kallweit
2017-02-19 19:41       ` Heiner Kallweit
2017-02-14 20:06 ` [PATCH 05/18] mmc: meson-gx: eliminate struct sd_emmc_data Heiner Kallweit
2017-02-14 20:06   ` Heiner Kallweit
2017-02-15 17:09   ` Kevin Hilman
2017-02-15 17:09     ` Kevin Hilman
2017-02-14 20:06 ` [PATCH 06/18] mmc: meson-gx: simplify bounce buffer setting in meson_mmc_start_cmd Heiner Kallweit
2017-02-14 20:06   ` Heiner Kallweit
2017-02-15 17:14   ` Kevin Hilman
2017-02-15 17:14     ` Kevin Hilman
2017-02-14 20:06 ` [PATCH 07/18] mmc: meson-gx: check return value of sg_copy_[from,to]_buffer Heiner Kallweit
2017-02-14 20:06   ` Heiner Kallweit
2017-02-15 17:17   ` [PATCH 07/18] mmc: meson-gx: check return value of sg_copy_[from, to]_buffer Kevin Hilman
2017-02-15 17:17     ` [PATCH 07/18] mmc: meson-gx: check return value of sg_copy_[from,to]_buffer Kevin Hilman
2017-02-14 20:06 ` [PATCH 08/18] mmc: meson-gx: make two functions return void Heiner Kallweit
2017-02-14 20:06   ` Heiner Kallweit
2017-02-15 17:18   ` Kevin Hilman
2017-02-15 17:18     ` Kevin Hilman
2017-02-14 20:06 ` [PATCH 09/18] mmc: meson-gx: change interrupt name Heiner Kallweit
2017-02-14 20:06   ` Heiner Kallweit
2017-02-15 12:34   ` Ben Dooks
2017-02-15 12:34     ` Ben Dooks
2017-02-15 19:46     ` Heiner Kallweit
2017-02-15 19:46       ` Heiner Kallweit
2017-02-15 17:18   ` Kevin Hilman
2017-02-15 17:18     ` Kevin Hilman
2017-02-14 20:06 ` [PATCH 10/18] mmc: meson-gx: remove unused members irq, ocr_mask from struct meson_host Heiner Kallweit
2017-02-14 20:06   ` Heiner Kallweit
2017-02-15 17:19   ` Kevin Hilman
2017-02-15 17:19     ` Kevin Hilman
2017-02-14 20:06 ` [PATCH 11/18] mmc: meson-gx: remove unneeded variable in meson_mmc_clk_init Heiner Kallweit
2017-02-14 20:06   ` Heiner Kallweit
2017-02-15 19:24   ` Kevin Hilman
2017-02-15 19:24     ` Kevin Hilman
2017-02-14 20:06 ` [PATCH 12/18] mmc: meson-gx: remove member parent_mux from struct meson_host Heiner Kallweit
2017-02-14 20:06   ` Heiner Kallweit
2017-02-15 19:25   ` Kevin Hilman
2017-02-15 19:25     ` Kevin Hilman
2017-02-14 20:06 ` [PATCH 13/18] mmc: meson-gx: remove unneeded meson_mmc_clk_set in meson_mmc_clk_init Heiner Kallweit
2017-02-14 20:06   ` Heiner Kallweit
2017-02-15 19:27   ` Kevin Hilman
2017-02-15 19:27     ` Kevin Hilman
2017-02-15 19:38     ` Heiner Kallweit
2017-02-15 19:38       ` Heiner Kallweit
2017-02-15 23:56       ` Kevin Hilman
2017-02-15 23:56         ` Kevin Hilman
2017-02-16  7:05         ` Heiner Kallweit
2017-02-16  7:05           ` Heiner Kallweit
2017-02-14 20:07 ` [PATCH 14/18] mmc: meson-gx: remove unneeded devm_kstrdup " Heiner Kallweit
2017-02-14 20:07   ` Heiner Kallweit
2017-02-15 19:30   ` Kevin Hilman
2017-02-15 19:30     ` Kevin Hilman
2017-02-15 19:35     ` Heiner Kallweit
2017-02-15 19:35       ` Heiner Kallweit
2017-02-14 20:07 ` [PATCH 15/18] mmc: meson-gx: improve initial configuration Heiner Kallweit
2017-02-14 20:07   ` Heiner Kallweit
2017-02-15 19:32   ` Kevin Hilman
2017-02-15 19:32     ` Kevin Hilman
2017-02-14 20:07 ` [PATCH 16/18] mmc: meson-gx: improve response reading and sending stop command Heiner Kallweit
2017-02-14 20:07   ` Heiner Kallweit
2017-02-15 19:34   ` Kevin Hilman
2017-02-15 19:34     ` Kevin Hilman
2017-02-14 20:07 ` [PATCH 17/18] mmc: meson-gx: remove member mrq from struct meson_host Heiner Kallweit
2017-02-14 20:07   ` Heiner Kallweit
2017-02-15 19:36   ` Kevin Hilman
2017-02-15 19:36     ` Kevin Hilman
2017-02-14 20:07 ` [PATCH 18/18] mmc: meson-gx: move handling of one case from threaded handler to main irq Heiner Kallweit
2017-02-14 20:07   ` Heiner Kallweit

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=m2zihn57n2.fsf@baylibre.com \
    --to=khilman@baylibre.com \
    --cc=linus-amlogic@lists.infradead.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.