All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v3 0/4] ARM: Aspeed: Add SD host controller driver
@ 2019-08-15 19:29 Eddie James
  2019-08-15 19:29 ` [U-Boot] [PATCH v3 1/4] clk: aspeed: Add support for SD clock Eddie James
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Eddie James @ 2019-08-15 19:29 UTC (permalink / raw)
  To: u-boot

This series adds support for the SD host controller on the Aspeed ast2xxx SocS.
It also enables MMC and the SD controller for the ast2500 EVB.

Changes since v2:
 - Remove mmc_initialize call in the ast2500 board init
 - Add OF_CONTROL to the ast2500 EVB configuration
 - Fix the clock-getting code in the driver probe function

Changes since v1:
 - Split the patch up
 - Add defconfig and devicetree changes

Eddie James (4):
  clk: aspeed: Add support for SD clock
  mmc: Add Aspeed SD controller driver
  configs: AST2500 EVB: Enable SD controller
  ARM: dts: ast2500: Add SDHCI nodes

 arch/arm/dts/ast2500-evb.dts                   | 14 ++++
 arch/arm/dts/ast2500-u-boot.dtsi               | 16 +++++
 arch/arm/include/asm/arch-aspeed/scu_ast2500.h |  3 +
 arch/arm/include/asm/gpio.h                    |  3 +-
 configs/evb-ast2500_defconfig                  |  8 +++
 drivers/clk/aspeed/clk_ast2500.c               | 27 ++++++++
 drivers/mmc/Kconfig                            | 11 ++++
 drivers/mmc/Makefile                           |  1 +
 drivers/mmc/aspeed_sdhci.c                     | 90 ++++++++++++++++++++++++++
 drivers/pinctrl/aspeed/pinctrl_ast2500.c       |  2 +
 10 files changed, 174 insertions(+), 1 deletion(-)
 create mode 100644 drivers/mmc/aspeed_sdhci.c

-- 
1.8.3.1

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

* [U-Boot] [PATCH v3 1/4] clk: aspeed: Add support for SD clock
  2019-08-15 19:29 [U-Boot] [PATCH v3 0/4] ARM: Aspeed: Add SD host controller driver Eddie James
@ 2019-08-15 19:29 ` Eddie James
  2019-08-15 19:29 ` [U-Boot] [PATCH v3 2/4] mmc: Add Aspeed SD controller driver Eddie James
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 10+ messages in thread
From: Eddie James @ 2019-08-15 19:29 UTC (permalink / raw)
  To: u-boot

Add code to enable the SD clock on the ast2500 SoC.

Reviewed-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Eddie James <eajames@linux.ibm.com>
---
 arch/arm/include/asm/arch-aspeed/scu_ast2500.h |  3 +++
 drivers/clk/aspeed/clk_ast2500.c               | 27 ++++++++++++++++++++++++++
 drivers/pinctrl/aspeed/pinctrl_ast2500.c       |  2 ++
 3 files changed, 32 insertions(+)

diff --git a/arch/arm/include/asm/arch-aspeed/scu_ast2500.h b/arch/arm/include/asm/arch-aspeed/scu_ast2500.h
index 4988ced..8db4901 100644
--- a/arch/arm/include/asm/arch-aspeed/scu_ast2500.h
+++ b/arch/arm/include/asm/arch-aspeed/scu_ast2500.h
@@ -22,6 +22,8 @@
 #define SCU_MPLL_POST_MASK		(0x3f << SCU_MPLL_POST_SHIFT)
 #define SCU_PCLK_DIV_SHIFT		23
 #define SCU_PCLK_DIV_MASK		(7 << SCU_PCLK_DIV_SHIFT)
+#define SCU_SDCLK_DIV_SHIFT		12
+#define SCU_SDCLK_DIV_MASK		(7 << SCU_SDCLK_DIV_SHIFT)
 #define SCU_HPLL_DENUM_SHIFT		0
 #define SCU_HPLL_DENUM_MASK		0x1f
 #define SCU_HPLL_NUM_SHIFT		5
@@ -107,6 +109,7 @@
 
 #define SCU_CLKSTOP_MAC1		(1 << 20)
 #define SCU_CLKSTOP_MAC2		(1 << 21)
+#define SCU_CLKSTOP_SDCLK		(1 << 27)
 
 #define SCU_D2PLL_EXT1_OFF		(1 << 0)
 #define SCU_D2PLL_EXT1_BYPASS		(1 << 1)
diff --git a/drivers/clk/aspeed/clk_ast2500.c b/drivers/clk/aspeed/clk_ast2500.c
index dbee13a..9249cf9 100644
--- a/drivers/clk/aspeed/clk_ast2500.c
+++ b/drivers/clk/aspeed/clk_ast2500.c
@@ -143,6 +143,17 @@ static ulong ast2500_clk_get_rate(struct clk *clk)
 			rate = rate / apb_div;
 		}
 		break;
+	case BCLK_SDCLK:
+		{
+			ulong apb_div = 4 + 4 * ((readl(&priv->scu->clk_sel1)
+						  & SCU_SDCLK_DIV_MASK)
+						 >> SCU_SDCLK_DIV_SHIFT);
+			rate = ast2500_get_hpll_rate(clkin,
+						     readl(&priv->
+							   scu->h_pll_param));
+			rate = rate / apb_div;
+		}
+		break;
 	case PCLK_UART1:
 		rate = ast2500_get_uart_clk_rate(priv->scu, 1);
 		break;
@@ -436,6 +447,22 @@ static int ast2500_clk_enable(struct clk *clk)
 	struct ast2500_clk_priv *priv = dev_get_priv(clk->dev);
 
 	switch (clk->id) {
+	case BCLK_SDCLK:
+		if (readl(&priv->scu->clk_stop_ctrl1) & SCU_CLKSTOP_SDCLK) {
+			ast_scu_unlock(priv->scu);
+
+			setbits_le32(&priv->scu->sysreset_ctrl1,
+				     SCU_SYSRESET_SDIO);
+			udelay(100);
+			clrbits_le32(&priv->scu->clk_stop_ctrl1,
+				     SCU_CLKSTOP_SDCLK);
+			mdelay(10);
+			clrbits_le32(&priv->scu->sysreset_ctrl1,
+				     SCU_SYSRESET_SDIO);
+
+			ast_scu_lock(priv->scu);
+		}
+		break;
 	/*
 	 * For MAC clocks the clock rate is
 	 * configured based on whether RGMII or RMII mode has been selected
diff --git a/drivers/pinctrl/aspeed/pinctrl_ast2500.c b/drivers/pinctrl/aspeed/pinctrl_ast2500.c
index ed333b9..a6e9c0d 100644
--- a/drivers/pinctrl/aspeed/pinctrl_ast2500.c
+++ b/drivers/pinctrl/aspeed/pinctrl_ast2500.c
@@ -58,6 +58,8 @@ static const struct ast2500_group_config ast2500_groups[] = {
 	{ "MDIO1", 3, (1 << 31) | (1 << 30) },
 	{ "MAC2LINK", 1, (1 << 1) },
 	{ "MDIO2", 5, (1 << 2) },
+	{ "SD1", 5, (1 << 0) },
+	{ "SD2", 5, (1 << 1) },
 };
 
 static int ast2500_pinctrl_get_groups_count(struct udevice *dev)
-- 
1.8.3.1

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

* [U-Boot] [PATCH v3 2/4] mmc: Add Aspeed SD controller driver
  2019-08-15 19:29 [U-Boot] [PATCH v3 0/4] ARM: Aspeed: Add SD host controller driver Eddie James
  2019-08-15 19:29 ` [U-Boot] [PATCH v3 1/4] clk: aspeed: Add support for SD clock Eddie James
