Re: [RFC PATCH] mmc: block: Support the fixed index for mmcblk with aliases nodes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi All,

Are there any other opinion for this RFC patch?

Best Regards,
Jaehoon Chung

On 03/30/2016 09:15 AM, Shawn Lin wrote:
> 在 2016/3/29 18:49, Jisheng Zhang 写道:
>> Hi Jaehoon,
>>
>> On Tue, 29 Mar 2016 19:43:34 +0900 Jaehoon Chung wrote:
>>
>>> This patch is just RFC. I want to know opinions.
>>>
>>> Now, index of mmcblk is allocated in accordance with probing time.
>>> If want to use the mmcblk1 for some device, it can use alias.
>>>
>>> aliases {
>>>     mmc0 = &mmc0;    /* mmcblk0 for eMMC */
>>>     mmc1 = &mmc2;    /* mmcblk1 for SD */
>>>     mmc2 = &mmc1;    /* mmcblk2 for SDIO*/
>>> };
>>
>> I like this feature and we do need it. In the past, we have to put emmc dt node
>> before the sd node, but on our platform, the register base of sdhc host for emmc
>> is higher than the one for sd, putting emmc dt node before sd looks a bit
>> strange, but we have no better solutions.
>>
> 
> :) That is also what I suffered currently. I have to prepare two
> seperate firmware with two diff fstab files to assign the mount point
> since sometime I need to boot from sd, but sometimes from emmc....
> With this patch, I only need to dtc a new dtb... quite simple.
> 
>> Thanks,
>> Jisheng
>>
>>>
>>> If there are no corresponding values, it might be allocated with
>>> existing scheme.
>>>
>>> Signed-off-by: Jaehoon Chung <jh80.chung@xxxxxxxxxxx>
>>> ---
>>>   Documentation/devicetree/bindings/mmc/mmc.txt | 11 +++++++++++
>>>   drivers/mmc/card/block.c                      | 17 ++++++++++++++++-
>>>   2 files changed, 27 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/Documentation/devicetree/bindings/mmc/mmc.txt b/Documentation/devicetree/bindings/mmc/mmc.txt
>>> index ed23b9b..e37ea29 100644
>>> --- a/Documentation/devicetree/bindings/mmc/mmc.txt
>>> +++ b/Documentation/devicetree/bindings/mmc/mmc.txt
>>> @@ -71,6 +71,10 @@ Optional SDIO properties:
>>>   - wakeup-source: Enables wake up of host system on SDIO IRQ assertion
>>>            (Legacy property supported: "enable-sdio-wakeup")
>>>
>>> +Aliases (Optional):
>>> +- If you want to use the fixed index for block device like mmcblkX, should be
>>> +represented in the aliases node using following format "mmc(X)".
>>> +(X is an unique number for the alias.)
>>>
>>>   MMC power sequences:
>>>   --------------------
>>> @@ -145,3 +149,10 @@ mmc3: mmc@01c12000 {
>>>           interrupt-names = "host-wake";
>>>       };
>>>   };
>>> +
>>> +Example with aliases nodes:
>>> +
>>> +aliases {
>>> +    mmc0 = &mmc0;    /* Fixed to mmcblk0 for &mmc0 */
>>> +    mmc1 = &mmc2;    /* Fixed to mmcblk1 for &mmc2 */
>>> +};
>>> diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
>>> index 3bdbe50..6a40de5 100644
>>> --- a/drivers/mmc/card/block.c
>>> +++ b/drivers/mmc/card/block.c
>>> @@ -35,6 +35,7 @@
>>>   #include <linux/capability.h>
>>>   #include <linux/compat.h>
>>>   #include <linux/pm_runtime.h>
>>> +#include <linux/of.h>
>>>
>>>   #include <linux/mmc/ioctl.h>
>>>   #include <linux/mmc/card.h>
>>> @@ -2190,6 +2191,7 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
>>>   {
>>>       struct mmc_blk_data *md;
>>>       int devidx, ret;
>>> +    int idx = 0;
>>>
>>>       devidx = find_first_zero_bit(dev_use, max_devices);
>>>       if (devidx >= max_devices)
>>> @@ -2209,7 +2211,20 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
>>>        * index anymore so we keep track of a name index.
>>>        */
>>>       if (!subname) {
>>> -        md->name_idx = find_first_zero_bit(name_use, max_devices);
>>> +        if (card->dev.parent->parent->of_node)
>>> +            idx = of_alias_get_id(card->dev.parent->parent->of_node,
>>> +                    "mmc");
>>> +
>>> +        if (idx < 0)
>>> +            md->name_idx = find_first_zero_bit(name_use,
>>> +                    max_devices);
>>> +        else {
>>> +            if (test_bit(idx, name_use))
>>> +                md->name_idx = find_first_zero_bit(name_use,
>>> +                        max_devices);
>>> +            else
>>> +                md->name_idx = (unsigned int)idx;
>>> +        }
>>>           __set_bit(md->name_idx, name_use);
>>>       } else
>>>           md->name_idx = ((struct mmc_blk_data *)
>>
>>
>>
>>
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux