Signed-off-by: Hans de Goede <[email protected]>
---
 arch/arm/cpu/armv7/sunxi/clock.c              |  3 +++
 arch/arm/include/asm/arch-sunxi/clock_sun6i.h | 21 +++++++++++++++++++++
 drivers/mmc/sunxi_mmc.c                       |  9 ++++++++-
 include/configs/sunxi-common.h                |  2 --
 4 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/arch/arm/cpu/armv7/sunxi/clock.c b/arch/arm/cpu/armv7/sunxi/clock.c
index e3c8fef..273aa3f 100644
--- a/arch/arm/cpu/armv7/sunxi/clock.c
+++ b/arch/arm/cpu/armv7/sunxi/clock.c
@@ -58,6 +58,9 @@ int clock_init(void)
 
        /* open the clock for uart */
        sr32(&ccm->apb2_gate, 16 + CONFIG_CONS_INDEX - 1, 1, CLK_GATE_OPEN);
+
+       /* Dup with clock_init_safe(), drop once sun6i SPL support lands */
+       writel(PLL6_CFG_DEFAULT, &ccm->pll6_cfg);
 #else
        /* uart clock source is apb1 */
        sr32(&ccm->apb1_clk_div_cfg, 24, 2, APB1_CLK_SRC_OSC24M);
diff --git a/arch/arm/include/asm/arch-sunxi/clock_sun6i.h 
b/arch/arm/include/asm/arch-sunxi/clock_sun6i.h
index 147e6c9..2f20d5d 100644
--- a/arch/arm/include/asm/arch-sunxi/clock_sun6i.h
+++ b/arch/arm/include/asm/arch-sunxi/clock_sun6i.h
@@ -141,4 +141,25 @@ struct sunxi_ccm_reg {
 #define APB2_FACTOR_M                  0
 #define APB2_FACTOR_N                  0
 
+#define PLL6_CFG_DEFAULT               0x90041911
+
+#define AHB_GATE_OFFSET_MMC3           11
+#define AHB_GATE_OFFSET_MMC2           10
+#define AHB_GATE_OFFSET_MMC1           9
+#define AHB_GATE_OFFSET_MMC0           8
+#define AHB_GATE_OFFSET_MMC(n)         (AHB_GATE_OFFSET_MMC0 + (n))
+
+#define CCM_MMC_CTRL_OSCM24 (0x0 << 24)
+#define CCM_MMC_CTRL_PLL6   (0x1 << 24)
+
+#define CCM_MMC_CTRL_ENABLE (0x1 << 31)
+
+#define SUN6I_ABP1_RESET_BASE          0x01c202c0
+
+#define ABP1_RESET_OFFSET_MMC3         11
+#define ABP1_RESET_OFFSET_MMC2         10
+#define ABP1_RESET_OFFSET_MMC1         9
+#define ABP1_RESET_OFFSET_MMC0         8
+#define ABP1_RESET_OFFSET_MMC(n)       (ABP1_RESET_OFFSET_MMC0 + (n))
+
 #endif /* _SUNXI_CLOCK_SUN6I_H */
diff --git a/drivers/mmc/sunxi_mmc.c b/drivers/mmc/sunxi_mmc.c
index 4573621..4cb5dc7 100644
--- a/drivers/mmc/sunxi_mmc.c
+++ b/drivers/mmc/sunxi_mmc.c
@@ -77,7 +77,7 @@ struct sunxi_mmc_des {
        u32 data_buf1_sz:13;
        u32 data_buf2_sz:13;
        u32 reserverd2_1:6;
-#elif defined(CONFIG_SUN5I) || defined(CONFIG_SUN7I)
+#elif defined(CONFIG_SUN5I) || defined(CONFIG_SUN6I) || defined(CONFIG_SUN7I)
 #define SDXC_DES_NUM_SHIFT 16
 #define SDXC_DES_BUFFER_MAX_LEN        (1 << SDXC_DES_NUM_SHIFT)
        u32 data_buf1_sz:16;
@@ -203,6 +203,13 @@ static int mmc_clk_io_on(int sdc_no)
        rval |= 1 << AHB_GATE_OFFSET_MMC(sdc_no);
        writel(rval, &ccm->ahb_gate0);
 
+#if defined(CONFIG_SUN6I)
+       /* unassert reset */
+       rval = readl(SUN6I_ABP1_RESET_BASE);
+       rval |= 1 << ABP1_RESET_OFFSET_MMC(sdc_no);
+       writel(rval, SUN6I_ABP1_RESET_BASE);
+#endif
+
        /* config mod clock */
        pll_clk = clock_get_pll6();
        /* should be close to 100 MHz but no more, so round up */
diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h
index dd7c668..212b621 100644
--- a/include/configs/sunxi-common.h
+++ b/include/configs/sunxi-common.h
@@ -81,7 +81,6 @@
 
 /* mmc config */
 /* Can't use MMC slot 0 if the UART is directed there */
-#ifndef CONFIG_SUN6I
 #if !defined CONFIG_UART0_PORT_F || CONFIG_MMC_SUNXI_SLOT != 0
 #define CONFIG_MMC
 #define CONFIG_GENERIC_MMC
@@ -94,7 +93,6 @@
 #define CONFIG_ENV_IS_IN_MMC
 #define CONFIG_SYS_MMC_ENV_DEV         0       /* first detected MMC 
controller */
 #endif
-#endif
 
 /* 4MB of malloc() pool */
 #define CONFIG_SYS_MALLOC_LEN          (CONFIG_ENV_SIZE + (4 << 20))
-- 
1.9.0

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to