@ 2019-08-15 19:29 ` Eddie James
  2019-08-16  6:55   ` Cédric Le Goater
  2019-08-27  7:34   ` Peng Fan
  2019-08-15 19:29 ` [U-Boot] [PATCH v3 3/4] configs: AST2500 EVB: Enable SD controller Eddie James
  2019-08-15 19:29 ` [U-Boot] [PATCH v3 4/4] ARM: dts: ast2500: Add SDHCI nodes Eddie James
  3 siblings, 2 replies; 10+ messages in thread
From: Eddie James @ 2019-08-15 19:29 UTC (permalink / raw)
  To: u-boot

Add support for the Aspeed SD host controller engine.

Signed-off-by: Eddie James <eajames@linux.ibm.com>
---
 arch/arm/include/asm/gpio.h |  3 +-
 drivers/mmc/Kconfig         | 11 ++++++
 drivers/mmc/Makefile        |  1 +
 drivers/mmc/aspeed_sdhci.c  | 90 +++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 104 insertions(+), 1 deletion(-)
 create mode 100644 drivers/mmc/aspeed_sdhci.c

diff --git a/arch/arm/include/asm/gpio.h b/arch/arm/include/asm/gpio.h
index 370031f..38a5922 100644
--- a/arch/arm/include/asm/gpio.h
+++ b/arch/arm/include/asm/gpio.h
@@ -1,6 +1,7 @@
 #if !defined(CONFIG_ARCH_UNIPHIER) && !defined(CONFIG_ARCH_STI) && \
 	!defined(CONFIG_ARCH_K3) && !defined(CONFIG_ARCH_BCM6858) && \
-	!defined(CONFIG_ARCH_BCM63158) && !defined(CONFIG_ARCH_ROCKCHIP)
+	!defined(CONFIG_ARCH_BCM63158) && !defined(CONFIG_ARCH_ROCKCHIP) && \
+	!defined(CONFIG_ARCH_ASPEED)
 #include <asm/arch/gpio.h>
 #endif
 #include <asm-generic/gpio.h>
diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
index c6812f6..536f66a 100644
--- a/drivers/mmc/Kconfig
+++ b/drivers/mmc/Kconfig
@@ -421,6 +421,17 @@ config SPL_MMC_SDHCI_ADMA
 	  This enables support for the ADMA (Advanced DMA) defined
 	  in the SD Host Controller Standard Specification Version 3.00 in SPL.
 
+config MMC_SDHCI_ASPEED
+	bool "Aspeed SDHCI controller"
+	depends on ARCH_ASPEED
+	depends on DM_MMC
+	depends on MMC_SDHCI
+	help
+	  Enables support for the Aspeed SDHCI 2.0 controller present on Aspeed
+	  SoCs. This device is compatible with SD 3.0 and/or MMC 4.3
+	  specifications. On the AST2600, the device is also compatible with
+	  MMC 5.1 and eMMC 3.0.
+
 config MMC_SDHCI_ATMEL
 	bool "Atmel SDHCI controller support"
 	depends on ARCH_AT91
diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile
index 6cc018b..5594195 100644
--- a/drivers/mmc/Makefile
+++ b/drivers/mmc/Makefile
@@ -46,6 +46,7 @@ obj-$(CONFIG_JZ47XX_MMC) += jz_mmc.o
 
 # SDHCI
 obj-$(CONFIG_MMC_SDHCI)			+= sdhci.o
+obj-$(CONFIG_MMC_SDHCI_ASPEED)		+= aspeed_sdhci.o
 obj-$(CONFIG_MMC_SDHCI_ATMEL)		+= atmel_sdhci.o
 obj-$(CONFIG_MMC_SDHCI_BCM2835)		+= bcm2835_sdhci.o
 obj-$(CONFIG_MMC_SDHCI_BCMSTB)		+= bcmstb_sdhci.o
diff --git a/drivers/mmc/aspeed_sdhci.c b/drivers/mmc/aspeed_sdhci.c
new file mode 100644
index 0000000..1321ec3
--- /dev/null
+++ b/drivers/mmc/aspeed_sdhci.c
@@ -0,0 +1,90 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2019 IBM Corp.
+ * Eddie James <eajames@linux.ibm.com>
+ */
+
+#include <common.h>
+#include <clk.h>
+#include <dm.h>
+#include <malloc.h>
+#include <sdhci.h>
+
+struct aspeed_sdhci_plat {
+	struct mmc_config cfg;
+	struct mmc mmc;
+};
+
+static int aspeed_sdhci_probe(struct udevice *dev)
+{
+	struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
+	struct aspeed_sdhci_plat *plat = dev_get_platdata(dev);
+	struct sdhci_host *host = dev_get_priv(dev);
+	u32 max_clk;
+	struct clk clk;
+	int ret;
+
+	ret = clk_get_by_index(dev, 0, &clk);
+	if (ret)
+		return ret;
+
+	ret = clk_enable(&clk);
+	if (ret)
+		goto free;
+
+	host->name = dev->name;
+	host->ioaddr = (void *)devfdt_get_addr(dev);
+
+	max_clk = clk_get_rate(&clk);
+	if (IS_ERR_VALUE(max_clk)) {
+		ret = max_clk;
+		goto err;
+	}
+
+	host->max_clk = max_clk;
+	host->mmc = &plat->mmc;
+	host->mmc->dev = dev;
+	host->mmc->priv = host;
+	upriv->mmc = host->mmc;
+
+	ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0);
+	if (ret)
+		goto err;
+
+	ret = sdhci_probe(dev);
+	if (ret)
+		goto err;
+
+	return 0;
+
+err:
+	clk_disable(&clk);
+free:
+	clk_free(&clk);
+	return ret;
+}
+
+static int aspeed_sdhci_bind(struct udevice *dev)
+{
+	struct aspeed_sdhci_plat *plat = dev_get_platdata(dev);
+
+	return sdhci_bind(dev, &plat->mmc, &plat->cfg);
+}
+
+static const struct udevice_id aspeed_sdhci_ids[] = {
+	{ .compatible = "aspeed,ast2400-sdhci" },
+	{ .compatible = "aspeed,ast2500-sdhci" },
+	{ .compatible = "aspeed,ast2600-sdhci" },
+	{ }
+};
+
+U_BOOT_DRIVER(aspeed_sdhci_drv) = {
+	.name		= "aspeed_sdhci",
+	.id		= UCLASS_MMC,
+	.of_match	= aspeed_sdhci_ids,
+	.ops		= &sdhci_ops,
+	.bind		= aspeed_sdhci_bind,
+	.probe		= aspeed_sdhci_probe,
+	.priv_auto_alloc_size = sizeof(struct sdhci_host),
+	.platdata_auto_alloc_size = sizeof(struct aspeed_sdhci_plat),
+};
-- 
1.8.3.1

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

* [U-Boot] [PATCH v3 3/4] configs: AST2500 EVB: Enable SD controller
  2019-08-15 19:29 [U-Boot] [PATCH v3 0/4] ARM: Aspeed: Add SD host controller driver Eddie James
  2019-08-15 19:29 ` [U-Boot] [PATCH v3 1/4] clk: aspeed: Add support for SD clock Eddie James
  2019-08-15 19:29 ` [U-Boot] [PATCH v3 2/4] mmc: Add Aspeed SD controller driver Eddie James
@ 2019-08-15 19:29 ` Eddie James
  2019-08-16  6:59   ` Cédric Le Goater
  2019-08-28 13:35   ` Peng Fan
  2019-08-15 19:29 ` [U-Boot] [PATCH v3 4/4] ARM: dts: ast2500: Add SDHCI nodes Eddie James
  3 siblings, 2 replies; 10+ messages in thread
From: Eddie James @ 2019-08-15 19:29 UTC (permalink / raw)
  To: u-boot

Enable the MMC subsystem and the Aspeed SD controller. Also enable the
use of the device tree for probing the controller.

Signed-off-by: Eddie James <eajames@linux.ibm.com>
---
 configs/evb-ast2500_defconfig | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/configs/evb-ast2500_defconfig b/configs/evb-ast2500_defconfig
index 59d41cb..b47ca5b 100644
--- a/configs/evb-ast2500_defconfig
+++ b/configs/evb-ast2500_defconfig
@@ -16,6 +16,7 @@ CONFIG_HUSH_PARSER=y
 CONFIG_CMD_I2C=y
 CONFIG_CMD_DHCP=y
 CONFIG_CMD_MII=y
+CONFIG_CMD_MMC=y
 CONFIG_CMD_PING=y
 CONFIG_DEFAULT_DEVICE_TREE="ast2500-evb"
 CONFIG_NET_RANDOM_ETHADDR=y
@@ -36,3 +37,10 @@ CONFIG_SYS_NS16550=y
 CONFIG_SYSRESET=y
 CONFIG_TIMER=y
 CONFIG_WDT=y
+CONFIG_MMC=y
+CONFIG_DM_MMC=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_ASPEED=y
+CONFIG_MMC_VERBOSE=y
+CONFIG_OF_CONTROL=y
+CONFIG_OF_EMBED=y
-- 
1.8.3.1

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

* [U-Boot] [PATCH v3 4/4] ARM: dts: ast2500: Add SDHCI nodes
  2019-08-15 19:29 [U-Boot] [PATCH v3 0/4] ARM: Aspeed: Add SD host controller driver Eddie James
                   ` (2 preceding siblings ...)
  2019-08-15 19:29 ` [U-Boot] [PATCH v3 3/4] configs: AST2500 EVB: Enable SD controller Eddie James
@ 2019-08-15 19:29 ` Eddie James
  3 siblings, 0 replies; 10+ messages in thread
