All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode
@ 2014-05-16  4:59 Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 01/14] arm: exynos: pinmux: add sdmmc4 gpio configratuion Jaehoon Chung
                   ` (14 more replies)
  0 siblings, 15 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

If card and host are supported DDR mode, then it can be used the DDR mode.
This patch-set has dependency about beomho's patch-set.
(Based-on u-boot-samsung repository)

It's result for loading image.

sdhci controller ->5260488 bytes read in 259 ms (19.4 MiB/s)
dwmmc controller without DDR mode -> 5260488 bytes read in 202 ms (24.8 MiB/s)
dwmmc controller with DDR mode -> 5260488 bytes read in 118 ms (42.5 MiB/s)

Download the 400M image with lthor.
sdhci controller -> 59.4sec (Avg 6.95 MB/s)
dwmmc controller without DDR mode -> 61.6sec (Avg 6.72MB/s)
dwmmc controller with DDR mode -> 60.4sec (Avg 6.85MB/s)

Beomho Seo (3):
  arm: exynos: pinmux: add sdmmc4 gpio configratuion
  arm: exynos: clock: Remove exynos4x12_set_mmc_clk function
  board: trats2: Enable device tree on Trats2

Jaehoon Chung (11):
  ARM: exynos: board: change the mmc/sd init sequence
  ARM: exynos: clock: modify the set_mmc_clk for exynos4
  ARM: dts: exynos: rename from EXYNOS5_DWMMC to EXYNOS_DWMMC
  mmc: exynos_dw_mmc: restore the property into host
  mmc: remove the unnecessary define and fix the wrong bit control
  mmc: support the DDR mode for eMMC
  mmc: dw_mmc: support the DDR mode
  ARM: dts: exnyos: enable dw-mmc controller
  mmc: exynos_dw_mmc: enable the DDR mode
  ARM: exynos4: enable the dwmmc configuration
  mmc: s5p_sdhci: add the s5p_sdhci_core_init function

 arch/arm/cpu/armv7/exynos/clock.c         |   45 ++-----
 arch/arm/cpu/armv7/exynos/pinmux.c        |   35 ++++-
 arch/arm/dts/exynos4.dtsi                 |    8 ++
 arch/arm/dts/exynos4412-trats2.dts        |   12 ++
 arch/arm/dts/exynos5.dtsi                 |    8 +-
 arch/arm/include/asm/arch-exynos/clk.h    |    5 +
 board/samsung/common/board.c              |   13 +-
 doc/device-tree-bindings/exynos/dwmmc.txt |    8 +-
 drivers/mmc/dw_mmc.c                      |   12 +-
 drivers/mmc/exynos_dw_mmc.c               |  205 +++++++++++++++++++----------
 drivers/mmc/mmc.c                         |   16 ++-
 drivers/mmc/s5p_sdhci.c                   |   42 +++---
 include/configs/exynos4-dt.h              |    3 +
 include/dwmmc.h                           |    5 +
 include/fdtdec.h                          |    2 +-
 include/mmc.h                             |   25 ++--
 lib/fdtdec.c                              |    2 +-
 17 files changed, 275 insertions(+), 171 deletions(-)

-- 
1.7.9.5

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 01/14] arm: exynos: pinmux: add sdmmc4 gpio configratuion
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
@ 2014-05-16  4:59 ` Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 02/14] arm: exynos: clock: Remove exynos4x12_set_mmc_clk function Jaehoon Chung
                   ` (13 subsequent siblings)
  14 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

From: Beomho Seo <beomho.seo@samsung.com>

For use dwmmc controller at exynos4, add SDMMC4 gpio configuration.

Signed-off-by: Beomho Seo <beomho.seo@samsung.com>
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: Piotr Wilczek <p.wilczek@samsung.com>
Cc: Lukasz Majewski <l.majewski@samsung.com>
Cc: Piotr Wilczek <p.wilczek@samsung.com>
Cc: Minkyu Kang <mk7.kang@samsung.com>
---
 arch/arm/cpu/armv7/exynos/pinmux.c |   35 +++++++++++++++++++++++++++++------
 1 file changed, 29 insertions(+), 6 deletions(-)

diff --git a/arch/arm/cpu/armv7/exynos/pinmux.c b/arch/arm/cpu/armv7/exynos/pinmux.c
index ee7c2e5..86a0c75 100644
--- a/arch/arm/cpu/armv7/exynos/pinmux.c
+++ b/arch/arm/cpu/armv7/exynos/pinmux.c
@@ -573,15 +573,26 @@ static void exynos4_i2c_config(int peripheral, int flags)
 static int exynos4_mmc_config(int peripheral, int flags)
 {
 	int i, start = 0, start_ext = 0;
+	unsigned int func, ext_func;
 
 	switch (peripheral) {
 	case PERIPH_ID_SDMMC0:
 		start = EXYNOS4_GPIO_K00;
 		start_ext = EXYNOS4_GPIO_K13;
+		func = S5P_GPIO_FUNC(0x2);
+		ext_func = S5P_GPIO_FUNC(0x3);
 		break;
 	case PERIPH_ID_SDMMC2:
 		start = EXYNOS4_GPIO_K20;
 		start_ext = EXYNOS4_GPIO_K33;
+		func = S5P_GPIO_FUNC(0x2);
+		ext_func = S5P_GPIO_FUNC(0x3);
+		break;
+	case PERIPH_ID_SDMMC4:
+		start = EXYNOS4_GPIO_K00;
+		start_ext = EXYNOS4_GPIO_K13;
+		func = S5P_GPIO_FUNC(0x3);
+		ext_func = S5P_GPIO_FUNC(0x4);
 		break;
 	default:
 		return -1;
@@ -589,13 +600,14 @@ static int exynos4_mmc_config(int peripheral, int flags)
 	for (i = start; i < (start + 7); i++) {
 		if (i == (start + 2))
 			continue;
-		gpio_cfg_pin(i,  S5P_GPIO_FUNC(0x2));
+		gpio_cfg_pin(i,  func);
 		gpio_set_pull(i, S5P_GPIO_PULL_NONE);
 		gpio_set_drv(i, S5P_GPIO_DRV_4X);
 	}
+	/* SDMMC2 do not use 8bit mode@exynos4 */
 	if (flags & PINMUX_FLAG_8BIT_MODE) {
 		for (i = start_ext; i < (start_ext + 4); i++) {
-			gpio_cfg_pin(i,  S5P_GPIO_FUNC(0x3));
+			gpio_cfg_pin(i,  ext_func);
 			gpio_set_pull(i, S5P_GPIO_PULL_NONE);
 			gpio_set_drv(i, S5P_GPIO_DRV_4X);
 		}
@@ -676,15 +688,26 @@ static void exynos4x12_i2c_config(int peripheral, int flags)
 static int exynos4x12_mmc_config(int peripheral, int flags)
 {
 	int i, start = 0, start_ext = 0;
+	unsigned int func, ext_func;
 
 	switch (peripheral) {
 	case PERIPH_ID_SDMMC0:
 		start = EXYNOS4X12_GPIO_K00;
 		start_ext = EXYNOS4X12_GPIO_K13;
+		func = S5P_GPIO_FUNC(0x2);
+		ext_func = S5P_GPIO_FUNC(0x3);
 		break;
 	case PERIPH_ID_SDMMC2:
 		start = EXYNOS4X12_GPIO_K20;
 		start_ext = EXYNOS4X12_GPIO_K33;
+		func = S5P_GPIO_FUNC(0x2);
+		ext_func = S5P_GPIO_FUNC(0x3);
+		break;
+	case PERIPH_ID_SDMMC4:
+		start = EXYNOS4_GPIO_K00;
+		start_ext = EXYNOS4_GPIO_K13;
+		func = S5P_GPIO_FUNC(0x3);
+		ext_func = S5P_GPIO_FUNC(0x4);
 		break;
 	default:
 		return -1;
@@ -692,13 +715,13 @@ static int exynos4x12_mmc_config(int peripheral, int flags)
 	for (i = start; i < (start + 7); i++) {
 		if (i == (start + 2))
 			continue;
-		gpio_cfg_pin(i,  S5P_GPIO_FUNC(0x2));
+		gpio_cfg_pin(i,  func);
 		gpio_set_pull(i, S5P_GPIO_PULL_NONE);
 		gpio_set_drv(i, S5P_GPIO_DRV_4X);
 	}
 	if (flags & PINMUX_FLAG_8BIT_MODE) {
 		for (i = start_ext; i < (start_ext + 4); i++) {
-			gpio_cfg_pin(i,  S5P_GPIO_FUNC(0x3));
+			gpio_cfg_pin(i,  ext_func);
 			gpio_set_pull(i, S5P_GPIO_PULL_NONE);
 			gpio_set_drv(i, S5P_GPIO_DRV_4X);
 		}
@@ -759,10 +782,10 @@ static int exynos4_pinmux_config(int peripheral, int flags)
 		break;
 	case PERIPH_ID_SDMMC0:
 	case PERIPH_ID_SDMMC2:
+	case PERIPH_ID_SDMMC4:
 		return exynos4_mmc_config(peripheral, flags);
 	case PERIPH_ID_SDMMC1:
 	case PERIPH_ID_SDMMC3:
-	case PERIPH_ID_SDMMC4:
 		debug("SDMMC device %d not implemented\n", peripheral);
 		return -1;
 	default:
@@ -794,10 +817,10 @@ static int exynos4x12_pinmux_config(int peripheral, int flags)
 		break;
 	case PERIPH_ID_SDMMC0:
 	case PERIPH_ID_SDMMC2:
+	case PERIPH_ID_SDMMC4:
 		return exynos4x12_mmc_config(peripheral, flags);
 	case PERIPH_ID_SDMMC1:
 	case PERIPH_ID_SDMMC3:
-	case PERIPH_ID_SDMMC4:
 		debug("SDMMC device %d not implemented\n", peripheral);
 		return -1;
 	default:
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 02/14] arm: exynos: clock: Remove exynos4x12_set_mmc_clk function
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 01/14] arm: exynos: pinmux: add sdmmc4 gpio configratuion Jaehoon Chung
@ 2014-05-16  4:59 ` Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 03/14] board: trats2: Enable device tree on Trats2 Jaehoon Chung
                   ` (12 subsequent siblings)
  14 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

From: Beomho Seo <beomho.seo@samsung.com>

exynos4x12_set_mmc_clk function have been removed.
Because, exynos4x12_clock and exynos4_clock return same div_fsys* value.

Signed-off-by: Beomho Seo <beomho.seo@samsung.com>
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: Piotr Wilczek <p.wilczek@samsung.com>
Cc: Lukasz Majewski <l.majewski@samsung.com>
Cc: Piotr Wilczek <p.wilczek@samsung.com>
Cc: Minkyu Kang <mk7.kang@samsung.com>
---
 arch/arm/cpu/armv7/exynos/clock.c |   29 +----------------------------
 1 file changed, 1 insertion(+), 28 deletions(-)

diff --git a/arch/arm/cpu/armv7/exynos/clock.c b/arch/arm/cpu/armv7/exynos/clock.c
index 1fea4d6..2c2029a 100644
--- a/arch/arm/cpu/armv7/exynos/clock.c
+++ b/arch/arm/cpu/armv7/exynos/clock.c
@@ -893,30 +893,6 @@ static void exynos4_set_mmc_clk(int dev_index, unsigned int div)
 			(div & 0xff) << ((dev_index << 4) + 8));
 }
 
-/* exynos4x12: set the mmc clock */
-static void exynos4x12_set_mmc_clk(int dev_index, unsigned int div)
-{
-	struct exynos4x12_clock *clk =
-		(struct exynos4x12_clock *)samsung_get_base_clock();
-	unsigned int addr;
-
-	/*
-	 * CLK_DIV_FSYS1
-	 * MMC0_PRE_RATIO [15:8], MMC1_PRE_RATIO [31:24]
-	 * CLK_DIV_FSYS2
-	 * MMC2_PRE_RATIO [15:8], MMC3_PRE_RATIO [31:24]
-	 */
-	if (dev_index < 2) {
-		addr = (unsigned int)&clk->div_fsys1;
-	} else {
-		addr = (unsigned int)&clk->div_fsys2;
-		dev_index -= 2;
-	}
-
-	clrsetbits_le32(addr, 0xff << ((dev_index << 4) + 8),
-			(div & 0xff) << ((dev_index << 4) + 8));
-}
-
 /* exynos5: set the mmc clock */
 static void exynos5_set_mmc_clk(int dev_index, unsigned int div)
 {
@@ -1612,10 +1588,7 @@ void set_mmc_clk(int dev_index, unsigned int div)
 		else
 			exynos5_set_mmc_clk(dev_index, div);
 	} else {
-		if (proid_is_exynos4412())
-			exynos4x12_set_mmc_clk(dev_index, div);
-		else
-			exynos4_set_mmc_clk(dev_index, div);
+		exynos4_set_mmc_clk(dev_index, div);
 	}
 }
 
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 03/14] board: trats2: Enable device tree on Trats2
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 01/14] arm: exynos: pinmux: add sdmmc4 gpio configratuion Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 02/14] arm: exynos: clock: Remove exynos4x12_set_mmc_clk function Jaehoon Chung
@ 2014-05-16  4:59 ` Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 04/14] ARM: exynos: board: change the mmc/sd init sequence Jaehoon Chung
                   ` (11 subsequent siblings)
  14 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

From: Beomho Seo <beomho.seo@samsung.com>

This patch add dwmmc emmc controller node on exynos4 and exynos4412 device tree.

Signed-off-by: Beomho Seo <beomho.seo@samsung.com>
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: Piotr Wilczek <p.wilczek@samsung.com>
Cc: Lukasz Majewski <l.majewski@samsung.com>
Cc: Piotr Wilczek <p.wilczek@samsung.com>
Cc: Minkyu Kang <mk7.kang@samsung.com>
---
 arch/arm/dts/exynos4.dtsi          |    8 ++++++++
 arch/arm/dts/exynos4412-trats2.dts |    8 ++++++++
 2 files changed, 16 insertions(+)

diff --git a/arch/arm/dts/exynos4.dtsi b/arch/arm/dts/exynos4.dtsi
index 71dc7eb..110eb43 100644
--- a/arch/arm/dts/exynos4.dtsi
+++ b/arch/arm/dts/exynos4.dtsi
@@ -128,6 +128,14 @@
 		interrupts = <0 78 0>;
 	};
 
+	dwmmc at 12550000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,exynos-dwmmc";
+		reg = <0x12550000 0x1000>;
+		interrupts = <0 131 0>;
+	};
+
 	gpio: gpio {
 		gpio-controller;
 		#gpio-cells = <2>;
diff --git a/arch/arm/dts/exynos4412-trats2.dts b/arch/arm/dts/exynos4412-trats2.dts
index 1596f83..5269ae6 100644
--- a/arch/arm/dts/exynos4412-trats2.dts
+++ b/arch/arm/dts/exynos4412-trats2.dts
@@ -31,6 +31,7 @@
 		console = "/serial at 13820000";
 		mmc0 = "sdhci at 12510000";
 		mmc2 = "sdhci at 12530000";
+		mmc4 = "dwmmc at 12550000";
 	};
 
 	i2c at 138d0000 {
@@ -431,4 +432,11 @@
 	sdhci at 12540000 {
 		status = "disabled";
 	};
+
+	dwmmc at 12550000 {
+		samsung,bus-width = <8>;
+		samsung,timing = <0 1 0>;
+		pwr-gpios = <&gpio 0xB2 0>;
+		index = <4>;
+	};
 };
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 04/14] ARM: exynos: board: change the mmc/sd init sequence
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
                   ` (2 preceding siblings ...)
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 03/14] board: trats2: Enable device tree on Trats2 Jaehoon Chung
@ 2014-05-16  4:59 ` Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 05/14] ARM: exynos: clock: modify the set_mmc_clk for exynos4 Jaehoon Chung
                   ` (10 subsequent siblings)
  14 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

