All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andre Przywara <andre.przywara@arm.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 19/25] rockchip: Add an MMC driver
Date: Tue, 28 Jul 2015 18:00:01 +0100	[thread overview]
Message-ID: <55B7B511.6040805@arm.com> (raw)
In-Reply-To: <1435102150-29438-20-git-send-email-sjg@chromium.org>

Hi Simon,

On 24/06/15 00:29, Simon Glass wrote:
> Add an MMC driver which supports RK3288, but may also support other SoCs.
> It uses the Designware MMC device.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
> 
> Changes in v3: None
> Changes in v2: None
> 
>  drivers/mmc/Kconfig        |  9 +++++
>  drivers/mmc/Makefile       |  1 +
>  drivers/mmc/rockchip_mmc.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 108 insertions(+)
>  create mode 100644 drivers/mmc/rockchip_mmc.c
> 
> diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
> index 3e835f7..cd5f53c 100644
> --- a/drivers/mmc/Kconfig
> +++ b/drivers/mmc/Kconfig
> @@ -10,6 +10,15 @@ config DM_MMC
>  	  appear as block devices in U-Boot and can support filesystems such
>  	  as EXT4 and FAT.
>  
> +config ROCKCHIP_MMC
> +	bool "Rockchip SD/MMC controller support"
> +	depends on DM && OF_CONTROL
> +	help
> +	  This enables support for the Rockchip SD/MMM controller, which is
> +	  based on Designware IP. The device is compatible with SD 3.0,
> +	  SDIO 3.0 and MMC 4.5 and supports common eMMC chips as well as
> +	  removeable SD and micro-SD cards.
> +
>  config SH_SDHI
>  	bool "SuperH/Renesas ARM SoCs on-chip SDHI host controller support"
>  	depends on RMOBILE
> diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile
> index 2680c63..83e1ff3 100644
> --- a/drivers/mmc/Makefile
> +++ b/drivers/mmc/Makefile
> @@ -28,6 +28,7 @@ obj-$(CONFIG_MXS_MMC) += mxsmmc.o
>  obj-$(CONFIG_OMAP_HSMMC) += omap_hsmmc.o
>  obj-$(CONFIG_X86) += pci_mmc.o
>  obj-$(CONFIG_PXA_MMC_GENERIC) += pxa_mmc_gen.o
> +obj-$(CONFIG_ROCKCHIP_MMC) += rockchip_mmc.o
>  obj-$(CONFIG_SUPPORT_EMMC_RPMB) += rpmb.o
>  obj-$(CONFIG_S3C_SDI) += s3c_sdi.o
>  obj-$(CONFIG_S5P_SDHCI) += s5p_sdhci.o
> diff --git a/drivers/mmc/rockchip_mmc.c b/drivers/mmc/rockchip_mmc.c
> new file mode 100644
> index 0000000..430e7e5
> --- /dev/null
> +++ b/drivers/mmc/rockchip_mmc.c
> @@ -0,0 +1,98 @@
> +/*
> + * Copyright (c) 2013 Google, Inc
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <clk.h>
> +#include <dm.h>
> +#include <dwmmc.h>
> +#include <errno.h>
> +#include <syscon.h>
> +#include <asm/arch/clock.h>
> +#include <asm/arch/periph.h>
> +#include <linux/err.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +struct rockchip_mmc_priv {
> +	struct udevice *clk;
> +	struct rk3288_grf *grf;
> +	struct dwmci_host host;
> +};
> +
> +static uint rockchip_mmc_get_mmc_clk(struct dwmci_host *host, uint freq)
> +{
> +	struct udevice *dev = host->priv;
> +	struct rockchip_mmc_priv *priv = dev_get_priv(dev);
> +	int ret;
> +
> +	ret = clk_set_periph_rate(priv->clk, PERIPH_ID_SDMMC0 + host->dev_index,
> +				  freq);
> +	if (ret < 0) {
> +		debug("%s: err=%d\n", __func__, ret);
> +		return ret;
> +	}
> +
> +	return freq;
> +}
> +
> +static int rockchip_mmc_ofdata_to_platdata(struct udevice *dev)
> +{
> +	struct rockchip_mmc_priv *priv = dev_get_priv(dev);
> +	struct dwmci_host *host = &priv->host;
> +
> +	host->name = dev->name;
> +	host->ioaddr = (void *)dev_get_addr(dev);
> +	host->buswidth = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
> +					"bus-width", 4);
> +	host->get_mmc_clk = rockchip_mmc_get_mmc_clk;
> +	host->priv = dev;
> +
> +	/* TODO(sjg at chromium.org): Remove the need for this hack */
> +	host->dev_index = (ulong)host->ioaddr == 0xff0f0000 ? 0 : 1;
> +
> +	return 0;
> +}
> +
> +int rockchip_mmc_probe(struct udevice *dev)
> +{
> +	struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
> +	struct rockchip_mmc_priv *priv = dev_get_priv(dev);
> +	struct dwmci_host *host = &priv->host;
> +	u32 minmax[2];
> +	int ret;
> +
> +	priv->grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
> +	if (IS_ERR(priv->grf))
> +		return PTR_ERR(priv->grf);
> +	ret = uclass_get_device(UCLASS_CLK, CLK_GENERAL, &priv->clk);
> +	if (ret)
> +		return ret;
> +
> +	ret = fdtdec_get_int_array(gd->fdt_blob, dev->of_offset,
> +				   "clock-freq-min-max", minmax, 2);
> +	if (!ret)
> +		ret = add_dwmci(host, minmax[1], minmax[0]);
> +	if (ret)
> +		return ret;
> +
> +	upriv->mmc = host->mmc;
> +
> +	return 0;
> +}
> +
> +static const struct udevice_id rockchip_mmc_ids[] = {
> +	{ .compatible = "rockchip,rk3288-dw-mshc" },
> +	{ }
> +};
> +
> +U_BOOT_DRIVER(rockchip_mmc_drv) = {
> +	.name		= "rockchip_mmc",
> +	.id		= UCLASS_MMC,
> +	.of_match	= rockchip_mmc_ids,
> +	.ofdata_to_platdata = rockchip_mmc_ofdata_to_platdata,
> +	.probe		= rockchip_mmc_probe,
> +	.priv_auto_alloc_size = sizeof(struct dwmci_host),

Shouldn't that be: sizeof(struct rockchip_mmc_priv) here?

Also I see that the DM MMC initialization is missing (in
drivers/mmc/mmc.c), though there is some DM_MMC specific init for the SPL.
I have a patch which enables the SD card in U-Boot as well, watch your
inbox.

Cheers,
Andre.

  parent reply	other threads:[~2015-07-28 17:00 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-23 23:28 [U-Boot] [PATCH v3 00/25] dm: Introduce Rockchip RK3288 support Simon Glass
2015-06-23 23:28 ` [U-Boot] [PATCH v3 01/25] rockchip: Add serial support Simon Glass
2015-06-23 23:28 ` [U-Boot] [PATCH v3 02/25] rockchip: Bring in RK3288 device tree file includes and bindings Simon Glass
2015-06-23 23:28 ` [U-Boot] [PATCH v3 03/25] rockchip: rk3288: dts: Make core devices available early Simon Glass
2015-06-23 23:28 ` [U-Boot] [PATCH v3 04/25] mkimage: Allow padding to any length Simon Glass
2015-06-25 22:35   ` Joe Hershberger
2015-06-23 23:28 ` [U-Boot] [PATCH v3 05/25] mkimage: Allow the original file size to be recorded Simon Glass
2015-06-25 22:36   ` Joe Hershberger
2015-06-23 23:28 ` [U-Boot] [PATCH v3 06/25] rockchip: Add the rkimage format to mkimage Simon Glass
2015-06-24  4:13   ` Naoki FUKAUMI
2015-06-23 23:28 ` [U-Boot] [PATCH v3 07/25] rockchip: Add support for the SD image Simon Glass
2015-06-23 23:28 ` [U-Boot] [PATCH v3 08/25] rockchip: Add support for the SPI image Simon Glass
2015-06-24  4:05   ` Naoki FUKAUMI
2015-06-23 23:28 ` [U-Boot] [PATCH v3 09/25] rockchip: gpio: Add rockchip GPIO driver Simon Glass
2015-06-23 23:28 ` [U-Boot] [PATCH v3 10/25] rockchip: Add basic peripheral and clock definitions Simon Glass
2015-06-23 23:28 ` [U-Boot] [PATCH v3 11/25] power: Add support for ACT8846 PMIC Simon Glass
2015-06-23 23:28 ` [U-Boot] [PATCH v3 12/25] power: regulator: Add a driver for ACT8846 regulators Simon Glass
2015-06-23 23:28 ` [U-Boot] [PATCH v3 13/25] rockchip: rk3288: Add clock driver Simon Glass
2015-06-23 23:28 ` [U-Boot] [PATCH v3 14/25] rockchip: rk3288: Add header files for PMU and GRF Simon Glass
2015-06-23 23:29 ` [U-Boot] [PATCH v3 15/25] rockchip: rk3288: Add SoC reset driver Simon Glass
2015-06-23 23:29 ` [U-Boot] [PATCH v3 16/25] rockchip: rk3288: Add a simple syscon driver Simon Glass
2015-06-23 23:29 ` [U-Boot] [PATCH v3 17/25] rockchip: rk3288: Add pinctrl driver Simon Glass
2015-07-06 17:24   ` Masahiro Yamada
2015-07-06 17:32     ` Simon Glass
2015-07-08  9:35       ` Masahiro Yamada
2015-07-08 20:27         ` Simon Glass
2015-06-23 23:29 ` [U-Boot] [PATCH v3 18/25] rockchip: rk3288: Add SDRAM init Simon Glass
2015-06-23 23:29 ` [U-Boot] [PATCH v3 19/25] rockchip: Add an MMC driver Simon Glass
2015-06-26 10:23   ` Jaehoon Chung
2015-07-28 17:00   ` Andre Przywara [this message]
2015-06-23 23:29 ` [U-Boot] [PATCH v3 20/25] rockchip: Add core SoC start-up code Simon Glass
2015-06-23 23:29 ` [U-Boot] [PATCH v3 21/25] rockchip: Add I2C driver Simon Glass
2015-06-23 23:29 ` [U-Boot] [PATCH v3 22/25] rockchip: Add SPI driver Simon Glass
2015-06-24  5:56   ` Jagan Teki
2015-06-23 23:29 ` [U-Boot] [PATCH v3 23/25] rockchip: Add basic support for firefly-rk3288 Simon Glass
2015-06-23 23:29 ` [U-Boot] [PATCH v3 24/25] rockchip: Add basic support for jerry Simon Glass
2015-06-23 23:29 ` [U-Boot] [PATCH v3 25/25] rockchip: Add a simple README Simon Glass
2015-06-24  4:24   ` Naoki FUKAUMI
2015-07-27 17:08   ` Andre Przywara
2015-07-27 17:13     ` Simon Glass
2015-08-06 15:35   ` Christoph Fritz
2015-08-06 23:19     ` Simon Glass
2015-06-24  4:02 ` [U-Boot] [PATCH v3 00/25] dm: Introduce Rockchip RK3288 support Naoki FUKAUMI
2015-06-24 16:54 ` Kevin Hilman
2015-06-24 17:39   ` Heiko Stübner
2015-06-24 17:48     ` Simon Glass
     [not found] ` <559BE2F2.3020509@googlemail.com>
2015-07-08 15:25   ` Simon Glass
2015-07-09 13:16     ` Ulrich Prinz
2015-07-09 18:10       ` Simon Glass
     [not found]         ` <55A2E5DB.5010604@googlemail.com>
2015-07-13 21:05           ` Ulrich Prinz
2015-07-14 15:54             ` Simon Glass
2015-07-10  8:24 ` Sjoerd Simons
2015-07-10 16:08   ` Simon Glass
2015-07-12 18:26 ` Paul Kocialkowski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55B7B511.6040805@arm.com \
    --to=andre.przywara@arm.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.