Subject: [PATCH] mmc: omap_hsmmc: Add support for Erratum 2.1.1.128 in device tree boot

From: [email-masked] (Nishanth Menon)
Date: Tue, 4 Feb 2014 09:18:15 -0600

On 02/04/2014 06:44 AM, Balaji T K wrote:
> On Tuesday 21 January 2014 04:59 AM, Nishanth Menon wrote:
>> When device is booted using devicetree, platforms impacted by
>> Erratum 2.1.1.128 is not detected easily in the mmc driver. This erratum
>> indicates that the module cannot do multi-block transfers.
>>
>> Handle this by providing a boolean flag to indicate to driver that it is
>> working on a hardware with mentioned limitation.
>>
>> Signed-off-by: Nishanth Menon <[email-masked]>
>> ---
>>
>> This explains the logs I see:
>> OMAP3430 LDP (ES2.2):
>> 	uImage only boot:  http://slexy.org/raw/s2YrbMAi7c
>> 	uImage+dtb concatenated boot: http://slexy.org/raw/s20qVg17T0
>>
>> With the following flag set, device is now able to consistently boot with
>> device tree supported uImage+dtb concat boot.
>>
>>   .../devicetree/bindings/mmc/ti-omap-hsmmc.txt      |    2 ++
>>   drivers/mmc/host/omap_hsmmc.c                      |    3 +++
>>   2 files changed, 5 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
>> index 8c8908a..ab36f8b 100644
>> --- a/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
>> +++ b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
>> @@ -26,6 +26,8 @@ specifier is required.
>>   dma-names: List of DMA request names. These strings correspond
>>   1:1 with the DMA specifiers listed in dmas. The string naming is
>>   to be "rx" and "tx" for RX and TX DMA requests, respectively.
>> +ti,erratum-2.1.1.128: boolean, for OMAP3430/OMAP35xx platforms with broken
>> +multiblock reads
> 
> Rather than ti,errata.. specific property, something like
> caps no/disable multiblock read is more readable in my opinion, Otherwise

Is'nt the better definition to state i have quirk X and allow the
driver to do the necessary thing/things needed to handle quirk X? in
this case, there is just one thing to do: broken multi_block_read, in
the case of other quirks, there might be more than 1 thing to do.. let
driver figure that out, dts just states the h/w capabilty or in this
case, the quirk capability.

> 
> Acked-by: Balaji T K <[email-masked]>
> 
>>
>>   Examples:
>>
>> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
>> index 014bfe5..f2d5940 100644
>> --- a/drivers/mmc/host/omap_hsmmc.c
>> +++ b/drivers/mmc/host/omap_hsmmc.c
>> @@ -1730,6 +1730,9 @@ static struct omap_mmc_platform_data *of_get_hsmmc_pdata(struct device *dev)
>>   	if (of_find_property(np, "ti,dual-volt", NULL))
>>   		pdata->controller_flags |= OMAP_HSMMC_SUPPORTS_DUAL_VOLT;
>>
>> +	if (of_find_property(np, "ti,erratum-2.1.1.128", NULL))
>> +		pdata->controller_flags |= OMAP_HSMMC_BROKEN_MULTIBLOCK_READ;
>> +
>>   	/* This driver only supports 1 slot */
>>   	pdata->nr_slots = 1;
>>   	pdata->slots[0].switch_pin = cd_gpio;
>>
> 

-- 
Regards,
Nishanth Menon