mmc: uniphier: Add support for 16bit variant
[oweals/u-boot.git] / drivers / mmc / matsushita-common.h
1 /*
2  * Copyright (C) 2016 Socionext Inc.
3  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
4  *
5  * SPDX-License-Identifier:     GPL-2.0+
6  */
7
8 #ifndef __MATSUSHITA_COMMON_H__
9 #define __MATSUSHITA_COMMON_H__
10
11 #define MATSU_SD_CMD                    0x000   /* command */
12 #define   MATSU_SD_CMD_NOSTOP           BIT(14) /* No automatic CMD12 issue */
13 #define   MATSU_SD_CMD_MULTI            BIT(13) /* multiple block transfer */
14 #define   MATSU_SD_CMD_RD               BIT(12) /* 1: read, 0: write */
15 #define   MATSU_SD_CMD_DATA             BIT(11) /* data transfer */
16 #define   MATSU_SD_CMD_APP              BIT(6)  /* ACMD preceded by CMD55 */
17 #define   MATSU_SD_CMD_NORMAL           (0 << 8)/* auto-detect of resp-type */
18 #define   MATSU_SD_CMD_RSP_NONE         (3 << 8)/* response: none */
19 #define   MATSU_SD_CMD_RSP_R1           (4 << 8)/* response: R1, R5, R6, R7 */
20 #define   MATSU_SD_CMD_RSP_R1B          (5 << 8)/* response: R1b, R5b */
21 #define   MATSU_SD_CMD_RSP_R2           (6 << 8)/* response: R2 */
22 #define   MATSU_SD_CMD_RSP_R3           (7 << 8)/* response: R3, R4 */
23 #define MATSU_SD_ARG                    0x008   /* command argument */
24 #define MATSU_SD_STOP                   0x010   /* stop action control */
25 #define   MATSU_SD_STOP_SEC             BIT(8)  /* use sector count */
26 #define   MATSU_SD_STOP_STP             BIT(0)  /* issue CMD12 */
27 #define MATSU_SD_SECCNT                 0x014   /* sector counter */
28 #define MATSU_SD_RSP10                  0x018   /* response[39:8] */
29 #define MATSU_SD_RSP32                  0x020   /* response[71:40] */
30 #define MATSU_SD_RSP54                  0x028   /* response[103:72] */
31 #define MATSU_SD_RSP76                  0x030   /* response[127:104] */
32 #define MATSU_SD_INFO1                  0x038   /* IRQ status 1 */
33 #define   MATSU_SD_INFO1_CD             BIT(5)  /* state of card detect */
34 #define   MATSU_SD_INFO1_INSERT         BIT(4)  /* card inserted */
35 #define   MATSU_SD_INFO1_REMOVE         BIT(3)  /* card removed */
36 #define   MATSU_SD_INFO1_CMP            BIT(2)  /* data complete */
37 #define   MATSU_SD_INFO1_RSP            BIT(0)  /* response complete */
38 #define MATSU_SD_INFO2                  0x03c   /* IRQ status 2 */
39 #define   MATSU_SD_INFO2_ERR_ILA        BIT(15) /* illegal access err */
40 #define   MATSU_SD_INFO2_CBSY           BIT(14) /* command busy */
41 #define   MATSU_SD_INFO2_BWE            BIT(9)  /* write buffer ready */
42 #define   MATSU_SD_INFO2_BRE            BIT(8)  /* read buffer ready */
43 #define   MATSU_SD_INFO2_DAT0           BIT(7)  /* SDDAT0 */
44 #define   MATSU_SD_INFO2_ERR_RTO        BIT(6)  /* response time out */
45 #define   MATSU_SD_INFO2_ERR_ILR        BIT(5)  /* illegal read err */
46 #define   MATSU_SD_INFO2_ERR_ILW        BIT(4)  /* illegal write err */
47 #define   MATSU_SD_INFO2_ERR_TO         BIT(3)  /* time out error */
48 #define   MATSU_SD_INFO2_ERR_END        BIT(2)  /* END bit error */
49 #define   MATSU_SD_INFO2_ERR_CRC        BIT(1)  /* CRC error */
50 #define   MATSU_SD_INFO2_ERR_IDX        BIT(0)  /* cmd index error */
51 #define MATSU_SD_INFO1_MASK             0x040
52 #define MATSU_SD_INFO2_MASK             0x044
53 #define MATSU_SD_CLKCTL                 0x048   /* clock divisor */
54 #define   MATSU_SD_CLKCTL_DIV_MASK      0x104ff
55 #define   MATSU_SD_CLKCTL_DIV1024       BIT(16) /* SDCLK = CLK / 1024 */
56 #define   MATSU_SD_CLKCTL_DIV512        BIT(7)  /* SDCLK = CLK / 512 */
57 #define   MATSU_SD_CLKCTL_DIV256        BIT(6)  /* SDCLK = CLK / 256 */
58 #define   MATSU_SD_CLKCTL_DIV128        BIT(5)  /* SDCLK = CLK / 128 */
59 #define   MATSU_SD_CLKCTL_DIV64         BIT(4)  /* SDCLK = CLK / 64 */
60 #define   MATSU_SD_CLKCTL_DIV32         BIT(3)  /* SDCLK = CLK / 32 */
61 #define   MATSU_SD_CLKCTL_DIV16         BIT(2)  /* SDCLK = CLK / 16 */
62 #define   MATSU_SD_CLKCTL_DIV8          BIT(1)  /* SDCLK = CLK / 8 */
63 #define   MATSU_SD_CLKCTL_DIV4          BIT(0)  /* SDCLK = CLK / 4 */
64 #define   MATSU_SD_CLKCTL_DIV2          0       /* SDCLK = CLK / 2 */
65 #define   MATSU_SD_CLKCTL_DIV1          BIT(10) /* SDCLK = CLK */
66 #define   MATSU_SD_CLKCTL_OFFEN         BIT(9)  /* stop SDCLK when unused */
67 #define   MATSU_SD_CLKCTL_SCLKEN        BIT(8)  /* SDCLK output enable */
68 #define MATSU_SD_SIZE                   0x04c   /* block size */
69 #define MATSU_SD_OPTION                 0x050
70 #define   MATSU_SD_OPTION_WIDTH_MASK    (5 << 13)
71 #define   MATSU_SD_OPTION_WIDTH_1       (4 << 13)
72 #define   MATSU_SD_OPTION_WIDTH_4       (0 << 13)
73 #define   MATSU_SD_OPTION_WIDTH_8       (1 << 13)
74 #define MATSU_SD_BUF                    0x060   /* read/write buffer */
75 #define MATSU_SD_EXTMODE                0x1b0
76 #define   MATSU_SD_EXTMODE_DMA_EN       BIT(1)  /* transfer 1: DMA, 0: pio */
77 #define MATSU_SD_SOFT_RST               0x1c0
78 #define MATSU_SD_SOFT_RST_RSTX          BIT(0)  /* reset deassert */
79 #define MATSU_SD_VERSION                0x1c4   /* version register */
80 #define MATSU_SD_VERSION_IP             0xff    /* IP version */
81 #define MATSU_SD_HOST_MODE              0x1c8
82 #define MATSU_SD_IF_MODE                0x1cc
83 #define   MATSU_SD_IF_MODE_DDR          BIT(0)  /* DDR mode */
84 #define MATSU_SD_VOLT                   0x1e4   /* voltage switch */
85 #define   MATSU_SD_VOLT_MASK            (3 << 0)
86 #define   MATSU_SD_VOLT_OFF             (0 << 0)
87 #define   MATSU_SD_VOLT_330             (1 << 0)/* 3.3V signal */
88 #define   MATSU_SD_VOLT_180             (2 << 0)/* 1.8V signal */
89 #define MATSU_SD_DMA_MODE               0x410
90 #define   MATSU_SD_DMA_MODE_DIR_RD      BIT(16) /* 1: from device, 0: to dev */
91 #define   MATSU_SD_DMA_MODE_ADDR_INC    BIT(0)  /* 1: address inc, 0: fixed */
92 #define MATSU_SD_DMA_CTL                0x414
93 #define   MATSU_SD_DMA_CTL_START        BIT(0)  /* start DMA (auto cleared) */
94 #define MATSU_SD_DMA_RST                0x418
95 #define   MATSU_SD_DMA_RST_RD           BIT(9)
96 #define   MATSU_SD_DMA_RST_WR           BIT(8)
97 #define MATSU_SD_DMA_INFO1              0x420
98 #define   MATSU_SD_DMA_INFO1_END_RD2    BIT(20) /* DMA from device is complete*/
99 #define   MATSU_SD_DMA_INFO1_END_RD     BIT(17) /* Don't use!  Hardware bug */
100 #define   MATSU_SD_DMA_INFO1_END_WR     BIT(16) /* DMA to device is complete */
101 #define MATSU_SD_DMA_INFO1_MASK         0x424
102 #define MATSU_SD_DMA_INFO2              0x428
103 #define   MATSU_SD_DMA_INFO2_ERR_RD     BIT(17)
104 #define   MATSU_SD_DMA_INFO2_ERR_WR     BIT(16)
105 #define MATSU_SD_DMA_INFO2_MASK         0x42c
106 #define MATSU_SD_DMA_ADDR_L             0x440
107 #define MATSU_SD_DMA_ADDR_H             0x444
108
109 /* alignment required by the DMA engine of this controller */
110 #define MATSU_SD_DMA_MINALIGN           0x10
111
112 struct matsu_sd_plat {
113         struct mmc_config               cfg;
114         struct mmc                      mmc;
115 };
116
117 struct matsu_sd_priv {
118         void __iomem                    *regbase;
119         unsigned long                   mclk;
120         unsigned int                    version;
121         u32                             caps;
122 #define MATSU_SD_CAP_NONREMOVABLE       BIT(0)  /* Nonremovable e.g. eMMC */
123 #define MATSU_SD_CAP_DMA_INTERNAL       BIT(1)  /* have internal DMA engine */
124 #define MATSU_SD_CAP_DIV1024            BIT(2)  /* divisor 1024 is available */
125 #define MATSU_SD_CAP_64BIT              BIT(3)  /* Controller is 64bit */
126 #define MATSU_SD_CAP_16BIT              BIT(4)  /* Controller is 16bit */
127 };
128
129 int matsu_sd_send_cmd(struct udevice *dev, struct mmc_cmd *cmd,
130                       struct mmc_data *data);
131 int matsu_sd_set_ios(struct udevice *dev);
132 int matsu_sd_get_cd(struct udevice *dev);
133
134 int matsu_sd_bind(struct udevice *dev);
135 int matsu_sd_probe(struct udevice *dev);
136
137 #endif /* __MATSUSHITA_COMMON_H__ */