Exynos4 can be used the dwmmc controller for eMMC.
Then it needs to check dwmmc_init() at first.

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Reviewed-by: Lukasz Majewski <l.majewski@samsung.com>
Tested-by: Lukasz Majewski <l.majewski@samsung.com>
Acked-by: Lukasz Majewski <l.majewski@samsung.com>
---
 board/samsung/common/board.c |   13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/board/samsung/common/board.c b/board/samsung/common/board.c
index de154e0..9dc7c83 100644
--- a/board/samsung/common/board.c
+++ b/board/samsung/common/board.c
@@ -243,13 +243,6 @@ int board_eth_init(bd_t *bis)
 int board_mmc_init(bd_t *bis)
 {
 	int ret;
-
-#ifdef CONFIG_SDHCI
-	/* mmc initializattion for available channels */
-	ret = exynos_mmc_init(gd->fdt_blob);
-	if (ret)
-		debug("mmc init failed\n");
-#endif
 #ifdef CONFIG_DWMMC
 	/* dwmmc initializattion for available channels */
 	ret = exynos_dwmmc_init(gd->fdt_blob);
@@ -257,6 +250,12 @@ int board_mmc_init(bd_t *bis)
 		debug("dwmmc init failed\n");
 #endif
 
+#ifdef CONFIG_SDHCI
+	/* mmc initializattion for available channels */
+	ret = exynos_mmc_init(gd->fdt_blob);
+	if (ret)
+		debug("mmc init failed\n");
+#endif
 	return ret;
 }
 #endif
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 05/14] ARM: exynos: clock: modify the set_mmc_clk for exynos4
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
                   ` (3 preceding siblings ...)
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 04/14] ARM: exynos: board: change the mmc/sd init sequence Jaehoon Chung
@ 2014-05-16  4:59 ` Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 06/14] ARM: dts: exynos: rename from EXYNOS5_DWMMC to EXYNOS_DWMMC Jaehoon Chung
                   ` (9 subsequent siblings)
  14 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

Modified the mmc_set_clock for eynos4.
The goal of this patch is that fsys-div register should be reset.
And retore the div-value, not using the value of lowlevel_init.
(For using SDMMC4, this patch is needs)

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: Lukasz Majewski <l.majewski@samsung.com>
Acked-by: Lukasz Majewski <l.majewski@samsung.com>
---
 arch/arm/cpu/armv7/exynos/clock.c      |   16 +++++++++++-----
 arch/arm/include/asm/arch-exynos/clk.h |    5 +++++
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/arch/arm/cpu/armv7/exynos/clock.c b/arch/arm/cpu/armv7/exynos/clock.c
index 2c2029a..400d134 100644
--- a/arch/arm/cpu/armv7/exynos/clock.c
+++ b/arch/arm/cpu/armv7/exynos/clock.c
@@ -869,7 +869,7 @@ static void exynos4_set_mmc_clk(int dev_index, unsigned int div)
 {
 	struct exynos4_clock *clk =
 		(struct exynos4_clock *)samsung_get_base_clock();
-	unsigned int addr;
+	unsigned int addr, clear_bit, set_bit;
 
 	/*
 	 * CLK_DIV_FSYS1
@@ -877,20 +877,26 @@ static void exynos4_set_mmc_clk(int dev_index, unsigned int div)
 	 * CLK_DIV_FSYS2
 	 * MMC2_PRE_RATIO [15:8], MMC3_PRE_RATIO [31:24]
 	 * CLK_DIV_FSYS3
-	 * MMC4_PRE_RATIO [15:8]
+	 * MMC4_RATIO [3:0]
 	 */
 	if (dev_index < 2) {
 		addr = (unsigned int)&clk->div_fsys1;
-	}  else if (dev_index == 4) {
+		clear_bit = MASK_PRE_RATIO(dev_index);
+		set_bit = SET_PRE_RATIO(dev_index, div);
+	} else if (dev_index == 4) {
 		addr = (unsigned int)&clk->div_fsys3;
 		dev_index -= 4;
+		/* MMC4 is controlled with the MMC4_RATIO value */
+		clear_bit = MASK_RATIO(dev_index);
+		set_bit = SET_RATIO(dev_index, div);
 	} else {
 		addr = (unsigned int)&clk->div_fsys2;
 		dev_index -= 2;
+		clear_bit = MASK_PRE_RATIO(dev_index);
+		set_bit = SET_PRE_RATIO(dev_index, div);
 	}
 
-	clrsetbits_le32(addr, 0xff << ((dev_index << 4) + 8),
-			(div & 0xff) << ((dev_index << 4) + 8));
+	clrsetbits_le32(addr, clear_bit, set_bit);
 }
 
 /* exynos5: set the mmc clock */
diff --git a/arch/arm/include/asm/arch-exynos/clk.h b/arch/arm/include/asm/arch-exynos/clk.h
index cdeef32..ffbc07e 100644
--- a/arch/arm/include/asm/arch-exynos/clk.h
+++ b/arch/arm/include/asm/arch-exynos/clk.h
@@ -16,6 +16,11 @@
 #define BPLL	5
 #define RPLL	6
 
+#define MASK_PRE_RATIO(x)	(0xff << ((x << 4) + 8))
+#define MASK_RATIO(x)		(0xf << (x << 4))
+#define SET_PRE_RATIO(x, y)	((y & 0xff) << ((x << 4) + 8))
+#define SET_RATIO(x, y)		((y & 0xf) << (x << 4))
+
 enum pll_src_bit {
 	EXYNOS_SRC_MPLL = 6,
 	EXYNOS_SRC_EPLL,
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 06/14] ARM: dts: exynos: rename from EXYNOS5_DWMMC to EXYNOS_DWMMC
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
                   ` (4 preceding siblings ...)
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 05/14] ARM: exynos: clock: modify the set_mmc_clk for exynos4 Jaehoon Chung
@ 2014-05-16  4:59 ` Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 07/14] mmc: exynos_dw_mmc: restore the property into host Jaehoon Chung
                   ` (8 subsequent siblings)
  14 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

