Message ID | 20170202044114.5818-1-jh80.chung@samsung.com |
---|---|
State | Accepted |
Commit | 02ad33aa3a84821c8d9a6c4f167f143f6248b084 |
Delegated to: | Jaehoon Chung |
Headers | show |
On 02/02/2017 01:41 PM, Jaehoon Chung wrote: > If there are alias nodes as "mmc", use the devnum as alias index > number. > This patch is for fixing a problem of Exynos4 series. > Problem is the below thing. > > Current legacy mode: > EXYNOS DWMMC: 0, SAMSUNG SDHCI: 1 > > After using DM: > SAMSUNG SDHCI: 0, EXYNOS DWMMC: 1 > > Dev index is swapped. > Then u-boot can't find the kernel image..because it is already set to 0 as mmcdev. > If change from legacy to DM, also needs to touch all exynos4 config file. > For using simply, just supporting the fixed devnum with alias node is better than it. > > Usage: > alaise { > .... > mmc0 = &sdhci2; /* eMMC */ > mmc1 = &sdhci1; /* SD */ > ... > } > > Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com> > Reviewed-by: Simon Glass <sjg@chromium.org> Applied on u-boot-mmc. Best Regards, Jaehoon Chung > --- > Changelog on V2: > - Add the #ifndef CONFIG_SPL_BUILD > - Fixes the typo by Simon's comment > > drivers/mmc/mmc-uclass.c | 13 ++++++++++--- > 1 file changed, 10 insertions(+), 3 deletions(-) > > diff --git a/drivers/mmc/mmc-uclass.c b/drivers/mmc/mmc-uclass.c > index 2fe5d61..de7acb6 100644 > --- a/drivers/mmc/mmc-uclass.c > +++ b/drivers/mmc/mmc-uclass.c > @@ -13,6 +13,8 @@ > #include <dm/root.h> > #include "mmc_private.h" > > +DECLARE_GLOBAL_DATA_PTR; > + > #ifdef CONFIG_DM_MMC_OPS > int dm_mmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd, > struct mmc_data *data) > @@ -192,10 +194,15 @@ int mmc_bind(struct udevice *dev, struct mmc *mmc, const struct mmc_config *cfg) > { > struct blk_desc *bdesc; > struct udevice *bdev; > - int ret; > + int ret, devnum = -1; > + > +#ifndef CONFIG_SPL_BUILD > + /* Use the fixed index with aliase node's index */ > + fdtdec_get_alias_seq(gd->fdt_blob, "mmc", dev->of_offset, &devnum); > +#endif > > - ret = blk_create_devicef(dev, "mmc_blk", "blk", IF_TYPE_MMC, -1, 512, > - 0, &bdev); > + ret = blk_create_devicef(dev, "mmc_blk", "blk", IF_TYPE_MMC, > + devnum, 512, 0, &bdev); > if (ret) { > debug("Cannot create block device\n"); > return ret; >
diff --git a/drivers/mmc/mmc-uclass.c b/drivers/mmc/mmc-uclass.c index 2fe5d61..de7acb6 100644 --- a/drivers/mmc/mmc-uclass.c +++ b/drivers/mmc/mmc-uclass.c @@ -13,6 +13,8 @@ #include <dm/root.h> #include "mmc_private.h" +DECLARE_GLOBAL_DATA_PTR; + #ifdef CONFIG_DM_MMC_OPS int dm_mmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd, struct mmc_data *data) @@ -192,10 +194,15 @@ int mmc_bind(struct udevice *dev, struct mmc *mmc, const struct mmc_config *cfg) { struct blk_desc *bdesc; struct udevice *bdev; - int ret; + int ret, devnum = -1; + +#ifndef CONFIG_SPL_BUILD + /* Use the fixed index with aliase node's index */ + fdtdec_get_alias_seq(gd->fdt_blob, "mmc", dev->of_offset, &devnum); +#endif - ret = blk_create_devicef(dev, "mmc_blk", "blk", IF_TYPE_MMC, -1, 512, - 0, &bdev); + ret = blk_create_devicef(dev, "mmc_blk", "blk", IF_TYPE_MMC, + devnum, 512, 0, &bdev); if (ret) { debug("Cannot create block device\n"); return ret;