From: Eddie James @ 2019-08-15 19:29 UTC (permalink / raw)
  To: u-boot

Add nodes for the Aspeed SD controllers with their necessary properties.

Reviewed-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Eddie James <eajames@linux.ibm.com>
---
 arch/arm/dts/ast2500-evb.dts     | 14 ++++++++++++++
 arch/arm/dts/ast2500-u-boot.dtsi | 16 ++++++++++++++++
 2 files changed, 30 insertions(+)

diff --git a/arch/arm/dts/ast2500-evb.dts b/arch/arm/dts/ast2500-evb.dts
index ebf44fd..4796ed4 100644
--- a/arch/arm/dts/ast2500-evb.dts
+++ b/arch/arm/dts/ast2500-evb.dts
@@ -59,3 +59,17 @@
 	pinctrl-names = "default";
 	pinctrl-0 = <&pinctrl_mac2link_default &pinctrl_mdio2_default>;
 };
+
+&sdhci0 {
+	status = "okay";
+
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_sd1_default>;
+};
+
+&sdhci1 {
+	status = "okay";
+
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_sd2_default>;
+};
diff --git a/arch/arm/dts/ast2500-u-boot.dtsi b/arch/arm/dts/ast2500-u-boot.dtsi
index 7f80bad..8ac4215 100644
--- a/arch/arm/dts/ast2500-u-boot.dtsi
+++ b/arch/arm/dts/ast2500-u-boot.dtsi
@@ -34,6 +34,22 @@
 
 		apb {
 			u-boot,dm-pre-reloc;
+
+			sdhci0: sdhci at 1e740100 {
+				compatible = "aspeed,ast2500-sdhci";
+				reg = <0x1e740100>;
+				#reset-cells = <1>;
+				clocks = <&scu BCLK_SDCLK>;
+				resets = <&rst AST_RESET_SDIO>;
+			};
+
+			sdhci1: sdhci at 1e740200 {
+				compatible = "aspeed,ast2500-sdhci";
+				reg = <0x1e740200>;
+				#reset-cells = <1>;
+				clocks = <&scu BCLK_SDCLK>;
+				resets = <&rst AST_RESET_SDIO>;
+			};
 		};
 
 	};