Exynos serise can be supported the dw-mmc controller.
So, it's good that used the general prefix as "_EXYNOS_DWMMC".

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
---
 arch/arm/dts/exynos5.dtsi                 |    8 ++++----
 doc/device-tree-bindings/exynos/dwmmc.txt |    8 ++++----
 include/fdtdec.h                          |    2 +-
 lib/fdtdec.c                              |    2 +-
 4 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/arch/arm/dts/exynos5.dtsi b/arch/arm/dts/exynos5.dtsi
index f8c8741..a2b533a 100644
--- a/arch/arm/dts/exynos5.dtsi
+++ b/arch/arm/dts/exynos5.dtsi
@@ -136,7 +136,7 @@
 	mmc at 12200000 {
 		#address-cells = <1>;
 		#size-cells = <0>;
-		compatible = "samsung,exynos5250-dwmmc";
+		compatible = "samsung,exynos-dwmmc";
 		reg = <0x12200000 0x1000>;
 		interrupts = <0 75 0>;
 	};
@@ -144,7 +144,7 @@
 	mmc at 12210000 {
 		#address-cells = <1>;
 		#size-cells = <0>;
-		compatible = "samsung,exynos5250-dwmmc";
+		compatible = "samsung,exynos-dwmmc";
 		reg = <0x12210000 0x1000>;
 		interrupts = <0 76 0>;
 	};
@@ -152,7 +152,7 @@
 	mmc at 12220000 {
 		#address-cells = <1>;
 		#size-cells = <0>;
-		compatible = "samsung,exynos5250-dwmmc";
+		compatible = "samsung,exynos-dwmmc";
 		reg = <0x12220000 0x1000>;
 		interrupts = <0 77 0>;
 	};
@@ -160,7 +160,7 @@
 	mmc at 12230000 {
 		#address-cells = <1>;
 		#size-cells = <0>;
-		compatible = "samsung,exynos5250-dwmmc";
+		compatible = "samsung,exynos-dwmmc";
 		reg = <0x12230000 0x1000>;
 		interrupts = <0 78 0>;
 	};
diff --git a/doc/device-tree-bindings/exynos/dwmmc.txt b/doc/device-tree-bindings/exynos/dwmmc.txt
index 566da3b..694d195 100644
--- a/doc/device-tree-bindings/exynos/dwmmc.txt
+++ b/doc/device-tree-bindings/exynos/dwmmc.txt
@@ -1,18 +1,18 @@
-* Exynos 5250 DWC_mobile_storage
+* Exynos DWC_mobile_storage
 
-The Exynos 5250 provides DWC_mobile_storage interface which supports
+The Exynos provides DWC_mobile_storage interface which supports
 . Embedded Multimedia Cards (EMMC-version 4.5)
 . Secure Digital memory (SD mem-version 2.0)
 . Secure Digital I/O (SDIO-version 3.0)
 . Consumer Electronics Advanced Transport Architecture (CE-ATA-version 1.1)
 
-The Exynos 5250 DWC_mobile_storage provides four channels.
+The Exynos DWC_mobile_storage provides four channels.
 SOC specific and Board specific properties are channel specific.
 
 Required SoC Specific Properties:
 
 - compatible: should be
-	- samsung,exynos5250-dwmmc: for exynos5250 platforms
+	- samsung,exynos-dwmmc: for exynos platforms
 
 - reg: physical base address of the controller and length of memory mapped
 	region.
