Module Name: src
Committed By: jmcneill
Date: Mon Jun 19 22:03:50 UTC 2017
Modified Files:
src/sys/arch/arm/samsung: exynos_dwcmmc.c
Log Message:
Update for new dwc_mmc driver
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/samsung/exynos_dwcmmc.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/samsung/exynos_dwcmmc.c
diff -u src/sys/arch/arm/samsung/exynos_dwcmmc.c:1.3 src/sys/arch/arm/samsung/exynos_dwcmmc.c:1.4
--- src/sys/arch/arm/samsung/exynos_dwcmmc.c:1.3 Mon May 30 16:38:35 2016
+++ src/sys/arch/arm/samsung/exynos_dwcmmc.c Mon Jun 19 22:03:50 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: exynos_dwcmmc.c,v 1.3 2016/05/30 16:38:35 dholland Exp $ */
+/* $NetBSD: exynos_dwcmmc.c,v 1.4 2017/06/19 22:03:50 jmcneill Exp $ */
/*-
* Copyright (c) 2015 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exynos_dwcmmc.c,v 1.3 2016/05/30 16:38:35 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exynos_dwcmmc.c,v 1.4 2017/06/19 22:03:50 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -43,11 +43,18 @@ __KERNEL_RCSID(0, "$NetBSD: exynos_dwcmm
#include <dev/ic/dwc_mmc_var.h>
#include <dev/fdt/fdtvar.h>
+#define FIFO_REG 0x200
+#define MPS_BEGIN 0x200
+#define MPS_END 0x204
+#define MPS_CTRL 0x20c
+#define MPS_CTRL_SECURE_WRITE __BIT(6)
+#define MPS_CTRL_NON_SECURE_READ __BIT(5)
+#define MPS_CTRL_NON_SECURE_WRITE __BIT(4)
+#define MPS_CTRL_VALID __BIT(0)
+
static int exynos_dwcmmc_match(device_t, cfdata_t, void *);
static void exynos_dwcmmc_attach(device_t, device_t, void *);
-static void exynos_dwcmmc_attach_i(device_t);
-
static int exynos_dwcmmc_card_detect(struct dwc_mmc_softc *);
struct exynos_dwcmmc_softc {
@@ -137,12 +144,13 @@ exynos_dwcmmc_attach(device_t parent, de
sc->sc_clock_freq = clk_get_rate(esc->sc_clk_ciu) / (ciu_div + 1);
sc->sc_fifo_depth = fifo_depth;
+ sc->sc_fifo_reg = FIFO_REG;
+ sc->sc_flags = DWC_MMC_F_USE_HOLD_REG | DWC_MMC_F_DMA;
esc->sc_pin_cd = fdtbus_gpio_acquire(phandle, "cd-gpios",
GPIO_PIN_INPUT);
- if (esc->sc_pin_cd) {
+ if (esc->sc_pin_cd)
sc->sc_card_detect = exynos_dwcmmc_card_detect;
- }
aprint_naive("\n");
aprint_normal(": MHS (%u Hz)\n", sc->sc_clock_freq);
@@ -152,6 +160,9 @@ exynos_dwcmmc_attach(device_t parent, de
return;
}
+ if (dwc_mmc_init(sc) != 0)
+ return;
+
sc->sc_ih = fdtbus_intr_establish(phandle, 0, IPL_BIO, 0,
dwc_mmc_intr, sc);
if (sc->sc_ih == NULL) {
@@ -161,16 +172,15 @@ exynos_dwcmmc_attach(device_t parent, de
}
aprint_normal_dev(self, "interrupting on %s\n", intrstr);
- config_interrupts(self, exynos_dwcmmc_attach_i);
-}
-
-static void
-exynos_dwcmmc_attach_i(device_t self)
-{
- struct exynos_dwcmmc_softc *esc = device_private(self);
- struct dwc_mmc_softc *sc = &esc->sc;
-
- dwc_mmc_init(sc);
+ /* Disable encryption mode */
+ const char * compat_enc[] = { "samsung,exynos5420-dw-mshc-smu", NULL };
+ if (of_match_compatible(phandle, compat_enc)) {
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh, MPS_BEGIN, 0);
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh, MPS_END, ~0U);
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh, MPS_CTRL,
+ MPS_CTRL_NON_SECURE_READ | MPS_CTRL_NON_SECURE_WRITE |
+ MPS_CTRL_SECURE_WRITE | MPS_CTRL_VALID);
+ }
}
static int