-- 
1.8.3.1

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

* [U-Boot] [PATCH v3 2/4] mmc: Add Aspeed SD controller driver
  2019-08-15 19:29 ` [U-Boot] [PATCH v3 2/4] mmc: Add Aspeed SD controller driver Eddie James
@ 2019-08-16  6:55   ` Cédric Le Goater
  2019-08-27  7:34   ` Peng Fan
  1 sibling, 0 replies; 10+ messages in thread
From: Cédric Le Goater @ 2019-08-16  6:55 UTC (permalink / raw)
  To: u-boot

On 15/08/2019 21:29, Eddie James wrote:
> Add support for the Aspeed SD host controller engine.
> 
> Signed-off-by: Eddie James <eajames@linux.ibm.com>


Reviewed-by: Cédric Le Goater <clg@kaod.org>

Thanks,

C.

> ---
>  arch/arm/include/asm/gpio.h |  3 +-
>  drivers/mmc/Kconfig         | 11 ++++++
>  drivers/mmc/Makefile        |  1 +
>  drivers/mmc/aspeed_sdhci.c  | 90 +++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 104 insertions(+), 1 deletion(-)
>  create mode 100644 drivers/mmc/aspeed_sdhci.c
> 
> diff --git a/arch/arm/include/asm/gpio.h b/arch/arm/include/asm/gpio.h
> index 370031f..38a5922 100644
> --- a/arch/arm/include/asm/gpio.h
> +++ b/arch/arm/include/asm/gpio.h
> @@ -1,6 +1,7 @@
>  #if !defined(CONFIG_ARCH_UNIPHIER) && !defined(CONFIG_ARCH_STI) && \
>  	!defined(CONFIG_ARCH_K3) && !defined(CONFIG_ARCH_BCM6858) && \
> -	!defined(CONFIG_ARCH_BCM63158) && !defined(CONFIG_ARCH_ROCKCHIP)
> +	!defined(CONFIG_ARCH_BCM63158) && !defined(CONFIG_ARCH_ROCKCHIP) && \
> +	!defined(CONFIG_ARCH_ASPEED)
>  #include <asm/arch/gpio.h>
>  #endif
>  #include <asm-generic/gpio.h>
> diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
> index c6812f6..536f66a 100644
> --- a/drivers/mmc/Kconfig
> +++ b/drivers/mmc/Kconfig
> @@ -421,6 +421,17 @@ config SPL_MMC_SDHCI_ADMA
>  	  This enables support for the ADMA (Advanced DMA) defined
>  	  in the SD Host Controller Standard Specification Version 3.00 in SPL.
>  
> +config MMC_SDHCI_ASPEED
> +	bool "Aspeed SDHCI controller"
> +	depends on ARCH_ASPEED
> +	depends on DM_MMC
> +	depends on MMC_SDHCI
> +	help
> +	  Enables support for the Aspeed SDHCI 2.0 controller present on Aspeed
> +	  SoCs. This device is compatible with SD 3.0 and/or MMC 4.3
> +	  specifications. On the AST2600, the device is also compatible with
> +	  MMC 5.1 and eMMC 3.0.
> +
>  config MMC_SDHCI_ATMEL
>  	bool "Atmel SDHCI controller support"
>  	depends on ARCH_AT91
> diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile
> index 6cc018b..5594195 100644
> --- a/drivers/mmc/Makefile
> +++ b/drivers/mmc/Makefile
> @@ -46,6 +46,7 @@ obj-$(CONFIG_JZ47XX_MMC) += jz_mmc.o
>  
>  # SDHCI
>  obj-$(CONFIG_MMC_SDHCI)			+= sdhci.o
> +obj-$(CONFIG_MMC_SDHCI_ASPEED)		+= aspeed_sdhci.o
>  obj-$(CONFIG_MMC_SDHCI_ATMEL)		+= atmel_sdhci.o
>  obj-$(CONFIG_MMC_SDHCI_BCM2835)		+= bcm2835_sdhci.o
>  obj-$(CONFIG_MMC_SDHCI_BCMSTB)		+= bcmstb_sdhci.o
> diff --git a/drivers/mmc/aspeed_sdhci.c b/drivers/mmc/aspeed_sdhci.c
> new file mode 100644
> index 0000000..1321ec3
> --- /dev/null
> +++ b/drivers/mmc/aspeed_sdhci.c
> @@ -0,0 +1,90 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright 2019 IBM Corp.
> + * Eddie James <eajames@linux.ibm.com>
> + */
> +
> +#include <common.h>
> +#include <clk.h>
> +#include <dm.h>
> +#include <malloc.h>
> +#include <sdhci.h>
> +
> +struct aspeed_sdhci_plat {
> +	struct mmc_config cfg;
> +	struct mmc mmc;
> +};
> +
> +static int aspeed_sdhci_probe(struct udevice *dev)
> +{
> +	struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
> +	struct aspeed_sdhci_plat *plat = dev_get_platdata(dev);
> +	struct sdhci_host *host = dev_get_priv(dev);
> +	u32 max_clk;
> +	struct clk clk;
> +	int ret;
> +
> +	ret = clk_get_by_index(dev, 0, &clk);
> +	if (ret)
> +		return ret;
> +
> +	ret = clk_enable(&clk);
> +	if (ret)
> +		goto free;
> +
> +	host->name = dev->name;
> +	host->ioaddr = (void *)devfdt_get_addr(dev);
> +
> +	max_clk = clk_get_rate(&clk);
> +	if (IS_ERR_VALUE(max_clk)) {
> +		ret = max_clk;
> +		goto err;
> +	}
> +
> +	host->max_clk = max_clk;
> +	host->mmc = &plat->mmc;
> +	host->mmc->dev = dev;
> +	host->mmc->priv = host;
> +	upriv->mmc = host->mmc;
> +
> +	ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0);
> +	if (ret)
> +		goto err;
> +
> +	ret = sdhci_probe(dev);
> +	if (ret)
> +		goto err;
> +
> +	return 0;
> +
> +err:
> +	clk_disable(&clk);
> +free:
> +	clk_free(&clk);
> +	return ret;
> +}
> +
> +static int aspeed_sdhci_bind(struct udevice *dev)
> +{
> +	struct aspeed_sdhci_plat *plat = dev_get_platdata(dev);
> +
> +	return sdhci_bind(dev, &plat->mmc, &plat->cfg);
> +}
> +
> +static const struct udevice_id aspeed_sdhci_ids[] = {
> +	{ .compatible = "aspeed,ast2400-sdhci" },
> +	{ .compatible = "aspeed,ast2500-sdhci" },
> +	{ .compatible = "aspeed,ast2600-sdhci" },
> +	{ }
> +};
> +
> +U_BOOT_DRIVER(aspeed_sdhci_drv) = {
> +	.name		= "aspeed_sdhci",
> +	.id		= UCLASS_MMC,
> +	.of_match	= aspeed_sdhci_ids,
> +	.ops		= &sdhci_ops,
> +	.bind		= aspeed_sdhci_bind,
> +	.probe		= aspeed_sdhci_probe,
> +	.priv_auto_alloc_size = sizeof(struct sdhci_host),
> +	.platdata_auto_alloc_size = sizeof(struct aspeed_sdhci_plat),
> +};
> 

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

* [U-Boot] [PATCH v3 3/4] configs: AST2500 EVB: Enable SD controller
  2019-08-15 19:29 ` [U-Boot] [PATCH v3 3/4] configs: AST2500 EVB: Enable SD controller Eddie James
