From: Markus Niebel <list-09_barebox@tqsc.de>
To: Sascha Hauer <s.hauer@pengutronix.de>
Cc: barebox@lists.infradead.org, Markus Niebel <Markus.Niebel@tqs.de>
Subject: Re: [PATCH 1/3] mci: add DSR support
Date: Fri, 10 Jan 2014 12:56:59 +0100 [thread overview]
Message-ID: <52CFE00B.6090108@tqsc.de> (raw)
In-Reply-To: <20140110111811.GC16215@pengutronix.de>
Hello Sascha,
Am 10.01.2014 12:18, wrote Sascha Hauer:
> Hi Markus,
>
> On Fri, Jan 10, 2014 at 10:29:49AM +0100, Markus Niebel wrote:
>> From: Markus Niebel <Markus.Niebel@tqs.de>
>>
>> The eMMC and the SD-Card specifications describe the optional SET_DSR command.
>> During measurements at our lab we found that some cards implementing this feature
>> having really strong driver strengts per default. This can lead to voltage peaks
>> above the specification of the host on signal edges for data sent from a card to
>> the host.
>>
>> Since availability of a given card type may be shorter than the time a certain
>> hardware will be produced it is useful to have support for this command (Alternative
>> would be changing termination resistors and adapting the driver strength of the
>> host to the used card.)
>
> So not all cards support this command. Have you tested it with cards
> that do not support it to make sure they still work? With eMMC you know
> at board level whether or not this command is supported, but with SD
> cards you don't.
>
No tests done with SD-cards (SD card spec states, that DSR can be implemented,
but we found no card, that implements this feature).
On the eMMC side we did tests with TQMa53 (barebox and u-boot) and TQMa6
(u-boot only) and also with i.MX28 based platform:
if a card does not support DSR - CMD4 is never sent
if a card supports DSR but board does not activate the feature - CMD4 is never sent
if a card supports DSR and board code requests the feature - CMD4 is sent with the
configured value.
Would it be a good idea to document the feature as intended for non removable cards
where the exact value is known?
> Sascha
>
Markus
>>
>> Signed-off-by: Markus Niebel <Markus.Niebel@tqs.de>
>> ---
>> drivers/mci/mci-core.c | 27 +++++++++++++++++++++++++++
>> include/mci.h | 3 +++
>> 2 files changed, 30 insertions(+)
>>
>> diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c
>> index a232679..2c91ff2 100644
>> --- a/drivers/mci/mci-core.c
>> +++ b/drivers/mci/mci-core.c
>> @@ -102,6 +102,20 @@ static void mci_setup_cmd(struct mci_cmd *p, unsigned cmd, unsigned arg, unsigne
>> }
>>
>> /**
>> + * configure optional DSR value
>> + * @param mci_dev MCI instance
>> + * @return Transaction status (0 on success)
>> + */
>> +static int mci_set_dsr(struct mci *mci)
>> +{
>> + struct mci_cmd cmd;
>> +
>> + mci_setup_cmd(&cmd, MMC_CMD_SET_DSR,
>> + (mci->host->dsr_val >> 16) | 0xffff, MMC_RSP_NONE);
>> + return mci_send_cmd(mci, &cmd, NULL);
>> +}
>> +
>> +/**
>> * Setup SD/MMC card's blocklength to be used for future transmitts
>> * @param mci_dev MCI instance
>> * @param len Blocklength in bytes
>> @@ -836,6 +850,15 @@ static void mci_extract_card_capacity_from_csd(struct mci *mci)
>> dev_dbg(&mci->dev, "Capacity: %u MiB\n", (unsigned)(mci->capacity >> 20));
>> }
>>
>> +/**
>> + * Extract card's DSR implementation state from CSD
>> + * @param mci MCI instance
>> + */
>> +static void mci_extract_card_dsr_imp_from_csd(struct mci *mci)
>> +{
>> + mci->dsr_imp = UNSTUFF_BITS(mci->csd, 76, 1);
>> +}
>> +
>> static int mmc_compare_ext_csds(struct mci *mci, unsigned bus_width)
>> {
>> u8 *bw_ext_csd;
>> @@ -1058,6 +1081,7 @@ static int mci_startup(struct mci *mci)
>> mci_detect_version_from_csd(mci);
>> mci_extract_max_tran_speed_from_csd(mci);
>> mci_extract_block_lengths_from_csd(mci);
>> + mci_extract_card_dsr_imp_from_csd(mci);
>>
>> /* sanitiy? */
>> if (mci->read_bl_len > SECTOR_SIZE) {
>> @@ -1074,6 +1098,9 @@ static int mci_startup(struct mci *mci)
>> dev_dbg(&mci->dev, "Read block length: %u, Write block length: %u\n",
>> mci->read_bl_len, mci->write_bl_len);
>>
>> + if (mci->dsr_imp && mci->host->use_dsr)
>> + mci_set_dsr(mci);
>> +
>> if (!mmc_host_is_spi(host)) { /* cmd not supported in spi */
>> dev_dbg(&mci->dev, "Select the card, and put it into Transfer Mode\n");
>> /* Select the card, and put it into Transfer Mode */
>> diff --git a/include/mci.h b/include/mci.h
>> index 0f10e8a..d3a553e 100644
>> --- a/include/mci.h
>> +++ b/include/mci.h
>> @@ -294,6 +294,8 @@ struct mci_host {
>> unsigned clock; /**< Current clock used to talk to the card */
>> unsigned bus_width; /**< used data bus width to the card */
>> unsigned max_req_size;
>> + unsigned dsr_val; /**< optional dsr value */
>> + int use_dsr; /**< optional dsr usage flag */
>>
>> /** init the host interface */
>> int (*init)(struct mci_host*, struct device_d*);
>> @@ -344,6 +346,7 @@ struct mci {
>> unsigned write_bl_len;
>> uint64_t capacity; /**< Card's data capacity in bytes */
>> int ready_for_use; /** true if already probed */
>> + int dsr_imp; /**< DSR implementation state from CSD */
>> char *ext_csd;
>> int probe;
>> struct param_d *param_probe;
>> --
>> 1.7.9.5
>>
>>
>
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2014-01-10 11:48 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-10 9:29 [RFC] " Markus Niebel
2014-01-10 9:29 ` [PATCH 1/3] " Markus Niebel
2014-01-10 11:18 ` Sascha Hauer
2014-01-10 11:56 ` Markus Niebel [this message]
2014-01-13 8:19 ` Sascha Hauer
2014-01-10 9:29 ` [PATCH 2/3] mci: imx-esdhc: " Markus Niebel
2014-01-10 9:25 ` Alexander Shiyan
2014-01-10 10:23 ` Markus Niebel
2014-01-10 9:29 ` [PATCH 3/3] boards: tqma53: add DSR support for eMMC Markus Niebel
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=52CFE00B.6090108@tqsc.de \
--to=list-09_barebox@tqsc.de \
--cc=Markus.Niebel@tqs.de \
--cc=barebox@lists.infradead.org \
--cc=s.hauer@pengutronix.de \
/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