diff --git a/include/fdtdec.h b/include/fdtdec.h
index 3196cf6..8c751fd 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -81,7 +81,7 @@ enum fdt_compat_id {
 	COMPAT_SAMSUNG_EXYNOS_FIMD,	/* Exynos Display controller */
 	COMPAT_SAMSUNG_EXYNOS_MIPI_DSI,	/* Exynos mipi dsi */
 	COMPAT_SAMSUNG_EXYNOS5_DP,	/* Exynos Display port controller */
-	COMPAT_SAMSUNG_EXYNOS5_DWMMC,	/* Exynos5 DWMMC controller */
+	COMPAT_SAMSUNG_EXYNOS_DWMMC,	/* Exynos DWMMC controller */
 	COMPAT_SAMSUNG_EXYNOS_MMC,	/* Exynos MMC controller */
 	COMPAT_SAMSUNG_EXYNOS_SERIAL,	/* Exynos UART */
 	COMPAT_MAXIM_MAX77686_PMIC,	/* MAX77686 PMIC */
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index 8ecb80f..35e91b4 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -55,7 +55,7 @@ static const char * const compat_names[COMPAT_COUNT] = {
 	COMPAT(SAMSUNG_EXYNOS_FIMD, "samsung,exynos-fimd"),
 	COMPAT(SAMSUNG_EXYNOS_MIPI_DSI, "samsung,exynos-mipi-dsi"),
 	COMPAT(SAMSUNG_EXYNOS5_DP, "samsung,exynos5-dp"),
-	COMPAT(SAMSUNG_EXYNOS5_DWMMC, "samsung,exynos5250-dwmmc"),
+	COMPAT(SAMSUNG_EXYNOS_DWMMC, "samsung,exynos-dwmmc"),
 	COMPAT(SAMSUNG_EXYNOS_MMC, "samsung,exynos-mmc"),
 	COMPAT(SAMSUNG_EXYNOS_SERIAL, "samsung,exynos4210-uart"),
 	COMPAT(MAXIM_MAX77686_PMIC, "maxim,max77686_pmic"),
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 07/14] mmc: exynos_dw_mmc: restore the property into host
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
                   ` (5 preceding siblings ...)
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 06/14] ARM: dts: exynos: rename from EXYNOS5_DWMMC to EXYNOS_DWMMC Jaehoon Chung
@ 2014-05-16  4:59 ` Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 08/14] mmc: remove the unnecessary define and fix the wrong bit control Jaehoon Chung
                   ` (7 subsequent siblings)
  14 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

Restore the platdata(property of dt) into host struct.
Then data's information is maintained and reused anywhere.

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: Lukasz Majewski <l.majewski@samsung.com>
Acked-by: Lukasz Majewski <l.majewski@samsung.com>
---
 drivers/mmc/exynos_dw_mmc.c |  204 +++++++++++++++++++++++++++----------------
 include/dwmmc.h             |    2 +
 2 files changed, 133 insertions(+), 73 deletions(-)

diff --git a/drivers/mmc/exynos_dw_mmc.c b/drivers/mmc/exynos_dw_mmc.c
index de8cdcc..28941ad 100644
--- a/drivers/mmc/exynos_dw_mmc.c
+++ b/drivers/mmc/exynos_dw_mmc.c
@@ -13,6 +13,8 @@
 #include <asm/arch/dwmmc.h>
 #include <asm/arch/clk.h>
 #include <asm/arch/pinmux.h>
+#include <asm/gpio.h>
+#include <asm-generic/errno.h>
 
 #define	DWMMC_MAX_CH_NUM		4
 #define	DWMMC_MAX_FREQ			52000000
@@ -44,7 +46,11 @@ unsigned int exynos_dwmci_get_clk(struct dwmci_host *host)
 			& DWMCI_DIVRATIO_MASK) + 1;
 	sclk = get_mmc_clk(host->dev_index);
 
-	return sclk / clk_div;
+	/*
+	 * Assume to know divider value.
+	 * When clock unit is broken, need to set "host->div"
+	 */
+	return sclk / clk_div / (host->div + 1);
 }
 
 static void exynos_dwmci_board_init(struct dwmci_host *host)
@@ -60,45 +66,32 @@ static void exynos_dwmci_board_init(struct dwmci_host *host)
 	}
 }
 
-/*
- * This function adds the mmc channel to be registered with mmc core.
- * index -	mmc channel number.
- * regbase -	register base address of mmc channel specified in 'index'.
- * bus_width -	operating bus width of mmc channel specified in 'index'.
- * clksel -	value to be written into CLKSEL register in case of FDT.
- *		NULL in case od non-FDT.
- */
-int exynos_dwmci_add_port(int index, u32 regbase, int bus_width, u32 clksel)
+static int exynos_dwmci_core_init(struct dwmci_host *host, int index)
 {
-	struct dwmci_host *host = NULL;
 	unsigned int div;
 	unsigned long freq, sclk;
-	host = malloc(sizeof(struct dwmci_host));
-	if (!host) {
-		printf("dwmci_host malloc fail!\n");
-		return 1;
-	}
+
+	if (host->bus_hz)
+		freq = host->bus_hz;
+	else
+		freq = DWMMC_MAX_FREQ;
+
 	/* request mmc clock vlaue of 52MHz.  */
-	freq = 52000000;
 	sclk = get_mmc_clk(index);
 	div = DIV_ROUND_UP(sclk, freq);
 	/* set the clock divisor for mmc */
 	set_mmc_clk(index, div);
 
 	host->name = "EXYNOS DWMMC";
-	host->ioaddr = (void *)regbase;
-	host->buswidth = bus_width;
 #ifdef CONFIG_EXYNOS5420
 	host->quirks = DWMCI_QUIRK_DISABLE_SMU;
 #endif
 	host->board_init = exynos_dwmci_board_init;
 
-	if (clksel) {
-		host->clksel_val = clksel;
-	} else {
-		if (0 == index)
+	if (!host->clksel_val) {
+		if (index == 0)
 			host->clksel_val = DWMMC_MMC0_CLKSEL_VAL;
-		if (2 == index)
+		else if (index == 2)
 			host->clksel_val = DWMMC_MMC2_CLKSEL_VAL;
 	}
 
@@ -113,69 +106,134 @@ int exynos_dwmci_add_port(int index, u32 regbase, int bus_width, u32 clksel)
 	return 0;
 }
 
+/*
+ * This function adds the mmc channel to be registered with mmc core.
+ * index -	mmc channel number.
+ * regbase -	register base address of mmc channel specified in 'index'.
+ * bus_width -	operating bus width of mmc channel specified in 'index'.
+ * clksel -	value to be written into CLKSEL register in case of FDT.
+ *		NULL in case od non-FDT.
+ */
+int exynos_dwmci_add_port(int index, u32 regbase, int bus_width, u32 clksel)
+{
+	struct dwmci_host *host = NULL;
+
+	host = malloc(sizeof(struct dwmci_host));
+	if (!host) {
+		error("dwmci_host malloc fail!\n");
+		return -ENOMEM;
+	}
+
+	host->ioaddr = (void *)regbase;
+	host->buswidth = bus_width;
+
+	if (clksel)
+		host->clksel_val = clksel;
+
+	return exynos_dwmci_core_init(host, index);
+}
+
 #ifdef CONFIG_OF_CONTROL
-int exynos_dwmmc_init(const void *blob)
+static struct dwmci_host dwmci_host[DWMMC_MAX_CH_NUM];
+
+static int do_dwmci_init(struct dwmci_host *host)
 {
-	int index, bus_width;
-	int node_list[DWMMC_MAX_CH_NUM];
-	int err = 0, dev_id, flag, count, i;
-	u32 clksel_val, base, timing[3];
+	int index, flag, err;
 
-	count = fdtdec_find_aliases_for_id(blob, "mmc",
-				COMPAT_SAMSUNG_EXYNOS5_DWMMC, node_list,
-				DWMMC_MAX_CH_NUM);
+	index = host->dev_index;
 
-	for (i = 0; i < count; i++) {
-		int node = node_list[i];
+	flag = host->buswidth == 8 ? PINMUX_FLAG_8BIT_MODE : PINMUX_FLAG_NONE;
+	err = exynos_pinmux_config(host->dev_id, flag);
+	if (err) {
+		debug("DWMMC not configure\n");
+		return err;
+	}
 
-		if (node <= 0)
-			continue;
+	return exynos_dwmci_core_init(host, index);
+}
 
-		/* Extract device id for each mmc channel */
-		dev_id = pinmux_decode_periph_id(blob, node);
+static int exynos_dwmci_get_config(const void *blob, int node,
+					struct dwmci_host *host)
+{
+	int err = 0;
+	u32 base, clksel_val, timing[3];
 
-		/* Get the bus width from the device node */
-		bus_width = fdtdec_get_int(blob, node, "samsung,bus-width", 0);
-		if (bus_width <= 0) {
-			debug("DWMMC: Can't get bus-width\n");
-			return -1;
-		}
-		if (8 == bus_width)
-			flag = PINMUX_FLAG_8BIT_MODE;
-		else
-			flag = PINMUX_FLAG_NONE;
+	/* Extract device id for each mmc channel */
+	host->dev_id = pinmux_decode_periph_id(blob, node);
 
-		/* config pinmux for each mmc channel */
-		err = exynos_pinmux_config(dev_id, flag);
-		if (err) {
-			debug("DWMMC not configured\n");
-			return err;
-		}
+	/* Get the bus width from the device node */
+	host->buswidth = fdtdec_get_int(blob, node, "samsung,bus-width", 0);
+	if (host->buswidth <= 0) {
+		debug("DWMMC: Can't get bus-width\n");
+		return -EINVAL;
+	}
 
-		index = dev_id - PERIPH_ID_SDMMC0;
+	host->dev_index = fdtdec_get_int(blob, node, "index", host->dev_id);
+	if (host->dev_index == host->dev_id)
+		host->dev_index = host->dev_id - PERIPH_ID_SDMMC0;
 
-		/* Get the base address from the device node */
-		base = fdtdec_get_addr(blob, node, "reg");
-		if (!base) {
-			debug("DWMMC: Can't get base address\n");
-			return -1;
-		}
-		/* Extract the timing info from the node */
-		err = fdtdec_get_int_array(blob, node, "samsung,timing",
-					timing, 3);
+	/* Set the base address from the device node */
+	base = fdtdec_get_addr(blob, node, "reg");
+	if (!base) {
+		debug("DWMMC: Can't get base address\n");
+		return -EINVAL;
+	}
+	host->ioaddr = (void *)base;
+
+	/* Extract the timing info from the node */
+	err =  fdtdec_get_int_array(blob, node, "samsung,timing", timing, 3);
+	if (err) {
+		debug("Can't get sdr-timings for devider\n");
+		return -EINVAL;
+	}
+
+	clksel_val = (DWMCI_SET_SAMPLE_CLK(timing[0]) |
+			DWMCI_SET_DRV_CLK(timing[1]) |
+			DWMCI_SET_DIV_RATIO(timing[2]));
+	if (clksel_val)
+		host->clksel_val = clksel_val;
+
+	host->fifoth_val = fdtdec_get_int(blob, node, "fifoth_val", 0);
+	host->bus_hz = fdtdec_get_int(blob, node, "bus_hz", 0);
+	host->div = fdtdec_get_int(blob, node, "div", 0);
+
+	return 0;
+}
+
+static int exynos_dwmci_process_node(const void *blob,
+					int node_list[], int count)
+{
+	struct dwmci_host *host;
+	int i, node, err;
+
+	for (i = 0; i < count; i++) {
+		node = node_list[i];
+		if (node <= 0)
+			continue;
+		host = &dwmci_host[i];
+		err = exynos_dwmci_get_config(blob, node, host);
 		if (err) {
-			debug("Can't get sdr-timings for divider\n");
-			return -1;
+			debug("%s: failed to decode dev %d\n", __func__, i);
+			return err;
 		}
 
-		clksel_val = (DWMCI_SET_SAMPLE_CLK(timing[0]) |
-				DWMCI_SET_DRV_CLK(timing[1]) |
-				DWMCI_SET_DIV_RATIO(timing[2]));
-		/* Initialise each mmc channel */
-		err = exynos_dwmci_add_port(index, base, bus_width, clksel_val);
-		if (err)
-			debug("dwmmc Channel-%d init failed\n", index);
+		do_dwmci_init(host);
 	}
 	return 0;
 }
+
+int exynos_dwmmc_init(const void *blob)
+{
+	int compat_id;
+	int node_list[DWMMC_MAX_CH_NUM];
+	int err = 0, count;
+
+	compat_id = COMPAT_SAMSUNG_EXYNOS_DWMMC;
+
+	count = fdtdec_find_aliases_for_id(blob, "mmc",
+				compat_id, node_list, DWMMC_MAX_CH_NUM);
+	err = exynos_dwmci_process_node(blob, node_list, count);
+
+	return err;
+}
 #endif
diff --git a/include/dwmmc.h b/include/dwmmc.h
index c9bdf51..14c7db8 100644
--- a/include/dwmmc.h
+++ b/include/dwmmc.h
@@ -134,7 +134,9 @@ struct dwmci_host {
 	unsigned int version;
 	unsigned int clock;
 	unsigned int bus_hz;
+	unsigned int div;
 	int dev_index;
+	int dev_id;
 	int buswidth;
 	u32 clksel_val;
 	u32 fifoth_val;
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 08/14] mmc: remove the unnecessary define and fix the wrong bit control
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
                   ` (6 preceding siblings ...)
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 07/14] mmc: exynos_dw_mmc: restore the property into host Jaehoon Chung
@ 2014-05-16  4:59 ` Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 09/14] mmc: support the DDR mode for eMMC Jaehoon Chung
                   ` (6 subsequent siblings)
  14 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Reviewed-by: Lukasz Majeski <l.majewski@samsung.com>