@ 2019-08-16  6:59   ` Cédric Le Goater
  2019-08-28 13:35   ` Peng Fan
  1 sibling, 0 replies; 10+ messages in thread
From: Cédric Le Goater @ 2019-08-16  6:59 UTC (permalink / raw)
  To: u-boot

On 15/08/2019 21:29, Eddie James wrote:
> Enable the MMC subsystem and the Aspeed SD controller. Also enable the
> use of the device tree for probing the controller.
> 
> Signed-off-by: Eddie James <eajames@linux.ibm.com>


Reviewed-by: Cédric Le Goater <clg@kaod.org>

Thanks,

C.

> ---
>  configs/evb-ast2500_defconfig | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/configs/evb-ast2500_defconfig b/configs/evb-ast2500_defconfig
> index 59d41cb..b47ca5b 100644
> --- a/configs/evb-ast2500_defconfig
> +++ b/configs/evb-ast2500_defconfig
> @@ -16,6 +16,7 @@ CONFIG_HUSH_PARSER=y
>  CONFIG_CMD_I2C=y
>  CONFIG_CMD_DHCP=y
>  CONFIG_CMD_MII=y
> +CONFIG_CMD_MMC=y
>  CONFIG_CMD_PING=y
>  CONFIG_DEFAULT_DEVICE_TREE="ast2500-evb"
>  CONFIG_NET_RANDOM_ETHADDR=y
> @@ -36,3 +37,10 @@ CONFIG_SYS_NS16550=y
>  CONFIG_SYSRESET=y
>  CONFIG_TIMER=y
>  CONFIG_WDT=y
> +CONFIG_MMC=y
> +CONFIG_DM_MMC=y
> +CONFIG_MMC_SDHCI=y
> +CONFIG_MMC_SDHCI_ASPEED=y
> +CONFIG_MMC_VERBOSE=y
> +CONFIG_OF_CONTROL=y
> +CONFIG_OF_EMBED=y
> 

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

* [U-Boot] [PATCH v3 2/4] mmc: Add Aspeed SD controller driver
  2019-08-15 19:29 ` [U-Boot] [PATCH v3 2/4] mmc: Add Aspeed SD controller driver Eddie James
  2019-08-16  6:55   ` Cédric Le Goater
@ 2019-08-27  7:34   ` Peng Fan
  2019-08-27 14:49     ` Eddie James
  1 sibling, 1 reply; 10+ messages in thread
From: Peng Fan @ 2019-08-27  7:34 UTC (permalink / raw)
  To: u-boot

Hi Eddie,

