All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhang Haijun <b42677@freescale.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 2/7 V3] mmc: Get secure erase information from card
Date: Mon, 30 Dec 2013 12:02:22 +0800	[thread overview]
Message-ID: <52C0F04E.9000404@freescale.com> (raw)
In-Reply-To: <52BD60C6.5010301@samsung.com>

On 12/27/2013 07:13 PM, Jaehoon Chung wrote:
> Hi, Haijun.
>
> On 12/10/2013 02:39 PM, Haijun Zhang wrote:
>> Read command class from csd register and secure erase
>> support bit from ext csd register. Also calculate the erase
>> timeout and secure erase timeout.
>>
>> If read ext csd error, error status should be returned instead of
>> give some incorrect information.
>>
>> Error log:
>> =>
>> => mmcinfo
>> Device: FSL_SDHC
>> Manufacturer ID: 0
>> OEM: 0
>> Name: Tran Speed: 0
>> Rd Block Len: 0
>> MMC version 0.0
>> High Capacity: No
>> Capacity: 0 Bytes
>> Bus Width: 1-bit
>> =>
>>
>> Signed-off-by: Haijun Zhang <haijun.zhang@freescale.com>
>> ---
>> changes for V3:
>> 	- Change the erase group size to be block aligned.
>>
>>   drivers/mmc/mmc.c | 52 ++++++++++++++++++++++++++++++++++++++--------------
>>   1 file changed, 38 insertions(+), 14 deletions(-)
>>
>> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
>> index e1461a9..e8dbb8c 100644
>> --- a/drivers/mmc/mmc.c
>> +++ b/drivers/mmc/mmc.c
>> @@ -871,6 +871,8 @@ static int mmc_startup(struct mmc *mmc)
>>   		}
>>   	}
>>   
>> +	mmc->cmdclass = cmd.response[1] >> 20;
>> +
>>   	/* divide frequency by 10, since the mults are 10x bigger */
>>   	freq = fbase[(cmd.response[0] & 0x7)];
>>   	mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
>> @@ -939,7 +941,8 @@ static int mmc_startup(struct mmc *mmc)
>>   			capacity *= MMC_MAX_BLOCK_LEN;
>>   			if ((capacity >> 20) > 2 * 1024)
>>   				mmc->capacity_user = capacity;
>> -		}
>> +		} else
>> +			return COMM_ERR;
> Well, I think this point need to consider more.
> When error is returned, then this return is right. but it's also satisfied "ext_csd[EXT_CSD_REV] >= 2".

Yes you are right. I'll change this.

Thanks.

-- Haijun
>
>>   
>>   		switch (ext_csd[EXT_CSD_REV]) {
>>   		case 1:
>> @@ -960,6 +963,39 @@ static int mmc_startup(struct mmc *mmc)
>>   		}
>>   
>>   		/*
>> +		 * The granularity of the erasable units is the Erase Group:The
>> +		 * smallest number of consecutive write blocks which can be
>> +		 * addressed for erase. The size of the Erase Group is card
>> +		 * specific and stored in the CSD when ERASE_GROUP_DEF is
>> +		 * disabled, and in the EXT_CSD when ERASE_GROUP_DEF is
>> +		 * enabled.
>> +		 */
>> +		if (ext_csd[EXT_CSD_ERASE_GROUP_DEF]) {
>> +			mmc->erase_grp_size =
>> +				ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
>> +
>> +			mmc->erase_timeout_mult = 300 *
>> +				ext_csd[EXT_CSD_ERASE_TIMEOUT_MULT];
>> +		} else {
>> +			/* Calculate the group size from the csd value. */
>> +			int erase_gsz, erase_gmul;
>> +			erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
>> +			erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
>> +			mmc->erase_grp_size = (erase_gsz + 1)
>> +				* (erase_gmul + 1);
>> +		}
>> +
>> +		if (ext_csd[EXT_CSD_REV] >= 4) {
>> +			mmc->sec_feature_support =
>> +				ext_csd[EXT_CSD_SEC_FEATURE_SUPPORT];
>> +			mmc->sec_erase_mult =
>> +				ext_csd[EXT_CSD_SEC_ERASE_MULT];
>> +			mmc->sec_erase_timeout = 300 *
>> +				ext_csd[EXT_CSD_SEC_ERASE_MULT] *
>> +				ext_csd[EXT_CSD_ERASE_TIMEOUT_MULT];
>> +		}
>> +
>> +		/*
>>   		 * Host needs to enable ERASE_GRP_DEF bit if device is
>>   		 * partitioned. This bit will be lost every time after a reset
>>   		 * or power off. This will affect erase size.
>> @@ -968,23 +1004,11 @@ static int mmc_startup(struct mmc *mmc)
>>   		    (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & PART_ENH_ATTRIB)) {
>>   			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
>>   				EXT_CSD_ERASE_GROUP_DEF, 1);
>> -
>>   			if (err)
>>   				return err;
>> -
>> -			/* Read out group size from ext_csd */
>> -			mmc->erase_grp_size =
>> -				ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] *
>> -					MMC_MAX_BLOCK_LEN * 1024;
>> -		} else {
>> -			/* Calculate the group size from the csd value. */
>> -			int erase_gsz, erase_gmul;
>> -			erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
>> -			erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
>> -			mmc->erase_grp_size = (erase_gsz + 1)
>> -				* (erase_gmul + 1);
>>   		}
>>   
>> +
> remove the blank.
>
> Best Regards,
> Jaehoon Chung
>
>>   		/* store the partition info of emmc */
>>   		if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
>>   		    ext_csd[EXT_CSD_BOOT_MULT])
>>
>
>

  reply	other threads:[~2013-12-30  4:02 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-10  5:39 [U-Boot] [PATCH 1/7 V3] mmc: Add some usefull macro definition Haijun Zhang
2013-12-10  5:39 ` [U-Boot] [PATCH 2/7 V3] mmc: Get secure erase information from card Haijun Zhang
2013-12-10  8:23   ` Pantelis Antoniou
2013-12-27 11:13   ` Jaehoon Chung
2013-12-30  4:02     ` Zhang Haijun [this message]
2013-12-10  5:39 ` [U-Boot] [PATCH 3/7 V3] mmc: Enhance erase handling procedure Haijun Zhang
2013-12-10  8:24   ` Pantelis Antoniou
2013-12-11  3:09   ` Michael Trimarchi
2013-12-11  4:10     ` Haijun.Zhang at freescale.com
2013-12-10  5:39 ` [U-Boot] [PATCH 4/7 V3] mmc: Update the handling of returned erase block Haijun Zhang
2013-12-10  8:28   ` Pantelis Antoniou
2013-12-10  5:39 ` [U-Boot] [PATCH 5/7 V3] mmc: Enhance mmcinfo command Haijun Zhang
2013-12-10  5:39 ` [U-Boot] [PATCH 6/7 V3] Powerpc/esdhc: Add esdhc host version define Haijun Zhang
2013-12-10  5:39 ` [U-Boot] [PATCH 7/7 V3] powerpc/esdhc: Update esdhc command execution process Haijun Zhang

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=52C0F04E.9000404@freescale.com \
    --to=b42677@freescale.com \
    --cc=u-boot@lists.denx.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 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.