Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/arm/allwinner replace mmc magic bits with symbolic ...



details:   https://anonhg.NetBSD.org/src/rev/498f770c9189
branches:  trunk
changeset: 332117:498f770c9189
user:      jmcneill <jmcneill%NetBSD.org@localhost>
date:      Sun Sep 07 15:38:06 2014 +0000

description:
replace mmc magic bits with symbolic names

diffstat:

 sys/arch/arm/allwinner/awin_mmc.c |  60 ++++++++++++-----------
 sys/arch/arm/allwinner/awin_reg.h |  99 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 131 insertions(+), 28 deletions(-)

diffs (truncated from 301 to 300 lines):

diff -r df5da5c05c2d -r 498f770c9189 sys/arch/arm/allwinner/awin_mmc.c
--- a/sys/arch/arm/allwinner/awin_mmc.c Sun Sep 07 15:28:24 2014 +0000
+++ b/sys/arch/arm/allwinner/awin_mmc.c Sun Sep 07 15:38:06 2014 +0000
@@ -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 <jmcneill%invisible.ca@localhost>
@@ -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 @@
 #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 @@
        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 @@
 #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 @@
                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 @@
 
        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 @@
 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 @@
 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 @@
 #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 @@
                        ++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 @@
                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 @@
                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 @@
                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 @@
        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
diff -r df5da5c05c2d -r 498f770c9189 sys/arch/arm/allwinner/awin_reg.h
--- a/sys/arch/arm/allwinner/awin_reg.h Sun Sep 07 15:28:24 2014 +0000
+++ b/sys/arch/arm/allwinner/awin_reg.h Sun Sep 07 15:38:06 2014 +0000
@@ -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



Home | Main Index | Thread Index | Old Index