> Subject: [PATCH v3 2/4] mmc: Add Aspeed SD controller driver

This patch could not be applied to latest tree, could you please check?

Thanks,
Peng.
> 
> Add support for the Aspeed SD host controller engine.
> 
> Signed-off-by: Eddie James <eajames@linux.ibm.com>
> ---
>  arch/arm/include/asm/gpio.h |  3 +-
>  drivers/mmc/Kconfig         | 11 ++++++
>  drivers/mmc/Makefile        |  1 +
>  drivers/mmc/aspeed_sdhci.c  | 90
> +++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 104 insertions(+), 1 deletion(-)  create mode 100644
> drivers/mmc/aspeed_sdhci.c
> 
> diff --git a/arch/arm/include/asm/gpio.h b/arch/arm/include/asm/gpio.h
> index 370031f..38a5922 100644
> --- a/arch/arm/include/asm/gpio.h
> +++ b/arch/arm/include/asm/gpio.h
> @@ -1,6 +1,7 @@
>  #if !defined(CONFIG_ARCH_UNIPHIER) && !defined(CONFIG_ARCH_STI) &&
> \
>  	!defined(CONFIG_ARCH_K3) && !defined(CONFIG_ARCH_BCM6858) &&
> \
> -	!defined(CONFIG_ARCH_BCM63158)
> && !defined(CONFIG_ARCH_ROCKCHIP)
> +	!defined(CONFIG_ARCH_BCM63158)
> && !defined(CONFIG_ARCH_ROCKCHIP) && \
> +	!defined(CONFIG_ARCH_ASPEED)
>  #include <asm/arch/gpio.h>
>  #endif
>  #include <asm-generic/gpio.h>
> diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig index
> c6812f6..536f66a 100644
> --- a/drivers/mmc/Kconfig
> +++ b/drivers/mmc/Kconfig
> @@ -421,6 +421,17 @@ config SPL_MMC_SDHCI_ADMA
>  	  This enables support for the ADMA (Advanced DMA) defined
>  	  in the SD Host Controller Standard Specification Version 3.00 in SPL.
> 
> +config MMC_SDHCI_ASPEED
> +	bool "Aspeed SDHCI controller"
> +	depends on ARCH_ASPEED
> +	depends on DM_MMC
> +	depends on MMC_SDHCI
> +	help
> +	  Enables support for the Aspeed SDHCI 2.0 controller present on
> Aspeed
> +	  SoCs. This device is compatible with SD 3.0 and/or MMC 4.3
> +	  specifications. On the AST2600, the device is also compatible with
> +	  MMC 5.1 and eMMC 3.0.
> +
>  config MMC_SDHCI_ATMEL
>  	bool "Atmel SDHCI controller support"
>  	depends on ARCH_AT91
> diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile index
> 6cc018b..5594195 100644
> --- a/drivers/mmc/Makefile
> +++ b/drivers/mmc/Makefile
> @@ -46,6 +46,7 @@ obj-$(CONFIG_JZ47XX_MMC) += jz_mmc.o
> 
>  # SDHCI
>  obj-$(CONFIG_MMC_SDHCI)			+= sdhci.o
> +obj-$(CONFIG_MMC_SDHCI_ASPEED)		+= aspeed_sdhci.o
>  obj-$(CONFIG_MMC_SDHCI_ATMEL)		+= atmel_sdhci.o
>  obj-$(CONFIG_MMC_SDHCI_BCM2835)		+= bcm2835_sdhci.o
>  obj-$(CONFIG_MMC_SDHCI_BCMSTB)		+= bcmstb_sdhci.o
> diff --git a/drivers/mmc/aspeed_sdhci.c b/drivers/mmc/aspeed_sdhci.c new
> file mode 100644 index 0000000..1321ec3
> --- /dev/null
> +++ b/drivers/mmc/aspeed_sdhci.c
> @@ -0,0 +1,90 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright 2019 IBM Corp.
> + * Eddie James <eajames@linux.ibm.com>
> + */
> +
> +#include <common.h>
> +#include <clk.h>
> +#include <dm.h>
> +#include <malloc.h>
> +#include <sdhci.h>
> +
> +struct aspeed_sdhci_plat {
> +	struct mmc_config cfg;
> +	struct mmc mmc;
> +};
> +
> +static int aspeed_sdhci_probe(struct udevice *dev) {
> +	struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
> +	struct aspeed_sdhci_plat *plat = dev_get_platdata(dev);
> +	struct sdhci_host *host = dev_get_priv(dev);
> +	u32 max_clk;
> +	struct clk clk;
> +	int ret;
> +
> +	ret = clk_get_by_index(dev, 0, &clk);
> +	if (ret)
> +		return ret;
> +
> +	ret = clk_enable(&clk);
> +	if (ret)
> +		goto free;
> +
> +	host->name = dev->name;
> +	host->ioaddr = (void *)devfdt_get_addr(dev);
> +
> +	max_clk = clk_get_rate(&clk);
> +	if (IS_ERR_VALUE(max_clk)) {
> +		ret = max_clk;
> +		goto err;
> +	}
> +
> +	host->max_clk = max_clk;
> +	host->mmc = &plat->mmc;
> +	host->mmc->dev = dev;
> +	host->mmc->priv = host;
> +	upriv->mmc = host->mmc;
> +
> +	ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0);
> +	if (ret)
> +		goto err;
> +
> +	ret = sdhci_probe(dev);
> +	if (ret)
> +		goto err;
> +
> +	return 0;
> +
> +err:
> +	clk_disable(&clk);
> +free:
> +	clk_free(&clk);
> +	return ret;
> +}
> +
> +static int aspeed_sdhci_bind(struct udevice *dev) {
> +	struct aspeed_sdhci_plat *plat = dev_get_platdata(dev);
> +
> +	return sdhci_bind(dev, &plat->mmc, &plat->cfg); }
> +
> +static const struct udevice_id aspeed_sdhci_ids[] = {
> +	{ .compatible = "aspeed,ast2400-sdhci" },
> +	{ .compatible = "aspeed,ast2500-sdhci" },
> +	{ .compatible = "aspeed,ast2600-sdhci" },
> +	{ }
> +};
> +
> +U_BOOT_DRIVER(aspeed_sdhci_drv) = {
> +	.name		= "aspeed_sdhci",
> +	.id		= UCLASS_MMC,
> +	.of_match	= aspeed_sdhci_ids,
> +	.ops		= &sdhci_ops,
> +	.bind		= aspeed_sdhci_bind,
> +	.probe		= aspeed_sdhci_probe,
> +	.priv_auto_alloc_size = sizeof(struct sdhci_host),
> +	.platdata_auto_alloc_size = sizeof(struct aspeed_sdhci_plat), };
> --
> 1.8.3.1

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