Tested-by: Lukasz Majewski <l.majewski@samsung.com>
Acked-by: Lukasz Majewski <l.majewski@samsung.com>
---
 drivers/mmc/mmc.c |    2 +-
 include/mmc.h     |   18 ++++++------------
 2 files changed, 7 insertions(+), 13 deletions(-)

diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 16051e5..dd6a6ef 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -514,7 +514,7 @@ static int mmc_change_freq(struct mmc *mmc)
 		return 0;
 
 	/* High Speed is set, there are two types: 52MHz and 26MHz */
-	if (cardtype & MMC_HS_52MHZ)
+	if (cardtype & EXT_CSD_CARD_TYPE_52)
 		mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
 	else
 		mmc->card_caps |= MMC_MODE_HS;
diff --git a/include/mmc.h b/include/mmc.h
index bc11f45..d5a896f 100644
--- a/include/mmc.h
+++ b/include/mmc.h
@@ -32,15 +32,12 @@
 #define MMC_VERSION_4_41	(MMC_VERSION_MMC | 0x429)
 #define MMC_VERSION_4_5		(MMC_VERSION_MMC | 0x405)
 
-#define MMC_MODE_HS		0x001
-#define MMC_MODE_HS_52MHz	0x010
-#define MMC_MODE_4BIT		0x100
-#define MMC_MODE_8BIT		0x200
-#define MMC_MODE_SPI		0x400
-#define MMC_MODE_HC		0x800
-
-#define MMC_MODE_MASK_WIDTH_BITS (MMC_MODE_4BIT | MMC_MODE_8BIT)
-#define MMC_MODE_WIDTH_BITS_SHIFT 8
+#define MMC_MODE_HS		(1 << 0)
+#define MMC_MODE_HS_52MHz	(1 << 1)
+#define MMC_MODE_4BIT		(1 << 2)
+#define MMC_MODE_8BIT		(1 << 3)
+#define MMC_MODE_SPI		(1 << 4)
+#define MMC_MODE_HC		(1 << 5)
 
 #define SD_DATA_4BIT	0x00040000
 
@@ -98,9 +95,6 @@
 #define SD_HIGHSPEED_BUSY	0x00020000
 #define SD_HIGHSPEED_SUPPORTED	0x00020000
 
-#define MMC_HS_TIMING		0x00000100
-#define MMC_HS_52MHZ		0x2
-
 #define OCR_BUSY		0x80000000
 #define OCR_HCS			0x40000000
 #define OCR_VOLTAGE_MASK	0x007FFF80
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 09/14] mmc: support the DDR mode for eMMC
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
                   ` (7 preceding siblings ...)
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 08/14] mmc: remove the unnecessary define and fix the wrong bit control Jaehoon Chung
@ 2014-05-16  4:59 ` Jaehoon Chung
  2014-05-20 16:37   ` Hector Palacios
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 10/14] mmc: dw_mmc: support the DDR mode Jaehoon Chung
                   ` (5 subsequent siblings)
  14 siblings, 1 reply; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: Lukasz Majewski <l.majewski@samsung.com>
Acked-by: Lukasz Majewski <l.majewski@samsung.com>
---
 drivers/mmc/mmc.c |   16 +++++++++++++---
 include/mmc.h     |    7 +++++++
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index dd6a6ef..08187d5 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -158,6 +158,9 @@ int mmc_set_blocklen(struct mmc *mmc, int len)
 {
 	struct mmc_cmd cmd;
 
+	if (mmc->card_caps & MMC_MODE_DDR_52MHz)
+		return 0;
+
 	cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
 	cmd.resp_type = MMC_RSP_R1;
 	cmd.cmdarg = len;
@@ -514,10 +517,13 @@ static int mmc_change_freq(struct mmc *mmc)
 		return 0;
 
 	/* High Speed is set, there are two types: 52MHz and 26MHz */
-	if (cardtype & EXT_CSD_CARD_TYPE_52)
+	if (cardtype & EXT_CSD_CARD_TYPE_52) {
+		if (cardtype & EXT_CSD_CARD_TYPE_DDR_52)
+			mmc->card_caps |= MMC_MODE_DDR_52MHz;
 		mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
-	else
+	} else {
 		mmc->card_caps |= MMC_MODE_HS;
+	}
 
 	return 0;
 }
@@ -1054,6 +1060,8 @@ static int mmc_startup(struct mmc *mmc)
 
 		/* An array of possible bus widths in order of preference */
 		static unsigned ext_csd_bits[] = {
+			EXT_CSD_DDR_BUS_WIDTH_8,
+			EXT_CSD_DDR_BUS_WIDTH_4,
 			EXT_CSD_BUS_WIDTH_8,
 			EXT_CSD_BUS_WIDTH_4,
 			EXT_CSD_BUS_WIDTH_1,
@@ -1061,13 +1069,15 @@ static int mmc_startup(struct mmc *mmc)
 
 		/* An array to map CSD bus widths to host cap bits */
 		static unsigned ext_to_hostcaps[] = {
+			[EXT_CSD_DDR_BUS_WIDTH_4] = MMC_MODE_DDR_52MHz,
+			[EXT_CSD_DDR_BUS_WIDTH_8] = MMC_MODE_DDR_52MHz,
 			[EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT,
 			[EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT,
 		};
 
 		/* An array to map chosen bus width to an integer */
 		static unsigned widths[] = {
-			8, 4, 1,
+			8, 4, 8, 4, 1,
 		};
 
 		for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) {
diff --git a/include/mmc.h b/include/mmc.h
index d5a896f..aa2d1ca 100644
--- a/include/mmc.h
+++ b/include/mmc.h
@@ -38,6 +38,7 @@
 #define MMC_MODE_8BIT		(1 << 3)
 #define MMC_MODE_SPI		(1 << 4)
 #define MMC_MODE_HC		(1 << 5)
+#define MMC_MODE_DDR_52MHz	(1 << 6)
 
 #define SD_DATA_4BIT	0x00040000
 
@@ -169,10 +170,16 @@
 
 #define EXT_CSD_CARD_TYPE_26	(1 << 0)	/* Card can run at 26MHz */
 #define EXT_CSD_CARD_TYPE_52	(1 << 1)	/* Card can run@52MHz */
+#define EXT_CSD_CARD_TYPE_DDR_1_8V	(1 << 2)
+#define EXT_CSD_CARD_TYPE_DDR_1_2V	(1 << 3)
+#define EXT_CSD_CARD_TYPE_DDR_52	(EXT_CSD_CARD_TYPE_DDR_1_8V \
+					| EXT_CSD_CARD_TYPE_DDR_1_2V)
 
 #define EXT_CSD_BUS_WIDTH_1	0	/* Card is in 1 bit mode */
 #define EXT_CSD_BUS_WIDTH_4	1	/* Card is in 4 bit mode */
 #define EXT_CSD_BUS_WIDTH_8	2	/* Card is in 8 bit mode */
+#define EXT_CSD_DDR_BUS_WIDTH_4	5	/* Card is in 4 bit DDR mode */
+#define EXT_CSD_DDR_BUS_WIDTH_8	6	/* Card is in 8 bit DDR mode */
 
 #define EXT_CSD_BOOT_ACK_ENABLE			(1 << 6)
 #define EXT_CSD_BOOT_PARTITION_ENABLE		(1 << 3)
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 10/14] mmc: dw_mmc: support the DDR mode
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
                   ` (8 preceding siblings ...)
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 09/14] mmc: support the DDR mode for eMMC Jaehoon Chung
@ 2014-05-16  4:59 ` Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 11/14] ARM: dts: exnyos: enable dw-mmc controller Jaehoon Chung
                   ` (4 subsequent siblings)
  14 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

Support the DDR mode at dw-mmc controller

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: Lukasz Majewski <l.majewski@samsung.com>
Acked-by: Lukasz Majewski <l.majewski@samsung.com>
---
 drivers/mmc/dw_mmc.c |   12 ++++++++++--
 include/dwmmc.h      |    3 +++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
index eb4e2be..5bf36a0 100644
--- a/drivers/mmc/dw_mmc.c
+++ b/drivers/mmc/dw_mmc.c
@@ -284,8 +284,8 @@ static int dwmci_setup_bus(struct dwmci_host *host, u32 freq)
 
 static void dwmci_set_ios(struct mmc *mmc)
 {
-	struct dwmci_host *host = mmc->priv;
-	u32 ctype;
+	struct dwmci_host *host = (struct dwmci_host *)mmc->priv;
+	u32 ctype, regs;
 
 	debug("Buswidth = %d, clock: %d\n",mmc->bus_width, mmc->clock);
 
@@ -304,6 +304,14 @@ static void dwmci_set_ios(struct mmc *mmc)
 
 	dwmci_writel(host, DWMCI_CTYPE, ctype);
 
+	regs = dwmci_readl(host, DWMCI_UHS_REG);
+	if (mmc->card_caps & MMC_MODE_DDR_52MHz)
+		regs |= DWMCI_DDR_MODE;
+	else
+		regs &= DWMCI_DDR_MODE;
+
+	dwmci_writel(host, DWMCI_UHS_REG, regs);
+
 	if (host->clksel)
 		host->clksel(host);
 }
diff --git a/include/dwmmc.h b/include/dwmmc.h
index 14c7db8..b67f11b 100644
--- a/include/dwmmc.h
+++ b/include/dwmmc.h
@@ -123,6 +123,9 @@
 #define DWMCI_BMOD_IDMAC_FB	(1 << 1)
 #define DWMCI_BMOD_IDMAC_EN	(1 << 7)
 
+/* UHS register */
+#define DWMCI_DDR_MODE	(1 << 16)
+
 /* quirks */
 #define DWMCI_QUIRK_DISABLE_SMU		(1 << 0)
 
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 11/14] ARM: dts: exnyos: enable dw-mmc controller
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
                   ` (9 preceding siblings ...)
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 10/14] mmc: dw_mmc: support the DDR mode Jaehoon Chung
@ 2014-05-16  4:59 ` Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 12/14] mmc: exynos_dw_mmc: enable the DDR mode Jaehoon Chung
                   ` (3 subsequent siblings)
  14 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

Enabled the dw-mmc controller.

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: Lukasz Majewski <l.majewski@samsung.com>
Acked-by: Lukasz Majewski <l.majewski@samsung.com>
---
 arch/arm/dts/exynos4412-trats2.dts |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/arch/arm/dts/exynos4412-trats2.dts b/arch/arm/dts/exynos4412-trats2.dts
index 5269ae6..cc58c87 100644
--- a/arch/arm/dts/exynos4412-trats2.dts
+++ b/arch/arm/dts/exynos4412-trats2.dts
@@ -417,6 +417,7 @@
 		samsung,bus-width = <8>;
 		samsung,timing = <1 3 3>;
 		pwr-gpios = <&gpio 0xB2 0>;
+		status = "disabled";
 	};
 
 	sdhci at 12520000 {
@@ -435,8 +436,11 @@
 
 	dwmmc at 12550000 {
 		samsung,bus-width = <8>;
-		samsung,timing = <0 1 0>;
+		samsung,timing = <2 1 0>;
 		pwr-gpios = <&gpio 0xB2 0>;
+		fifoth_val = <0x203f0040>;
+		bus_hz = <400000000>;
+		div = <0x3>;
 		index = <4>;
 	};
 };
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 12/14] mmc: exynos_dw_mmc: enable the DDR mode
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
                   ` (10 preceding siblings ...)
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 11/14] ARM: dts: exnyos: enable dw-mmc controller Jaehoon Chung
@ 2014-05-16  4:59 ` Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 13/14] ARM: exynos4: enable the dwmmc configuration Jaehoon Chung
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

Set the ddr mode capability by default.

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: Lukasz Majewski <l.majewski@samsung.com>
Acked-by: Lukasz Majewski <l.majewski@samsung.com>
---
 drivers/mmc/exynos_dw_mmc.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/mmc/exynos_dw_mmc.c b/drivers/mmc/exynos_dw_mmc.c
index 28941ad..d96dfe1 100644
--- a/drivers/mmc/exynos_dw_mmc.c
+++ b/drivers/mmc/exynos_dw_mmc.c
@@ -95,6 +95,7 @@ static int exynos_dwmci_core_init(struct dwmci_host *host, int index)
 			host->clksel_val = DWMMC_MMC2_CLKSEL_VAL;
 	}
 
+	host->caps = MMC_MODE_DDR_52MHz;
 	host->clksel = exynos_dwmci_clksel;
 	host->dev_index = index;
 	host->get_mmc_clk = exynos_dwmci_get_clk;
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 13/14] ARM: exynos4: enable the dwmmc configuration
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
                   ` (11 preceding siblings ...)
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 12/14] mmc: exynos_dw_mmc: enable the DDR mode Jaehoon Chung
@ 2014-05-16  4:59 ` Jaehoon Chung
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 14/14] mmc: s5p_sdhci: add the s5p_sdhci_core_init function Jaehoon Chung
  2014-05-16  6:53 ` [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Minkyu Kang
  14 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: Lukasz Majewski <l.majewski@samsung.com>
Acked-by: Lukasz Majewski <l.majewski@samsung.com>
---
 include/configs/exynos4-dt.h |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/include/configs/exynos4-dt.h b/include/configs/exynos4-dt.h
index cbd2d20..0c560ae 100644
--- a/include/configs/exynos4-dt.h
+++ b/include/configs/exynos4-dt.h
@@ -44,6 +44,9 @@
 #define CONFIG_S5P_SDHCI
 #define CONFIG_SDHCI
 #define CONFIG_MMC_SDMA
+#define CONFIG_DWMMC
+#define CONFIG_EXYNOS_DWMMC
+#define CONFIG_BOUNCE_BUFFER
 #define CONFIG_MMC_DEFAULT_DEV	0
 
 /* PWM */
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 14/14] mmc: s5p_sdhci: add the s5p_sdhci_core_init function
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
                   ` (12 preceding siblings ...)
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 13/14] ARM: exynos4: enable the dwmmc configuration Jaehoon Chung
@ 2014-05-16  4:59 ` Jaehoon Chung
  2014-05-16  6:53 ` [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Minkyu Kang
  14 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  4:59 UTC (permalink / raw)
  To: u-boot

To reuse the code, added the s5p_sdhci_core_init function.
Before applied this patch, didn't use the 8-bit mode at exynos baord.
Because it didn't set "MMC_MODE_8BIT".

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: Lukasz Majewski <l.majewski@samsung.com>
Acked-by: Lukasz Majewski <l.majewski@samsung.com>
---
 drivers/mmc/s5p_sdhci.c |   42 +++++++++++++++++-------------------------
 1 file changed, 17 insertions(+), 25 deletions(-)

diff --git a/drivers/mmc/s5p_sdhci.c b/drivers/mmc/s5p_sdhci.c
index ccae4cc..2ff0ec2 100644
--- a/drivers/mmc/s5p_sdhci.c
+++ b/drivers/mmc/s5p_sdhci.c
@@ -65,17 +65,9 @@ static void s5p_sdhci_set_control_reg(struct sdhci_host *host)
 	sdhci_writel(host, ctrl, SDHCI_CONTROL2);
 }
 
-int s5p_sdhci_init(u32 regbase, int index, int bus_width)
+static int s5p_sdhci_core_init(struct sdhci_host *host)
 {
-	struct sdhci_host *host = NULL;
-	host = (struct sdhci_host *)malloc(sizeof(struct sdhci_host));
-	if (!host) {
-		printf("sdhci__host malloc fail!\n");
-		return 1;
-	}
-
 	host->name = S5P_NAME;
-	host->ioaddr = (void *)regbase;
 
 	host->quirks = SDHCI_QUIRK_NO_HISPD_BIT | SDHCI_QUIRK_BROKEN_VOLTAGE |
 		SDHCI_QUIRK_BROKEN_R1B | SDHCI_QUIRK_32BIT_DMA_ADDR |
@@ -85,15 +77,28 @@ int s5p_sdhci_init(u32 regbase, int index, int bus_width)
 
 	host->set_control_reg = &s5p_sdhci_set_control_reg;
 	host->set_clock = set_mmc_clk;
-	host->index = index;
 
 	host->host_caps = MMC_MODE_HC;
-	if (bus_width == 8)
+	if (host->bus_width == 8)
 		host->host_caps |= MMC_MODE_8BIT;
 
 	return add_sdhci(host, 52000000, 400000);
 }
 
+int s5p_sdhci_init(u32 regbase, int index, int bus_width)
+{
+	struct sdhci_host *host = malloc(sizeof(struct sdhci_host));
+	if (!host) {
+		printf("sdhci__host malloc fail!\n");
+		return 1;
+	}
+	host->ioaddr = (void *)regbase;
+	host->index = index;
+	host->bus_width = bus_width;
+
+	return s5p_sdhci_core_init(host);
+}
+
 #ifdef CONFIG_OF_CONTROL
 struct sdhci_host sdhci_host[SDHCI_MAX_HOSTS];
 
@@ -126,20 +131,7 @@ static int do_sdhci_init(struct sdhci_host *host)
 		}
 	}
 
-	host->name = S5P_NAME;
-
-	host->quirks = SDHCI_QUIRK_NO_HISPD_BIT | SDHCI_QUIRK_BROKEN_VOLTAGE |
-		SDHCI_QUIRK_BROKEN_R1B | SDHCI_QUIRK_32BIT_DMA_ADDR |
-		SDHCI_QUIRK_WAIT_SEND_CMD;
-	host->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
-	host->version = sdhci_readw(host, SDHCI_HOST_VERSION);
-
-	host->set_control_reg = &s5p_sdhci_set_control_reg;
-	host->set_clock = set_mmc_clk;
-
-	host->host_caps = MMC_MODE_HC;
-
-	return add_sdhci(host, 52000000, 400000);
+	return s5p_sdhci_core_init(host);
 }
 
 static int sdhci_get_config(const void *blob, int node, struct sdhci_host *host)
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode
  2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
                   ` (13 preceding siblings ...)
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 14/14] mmc: s5p_sdhci: add the s5p_sdhci_core_init function Jaehoon Chung
@ 2014-05-16  6:53 ` Minkyu Kang
  2014-05-16  7:07   ` Jaehoon Chung
  14 siblings, 1 reply; 21+ messages in thread
From: Minkyu Kang @ 2014-05-16  6:53 UTC (permalink / raw)
  To: u-boot

On 16/05/14 13:59, Jaehoon Chung wrote:
> If card and host are supported DDR mode, then it can be used the DDR mode.
> This patch-set has dependency about beomho's patch-set.
> (Based-on u-boot-samsung repository)
> 
> It's result for loading image.
> 
> sdhci controller ->5260488 bytes read in 259 ms (19.4 MiB/s)
> dwmmc controller without DDR mode -> 5260488 bytes read in 202 ms (24.8 MiB/s)
> dwmmc controller with DDR mode -> 5260488 bytes read in 118 ms (42.5 MiB/s)
> 
> Download the 400M image with lthor.
> sdhci controller -> 59.4sec (Avg 6.95 MB/s)
> dwmmc controller without DDR mode -> 61.6sec (Avg 6.72MB/s)
> dwmmc controller with DDR mode -> 60.4sec (Avg 6.85MB/s)
> 
> Beomho Seo (3):
>   arm: exynos: pinmux: add sdmmc4 gpio configratuion
>   arm: exynos: clock: Remove exynos4x12_set_mmc_clk function
>   board: trats2: Enable device tree on Trats2
> 
> Jaehoon Chung (11):
>   ARM: exynos: board: change the mmc/sd init sequence
>   ARM: exynos: clock: modify the set_mmc_clk for exynos4
>   ARM: dts: exynos: rename from EXYNOS5_DWMMC to EXYNOS_DWMMC
>   mmc: exynos_dw_mmc: restore the property into host
>   mmc: remove the unnecessary define and fix the wrong bit control
>   mmc: support the DDR mode for eMMC
>   mmc: dw_mmc: support the DDR mode
>   ARM: dts: exnyos: enable dw-mmc controller
>   mmc: exynos_dw_mmc: enable the DDR mode
>   ARM: exynos4: enable the dwmmc configuration
>   mmc: s5p_sdhci: add the s5p_sdhci_core_init function
> 
>  arch/arm/cpu/armv7/exynos/clock.c         |   45 ++-----
>  arch/arm/cpu/armv7/exynos/pinmux.c        |   35 ++++-
>  arch/arm/dts/exynos4.dtsi                 |    8 ++
>  arch/arm/dts/exynos4412-trats2.dts        |   12 ++
>  arch/arm/dts/exynos5.dtsi                 |    8 +-
>  arch/arm/include/asm/arch-exynos/clk.h    |    5 +
>  board/samsung/common/board.c              |   13 +-
>  doc/device-tree-bindings/exynos/dwmmc.txt |    8 +-
>  drivers/mmc/dw_mmc.c                      |   12 +-
>  drivers/mmc/exynos_dw_mmc.c               |  205 +++++++++++++++++++----------
>  drivers/mmc/mmc.c                         |   16 ++-
>  drivers/mmc/s5p_sdhci.c                   |   42 +++---
>  include/configs/exynos4-dt.h              |    3 +
>  include/dwmmc.h                           |    5 +
>  include/fdtdec.h                          |    2 +-
>  include/mmc.h                             |   25 ++--
>  lib/fdtdec.c                              |    2 +-
>  17 files changed, 275 insertions(+), 171 deletions(-)
> 

applied to u-boot-samsung.

Thanks,
Minkyu Kang.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode
  2014-05-16  6:53 ` [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Minkyu Kang
@ 2014-05-16  7:07   ` Jaehoon Chung
  0 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-16  7:07 UTC (permalink / raw)
  To: u-boot

Hi,

Thanks Minkyu!

To Pantelis,

There are the patches related with mmc. 
So i think you need to check also.(To prevent conflict).

Best Regards,
Jaehoon Chung

On 05/16/2014 03:53 PM, Minkyu Kang wrote:
> On 16/05/14 13:59, Jaehoon Chung wrote:
>> If card and host are supported DDR mode, then it can be used the DDR mode.
>> This patch-set has dependency about beomho's patch-set.
>> (Based-on u-boot-samsung repository)
>>
>> It's result for loading image.
>>
>> sdhci controller ->5260488 bytes read in 259 ms (19.4 MiB/s)
>> dwmmc controller without DDR mode -> 5260488 bytes read in 202 ms (24.8 MiB/s)
>> dwmmc controller with DDR mode -> 5260488 bytes read in 118 ms (42.5 MiB/s)
>>
>> Download the 400M image with lthor.
>> sdhci controller -> 59.4sec (Avg 6.95 MB/s)
>> dwmmc controller without DDR mode -> 61.6sec (Avg 6.72MB/s)
>> dwmmc controller with DDR mode -> 60.4sec (Avg 6.85MB/s)
>>
>> Beomho Seo (3):
>>   arm: exynos: pinmux: add sdmmc4 gpio configratuion
>>   arm: exynos: clock: Remove exynos4x12_set_mmc_clk function
>>   board: trats2: Enable device tree on Trats2
>>
>> Jaehoon Chung (11):
>>   ARM: exynos: board: change the mmc/sd init sequence
>>   ARM: exynos: clock: modify the set_mmc_clk for exynos4
>>   ARM: dts: exynos: rename from EXYNOS5_DWMMC to EXYNOS_DWMMC
>>   mmc: exynos_dw_mmc: restore the property into host
>>   mmc: remove the unnecessary define and fix the wrong bit control
>>   mmc: support the DDR mode for eMMC
>>   mmc: dw_mmc: support the DDR mode
>>   ARM: dts: exnyos: enable dw-mmc controller
>>   mmc: exynos_dw_mmc: enable the DDR mode
>>   ARM: exynos4: enable the dwmmc configuration
>>   mmc: s5p_sdhci: add the s5p_sdhci_core_init function
>>
>>  arch/arm/cpu/armv7/exynos/clock.c         |   45 ++-----
>>  arch/arm/cpu/armv7/exynos/pinmux.c        |   35 ++++-
>>  arch/arm/dts/exynos4.dtsi                 |    8 ++
>>  arch/arm/dts/exynos4412-trats2.dts        |   12 ++
>>  arch/arm/dts/exynos5.dtsi                 |    8 +-
>>  arch/arm/include/asm/arch-exynos/clk.h    |    5 +
>>  board/samsung/common/board.c              |   13 +-
>>  doc/device-tree-bindings/exynos/dwmmc.txt |    8 +-
>>  drivers/mmc/dw_mmc.c                      |   12 +-
>>  drivers/mmc/exynos_dw_mmc.c               |  205 +++++++++++++++++++----------
>>  drivers/mmc/mmc.c                         |   16 ++-
>>  drivers/mmc/s5p_sdhci.c                   |   42 +++---
>>  include/configs/exynos4-dt.h              |    3 +
>>  include/dwmmc.h                           |    5 +
>>  include/fdtdec.h                          |    2 +-
>>  include/mmc.h                             |   25 ++--
>>  lib/fdtdec.c                              |    2 +-
>>  17 files changed, 275 insertions(+), 171 deletions(-)
>>
> 
> applied to u-boot-samsung.
> 
> Thanks,
> Minkyu Kang.
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
> 

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 09/14] mmc: support the DDR mode for eMMC
  2014-05-16  4:59 ` [U-Boot] [PATCHv5 09/14] mmc: support the DDR mode for eMMC Jaehoon Chung
@ 2014-05-20 16:37   ` Hector Palacios
  2014-05-21  2:20     ` Jaehoon Chung
  0 siblings, 1 reply; 21+ messages in thread
From: Hector Palacios @ 2014-05-20 16:37 UTC (permalink / raw)
  To: u-boot

Hi,

On 05/16/2014 06:59 AM, Jaehoon Chung wrote:
> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
> Tested-by: Lukasz Majewski <l.majewski@samsung.com>
> Acked-by: Lukasz Majewski <l.majewski@samsung.com>

What platforms did you test DDR mode on?
I tried this on an Freescale i.MX6 based platform but the driver returned error code 
COM_ERR (-18) when trying to switch to any of the DDR modes. I guess the fsl_esdhc.c 
driver needs some adaptation for DDR to work.

Best regards,
--
Hector Palacios

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 09/14] mmc: support the DDR mode for eMMC
  2014-05-20 16:37   ` Hector Palacios
@ 2014-05-21  2:20     ` Jaehoon Chung
  2014-05-21 11:52       ` Hector Palacios
  0 siblings, 1 reply; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-21  2:20 UTC (permalink / raw)
  To: u-boot

Hi, Hector.

On 05/21/2014 01:37 AM, Hector Palacios wrote:
> Hi,
> 
> On 05/16/2014 06:59 AM, Jaehoon Chung wrote:
>> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
>> Tested-by: Lukasz Majewski <l.majewski@samsung.com>
>> Acked-by: Lukasz Majewski <l.majewski@samsung.com>
> 
> What platforms did you test DDR mode on?

I have tested DDR mode with exynos board.

> I tried this on an Freescale i.MX6 based platform but the driver returned error code COM_ERR (-18) when trying to switch to any of the DDR modes. I guess the fsl_esdhc.c driver needs some adaptation for DDR to work.

I didn't know how work DDR mode at fsl_esdhc.c.(If you share the host controller TRM, it's helpful to me.)
Host controller also need to change the DDR mode.

I wonder your board didn't work not to enable the DDR mode?

Best Regards,
Jaehoon Chung

> 
> Best regards,
> -- 
> Hector Palacios
> 

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 09/14] mmc: support the DDR mode for eMMC
  2014-05-21  2:20     ` Jaehoon Chung
@ 2014-05-21 11:52       ` Hector Palacios
  2014-05-23  2:20         ` Jaehoon Chung
  0 siblings, 1 reply; 21+ messages in thread
From: Hector Palacios @ 2014-05-21 11:52 UTC (permalink / raw)
  To: u-boot

On 05/21/2014 04:20 AM, Jaehoon Chung wrote:
> Hi, Hector.
>
> On 05/21/2014 01:37 AM, Hector Palacios wrote:
>> Hi,
>>
>> On 05/16/2014 06:59 AM, Jaehoon Chung wrote:
>>> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
>>> Tested-by: Lukasz Majewski <l.majewski@samsung.com>
>>> Acked-by: Lukasz Majewski <l.majewski@samsung.com>
>>
>> What platforms did you test DDR mode on?
>
> I have tested DDR mode with exynos board.
>
>> I tried this on an Freescale i.MX6 based platform but the driver returned error code COM_ERR (-18) when trying to switch to any of the DDR modes. I guess the fsl_esdhc.c driver needs some adaptation for DDR to work.
>
> I didn't know how work DDR mode at fsl_esdhc.c.(If you share the host controller TRM, it's helpful to me.)
> Host controller also need to change the DDR mode.
>
> I wonder your board didn't work not to enable the DDR mode?

Thank you, yes the fsl_esdhc.c driver does not yet support enabling of DDR mode.
I think it should be easy to implement, I believe it is just a question of changing 
the clock frequency.

Best regards,
--
Hector Palacios

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCHv5 09/14] mmc: support the DDR mode for eMMC
  2014-05-21 11:52       ` Hector Palacios
@ 2014-05-23  2:20         ` Jaehoon Chung
  0 siblings, 0 replies; 21+ messages in thread
From: Jaehoon Chung @ 2014-05-23  2:20 UTC (permalink / raw)
  To: u-boot

On 05/21/2014 08:52 PM, Hector Palacios wrote:
> On 05/21/2014 04:20 AM, Jaehoon Chung wrote:
>> Hi, Hector.
>>
>> On 05/21/2014 01:37 AM, Hector Palacios wrote:
>>> Hi,
>>>
>>> On 05/16/2014 06:59 AM, Jaehoon Chung wrote:
>>>> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
>>>> Tested-by: Lukasz Majewski <l.majewski@samsung.com>
>>>> Acked-by: Lukasz Majewski <l.majewski@samsung.com>
>>>
>>> What platforms did you test DDR mode on?
>>
>> I have tested DDR mode with exynos board.
>>
>>> I tried this on an Freescale i.MX6 based platform but the driver returned error code COM_ERR (-18) when trying to switch to any of the DDR modes. I guess the fsl_esdhc.c driver needs some adaptation for DDR to work.
>>
>> I didn't know how work DDR mode at fsl_esdhc.c.(If you share the host controller TRM, it's helpful to me.)
>> Host controller also need to change the DDR mode.
>>
>> I wonder your board didn't work not to enable the DDR mode?
> 
> Thank you, yes the fsl_esdhc.c driver does not yet support enabling of DDR mode.
> I think it should be easy to implement, I believe it is just a question of changing the clock frequency.
I need to change the clock frequency, too.
I guess that if controller support the DDR mode, there is a register relevant to DDR mode.

Best Regards,
Jaehoon Chung
> 
> Best regards,
> -- 
> Hector Palacios
> 

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2014-05-23  2:20 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-05-16  4:59 [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Jaehoon Chung
2014-05-16  4:59 ` [U-Boot] [PATCHv5 01/14] arm: exynos: pinmux: add sdmmc4 gpio configratuion Jaehoon Chung
2014-05-16  4:59 ` [U-Boot] [PATCHv5 02/14] arm: exynos: clock: Remove exynos4x12_set_mmc_clk function Jaehoon Chung
2014-05-16  4:59 ` [U-Boot] [PATCHv5 03/14] board: trats2: Enable device tree on Trats2 Jaehoon Chung
2014-05-16  4:59 ` [U-Boot] [PATCHv5 04/14] ARM: exynos: board: change the mmc/sd init sequence Jaehoon Chung
2014-05-16  4:59 ` [U-Boot] [PATCHv5 05/14] ARM: exynos: clock: modify the set_mmc_clk for exynos4 Jaehoon Chung
2014-05-16  4:59 ` [U-Boot] [PATCHv5 06/14] ARM: dts: exynos: rename from EXYNOS5_DWMMC to EXYNOS_DWMMC Jaehoon Chung
2014-05-16  4:59 ` [U-Boot] [PATCHv5 07/14] mmc: exynos_dw_mmc: restore the property into host Jaehoon Chung
2014-05-16  4:59 ` [U-Boot] [PATCHv5 08/14] mmc: remove the unnecessary define and fix the wrong bit control Jaehoon Chung
2014-05-16  4:59 ` [U-Boot] [PATCHv5 09/14] mmc: support the DDR mode for eMMC Jaehoon Chung
2014-05-20 16:37   ` Hector Palacios
2014-05-21  2:20     ` Jaehoon Chung
2014-05-21 11:52       ` Hector Palacios
2014-05-23  2:20         ` Jaehoon Chung
2014-05-16  4:59 ` [U-Boot] [PATCHv5 10/14] mmc: dw_mmc: support the DDR mode Jaehoon Chung
2014-05-16  4:59 ` [U-Boot] [PATCHv5 11/14] ARM: dts: exnyos: enable dw-mmc controller Jaehoon Chung
2014-05-16  4:59 ` [U-Boot] [PATCHv5 12/14] mmc: exynos_dw_mmc: enable the DDR mode Jaehoon Chung
2014-05-16  4:59 ` [U-Boot] [PATCHv5 13/14] ARM: exynos4: enable the dwmmc configuration Jaehoon Chung
2014-05-16  4:59 ` [U-Boot] [PATCHv5 14/14] mmc: s5p_sdhci: add the s5p_sdhci_core_init function Jaehoon Chung
2014-05-16  6:53 ` [U-Boot] [PATCHv5 00/14] mmc: exynos: code cleanup and support DDR mode Minkyu Kang
2014-05-16  7:07   ` Jaehoon Chung

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.