Hello,

This patch adds a debugging function dumping the contents of all
registers implicated in the armv7/imx specific sd/mmc controller. It
only prints if the kernel is built with option SDHC_DEBUG and a call is
inserted somewhere.

I am trying to fix the outstanding bug causing the imxesdhc driver to
timeout upon block reads (CMD17) which prevents any meaningful I/O with
"disks" on i.MX6 platforms. If anyone has any helpful pointers to this
end, please respond on-list or to i...@kremlin.cc

Thanks,
Ian

Index: imx/imxesdhc.c
===================================================================
RCS file: /cvs/src/sys/arch/armv7/imx/imxesdhc.c,v
retrieving revision 1.12
diff -u -p -r1.12 imxesdhc.c
--- imx/imxesdhc.c      30 May 2015 03:20:54 -0000      1.12
+++ imx/imxesdhc.c      7 Nov 2015 00:50:08 -0000
@@ -208,11 +208,76 @@ void      imxesdhc_read_data(struct imxesdhc_
 void   imxesdhc_write_data(struct imxesdhc_softc *, u_char *, int);
 
 //#define SDHC_DEBUG
+void   imxesdhc_dump_regs(struct imxesdhc_softc *);
 #ifdef SDHC_DEBUG
 int imxesdhcdebug = 20;
 #define DPRINTF(n,s)   do { if ((n) <= imxesdhcdebug) printf s; } while (0)
+void
+imxesdhc_dump_regs(struct imxesdhc_softc *sc)
+{
+       DPRINTF(3, ("%s: SDHC_DS_ADDR: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_DS_ADDR)));
+       DPRINTF(3, ("%s: SDHC_BLK_ATT: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_BLK_ATT)));
+       DPRINTF(3, ("%s: SDHC_CMD_ARG: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_CMD_ARG)));
+       DPRINTF(3, ("%s: SDHC_CMD_XFR_TYP: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_CMD_XFR_TYP)));
+       DPRINTF(3, ("%s: SDHC_CMD_RSP0: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_CMD_RSP0)));
+       DPRINTF(3, ("%s: SDHC_CMD_RSP1: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_CMD_RSP1)));
+       DPRINTF(3, ("%s: SDHC_CMD_RSP2: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_CMD_RSP2)));
+       DPRINTF(3, ("%s: SDHC_CMD_RSP3: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_CMD_RSP3)));
+       DPRINTF(3, ("%s: SDHC_DATA_BUFF_ACC_PORT: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_DATA_BUFF_ACC_PORT)));
+       DPRINTF(3, ("%s: SDHC_PRES_STATE: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_PRES_STATE)));
+       DPRINTF(3, ("%s: SDHC_PROT_CTRL: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_PROT_CTRL)));
+       DPRINTF(3, ("%s: SDHC_SYS_CTRL: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_SYS_CTRL)));
+       DPRINTF(3, ("%s: SDHC_INT_STATUS: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_INT_STATUS)));
+       DPRINTF(3, ("%s: SDHC_INT_STATUS_EN: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_INT_STATUS_EN)));
+       DPRINTF(3, ("%s: SDHC_INT_SIGNAL_EN: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_INT_SIGNAL_EN)));
+       DPRINTF(3, ("%s: SDHC_AUTOCMD12_ERR_STATUS: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_AUTOCMD12_ERR_STATUS)));
+       DPRINTF(3, ("%s: SDHC_HOST_CTRL_CAP: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_HOST_CTRL_CAP)));
+       DPRINTF(3, ("%s: SDHC_WTMK_LVL: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_WTMK_LVL)));
+       DPRINTF(3, ("%s: SDHC_MIX_CTRL: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_MIX_CTRL)));
+       DPRINTF(3, ("%s: SDHC_FORCE_EVENT: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_FORCE_EVENT)));
+       DPRINTF(3, ("%s: SDHC_ADMA_ERR_STATUS: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_ADMA_ERR_STATUS)));
+       DPRINTF(3, ("%s: SDHC_ADMA_SYS_ADDR: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_ADMA_SYS_ADDR)));
+       DPRINTF(3, ("%s: SDHC_DLL_CTRL: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_DLL_CTRL)));
+       DPRINTF(3, ("%s: SDHC_DLL_STATUS: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_DLL_STATUS)));
+       DPRINTF(3, ("%s: SDHC_CLK_TUNE_CTRL_STATUS: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_CLK_TUNE_CTRL_STATUS)));
+       DPRINTF(3, ("%s: SDHC_VEND_SPEC: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_VEND_SPEC)));
+       DPRINTF(3, ("%s: SDHC_MMC_BOOT: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_MMC_BOOT)));
+       DPRINTF(3, ("%s: SDHC_VEND_SPEC2: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_VEND_SPEC2)));
+       DPRINTF(3, ("%s: SDHC_HOST_CTRL_VER: 0x%08x\n",
+           DEVNAME(sc), HREAD4(sc, SDHC_HOST_CTRL_VER)));
+}
 #else
 #define DPRINTF(n,s)   do {} while(0)
+void
+imxesdhc_dump_regs(struct imxesdhc_softc *sc) {}
 #endif
 
 struct sdmmc_chip_functions imxesdhc_functions = {

Reply via email to