* [U-Boot] [PATCH v3 2/4] mmc: Add Aspeed SD controller driver
  2019-08-27  7:34   ` Peng Fan
@ 2019-08-27 14:49     ` Eddie James
  0 siblings, 0 replies; 10+ messages in thread
From: Eddie James @ 2019-08-27 14:49 UTC (permalink / raw)
  To: u-boot


On 8/27/19 2:34 AM, Peng Fan wrote:
> Hi Eddie,
>
>> Subject: [PATCH v3 2/4] mmc: Add Aspeed SD controller driver
> This patch could not be applied to latest tree, could you please check?


Sorry I was a little behind master. I just sent this patch rebased.

Thanks,

Eddie


>
> Thanks,
> Peng.
>> Add support for the Aspeed SD host controller engine.
>>
>> Signed-off-by: Eddie James <eajames@linux.ibm.com>
>> ---
>>   arch/arm/include/asm/gpio.h |  3 +-
>>   drivers/mmc/Kconfig         | 11 ++++++
>>   drivers/mmc/Makefile        |  1 +
>>   drivers/mmc/aspeed_sdhci.c  | 90
>> +++++++++++++++++++++++++++++++++++++++++++++
>>   4 files changed, 104 insertions(+), 1 deletion(-)  create mode 100644
>> drivers/mmc/aspeed_sdhci.c
>>
>> diff --git a/arch/arm/include/asm/gpio.h b/arch/arm/include/asm/gpio.h
>> index 370031f..38a5922 100644
>> --- a/arch/arm/include/asm/gpio.h
>> +++ b/arch/arm/include/asm/gpio.h
>> @@ -1,6 +1,7 @@
>>   #if !defined(CONFIG_ARCH_UNIPHIER) && !defined(CONFIG_ARCH_STI) &&
>> \
>>   	!defined(CONFIG_ARCH_K3) && !defined(CONFIG_ARCH_BCM6858) &&
>> \
>> -	!defined(CONFIG_ARCH_BCM63158)
>> && !defined(CONFIG_ARCH_ROCKCHIP)
>> +	!defined(CONFIG_ARCH_BCM63158)
>> && !defined(CONFIG_ARCH_ROCKCHIP) && \
>> +	!defined(CONFIG_ARCH_ASPEED)
>>   #include <asm/arch/gpio.h>
>>   #endif
>>   #include <asm-generic/gpio.h>
>> diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig index
>> c6812f6..536f66a 100644
>> --- a/drivers/mmc/Kconfig
>> +++ b/drivers/mmc/Kconfig
>> @@ -421,6 +421,17 @@ config SPL_MMC_SDHCI_ADMA
>>   	  This enables support for the ADMA (Advanced DMA) defined
>>   	  in the SD Host Controller Standard Specification Version 3.00 in SPL.
>>
>> +config MMC_SDHCI_ASPEED
>> +	bool "Aspeed SDHCI controller"
>> +	depends on ARCH_ASPEED
>> +	depends on DM_MMC
>> +	depends on MMC_SDHCI
>> +	help
>> +	  Enables support for the Aspeed SDHCI 2.0 controller present on
>> Aspeed
>> +	  SoCs. This device is compatible with SD 3.0 and/or MMC 4.3
>> +	  specifications. On the AST2600, the device is also compatible with
>> +	  MMC 5.1 and eMMC 3.0.
>> +
>>   config MMC_SDHCI_ATMEL
>>   	bool "Atmel SDHCI controller support"
>>   	depends on ARCH_AT91
>> diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile index
>> 6cc018b..5594195 100644
>> --- a/drivers/mmc/Makefile
>> +++ b/drivers/mmc/Makefile
>> @@ -46,6 +46,7 @@ obj-$(CONFIG_JZ47XX_MMC) += jz_mmc.o
>>
>>   # SDHCI
>>   obj-$(CONFIG_MMC_SDHCI)			+= sdhci.o
>> +obj-$(CONFIG_MMC_SDHCI_ASPEED)		+= aspeed_sdhci.o
>>   obj-$(CONFIG_MMC_SDHCI_ATMEL)		+= atmel_sdhci.o
>>   obj-$(CONFIG_MMC_SDHCI_BCM2835)		+= bcm2835_sdhci.o
>>   obj-$(CONFIG_MMC_SDHCI_BCMSTB)		+= bcmstb_sdhci.o
>> diff --git a/drivers/mmc/aspeed_sdhci.c b/drivers/mmc/aspeed_sdhci.c new
>> file mode 100644 index 0000000..1321ec3
>> --- /dev/null
>> +++ b/drivers/mmc/aspeed_sdhci.c
>> @@ -0,0 +1,90 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +/*
>> + * Copyright 2019 IBM Corp.
>> + * Eddie James <eajames@linux.ibm.com>
>> + */
>> +
>> +#include <common.h>
>> +#include <clk.h>
>> +#include <dm.h>
>> +#include <malloc.h>
>> +#include <sdhci.h>
>> +
>> +struct aspeed_sdhci_plat {
>> +	struct mmc_config cfg;
>> +	struct mmc mmc;
>> +};
>> +
>> +static int aspeed_sdhci_probe(struct udevice *dev) {
>> +	struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
>> +	struct aspeed_sdhci_plat *plat = dev_get_platdata(dev);
>> +	struct sdhci_host *host = dev_get_priv(dev);
>> +	u32 max_clk;
>> +	struct clk clk;
>> +	int ret;
>> +
>> +	ret = clk_get_by_index(dev, 0, &clk);
>> +	if (ret)
>> +		return ret;
>> +
>> +	ret = clk_enable(&clk);
>> +	if (ret)
>> +		goto free;
>> +
>> +	host->name = dev->name;
>> +	host->ioaddr = (void *)devfdt_get_addr(dev);
>> +
>> +	max_clk = clk_get_rate(&clk);
>> +	if (IS_ERR_VALUE(max_clk)) {
>> +		ret = max_clk;
>> +		goto err;
>> +	}
>> +
>> +	host->max_clk = max_clk;
>> +	host->mmc = &plat->mmc;
>> +	host->mmc->dev = dev;
>> +	host->mmc->priv = host;
>> +	upriv->mmc = host->mmc;
>> +
>> +	ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0);
>> +	if (ret)
>> +		goto err;
>> +
>> +	ret = sdhci_probe(dev);
>> +	if (ret)
>> +		goto err;
>> +
>> +	return 0;
>> +
>> +err:
>> +	clk_disable(&clk);
>> +free:
>> +	clk_free(&clk);
>> +	return ret;
>> +}
>> +
>> +static int aspeed_sdhci_bind(struct udevice *dev) {
>> +	struct aspeed_sdhci_plat *plat = dev_get_platdata(dev);
>> +
>> +	return sdhci_bind(dev, &plat->mmc, &plat->cfg); }
>> +
>> +static const struct udevice_id aspeed_sdhci_ids[] = {
>> +	{ .compatible = "aspeed,ast2400-sdhci" },
>> +	{ .compatible = "aspeed,ast2500-sdhci" },
>> +	{ .compatible = "aspeed,ast2600-sdhci" },
>> +	{ }
>> +};
>> +
>> +U_BOOT_DRIVER(aspeed_sdhci_drv) = {
>> +	.name		= "aspeed_sdhci",
>> +	.id		= UCLASS_MMC,
>> +	.of_match	= aspeed_sdhci_ids,
>> +	.ops		= &sdhci_ops,
>> +	.bind		= aspeed_sdhci_bind,
>> +	.probe		= aspeed_sdhci_probe,
>> +	.priv_auto_alloc_size = sizeof(struct sdhci_host),
>> +	.platdata_auto_alloc_size = sizeof(struct aspeed_sdhci_plat), };
>> --
>> 1.8.3.1

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

