Module Name: src Committed By: jmcneill Date: Sun Sep 7 15:38:06 UTC 2014
Modified Files: src/sys/arch/arm/allwinner: awin_mmc.c awin_reg.h Log Message: replace mmc magic bits with symbolic names To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/allwinner/awin_mmc.c cvs rdiff -u -r1.18 -r1.19 src/sys/arch/arm/allwinner/awin_reg.h 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/allwinner/awin_mmc.c diff -u src/sys/arch/arm/allwinner/awin_mmc.c:1.4 src/sys/arch/arm/allwinner/awin_mmc.c:1.5 --- src/sys/arch/arm/allwinner/awin_mmc.c:1.4 Sun Aug 24 21:42:06 2014 +++ src/sys/arch/arm/allwinner/awin_mmc.c Sun Sep 7 15:38:06 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: awin_mmc.c,v 1.4 2014/08/24 21:42:06 skrll Exp $ */ +/* $NetBSD: awin_mmc.c,v 1.5 2014/09/07 15:38:06 jmcneill Exp $ */ /*- * Copyright (c) 2014 Jared D. McNeill <jmcne...@invisible.ca> @@ -29,7 +29,7 @@ #include "locators.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: awin_mmc.c,v 1.4 2014/08/24 21:42:06 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: awin_mmc.c,v 1.5 2014/09/07 15:38:06 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -236,7 +236,7 @@ awin_mmc_host_reset(sdmmc_chipset_handle #endif MMC_WRITE(sc, AWIN_MMC_GCTRL, - MMC_READ(sc, AWIN_MMC_GCTRL) | __BITS(2,0)); + MMC_READ(sc, AWIN_MMC_GCTRL) | AWIN_MMC_GCTRL_RESET); return 0; } @@ -298,11 +298,13 @@ awin_mmc_update_clock(struct awin_mmc_so uint32_t cmd; int retry; - cmd = __BIT(31) | __BIT(21) | __BIT(13); + cmd = AWIN_MMC_CMD_START | + AWIN_MMC_CMD_UPCLK_ONLY | + AWIN_MMC_CMD_WAIT_PRE_OVER; MMC_WRITE(sc, AWIN_MMC_CMD, cmd); retry = 0xfffff; while (--retry > 0) { - if (!(MMC_READ(sc, AWIN_MMC_CMD) & __BIT(31))) + if (!(MMC_READ(sc, AWIN_MMC_CMD) & AWIN_MMC_CMD_START)) break; delay(10); } @@ -326,7 +328,7 @@ awin_mmc_bus_clock(sdmmc_chipset_handle_ #endif clkcr = MMC_READ(sc, AWIN_MMC_CLKCR); - clkcr &= ~__BIT(16); + clkcr &= ~AWIN_MMC_CLKCR_CARDCLKON; MMC_WRITE(sc, AWIN_MMC_CLKCR, clkcr); if (awin_mmc_update_clock(sc) != 0) return 1; @@ -335,13 +337,13 @@ awin_mmc_bus_clock(sdmmc_chipset_handle_ freq_hz = freq * 1000; div = (sc->sc_mod_clk + (freq_hz >> 1)) / freq_hz / 2; - clkcr &= ~__BITS(15,0); + clkcr &= ~AWIN_MMC_CLKCR_DIV; clkcr |= div; MMC_WRITE(sc, AWIN_MMC_CLKCR, clkcr); if (awin_mmc_update_clock(sc) != 0) return 1; - clkcr |= __BIT(16); + clkcr |= AWIN_MMC_CLKCR_CARDCLKON; MMC_WRITE(sc, AWIN_MMC_CLKCR, clkcr); if (awin_mmc_update_clock(sc) != 0) return 1; @@ -361,13 +363,13 @@ awin_mmc_bus_width(sdmmc_chipset_handle_ switch (width) { case 1: - MMC_WRITE(sc, AWIN_MMC_WIDTH, 0); + MMC_WRITE(sc, AWIN_MMC_WIDTH, AWIN_MMC_WIDTH_1); break; case 4: - MMC_WRITE(sc, AWIN_MMC_WIDTH, 1); + MMC_WRITE(sc, AWIN_MMC_WIDTH, AWIN_MMC_WIDTH_4); break; case 8: - MMC_WRITE(sc, AWIN_MMC_WIDTH, 2); + MMC_WRITE(sc, AWIN_MMC_WIDTH, AWIN_MMC_WIDTH_8); break; default: return 1; @@ -388,7 +390,8 @@ static int awin_mmc_xfer_wait(struct awin_mmc_softc *sc, struct sdmmc_command *cmd) { int retry = 0xfffff; - uint32_t bit = (cmd->c_flags & SCF_CMD_READ) ? __BIT(2) : __BIT(3); + uint32_t bit = (cmd->c_flags & SCF_CMD_READ) ? + AWIN_MMC_STATUS_FIFO_EMPTY : AWIN_MMC_STATUS_FIFO_FULL; while (--retry > 0) { uint32_t status = MMC_READ(sc, AWIN_MMC_STATUS); @@ -423,7 +426,7 @@ static void awin_mmc_exec_command(sdmmc_chipset_handle_t sch, struct sdmmc_command *cmd) { struct awin_mmc_softc *sc = sch; - uint32_t cmdval = __BIT(31); + uint32_t cmdval = AWIN_MMC_CMD_START; uint32_t status; int retry; @@ -434,20 +437,20 @@ awin_mmc_exec_command(sdmmc_chipset_hand #endif if (cmd->c_opcode == 0) - cmdval |= __BIT(15); + cmdval |= AWIN_MMC_CMD_SEND_INIT_SEQ; if (cmd->c_flags & SCF_RSP_PRESENT) - cmdval |= __BIT(6); + cmdval |= AWIN_MMC_CMD_RSP_EXP; if (cmd->c_flags & SCF_RSP_136) - cmdval |= __BIT(7); + cmdval |= AWIN_MMC_CMD_LONG_RSP; if (cmd->c_flags & SCF_RSP_CRC) - cmdval |= __BIT(8); + cmdval |= AWIN_MMC_CMD_CHECK_RSP_CRC; if (cmd->c_datalen > 0) { unsigned int nblks; - cmdval |= __BIT(9) | __BIT(13); + cmdval |= AWIN_MMC_CMD_DATA_EXP | AWIN_MMC_CMD_WAIT_PRE_OVER; if (!ISSET(cmd->c_flags, SCF_CMD_READ)) { - cmdval |= __BIT(10); + cmdval |= AWIN_MMC_CMD_WRITE; } nblks = cmd->c_datalen / cmd->c_blklen; @@ -455,7 +458,7 @@ awin_mmc_exec_command(sdmmc_chipset_hand ++nblks; if (nblks > 1) { - cmdval |= __BIT(12); + cmdval |= AWIN_MMC_CMD_SEND_AUTO_STOP; } MMC_WRITE(sc, AWIN_MMC_BLKSZ, cmd->c_blklen); @@ -471,7 +474,7 @@ awin_mmc_exec_command(sdmmc_chipset_hand MMC_WRITE(sc, AWIN_MMC_CMD, cmdval | cmd->c_opcode); } else { MMC_WRITE(sc, AWIN_MMC_GCTRL, - MMC_READ(sc, AWIN_MMC_GCTRL) | __BIT(31)); + MMC_READ(sc, AWIN_MMC_GCTRL) | AWIN_MMC_GCTRL_ACCESS_BY_AHB); MMC_WRITE(sc, AWIN_MMC_CMD, cmdval | cmd->c_opcode); cmd->c_resid = cmd->c_datalen; cmd->c_buf = cmd->c_data; @@ -513,14 +516,14 @@ awin_mmc_exec_command(sdmmc_chipset_hand while (--retry > 0) { uint32_t done; status = MMC_READ(sc, AWIN_MMC_RINT); - if (status & 0xbfc2) { + if (status & AWIN_MMC_INT_ERROR) { retry = 0; break; } if (cmd->c_blklen < cmd->c_datalen) - done = status & __BIT(14); + done = status & AWIN_MMC_INT_AUTO_CMD_DONE; else - done = status & __BIT(3); + done = status & AWIN_MMC_INT_DATA_OVER; if (done) break; delay(10); @@ -539,7 +542,7 @@ awin_mmc_exec_command(sdmmc_chipset_hand retry = 0xfffff; while (--retry > 0) { status = MMC_READ(sc, AWIN_MMC_STATUS); - if (status & __BIT(9)) + if (status & AWIN_MMC_STATUS_CARD_DATA_BUSY) break; } if (retry == 0) { @@ -576,11 +579,12 @@ done: cmd->c_flags |= SCF_ITSDONE; if (cmd->c_error) { - MMC_WRITE(sc, AWIN_MMC_GCTRL, __BITS(2,0)); + MMC_WRITE(sc, AWIN_MMC_GCTRL, AWIN_MMC_GCTRL_RESET); awin_mmc_update_clock(sc); } - MMC_WRITE(sc, AWIN_MMC_RINT, __BITS(31,0)); - MMC_WRITE(sc, AWIN_MMC_GCTRL, MMC_READ(sc, AWIN_MMC_GCTRL) | __BIT(1)); + MMC_WRITE(sc, AWIN_MMC_RINT, 0xffffffff); + MMC_WRITE(sc, AWIN_MMC_GCTRL, + MMC_READ(sc, AWIN_MMC_GCTRL) | AWIN_MMC_GCTRL_FIFORESET); } static void Index: src/sys/arch/arm/allwinner/awin_reg.h diff -u src/sys/arch/arm/allwinner/awin_reg.h:1.18 src/sys/arch/arm/allwinner/awin_reg.h:1.19 --- src/sys/arch/arm/allwinner/awin_reg.h:1.18 Sat Sep 6 00:15:34 2014 +++ src/sys/arch/arm/allwinner/awin_reg.h Sun Sep 7 15:38:06 2014 @@ -620,6 +620,105 @@ #define AWIN_MMC_CBDA 0x0094 #define AWIN_MMC_FIFO 0x0100 +#define AWIN_MMC_GCTRL_ACCESS_BY_AHB __BIT(31) +#define AWIN_MMC_GCTRL_WAIT_MEM_ACCESS_DONE __BIT(30) +#define AWIN_MMC_GCTRL_DDR_MODE __BIT(10) +#define AWIN_MMC_GCTRL_DEBOUNCEEN __BIT(8) +#define AWIN_MMC_GCTRL_DMAEN __BIT(5) +#define AWIN_MMC_GCTRL_INTEN __BIT(4) +#define AWIN_MMC_GCTRL_DMARESET __BIT(2) +#define AWIN_MMC_GCTRL_FIFORESET __BIT(1) +#define AWIN_MMC_GCTRL_SOFTRESET __BIT(0) +#define AWIN_MMC_GCTRL_RESET \ + (AWIN_MMC_GCTRL_SOFTRESET | AWIN_MMC_GCTRL_FIFORESET | \ + AWIN_MMC_GCTRL_DMARESET) + +#define AWIN_MMC_CLKCR_LOWPOWERON __BIT(17) +#define AWIN_MMC_CLKCR_CARDCLKON __BIT(16) +#define AWIN_MMC_CLKCR_DIV __BITS(15,0) + +#define AWIN_MMC_WIDTH_1 0 +#define AWIN_MMC_WIDTH_4 1 +#define AWIN_MMC_WIDTH_8 2 + +#define AWIN_MMC_CMD_START __BIT(31) +#define AWIN_MMC_CMD_USE_HOLD_REG __BIT(29) +#define AWIN_MMC_CMD_VOL_SWITCH __BIT(28) +#define AWIN_MMC_CMD_BOOT_ABORT __BIT(27) +#define AWIN_MMC_CMD_BOOT_ACK_EXP __BIT(26) +#define AWIN_MMC_CMD_ALT_BOOT_OPT __BIT(25) +#define AWIN_MMC_CMD_ENBOOT __BIT(24) +#define AWIN_MMC_CMD_CCS_EXP __BIT(23) +#define AWIN_MMC_CMD_RD_CEATA_DEV __BIT(22) +#define AWIN_MMC_CMD_UPCLK_ONLY __BIT(21) +#define AWIN_MMC_CMD_SEND_INIT_SEQ __BIT(15) +#define AWIN_MMC_CMD_STOP_ABORT_CMD __BIT(14) +#define AWIN_MMC_CMD_WAIT_PRE_OVER __BIT(13) +#define AWIN_MMC_CMD_SEND_AUTO_STOP __BIT(12) +#define AWIN_MMC_CMD_SEQMOD __BIT(11) +#define AWIN_MMC_CMD_WRITE __BIT(10) +#define AWIN_MMC_CMD_DATA_EXP __BIT(9) +#define AWIN_MMC_CMD_CHECK_RSP_CRC __BIT(8) +#define AWIN_MMC_CMD_LONG_RSP __BIT(7) +#define AWIN_MMC_CMD_RSP_EXP __BIT(6) + +#define AWIN_MMC_INT_CARD_REMOVE __BIT(31) +#define AWIN_MMC_INT_CARD_INSERT __BIT(30) +#define AWIN_MMC_INT_SDIO_INT __BIT(16) +#define AWIN_MMC_INT_END_BIT_ERR __BIT(15) +#define AWIN_MMC_INT_AUTO_CMD_DONE __BIT(14) +#define AWIN_MMC_INT_START_BIT_ERR __BIT(13) +#define AWIN_MMC_INT_HW_LOCKED __BIT(12) +#define AWIN_MMC_INT_FIFO_RUN_ERR __BIT(11) +#define AWIN_MMC_INT_VOL_CHG_DONE __BIT(10) +#define AWIN_MMC_INT_DATA_STARVE __BIT(10) +#define AWIN_MMC_INT_BOOT_START __BIT(9) +#define AWIN_MMC_INT_DATA_TIMEOUT __BIT(9) +#define AWIN_MMC_INT_ACK_RCV __BIT(8) +#define AWIN_MMC_INT_RESP_TIMEOUT __BIT(8) +#define AWIN_MMC_INT_DATA_CRC_ERR __BIT(7) +#define AWIN_MMC_INT_RESP_CRC_ERR __BIT(6) +#define AWIN_MMC_INT_RX_DATA_REQ __BIT(5) +#define AWIN_MMC_INT_TX_DATA_REQ __BIT(4) +#define AWIN_MMC_INT_DATA_OVER __BIT(3) +#define AWIN_MMC_INT_CMD_DONE __BIT(2) +#define AWIN_MMC_INT_RESP_ERR __BIT(1) +#define AWIN_MMC_INT_ERROR \ + (AWIN_MMC_INT_RESP_ERR | AWIN_MMC_INT_RESP_CRC_ERR | \ + AWIN_MMC_INT_DATA_CRC_ERR | AWIN_MMC_INT_RESP_TIMEOUT | \ + AWIN_MMC_INT_FIFO_RUN_ERR | AWIN_MMC_INT_HW_LOCKED | \ + AWIN_MMC_INT_START_BIT_ERR | AWIN_MMC_INT_END_BIT_ERR) + +#define AWIN_MMC_STATUS_DMAREQ __BIT(31) +#define AWIN_MMC_STATUS_DATA_FSM_BUSY __BIT(10) +#define AWIN_MMC_STATUS_CARD_DATA_BUSY __BIT(9) +#define AWIN_MMC_STATUS_CARD_PRESENT __BIT(8) +#define AWIN_MMC_STATUS_FIFO_FULL __BIT(3) +#define AWIN_MMC_STATUS_FIFO_EMPTY __BIT(2) +#define AWIN_MMC_STATUS_TXWL_FLAG __BIT(1) +#define AWIN_MMC_STATUS_RXWL_FLAG __BIT(0) + +#define AWIN_MMC_FUNCSEL_CEATA_DEV_INTEN __BIT(10) +#define AWIN_MMC_FUNCSEL_SEND_AUTO_STOP_CCSD __BIT(9) +#define AWIN_MMC_FUNCSEL_SEND_CCSD __BIT(8) +#define AWIN_MMC_FUNCSEL_ABT_RD_DATA __BIT(2) +#define AWIN_MMC_FUNCSEL_SDIO_RD_WAIT __BIT(1) +#define AWIN_MMC_FUNCSEL_SEND_IRQ_RSP __BIT(0) + +#define AWIN_MMC_DMAC_REFETCH_DES __BIT(31) +#define AWIN_MMC_DMAC_IDMA_ON __BIT(7) +#define AWIN_MMC_DMAC_FIX_BURST __BIT(1) +#define AWIN_MMC_DMAC_SOFTRESET __BIT(0) + +#define AWIN_MMC_IDST_HOST_ABT __BIT(10) +#define AWIN_MMC_IDST_ABNORMAL_INT_SUM __BIT(9) +#define AWIN_MMC_IDST_NORMAL_INT_SUM __BIT(8) +#define AWIN_MMC_IDST_CARD_ERR_SUM __BIT(5) +#define AWIN_MMC_IDST_DES_INVALID __BIT(4) +#define AWIN_MMC_IDST_FATAL_BUS_ERR __BIT(2) +#define AWIN_MMC_IDST_RECEIVE_INT __BIT(1) +#define AWIN_MMC_IDST_TRANSMIT_INT __BIT(0) + #define AWIN_CPUCFG_CPU0_RST_CTRL_REG 0x0040 #define AWIN_CPUCFG_CPU0_CTRL_REG 0x0044 #define AWIN_CPUCFG_CPU0_STATUS_REG 0x0048