]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - drivers/mmc/pxa_mmc.c
PXA: pxa-regs.h cleanup
[people/ms/u-boot.git] / drivers / mmc / pxa_mmc.c
index 87769033bbcee9db4ea855fde11091da1dd3ee7f..48e21ef7a59546bf8f6c45b7431c32005fed22e9 100644 (file)
@@ -27,6 +27,7 @@
 #include <asm/errno.h>
 #include <asm/arch/hardware.h>
 #include <part.h>
+#include <asm/io.h>
 
 #include "pxa_mmc.h"
 
@@ -59,18 +60,20 @@ mmc_cmd(ushort cmd, ushort argh, ushort argl, ushort cmdat)
 
        debug("mmc_cmd %u 0x%04x 0x%04x 0x%04x\n", cmd, argh, argl,
              cmdat | wide);
-       MMC_STRPCL = MMC_STRPCL_STOP_CLK;
-       MMC_I_MASK = ~MMC_I_MASK_CLK_IS_OFF;
-       while (!(MMC_I_REG & MMC_I_REG_CLK_IS_OFF)) ;
-       MMC_CMD = cmd;
-       MMC_ARGH = argh;
-       MMC_ARGL = argl;
-       MMC_CMDAT = cmdat | wide;
-       MMC_I_MASK = ~MMC_I_MASK_END_CMD_RES;
-       MMC_STRPCL = MMC_STRPCL_START_CLK;
-       while (!(MMC_I_REG & MMC_I_REG_END_CMD_RES)) ;
-
-       status = MMC_STAT;
+       writel(MMC_STRPCL_STOP_CLK, MMC_STRPCL);
+       writel(~MMC_I_MASK_CLK_IS_OFF, MMC_I_MASK);
+       while (!(readl(MMC_I_REG) & MMC_I_REG_CLK_IS_OFF))
+               ;
+       writel(cmd, MMC_CMD);
+       writel(argh, MMC_ARGH);
+       writel(argl, MMC_ARGL);
+       writel(cmdat | wide, MMC_CMDAT);
+       writel(~MMC_I_MASK_END_CMD_RES, MMC_I_MASK);
+       writel(MMC_STRPCL_START_CLK, MMC_STRPCL);
+       while (!(readl(MMC_I_REG) & MMC_I_REG_END_CMD_RES))
+               ;
+
+       status = readl(MMC_STAT);
        debug("MMC status 0x%08x\n", status);
        if (status & MMC_STAT_TIME_OUT_RESPONSE) {
                return 0;
@@ -80,10 +83,10 @@ mmc_cmd(ushort cmd, ushort argh, ushort argl, ushort cmdat)
         * Did I mention this is Sick.  We always need to
         * discard the upper 8 bits of the first 16-bit word.
         */
-       a = (MMC_RES & 0xffff);
+       a = (readl(MMC_RES) & 0xffff);
        for (i = 0; i < 4; i++) {
-               b = (MMC_RES & 0xffff);
-               c = (MMC_RES & 0xffff);
+               b = (readl(MMC_RES) & 0xffff);
+               c = (readl(MMC_RES) & 0xffff);
                resp[i] = (a << 24) | (b << 8) | (c >> 8);
                a = c;
                debug("MMC resp[%d] = %#08x\n", i, resp[i]);
@@ -115,37 +118,38 @@ mmc_block_read(uchar * dst, ulong src, ulong len)
        /* send read command */
        argh = src >> 16;
        argl = src & 0xffff;
-       MMC_STRPCL = MMC_STRPCL_STOP_CLK;
-       MMC_RDTO = 0xffff;
-       MMC_NOB = 1;
-       MMC_BLKLEN = len;
+       writel(MMC_STRPCL_STOP_CLK, MMC_STRPCL);
+       writel(0xffff, MMC_RDTO);
+       writel(1, MMC_NOB);
+       writel(len, MMC_BLKLEN);
        mmc_cmd(MMC_CMD_READ_SINGLE_BLOCK, argh, argl,
                MMC_CMDAT_R1 | MMC_CMDAT_READ | MMC_CMDAT_BLOCK |
                MMC_CMDAT_DATA_EN);
 
-       MMC_I_MASK = ~MMC_I_MASK_RXFIFO_RD_REQ;
+       writel(~MMC_I_MASK_RXFIFO_RD_REQ, MMC_I_MASK);
        while (len) {
-               if (MMC_I_REG & MMC_I_REG_RXFIFO_RD_REQ) {
+               if (readl(MMC_I_REG) & MMC_I_REG_RXFIFO_RD_REQ) {
 #if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
                        int i;
                        for (i = min(len, 32); i; i--) {
-                               *dst++ = *((volatile uchar *)&MMC_RXFIFO);
+                               *dst++ = readb(MMC_RXFIFO);
                                len--;
                        }
 #else
-                       *dst++ = MMC_RXFIFO;
+                       *dst++ = readb(MMC_RXFIFO);
                        len--;
 #endif
                }
-               status = MMC_STAT;
+               status = readl(MMC_STAT);
                if (status & MMC_STAT_ERRORS) {
                        printf("MMC_STAT error %lx\n", status);
                        return -1;
                }
        }
-       MMC_I_MASK = ~MMC_I_MASK_DATA_TRAN_DONE;
-       while (!(MMC_I_REG & MMC_I_REG_DATA_TRAN_DONE)) ;
-       status = MMC_STAT;
+       writel(~MMC_I_MASK_DATA_TRAN_DONE, MMC_I_MASK);
+       while (!(readl(MMC_I_REG) & MMC_I_REG_DATA_TRAN_DONE))
+               ;
+       status = readl(MMC_STAT);
        if (status & MMC_STAT_ERRORS) {
                printf("MMC_STAT error %lx\n", status);
                return -1;
@@ -176,37 +180,39 @@ mmc_block_write(ulong dst, uchar * src, int len)
        /* send write command */
        argh = dst >> 16;
        argl = dst & 0xffff;
-       MMC_STRPCL = MMC_STRPCL_STOP_CLK;
-       MMC_NOB = 1;
-       MMC_BLKLEN = len;
+       writel(MMC_STRPCL_STOP_CLK, MMC_STRPCL);
+       writel(1, MMC_NOB);
+       writel(len, MMC_BLKLEN);
        mmc_cmd(MMC_CMD_WRITE_SINGLE_BLOCK, argh, argl,
                MMC_CMDAT_R1 | MMC_CMDAT_WRITE | MMC_CMDAT_BLOCK |
                MMC_CMDAT_DATA_EN);
 
-       MMC_I_MASK = ~MMC_I_MASK_TXFIFO_WR_REQ;
+       writel(~MMC_I_MASK_TXFIFO_WR_REQ, MMC_I_MASK);
        while (len) {
-               if (MMC_I_REG & MMC_I_REG_TXFIFO_WR_REQ) {
+               if (readl(MMC_I_REG) & MMC_I_REG_TXFIFO_WR_REQ) {
                        int i, bytes = min(32, len);
 
                        for (i = 0; i < bytes; i++) {
-                               MMC_TXFIFO = *src++;
+                               writel(*src++, MMC_TXFIFO);
                        }
                        if (bytes < 32) {
-                               MMC_PRTBUF = MMC_PRTBUF_BUF_PART_FULL;
+                               writel(MMC_PRTBUF_BUF_PART_FULL, MMC_PRTBUF);
                        }
                        len -= bytes;
                }
-               status = MMC_STAT;
+               status = readl(MMC_STAT);
                if (status & MMC_STAT_ERRORS) {
                        printf("MMC_STAT error %lx\n", status);
                        return -1;
                }
        }
-       MMC_I_MASK = ~MMC_I_MASK_DATA_TRAN_DONE;
-       while (!(MMC_I_REG & MMC_I_REG_DATA_TRAN_DONE)) ;
-       MMC_I_MASK = ~MMC_I_MASK_PRG_DONE;
-       while (!(MMC_I_REG & MMC_I_REG_PRG_DONE)) ;
-       status = MMC_STAT;
+       writel(~MMC_I_MASK_DATA_TRAN_DONE, MMC_I_MASK);
+       while (!(readl(MMC_I_REG) & MMC_I_REG_DATA_TRAN_DONE))
+               ;
+       writel(~MMC_I_MASK_PRG_DONE, MMC_I_MASK);
+       while (!(readl(MMC_I_REG) & MMC_I_REG_PRG_DONE))
+               ;
+       status = readl(MMC_STAT);
        if (status & MMC_STAT_ERRORS) {
                printf("MMC_STAT error %lx\n", status);
                return -1;
@@ -559,13 +565,13 @@ mmc_legacy_init(int verbose)
        set_GPIO_mode(GPIO8_MMCCS0_MD);
 #endif
 #ifdef CONFIG_CPU_MONAHANS     /* pxa3xx */
-       CKENA |= CKENA_12_MMC0 | CKENA_13_MMC1;
+       writel(readl(CKENA) | CKENA_12_MMC0 | CKENA_13_MMC1, CKENA);
 #else  /* pxa2xx */
-       CKEN |= CKEN12_MMC;     /* enable MMC unit clock */
+       writel(readl(CKEN) | CKEN12_MMC, CKEN); /* enable MMC unit clock */
 #endif
-       MMC_CLKRT = MMC_CLKRT_0_3125MHZ;
-       MMC_RESTO = MMC_RES_TO_MAX;
-       MMC_SPI = MMC_SPI_DISABLE;
+       writel(MMC_CLKRT_0_3125MHZ, MMC_CLKRT);
+       writel(MMC_RES_TO_MAX, MMC_RESTO);
+       writel(MMC_SPI_DISABLE, MMC_SPI);
 
        /* reset */
        mmc_cmd(MMC_CMD_GO_IDLE_STATE, 0, 0, MMC_CMDAT_INIT | MMC_CMDAT_R0);
@@ -624,7 +630,7 @@ mmc_legacy_init(int verbose)
                mmc_decode_cid(cid_resp);
        }
 
-       MMC_CLKRT = 0;          /* 20 MHz */
+       writel(0, MMC_CLKRT);           /* 20 MHz */
        resp = mmc_cmd(MMC_CMD_SELECT_CARD, rca, 0, MMC_CMDAT_R1);
 
 #if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)