Devicetree: Initialization order of mmc block devices?
Jassi Brar
jaswinder.singh at linaro.org
Thu Jul 26 05:39:53 EDT 2012
On 26 July 2012 14:46, Dirk Behme <dirk.behme at de.bosch.com> wrote:
> ---
> drivers/mmc/card/Kconfig | 27 +++++++++++++++++++++++++++
> drivers/mmc/card/block.c | 2 +-
> include/linux/mmc/host.h | 7 +++++++
> 3 files changed, 35 insertions(+), 1 deletion(-)
>
> Index: a/drivers/mmc/card/Kconfig
> ===================================================================
> --- a/drivers/mmc/card/Kconfig
> +++ b/drivers/mmc/card/Kconfig
> @@ -50,6 +50,33 @@ config MMC_BLOCK_BOUNCE
>
> If unsure, say Y here.
>
> +config MMC_SLOTINDEX
> + bool "Use host index for enumerating mmxblkN"
> + depends on MMC_BLOCK
> + default n
> + help
> + On embedded devices, often there is a combination of
> + removable mmc devices (e.g. MMC/SD cards) and hard
> + wired ones (e.g. eMMC). Depending on the hardware
> + configuration, the 'mmcblkN' node might change if
> + the removable device is available or not at boot time.
> +
> + E.g. if the removable device is attached at boot time,
> + it might become mmxblk0. And the hard wired one mmcblk1.
> + But if the removable device isn't there at boot time,
> + the hard wired one will become mmcblk0. This makes it
> + somehow difficult to hard code the root device to the
> + non-removable device and boot fast.
> +
> + Enabling this option will simply associating 'N' of
> + 'mmcblkN' with the slot index instead of the dynamic
> + name index. The slot index is always the same, ensuring
> + that the non-removable mmc device is associated always
> + with the same mmcblkN. Independent of the availability of
> + the removable one.
> +
> + If unsure, say N here.
> +
> config SDIO_UART
> tristate "SDIO UART/GPS class support"
> help
> Index: a/drivers/mmc/card/block.c
> ===================================================================
>
> --- a/drivers/mmc/card/block.c
> +++ b/drivers/mmc/card/block.c
> @@ -1536,7 +1536,7 @@ static struct mmc_blk_data *mmc_blk_allo
> */
>
> snprintf(md->disk->disk_name, sizeof(md->disk->disk_name),
> - "mmcblk%d%s", md->name_idx, subname ? subname : "");
> + "mmcblk%d%s", NAMEIDX, subname ? subname : "");
>
>
> blk_queue_logical_block_size(md->queue.queue, 512);
> set_capacity(md->disk, size);
> Index: a/include/linux/mmc/host.h
> ===================================================================
> --- a/include/linux/mmc/host.h
> +++ b/include/linux/mmc/host.h
> @@ -437,4 +437,11 @@ static inline unsigned int mmc_host_clk_
> return host->ios.clock;
> }
> #endif
> +
> +#ifdef CONFIG_MMC_SLOTINDEX
> +#define NAMEIDX (card->host->index)
> +#else
> +#define NAMEIDX (md->name_idx)
> +#endif
> +
> #endif /* LINUX_MMC_HOST_H */
I would suggest first attempting the original patch ...
snprintf(md->disk->disk_name, sizeof(md->disk->disk_name),
- "mmcblk%d%s", md->name_idx, subname ? subname : "");
+ "mmcblk%d%s", card->host->index, subname ? subname : "");
That would either provide the simplest solution to the problem or
teach us the importance of current naming scheme, in which case you
could try this patch :)
More information about the linux-arm-kernel
mailing list