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 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 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.