git: af8b51b0bac9 - main - aw_mmc: add crash dumping support in MMCCAM mode

From: Andriy Gapon <avg_at_FreeBSD.org>
Date: Wed, 16 Feb 2022 07:58:15 UTC
The branch main has been updated by avg:

URL: https://cgit.FreeBSD.org/src/commit/?id=af8b51b0bac932fd0bb80cc1fe672b725bd5f0e8

commit af8b51b0bac932fd0bb80cc1fe672b725bd5f0e8
Author:     Andriy Gapon <avg@FreeBSD.org>
AuthorDate: 2022-02-16 07:56:06 +0000
Commit:     Andriy Gapon <avg@FreeBSD.org>
CommitDate: 2022-02-16 07:58:08 +0000

    aw_mmc: add crash dumping support in MMCCAM mode
    
    MFC after:      1 week
---
 sys/arm/allwinner/aw_mmc.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/sys/arm/allwinner/aw_mmc.c b/sys/arm/allwinner/aw_mmc.c
index 3271090f19e3..81dd34ce8c54 100644
--- a/sys/arm/allwinner/aw_mmc.c
+++ b/sys/arm/allwinner/aw_mmc.c
@@ -33,6 +33,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/bus.h>
+#include <sys/conf.h>
 #include <sys/kernel.h>
 #include <sys/lock.h>
 #include <sys/malloc.h>
@@ -304,6 +305,15 @@ aw_mmc_cam_request(device_t dev, union ccb *ccb)
 
 	return (0);
 }
+
+static void
+aw_mmc_cam_poll(device_t dev)
+{
+	struct aw_mmc_softc *sc;
+
+	sc = device_get_softc(dev);
+	aw_mmc_intr(sc);
+}
 #endif /* MMCCAM */
 
 static void
@@ -788,7 +798,8 @@ aw_mmc_req_done(struct aw_mmc_softc *sc)
 		aw_mmc_update_clock(sc, 1);
 	}
 
-	callout_stop(&sc->aw_timeoutc);
+	if (!dumping)
+		callout_stop(&sc->aw_timeoutc);
 	sc->aw_intr = 0;
 	sc->aw_resid = 0;
 	sc->aw_dma_map_err = 0;
@@ -1078,8 +1089,10 @@ aw_mmc_request(device_t bus, device_t child, struct mmc_request *req)
 		AW_MMC_WRITE_4(sc, AW_MMC_CMDR, cmdreg | cmd->opcode);
 	}
 
-	callout_reset(&sc->aw_timeoutc, sc->aw_timeout * hz,
-	    aw_mmc_timeout, sc);
+	if (!dumping) {
+		callout_reset(&sc->aw_timeoutc, sc->aw_timeout * hz,
+		    aw_mmc_timeout, sc);
+	}
 	AW_MMC_UNLOCK(sc);
 
 	return (0);
@@ -1491,6 +1504,7 @@ static device_method_t aw_mmc_methods[] = {
 	DEVMETHOD(mmc_sim_get_tran_settings,	aw_mmc_get_tran_settings),
 	DEVMETHOD(mmc_sim_set_tran_settings,	aw_mmc_set_tran_settings),
 	DEVMETHOD(mmc_sim_cam_request,		aw_mmc_cam_request),
+	DEVMETHOD(mmc_sim_cam_poll,		aw_mmc_cam_poll),
 #endif
 
 	DEVMETHOD_END