diff mbox

dw-mmc: enable trim in eMMC device

Message ID 1391798398-24634-1-git-send-email-puthik@chromium.org (mailing list archive)
State New, archived
Headers show

Commit Message

Puthikorn Voravootivat Feb. 7, 2014, 6:39 p.m. UTC
Force host to have erase capacity to enable trim or
discard feature in supported eMMC device.

Signed-off-by: Puthikorn Voravootivat <puthik@chromium.org>
---
In mmc_init_queue() before setting up the discard function, mmc driver
will call mmc_can_erase() which will always return 0 because the host
erase capacity is not set anywhere. So to enable discard function, we
need to add erase capacity to the host.

 drivers/mmc/host/dw_mmc.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Jaehoon Chung Feb. 10, 2014, 4:07 a.m. UTC | #1
Hi,

On 02/08/2014 03:39 AM, Puthikorn Voravootivat wrote:
> Force host to have erase capacity to enable trim or
> discard feature in supported eMMC device.
> 
> Signed-off-by: Puthikorn Voravootivat <puthik@chromium.org>
> ---
> In mmc_init_queue() before setting up the discard function, mmc driver
> will call mmc_can_erase() which will always return 0 because the host
> erase capacity is not set anywhere. So to enable discard function, we
> need to add erase capacity to the host.
> 
>  drivers/mmc/host/dw_mmc.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
> index 55cd110..f47f1c1 100644
> --- a/drivers/mmc/host/dw_mmc.c
> +++ b/drivers/mmc/host/dw_mmc.c
> @@ -55,6 +55,8 @@
>  #define DW_MCI_FREQ_MAX	200000000	/* unit: HZ */
>  #define DW_MCI_FREQ_MIN	400000		/* unit: HZ */
>  
> +#define DW_MCI_DEFAULT_CAPS (MMC_CAP_ERASE)
> +

This define didn't need.

>  #ifdef CONFIG_MMC_DW_IDMAC
>  #define IDMAC_INT_CLR		(SDMMC_IDMAC_INT_AI | SDMMC_IDMAC_INT_NI | \
>  				 SDMMC_IDMAC_INT_CES | SDMMC_IDMAC_INT_DU | \
> @@ -2371,6 +2373,8 @@ static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host)
>  		return ERR_PTR(-ENOMEM);
>  	}
>  
> +	pdata->caps |= DW_MCI_DEFAULT_CAPS;
> +
I didn't want to enable by default. If it's possible, how about using dt-file?
Well, if need to enable by default, just use the "pdata->caps |= MMC_CAPS_ERASE;"

Best Regards,
Jaehoon Chung
>  	/* find out number of slots supported */
>  	if (of_property_read_u32(dev->of_node, "num-slots",
>  				&pdata->num_slots)) {
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ulf Hansson Feb. 10, 2014, 9:41 a.m. UTC | #2
On 10 February 2014 05:07, Jaehoon Chung <jh80.chung@samsung.com> wrote:
> Hi,
>
> On 02/08/2014 03:39 AM, Puthikorn Voravootivat wrote:
>> Force host to have erase capacity to enable trim or
>> discard feature in supported eMMC device.
>>
>> Signed-off-by: Puthikorn Voravootivat <puthik@chromium.org>
>> ---
>> In mmc_init_queue() before setting up the discard function, mmc driver
>> will call mmc_can_erase() which will always return 0 because the host
>> erase capacity is not set anywhere. So to enable discard function, we
>> need to add erase capacity to the host.
>>
>>  drivers/mmc/host/dw_mmc.c | 4 ++++
>>  1 file changed, 4 insertions(+)
>>
>> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
>> index 55cd110..f47f1c1 100644
>> --- a/drivers/mmc/host/dw_mmc.c
>> +++ b/drivers/mmc/host/dw_mmc.c
>> @@ -55,6 +55,8 @@
>>  #define DW_MCI_FREQ_MAX      200000000       /* unit: HZ */
>>  #define DW_MCI_FREQ_MIN      400000          /* unit: HZ */
>>
>> +#define DW_MCI_DEFAULT_CAPS (MMC_CAP_ERASE)
>> +
>
> This define didn't need.
>
>>  #ifdef CONFIG_MMC_DW_IDMAC
>>  #define IDMAC_INT_CLR                (SDMMC_IDMAC_INT_AI | SDMMC_IDMAC_INT_NI | \
>>                                SDMMC_IDMAC_INT_CES | SDMMC_IDMAC_INT_DU | \
>> @@ -2371,6 +2373,8 @@ static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host)
>>               return ERR_PTR(-ENOMEM);
>>       }
>>
>> +     pdata->caps |= DW_MCI_DEFAULT_CAPS;
>> +
> I didn't want to enable by default. If it's possible, how about using dt-file?
> Well, if need to enable by default, just use the "pdata->caps |= MMC_CAPS_ERASE;"

