global: Migrate CONFIG_SYS_FSL* symbols to the CFG_SYS namespace
[platform/kernel/u-boot.git] / arch / arm / include / asm / omap_mmc.h
index 128cd81..7933ad5 100644 (file)
@@ -26,6 +26,9 @@
 #define OMAP_MMC_H_
 
 #include <mmc.h>
+#ifndef __ASSEMBLY__
+#include <linux/bitops.h>
+#endif
 
 struct hsmmc {
 #ifndef CONFIG_OMAP34XX
@@ -39,7 +42,9 @@ struct hsmmc {
        unsigned int sysstatus;         /* 0x14 */
        unsigned char res2[0x14];
        unsigned int con;               /* 0x2C */
-       unsigned char res3[0xD4];
+       unsigned int pwcnt;             /* 0x30 */
+       unsigned int dll;               /* 0x34 */
+       unsigned char res3[0xcc];
        unsigned int blk;               /* 0x104 */
        unsigned int arg;               /* 0x108 */
        unsigned int cmd;               /* 0x10C */
@@ -53,9 +58,11 @@ struct hsmmc {
        unsigned int sysctl;            /* 0x12C */
        unsigned int stat;              /* 0x130 */
        unsigned int ie;                /* 0x134 */
-       unsigned char res4[0x8];
+       unsigned char res4[0x4];
+       unsigned int ac12;              /* 0x13C */
        unsigned int capa;              /* 0x140 */
-       unsigned char res5[0x10];
+       unsigned int capa2;             /* 0x144 */
+       unsigned char res5[0xc];
        unsigned int admaes;            /* 0x154 */
        unsigned int admasal;           /* 0x158 */
 };
@@ -63,8 +70,9 @@ struct hsmmc {
 struct omap_hsmmc_plat {
        struct mmc_config cfg;
        struct hsmmc *base_addr;
-       struct mmc mmc;
-       bool cd_inverted;
+       struct mmc *mmc;
+       u32 controller_flags;
+       const char *hw_rev;
 };
 
 /*
@@ -87,13 +95,13 @@ struct omap_hsmmc_plat {
 #define WPP_ACTIVEHIGH                 (0x0 << 8)
 #define RESERVED_MASK                  (0x3 << 9)
 #define CTPL_MMC_SD                    (0x0 << 11)
+#define DDR                            (0x1 << 19)
 #define DMA_MASTER                     (0x1 << 20)
 #define BLEN_512BYTESLEN               (0x200 << 0)
 #define NBLK_STPCNT                    (0x0 << 16)
-#define DE_DISABLE                     (0x0 << 0)
-#define BCE_DISABLE                    (0x0 << 1)
+#define DE_ENABLE                      (0x1 << 0)
 #define BCE_ENABLE                     (0x1 << 1)
-#define ACEN_DISABLE                   (0x0 << 2)
+#define ACEN_ENABLE                    (0x1 << 2)
 #define DDIR_OFFSET                    (4)
 #define DDIR_MASK                      (0x1 << 4)
 #define DDIR_WRITE                     (0x0 << 4)
@@ -125,8 +133,10 @@ struct omap_hsmmc_plat {
 #define DTW_8_BITMODE                   (0x1 << 5) /* CON[DW8]*/
 #define SDBP_PWROFF                    (0x0 << 8)
 #define SDBP_PWRON                     (0x1 << 8)
+#define SDVS_MASK                      (0x7 << 9)
 #define SDVS_1V8                       (0x5 << 9)
 #define SDVS_3V0                       (0x6 << 9)
+#define SDVS_3V3                       (0x7 << 9)
 #define DMA_SELECT                     (0x2 << 3)
 #define ICE_MASK                       (0x1 << 0)
 #define ICE_STOP                       (0x0 << 0)
@@ -134,7 +144,6 @@ struct omap_hsmmc_plat {
 #define ICS_NOTREADY                   (0x0 << 1)
 #define ICE_OSCILLATE                  (0x1 << 0)
 #define CEN_MASK                       (0x1 << 2)
-#define CEN_DISABLE                    (0x0 << 2)
 #define CEN_ENABLE                     (0x1 << 2)
 #define CLKD_OFFSET                    (6)
 #define CLKD_MASK                      (0x3FF << 6)
@@ -161,8 +170,20 @@ struct omap_hsmmc_plat {
 #define IE_CERR                                (0x01 << 28)
 #define IE_BADA                                (0x01 << 29)
 
-#define VS30_3V0SUP                    (1 << 25)
-#define VS18_1V8SUP                    (1 << 26)
+#define VS33_3V3SUP                    BIT(24)
+#define VS30_3V0SUP                    BIT(25)
+#define VS18_1V8SUP                    BIT(26)
+
+#define AC12_ET                                BIT(22)
+#define AC12_V1V8_SIGEN                        BIT(19)
+#define AC12_SCLK_SEL                  BIT(23)
+#define AC12_UHSMC_MASK                        (7 << 16)
+#define AC12_UHSMC_DDR50               (4 << 16)
+#define AC12_UHSMC_SDR104              (3 << 16)
+#define AC12_UHSMC_SDR50               (2 << 16)
+#define AC12_UHSMC_SDR25               (1 << 16)
+#define AC12_UHSMC_SDR12               (0 << 16)
+#define AC12_UHSMC_RES                 (0x7 << 16)
 
 /* Driver definitions */
 #define MMCSD_SECTOR_SIZE              512
@@ -174,15 +195,43 @@ struct omap_hsmmc_plat {
 #define CLK_400KHZ                     1
 #define CLK_MISC                       2
 
+#define CLKD_MAX                       0x3FF   /* max clock divisor: 1023 */
+
 #define RSP_TYPE_NONE  (RSP_TYPE_NORSP   | CCCE_NOCHECK | CICE_NOCHECK)
 #define MMC_CMD0       (INDEX(0)  | RSP_TYPE_NONE | DP_NO_DATA | DDIR_WRITE)
 
 /* Clock Configurations and Macros */
+#ifdef CONFIG_OMAP54XX
+#define MMC_CLOCK_REFERENCE    192 /* MHz */
+#else
 #define MMC_CLOCK_REFERENCE    96 /* MHz */
+#endif
+
+/* DLL */
+#define DLL_SWT                        BIT(20)
+#define DLL_FORCE_SR_C_SHIFT   13
+#define DLL_FORCE_SR_C_MASK    0x7f
+#define DLL_FORCE_VALUE                BIT(12)
+#define DLL_CALIB              BIT(1)
+
+#define MAX_PHASE_DELAY                0x7c
+
+/* CAPA2 */
+#define CAPA2_TSDR50           BIT(13)
 
 #define mmc_reg_out(addr, mask, val)\
        writel((readl(addr) & (~(mask))) | ((val) & (mask)), (addr))
 
+#define INT_EN_MASK (IE_BADA | IE_CERR | IE_DEB | IE_DCRC |\
+               IE_DTO | IE_CIE | IE_CEB | IE_CCRC | IE_ADMAE | IE_CTO |\
+               IE_BRR | IE_BWR | IE_TC | IE_CC)
+
+#define CON_CLKEXTFREE         BIT(16)
+#define CON_PADEN              BIT(15)
+#define PSTATE_CLEV            BIT(24)
+#define PSTATE_DLEV            (0xF << 20)
+#define PSTATE_DLEV_DAT0       (0x1 << 20)
+
 int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max, int cd_gpio,
                int wp_gpio);