ARM: Tegra: Seaboard: Re-order sdhci device registration
authorStephen Warren <swarren@nvidia.com>
Tue, 31 May 2011 21:14:08 +0000 (15:14 -0600)
committerColin Cross <ccross@android.com>
Wed, 13 Jul 2011 03:38:39 +0000 (20:38 -0700)
commitcfeb34ede47921a5f9af48313eb4c61adbb6b343
treee1b9b546db5cbb9e95bce75d209bca67f1939048
parent620917de59eeb934b9f8cf35cc2d95c1ac8ed0fc
ARM: Tegra: Seaboard: Re-order sdhci device registration

Ensure the built-in eMMC is always named mmcblk0.

This is important because:

* U-Boot statically assigns MMC device IDs based on controller ID.
* U-Boot assumes that kernel MMC device ID numbering matches U-Boot numbering.
* U-Boot provides a kernel cmdline option e.g. root=/dev/mmcblk0p3 based on
  that numbering.
* The kernel dynamically assigns MMC device IDs based on enumeration order of
  the memory behind the host controller, rather than statically based on host
  controller ID like U-Boot.
* By registering the SDHCI controller for the built-in eMMC first, the
  enumeration of the built-in eMMC is performed first, and hence eMMC gets
  assigned ID 0 just like U-Boot. If the SD slot is filled, it then gets
  assigned ID 1 just like U-Boot.
* If the MMC IDs mismatch, and the system boots from SD card not eMMC, the
  kernel will access the eMMC instead of SD card when attempting to mount
  /dev/mmcblk1p3 as the root fs. If eMMC is not partitioned/formatted, the
  kernel will panic since the root fs can't be mounted. If eMMC is partitioned
  and formatted, the kernel will mount an unexpected filesystem as the root fs.

This change relies on the SDHCI driver performing initial card detection
synchronously during device registration. This is currently the case.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Colin Cross <ccross@android.com>
arch/arm/mach-tegra/board-seaboard.c