aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/mmc
diff options
context:
space:
mode:
authorEmmanuel Vadot <manu@FreeBSD.org>2020-04-14 16:35:18 +0000
committerEmmanuel Vadot <manu@FreeBSD.org>2020-04-14 16:35:18 +0000
commita1af70e58ba5e89b5449947b168769125981dec2 (patch)
tree7dfcd80845b6e5a85319e98a6eed9c4a491596fd /sys/dev/mmc
parentb89af8e16db66225520b80a277fe02ede951ab70 (diff)
Notes
Diffstat (limited to 'sys/dev/mmc')
-rw-r--r--sys/dev/mmc/host/dwmmc.c26
-rw-r--r--sys/dev/mmc/host/dwmmc_altera.c1
-rw-r--r--sys/dev/mmc/host/dwmmc_hisi.c1
-rw-r--r--sys/dev/mmc/host/dwmmc_rockchip.c1
-rw-r--r--sys/dev/mmc/host/dwmmc_samsung.c1
-rw-r--r--sys/dev/mmc/host/dwmmc_var.h1
6 files changed, 13 insertions, 18 deletions
diff --git a/sys/dev/mmc/host/dwmmc.c b/sys/dev/mmc/host/dwmmc.c
index 76ac61d94776b..c3922d08c1dd9 100644
--- a/sys/dev/mmc/host/dwmmc.c
+++ b/sys/dev/mmc/host/dwmmc.c
@@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$");
#include <dev/mmc/bridge.h>
#include <dev/mmc/mmcbrvar.h>
+#include <dev/mmc/mmc_fdt_helpers.h>
#include <dev/fdt/fdt_common.h>
#include <dev/ofw/openfirm.h>
@@ -446,7 +447,6 @@ dwmmc_card_task(void *arg, int pending __unused)
}
} else
DWMMC_UNLOCK(sc);
-
} else {
/* Card isn't present, detach if necessary */
if (sc->child != NULL) {
@@ -466,7 +466,7 @@ parse_fdt(struct dwmmc_softc *sc)
{
pcell_t dts_value[3];
phandle_t node;
- uint32_t bus_hz = 0, bus_width;
+ uint32_t bus_hz = 0;
int len;
#ifdef EXT_RESOURCES
int error;
@@ -475,17 +475,12 @@ parse_fdt(struct dwmmc_softc *sc)
if ((node = ofw_bus_get_node(sc->dev)) == -1)
return (ENXIO);
- /* bus-width */
- if (OF_getencprop(node, "bus-width", &bus_width, sizeof(uint32_t)) <= 0)
- bus_width = 4;
- if (bus_width >= 4)
- sc->host.caps |= MMC_CAP_4_BIT_DATA;
- if (bus_width >= 8)
- sc->host.caps |= MMC_CAP_8_BIT_DATA;
-
- /* max-frequency */
- if (OF_getencprop(node, "max-frequency", &sc->host.f_max, sizeof(uint32_t)) <= 0)
- sc->host.f_max = 200000000;
+ /* Set some defaults for freq and supported mode */
+ sc->host.f_min = 400000;
+ sc->host.f_max = 200000000;
+ sc->host.host_ocr = MMC_OCR_320_330 | MMC_OCR_330_340;
+ sc->host.caps = MMC_CAP_HSPEED | MMC_CAP_SIGNALING_330;
+ mmc_fdt_parse(sc->dev, node, &sc->mmc_helper, &sc->host);
/* fifo-depth */
if ((len = OF_getproplen(node, "fifo-depth")) > 0) {
@@ -722,11 +717,6 @@ dwmmc_attach(device_t dev)
SDMMC_INTMASK_CD));
WRITE4(sc, SDMMC_CTRL, SDMMC_CTRL_INT_ENABLE);
- sc->host.f_min = 400000;
- sc->host.host_ocr = MMC_OCR_320_330 | MMC_OCR_330_340;
- sc->host.caps |= MMC_CAP_HSPEED;
- sc->host.caps |= MMC_CAP_SIGNALING_330;
-
TASK_INIT(&sc->card_task, 0, dwmmc_card_task, sc);
TIMEOUT_TASK_INIT(taskqueue_swi_giant, &sc->card_delayed_task, 0,
dwmmc_card_task, sc);
diff --git a/sys/dev/mmc/host/dwmmc_altera.c b/sys/dev/mmc/host/dwmmc_altera.c
index 016d9330895c1..54c227254ff42 100644
--- a/sys/dev/mmc/host/dwmmc_altera.c
+++ b/sys/dev/mmc/host/dwmmc_altera.c
@@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$");
#include <machine/bus.h>
#include <dev/mmc/bridge.h>
+#include <dev/mmc/mmc_fdt_helpers.h>
#include <dev/ofw/ofw_bus_subr.h>
diff --git a/sys/dev/mmc/host/dwmmc_hisi.c b/sys/dev/mmc/host/dwmmc_hisi.c
index 5f08fb937b456..5d6a95cfdd372 100644
--- a/sys/dev/mmc/host/dwmmc_hisi.c
+++ b/sys/dev/mmc/host/dwmmc_hisi.c
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
#include <machine/bus.h>
#include <dev/mmc/bridge.h>
+#include <dev/mmc/mmc_fdt_helpers.h>
#include <dev/ofw/ofw_bus_subr.h>
diff --git a/sys/dev/mmc/host/dwmmc_rockchip.c b/sys/dev/mmc/host/dwmmc_rockchip.c
index 273f9d7031789..25baffb267e36 100644
--- a/sys/dev/mmc/host/dwmmc_rockchip.c
+++ b/sys/dev/mmc/host/dwmmc_rockchip.c
@@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$");
#include <machine/bus.h>
#include <dev/mmc/bridge.h>
+#include <dev/mmc/mmc_fdt_helpers.h>
#include <dev/ofw/ofw_bus_subr.h>
diff --git a/sys/dev/mmc/host/dwmmc_samsung.c b/sys/dev/mmc/host/dwmmc_samsung.c
index 9f2137a5c74e4..4443cda587368 100644
--- a/sys/dev/mmc/host/dwmmc_samsung.c
+++ b/sys/dev/mmc/host/dwmmc_samsung.c
@@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$");
#include <machine/bus.h>
#include <dev/mmc/bridge.h>
+#include <dev/mmc/mmc_fdt_helpers.h>
#include <dev/ofw/ofw_bus.h>
#include <dev/ofw/ofw_bus_subr.h>
diff --git a/sys/dev/mmc/host/dwmmc_var.h b/sys/dev/mmc/host/dwmmc_var.h
index c586ffb554570..a9a77223f9e11 100644
--- a/sys/dev/mmc/host/dwmmc_var.h
+++ b/sys/dev/mmc/host/dwmmc_var.h
@@ -52,6 +52,7 @@ struct dwmmc_softc {
device_t dev;
void *intr_cookie;
struct mmc_host host;
+ struct mmc_fdt_helper mmc_helper;
struct mtx sc_mtx;
struct mmc_request *req;
struct mmc_command *curcmd;