* [U-Boot] [PATCH v3 3/4] configs: AST2500 EVB: Enable SD controller
  2019-08-15 19:29 ` [U-Boot] [PATCH v3 3/4] configs: AST2500 EVB: Enable SD controller Eddie James
  2019-08-16  6:59   ` Cédric Le Goater
@ 2019-08-28 13:35   ` Peng Fan
  1 sibling, 0 replies; 10+ messages in thread
From: Peng Fan @ 2019-08-28 13:35 UTC (permalink / raw)
  To: u-boot

Hi Eddie,

> Subject: [PATCH v3 3/4] configs: AST2500 EVB: Enable SD controller
> 
> Enable the MMC subsystem and the Aspeed SD controller. Also enable the use
> of the device tree for probing the controller.

Would you add a MAINTAINERS file for this board?

Thanks,
Peng.

> 
> Signed-off-by: Eddie James <eajames@linux.ibm.com>
> ---
>  configs/evb-ast2500_defconfig | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/configs/evb-ast2500_defconfig b/configs/evb-ast2500_defconfig
> index 59d41cb..b47ca5b 100644
> --- a/configs/evb-ast2500_defconfig
> +++ b/configs/evb-ast2500_defconfig
> @@ -16,6 +16,7 @@ CONFIG_HUSH_PARSER=y
>  CONFIG_CMD_I2C=y
>  CONFIG_CMD_DHCP=y
>  CONFIG_CMD_MII=y
> +CONFIG_CMD_MMC=y
>  CONFIG_CMD_PING=y
>  CONFIG_DEFAULT_DEVICE_TREE="ast2500-evb"
>  CONFIG_NET_RANDOM_ETHADDR=y
> @@ -36,3 +37,10 @@ CONFIG_SYS_NS16550=y
>  CONFIG_SYSRESET=y
>  CONFIG_TIMER=y
>  CONFIG_WDT=y
> +CONFIG_MMC=y
> +CONFIG_DM_MMC=y
> +CONFIG_MMC_SDHCI=y
> +CONFIG_MMC_SDHCI_ASPEED=y
> +CONFIG_MMC_VERBOSE=y
> +CONFIG_OF_CONTROL=y
> +CONFIG_OF_EMBED=y
> --
> 1.8.3.1

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

end of thread, other threads:[~2019-08-28 13:35 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-08-15 19:29 [U-Boot] [PATCH v3 0/4] ARM: Aspeed: Add SD host controller driver Eddie James
2019-08-15 19:29 ` [U-Boot] [PATCH v3 1/4] clk: aspeed: Add support for SD clock Eddie James
2019-08-15 19:29 ` [U-Boot] [PATCH v3 2/4] mmc: Add Aspeed SD controller driver Eddie James
2019-08-16  6:55   ` Cédric Le Goater
2019-08-27  7:34   ` Peng Fan
2019-08-27 14:49     ` Eddie James
2019-08-15 19:29 ` [U-Boot] [PATCH v3 3/4] configs: AST2500 EVB: Enable SD controller Eddie James
2019-08-16  6:59   ` Cédric Le Goater
2019-08-28 13:35   ` Peng Fan
2019-08-15 19:29 ` [U-Boot] [PATCH v3 4/4] ARM: dts: ast2500: Add SDHCI nodes Eddie James

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.