public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Andre Przywara <andre.przywara@arm.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v4 27/33] rockchip: Add an MMC driver
Date: Tue, 25 Aug 2015 19:26:34 +0100	[thread overview]
Message-ID: <55DCB35A.3000501@arm.com> (raw)
In-Reply-To: <1440429171-2555-28-git-send-email-sjg@chromium.org>

Hi Simon,

On 24/08/15 16:12, 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 v4: None
> 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 cae207c..7fd63de 100644
> --- a/drivers/mmc/Makefile
> +++ b/drivers/mmc/Makefile
> @@ -29,6 +29,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 instead? (I
mentioned that already before, just not sure whether that mail got lost
or I was just talking nonsense back then).

Cheers,
Andre.

  parent reply	other threads:[~2015-08-25 18:26 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-24 15:12 [U-Boot] [PATCH v4 00/33] dm: Introduce Rockchip RK3288 support Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 01/33] pinctrl: Correct build errors in the pinctrl_simple Simon Glass
2015-08-24 15:31   ` Simon Glass
2015-08-26  4:16     ` Masahiro Yamada
2015-08-24 15:12 ` [U-Boot] [PATCH v4 02/33] pinctrl: Add help text to Kconfig Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 03/33] pinctrl: Add the concept of peripheral IDs Simon Glass
2015-08-26  4:30   ` Masahiro Yamada
2015-08-26  4:38     ` Simon Glass
2015-08-26  4:51       ` Masahiro Yamada
2015-08-26 13:20         ` Simon Glass
2015-08-27  4:39           ` Masahiro Yamada
2015-08-30 22:45             ` Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 04/33] mmc: Support bypass mode with the get_mmc_clk() method Simon Glass
2015-08-25  2:18   ` Jaehoon Chung
2015-08-24 15:12 ` [U-Boot] [PATCH v4 05/33] dm: do not return pointer if NULL is given to devp of device_bind() Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 06/33] dm: Improve handling of a missing uclass Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 07/33] dm: Provide better debugging when a device fails to bind Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 08/33] arm: reset: Avoid a build error when the reset uclass is enabled Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 09/33] rockchip: Add serial support Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 10/33] rockchip: Bring in RK3288 device tree file includes and bindings Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 11/33] rockchip: rk3288: dts: Make core devices available early Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 12/33] mkimage: Allow padding to any length Simon Glass
2015-08-25 18:11   ` Joe Hershberger
2015-08-24 15:12 ` [U-Boot] [PATCH v4 13/33] mkimage: Allow the original file size to be recorded Simon Glass
2015-08-25 18:12   ` Joe Hershberger
2015-08-24 15:12 ` [U-Boot] [PATCH v4 14/33] rockchip: Add the rkimage format to mkimage Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 15/33] rockchip: Add support for the SD image Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 16/33] rockchip: Add support for the SPI image Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 17/33] rockchip: gpio: Add rockchip GPIO driver Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 18/33] rockchip: Add basic peripheral and clock definitions Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 19/33] power: Add support for ACT8846 PMIC Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 20/33] power: regulator: Add a driver for ACT8846 regulators Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 21/33] rockchip: rk3288: Add clock driver Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 22/33] rockchip: rk3288: Add header files for PMU and GRF Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 23/33] rockchip: rk3288: Add SoC reset driver Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 24/33] rockchip: rk3288: Add a simple syscon driver Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 25/33] rockchip: rk3288: Add pinctrl driver Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 26/33] rockchip: rk3288: Add SDRAM init Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 27/33] rockchip: Add an MMC driver Simon Glass
2015-08-25  2:31   ` Jaehoon Chung
2015-08-30 22:45     ` Simon Glass
2015-08-25 18:26   ` Andre Przywara [this message]
2015-08-30 22:45     ` Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 28/33] rockchip: Add core SoC start-up code Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 29/33] rockchip: Add I2C driver Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 30/33] rockchip: Add SPI driver Simon Glass
2015-08-28  4:42   ` Jagan Teki
2015-08-30 22:45     ` Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 31/33] rockchip: Add basic support for firefly-rk3288 Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 32/33] rockchip: Add basic support for jerry Simon Glass
2015-08-24 15:12 ` [U-Boot] [PATCH v4 33/33] rockchip: Add a simple README Simon Glass
2015-08-24 15:32 ` [U-Boot] [PATCH v4 00/33] dm: Introduce Rockchip RK3288 support Simon Glass
2015-08-30 17:40 ` Sjoerd Simons
2015-08-30 22:45   ` Simon Glass
2015-11-09  8:41 ` cwz at rock-chips.com
2015-11-09 20:24   ` Simon Glass
2015-11-10  2:34     ` cwz at rock-chips.com
2015-11-10 19:25       ` Simon Glass

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=55DCB35A.3000501@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox