u-boot/arch/arm/include/asm/arch-exynos/dwmmc.h
Rajeshwari S Shinde d3e016cc28 MMC: DWMMC: Correct the CLKDIV register value
This patch corrects the divider value written to CLKDIV register.
Since SDCLKIN is divided inside controller by the DIVRATIO value set
in the CLKSEL register, we need to use the same output clock value to
calculate the CLKDIV value.
as per user manual: cclk_in = SDCLKIN / (DIVRATIO + 1)

Input parameter to mmc_clk is changed to dwmci_host, since
we need the same to read DWMCI_CLKSEL register.

This improves the read timing values for channel 0 on SMDK5250
from 0.288sec to 0.144sec

Signed-off-by: Rajeshwari S Shinde <rajeshwari.s@samsung.com>
Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com>
2014-02-07 17:42:26 +02:00

33 lines
928 B
C

/*
* (C) Copyright 2012 SAMSUNG Electronics
* Jaehoon Chung <jh80.chung@samsung.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#define DWMCI_CLKSEL 0x09C
#define DWMCI_SET_SAMPLE_CLK(x) (x)
#define DWMCI_SET_DRV_CLK(x) ((x) << 16)
#define DWMCI_SET_DIV_RATIO(x) ((x) << 24)
#define EMMCP_MPSBEGIN0 0x1200
#define EMMCP_SEND0 0x1204
#define EMMCP_CTRL0 0x120C
#define MPSCTRL_SECURE_READ_BIT (0x1<<7)
#define MPSCTRL_SECURE_WRITE_BIT (0x1<<6)
#define MPSCTRL_NON_SECURE_READ_BIT (0x1<<5)
#define MPSCTRL_NON_SECURE_WRITE_BIT (0x1<<4)
#define MPSCTRL_USE_FUSE_KEY (0x1<<3)
#define MPSCTRL_ECB_MODE (0x1<<2)
#define MPSCTRL_ENCRYPTION (0x1<<1)
#define MPSCTRL_VALID (0x1<<0)
/* CLKSEL Register */
#define DWMCI_DIVRATIO_BIT 24
#define DWMCI_DIVRATIO_MASK 0x7
#ifdef CONFIG_OF_CONTROL
int exynos_dwmmc_init(const void *blob);
#endif
int exynos_dwmci_add_port(int index, u32 regbase, int bus_width, u32 clksel);