Why not push this one step further; remove MMC_CAPS_ERASE and make it
default enabled for all hosts?

Kind regards
Ulf Hansson

>
> Best Regards,
> Jaehoon Chung
>>       /* find out number of slots supported */
>>       if (of_property_read_u32(dev->of_node, "num-slots",
>>                               &pdata->num_slots)) {
>>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jaehoon Chung Feb. 10, 2014, 9:53 a.m. UTC | #3
On 02/10/2014 06:41 PM, Ulf Hansson wrote:
> On 10 February 2014 05:07, Jaehoon Chung <jh80.chung@samsung.com> wrote:
>> Hi,
>>
>> On 02/08/2014 03:39 AM, Puthikorn Voravootivat wrote:
>>> Force host to have erase capacity to enable trim or
>>> discard feature in supported eMMC device.
>>>
>>> Signed-off-by: Puthikorn Voravootivat <puthik@chromium.org>
>>> ---
>>> In mmc_init_queue() before setting up the discard function, mmc driver
>>> will call mmc_can_erase() which will always return 0 because the host
>>> erase capacity is not set anywhere. So to enable discard function, we
>>> need to add erase capacity to the host.
>>>
>>>  drivers/mmc/host/dw_mmc.c | 4 ++++
>>>  1 file changed, 4 insertions(+)
>>>
>>> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
>>> index 55cd110..f47f1c1 100644
>>> --- a/drivers/mmc/host/dw_mmc.c
>>> +++ b/drivers/mmc/host/dw_mmc.c
>>> @@ -55,6 +55,8 @@
>>>  #define DW_MCI_FREQ_MAX      200000000       /* unit: HZ */
>>>  #define DW_MCI_FREQ_MIN      400000          /* unit: HZ */
>>>
>>> +#define DW_MCI_DEFAULT_CAPS (MMC_CAP_ERASE)
>>> +
>>
>> This define didn't need.
>>
>>>  #ifdef CONFIG_MMC_DW_IDMAC
>>>  #define IDMAC_INT_CLR                (SDMMC_IDMAC_INT_AI | SDMMC_IDMAC_INT_NI | \
>>>                                SDMMC_IDMAC_INT_CES | SDMMC_IDMAC_INT_DU | \
>>> @@ -2371,6 +2373,8 @@ static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host)
>>>               return ERR_PTR(-ENOMEM);
>>>       }
>>>
>>> +     pdata->caps |= DW_MCI_DEFAULT_CAPS;
>>> +
>> I didn't want to enable by default. If it's possible, how about using dt-file?
>> Well, if need to enable by default, just use the "pdata->caps |= MMC_CAPS_ERASE;"
> 
> Why not push this one step further; remove MMC_CAPS_ERASE and make it
> default enabled for all hosts?

I think more better that All host used the MMC_CAP_ERASE by default, than this patch.

Best Regards,
Jaehoon Chung

> 
> Kind regards
> Ulf Hansson
> 
>>
>> Best Regards,
>> Jaehoon Chung
>>>       /* find out number of slots supported */
>>>       if (of_property_read_u32(dev->of_node, "num-slots",
>>>                               &pdata->num_slots)) {
>>>
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Puthikorn Voravootivat Feb. 10, 2014, 7:53 p.m. UTC | #4
OK, I will send a v2 patch to make MMC_CAP_ERASE default enabled for all host.

Best Regards,
Puthikorn Voravootivat

On Mon, Feb 10, 2014 at 1:53 AM, Jaehoon Chung <jh80.chung@samsung.com> wrote:
> On 02/10/2014 06:41 PM, Ulf Hansson wrote:
>> On 10 February 2014 05:07, Jaehoon Chung <jh80.chung@samsung.com> wrote:
>>> Hi,
>>>
>>> On 02/08/2014 03:39 AM, Puthikorn Voravootivat wrote:
>>>> Force host to have erase capacity to enable trim or
>>>> discard feature in supported eMMC device.
>>>>
>>>> Signed-off-by: Puthikorn Voravootivat <puthik@chromium.org>
>>>> ---
>>>> In mmc_init_queue() before setting up the discard function, mmc driver
>>>> will call mmc_can_erase() which will always return 0 because the host
>>>> erase capacity is not set anywhere. So to enable discard function, we
>>>> need to add erase capacity to the host.
>>>>
>>>>  drivers/mmc/host/dw_mmc.c | 4 ++++
>>>>  1 file changed, 4 insertions(+)
>>>>
>>>> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
>>>> index 55cd110..f47f1c1 100644
>>>> --- a/drivers/mmc/host/dw_mmc.c
>>>> +++ b/drivers/mmc/host/dw_mmc.c
>>>> @@ -55,6 +55,8 @@
>>>>  #define DW_MCI_FREQ_MAX      200000000       /* unit: HZ */
>>>>  #define DW_MCI_FREQ_MIN      400000          /* unit: HZ */
>>>>
>>>> +#define DW_MCI_DEFAULT_CAPS (MMC_CAP_ERASE)
>>>> +
>>>
>>> This define didn't need.
>>>
>>>>  #ifdef CONFIG_MMC_DW_IDMAC
>>>>  #define IDMAC_INT_CLR                (SDMMC_IDMAC_INT_AI | SDMMC_IDMAC_INT_NI | \
>>>>                                SDMMC_IDMAC_INT_CES | SDMMC_IDMAC_INT_DU | \
>>>> @@ -2371,6 +2373,8 @@ static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host)
>>>>               return ERR_PTR(-ENOMEM);
>>>>       }
>>>>
>>>> +     pdata->caps |= DW_MCI_DEFAULT_CAPS;
>>>> +
>>> I didn't want to enable by default. If it's possible, how about using dt-file?
>>> Well, if need to enable by default, just use the "pdata->caps |= MMC_CAPS_ERASE;"
>>
>> Why not push this one step further; remove MMC_CAPS_ERASE and make it
>> default enabled for all hosts?
>
> I think more better that All host used the MMC_CAP_ERASE by default, than this patch.
>
> Best Regards,
> Jaehoon Chung
>
>>
>> Kind regards
>> Ulf Hansson
>>
>>>
>>> Best Regards,
>>> Jaehoon Chung
>>>>       /* find out number of slots supported */
>>>>       if (of_property_read_u32(dev->of_node, "num-slots",
>>>>                               &pdata->num_slots)) {
>>>>
>>>
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index 55cd110..f47f1c1 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -55,6 +55,8 @@ 
 #define DW_MCI_FREQ_MAX	200000000	/* unit: HZ */
 #define DW_MCI_FREQ_MIN	400000		/* unit: HZ */
 
+#define DW_MCI_DEFAULT_CAPS (MMC_CAP_ERASE)
+
 #ifdef CONFIG_MMC_DW_IDMAC
 #define IDMAC_INT_CLR		(SDMMC_IDMAC_INT_AI | SDMMC_IDMAC_INT_NI | \
 				 SDMMC_IDMAC_INT_CES | SDMMC_IDMAC_INT_DU | \
@@ -2371,6 +2373,8 @@  static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host)
 		return ERR_PTR(-ENOMEM);
 	}
 
+	pdata->caps |= DW_MCI_DEFAULT_CAPS;
+
 	/* find out number of slots supported */
 	if (of_property_read_u32(dev->of_node, "num-slots",
 				&pdata->num_slots)) {