aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/mmc
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2025-03-10 17:32:53 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2025-03-10 17:32:53 +0000
commitc0bed9bd0bda2ca9239f5913cd2d5c1bd5d29bfa (patch)
tree9ca5bd93d6eccb6caad95e22c8343c5fb95d84de /sys/dev/mmc
parentb23314ecb99cedef1090bdaa486fbd25aa5a9558 (diff)
Diffstat (limited to 'sys/dev/mmc')
-rw-r--r--sys/dev/mmc/host/dwmmc.c22
-rw-r--r--sys/dev/mmc/mmc_fdt_helpers.c10
2 files changed, 14 insertions, 18 deletions
diff --git a/sys/dev/mmc/host/dwmmc.c b/sys/dev/mmc/host/dwmmc.c
index 51709bcbb7e9..57992571982c 100644
--- a/sys/dev/mmc/host/dwmmc.c
+++ b/sys/dev/mmc/host/dwmmc.c
@@ -462,10 +462,10 @@ dwmmc_handle_card_present(struct dwmmc_softc *sc, bool is_present)
was_present = sc->child != NULL;
if (!was_present && is_present) {
- taskqueue_enqueue_timeout(taskqueue_swi_giant,
+ taskqueue_enqueue_timeout(taskqueue_bus,
&sc->card_delayed_task, -(hz / 2));
} else if (was_present && !is_present) {
- taskqueue_enqueue(taskqueue_swi_giant, &sc->card_task);
+ taskqueue_enqueue(taskqueue_bus, &sc->card_task);
}
}
@@ -477,8 +477,7 @@ dwmmc_card_task(void *arg, int pending __unused)
#ifdef MMCCAM
mmc_cam_sim_discover(&sc->mmc_sim);
#else
- DWMMC_LOCK(sc);
-
+ bus_topo_lock();
if (READ4(sc, SDMMC_CDETECT) == 0 ||
(sc->mmc_helper.props & MMC_PROP_BROKEN_CD)) {
if (sc->child == NULL) {
@@ -486,25 +485,22 @@ dwmmc_card_task(void *arg, int pending __unused)
device_printf(sc->dev, "Card inserted\n");
sc->child = device_add_child(sc->dev, "mmc", DEVICE_UNIT_ANY);
- DWMMC_UNLOCK(sc);
if (sc->child) {
device_set_ivars(sc->child, sc);
(void)device_probe_and_attach(sc->child);
}
- } else
- DWMMC_UNLOCK(sc);
+ }
} else {
/* Card isn't present, detach if necessary */
if (sc->child != NULL) {
if (bootverbose)
device_printf(sc->dev, "Card removed\n");
- DWMMC_UNLOCK(sc);
device_delete_child(sc->dev, sc->child);
sc->child = NULL;
- } else
- DWMMC_UNLOCK(sc);
+ }
}
+ bus_topo_unlock();
#endif /* MMCCAM */
}
@@ -751,7 +747,7 @@ dwmmc_attach(device_t dev)
WRITE4(sc, SDMMC_CTRL, SDMMC_CTRL_INT_ENABLE);
TASK_INIT(&sc->card_task, 0, dwmmc_card_task, sc);
- TIMEOUT_TASK_INIT(taskqueue_swi_giant, &sc->card_delayed_task, 0,
+ TIMEOUT_TASK_INIT(taskqueue_bus, &sc->card_delayed_task, 0,
dwmmc_card_task, sc);
#ifdef MMCCAM
@@ -782,8 +778,8 @@ dwmmc_detach(device_t dev)
if (ret != 0)
return (ret);
- taskqueue_drain(taskqueue_swi_giant, &sc->card_task);
- taskqueue_drain_timeout(taskqueue_swi_giant, &sc->card_delayed_task);
+ taskqueue_drain(taskqueue_bus, &sc->card_task);
+ taskqueue_drain_timeout(taskqueue_bus, &sc->card_delayed_task);
if (sc->intr_cookie != NULL) {
ret = bus_teardown_intr(dev, sc->res[1], sc->intr_cookie);
diff --git a/sys/dev/mmc/mmc_fdt_helpers.c b/sys/dev/mmc/mmc_fdt_helpers.c
index 752e5d14bcb0..aed85dab55f4 100644
--- a/sys/dev/mmc/mmc_fdt_helpers.c
+++ b/sys/dev/mmc/mmc_fdt_helpers.c
@@ -111,7 +111,7 @@ cd_intr(void *arg)
{
struct mmc_helper *helper = arg;
- taskqueue_enqueue_timeout(taskqueue_swi_giant,
+ taskqueue_enqueue_timeout(taskqueue_bus,
&helper->cd_delayed_task, -(hz / 2));
}
@@ -129,7 +129,7 @@ cd_card_task(void *arg, int pending __unused)
/* If we're polling re-schedule the task */
if (helper->cd_ihandler == NULL)
- taskqueue_enqueue_timeout_sbt(taskqueue_swi_giant,
+ taskqueue_enqueue_timeout_sbt(taskqueue_bus,
&helper->cd_delayed_task, mstosbt(500), 0, C_PREL(2));
}
@@ -145,7 +145,7 @@ cd_setup(struct mmc_helper *helper, phandle_t node)
dev = helper->dev;
- TIMEOUT_TASK_INIT(taskqueue_swi_giant, &helper->cd_delayed_task, 0,
+ TIMEOUT_TASK_INIT(taskqueue_bus, &helper->cd_delayed_task, 0,
cd_card_task, helper);
/*
@@ -280,7 +280,7 @@ mmc_fdt_gpio_setup(device_t dev, phandle_t node, struct mmc_helper *helper,
/*
* Schedule a card detection
*/
- taskqueue_enqueue_timeout_sbt(taskqueue_swi_giant,
+ taskqueue_enqueue_timeout_sbt(taskqueue_bus,
&helper->cd_delayed_task, mstosbt(500), 0, C_PREL(2));
return (0);
}
@@ -301,7 +301,7 @@ mmc_fdt_gpio_teardown(struct mmc_helper *helper)
if (helper->cd_ires != NULL)
bus_release_resource(helper->dev, SYS_RES_IRQ, 0, helper->cd_ires);
- taskqueue_drain_timeout(taskqueue_swi_giant, &helper->cd_delayed_task);
+ taskqueue_drain_timeout(taskqueue_bus, &helper->cd_delayed_task);
}
bool