hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright (C) 2020 Martin Blumenstingl <martin.blumenstingl@googlemail.com>
 */
 
#ifndef _MESON_MX_SDHC_H_
#define _MESON_MX_SDHC_H_
 
#include <linux/bitfield.h>
 
#define MESON_SDHC_ARGU                        0x00
 
#define MESON_SDHC_SEND                        0x04
   #define MESON_SDHC_SEND_CMD_INDEX            GENMASK(5, 0)
   #define MESON_SDHC_SEND_CMD_HAS_RESP            BIT(6)
   #define MESON_SDHC_SEND_CMD_HAS_DATA            BIT(7)
   #define MESON_SDHC_SEND_RESP_LEN            BIT(8)
   #define MESON_SDHC_SEND_RESP_NO_CRC            BIT(9)
   #define MESON_SDHC_SEND_DATA_DIR            BIT(10)
   #define MESON_SDHC_SEND_DATA_STOP            BIT(11)
   #define MESON_SDHC_SEND_R1B                BIT(12)
   #define MESON_SDHC_SEND_TOTAL_PACK            GENMASK(31, 16)
 
#define MESON_SDHC_CTRL                        0x08
   #define MESON_SDHC_CTRL_DAT_TYPE            GENMASK(1, 0)
   #define MESON_SDHC_CTRL_DDR_MODE            BIT(2)
   #define MESON_SDHC_CTRL_TX_CRC_NOCHECK            BIT(3)
   #define MESON_SDHC_CTRL_PACK_LEN            GENMASK(12, 4)
   #define MESON_SDHC_CTRL_RX_TIMEOUT            GENMASK(19, 13)
   #define MESON_SDHC_CTRL_RX_PERIOD            GENMASK(23, 20)
   #define MESON_SDHC_CTRL_RX_ENDIAN            GENMASK(26, 24)
   #define MESON_SDHC_CTRL_SDIO_IRQ_MODE            BIT(27)
   #define MESON_SDHC_CTRL_DAT0_IRQ_SEL            BIT(28)
   #define MESON_SDHC_CTRL_TX_ENDIAN            GENMASK(31, 29)
 
#define MESON_SDHC_STAT                        0x0c
   #define MESON_SDHC_STAT_CMD_BUSY            BIT(0)
   #define MESON_SDHC_STAT_DAT3_0                GENMASK(4, 1)
   #define MESON_SDHC_STAT_CMD                BIT(5)
   #define MESON_SDHC_STAT_RXFIFO_CNT            GENMASK(12, 6)
   #define MESON_SDHC_STAT_TXFIFO_CNT            GENMASK(19, 13)
   #define MESON_SDHC_STAT_DAT7_4                GENMASK(23, 20)
 
#define MESON_SDHC_CLKC                        0x10
   #define MESON_SDHC_CLKC_CLK_DIV                GENMASK(11, 0)
   #define MESON_SDHC_CLKC_CLK_JIC                BIT(24)
   #define MESON_SDHC_CLKC_MEM_PWR_OFF            GENMASK(26, 25)
 
#define MESON_SDHC_ADDR                        0x14
 
#define MESON_SDHC_PDMA                        0x18
   #define MESON_SDHC_PDMA_DMA_MODE            BIT(0)
   #define MESON_SDHC_PDMA_PIO_RDRESP            GENMASK(3, 1)
   #define MESON_SDHC_PDMA_DMA_URGENT            BIT(4)
   #define MESON_SDHC_PDMA_WR_BURST            GENMASK(9, 5)
   #define MESON_SDHC_PDMA_RD_BURST            GENMASK(14, 10)
   #define MESON_SDHC_PDMA_RXFIFO_TH            GENMASK(21, 15)
   #define MESON_SDHC_PDMA_TXFIFO_TH            GENMASK(28, 22)
   #define MESON_SDHC_PDMA_RXFIFO_MANUAL_FLUSH        GENMASK(30, 29)
   #define MESON_SDHC_PDMA_TXFIFO_FILL            BIT(31)
 
#define MESON_SDHC_MISC                        0x1c
   #define MESON_SDHC_MISC_WCRC_ERR_PATT            GENMASK(6, 4)
   #define MESON_SDHC_MISC_WCRC_OK_PATT            GENMASK(9, 7)
   #define MESON_SDHC_MISC_BURST_NUM            GENMASK(21, 16)
   #define MESON_SDHC_MISC_THREAD_ID            GENMASK(27, 22)
   #define MESON_SDHC_MISC_MANUAL_STOP            BIT(28)
   #define MESON_SDHC_MISC_TXSTART_THRES            GENMASK(31, 29)
 
#define MESON_SDHC_DATA                        0x20
 
#define MESON_SDHC_ICTL                        0x24
   #define MESON_SDHC_ICTL_RESP_OK                BIT(0)
   #define MESON_SDHC_ICTL_RESP_TIMEOUT            BIT(1)
   #define MESON_SDHC_ICTL_RESP_ERR_CRC            BIT(2)
   #define MESON_SDHC_ICTL_RESP_OK_NOCLEAR            BIT(3)
   #define MESON_SDHC_ICTL_DATA_1PACK_OK            BIT(4)
   #define MESON_SDHC_ICTL_DATA_TIMEOUT            BIT(5)
   #define MESON_SDHC_ICTL_DATA_ERR_CRC            BIT(6)
   #define MESON_SDHC_ICTL_DATA_XFER_OK            BIT(7)
   #define MESON_SDHC_ICTL_RX_HIGHER            BIT(8)
   #define MESON_SDHC_ICTL_RX_LOWER            BIT(9)
   #define MESON_SDHC_ICTL_DAT1_IRQ            BIT(10)
   #define MESON_SDHC_ICTL_DMA_DONE            BIT(11)
   #define MESON_SDHC_ICTL_RXFIFO_FULL            BIT(12)
   #define MESON_SDHC_ICTL_TXFIFO_EMPTY            BIT(13)
   #define MESON_SDHC_ICTL_ADDI_DAT1_IRQ            BIT(14)
   #define MESON_SDHC_ICTL_ALL_IRQS            GENMASK(14, 0)
   #define MESON_SDHC_ICTL_DAT1_IRQ_DELAY            GENMASK(17, 16)
 
#define MESON_SDHC_ISTA                        0x28
   #define MESON_SDHC_ISTA_RESP_OK                BIT(0)
   #define MESON_SDHC_ISTA_RESP_TIMEOUT            BIT(1)
   #define MESON_SDHC_ISTA_RESP_ERR_CRC            BIT(2)
   #define MESON_SDHC_ISTA_RESP_OK_NOCLEAR            BIT(3)
   #define MESON_SDHC_ISTA_DATA_1PACK_OK            BIT(4)
   #define MESON_SDHC_ISTA_DATA_TIMEOUT            BIT(5)
   #define MESON_SDHC_ISTA_DATA_ERR_CRC            BIT(6)
   #define MESON_SDHC_ISTA_DATA_XFER_OK            BIT(7)
   #define MESON_SDHC_ISTA_RX_HIGHER            BIT(8)
   #define MESON_SDHC_ISTA_RX_LOWER            BIT(9)
   #define MESON_SDHC_ISTA_DAT1_IRQ            BIT(10)
   #define MESON_SDHC_ISTA_DMA_DONE            BIT(11)
   #define MESON_SDHC_ISTA_RXFIFO_FULL            BIT(12)
   #define MESON_SDHC_ISTA_TXFIFO_EMPTY            BIT(13)
   #define MESON_SDHC_ISTA_ADDI_DAT1_IRQ            BIT(14)
   #define MESON_SDHC_ISTA_ALL_IRQS            GENMASK(14, 0)
 
#define MESON_SDHC_SRST                        0x2c
   #define MESON_SDHC_SRST_MAIN_CTRL            BIT(0)
   #define MESON_SDHC_SRST_RXFIFO                BIT(1)
   #define MESON_SDHC_SRST_TXFIFO                BIT(2)
   #define MESON_SDHC_SRST_DPHY_RX                BIT(3)
   #define MESON_SDHC_SRST_DPHY_TX                BIT(4)
   #define MESON_SDHC_SRST_DMA_IF                BIT(5)
 
#define MESON_SDHC_ESTA                        0x30
   #define MESON_SDHC_ESTA_11_13                GENMASK(13, 11)
 
#define MESON_SDHC_ENHC                        0x34
   #define MESON_SDHC_ENHC_MESON8M2_WRRSP_MODE        BIT(0)
   #define MESON_SDHC_ENHC_MESON8M2_CHK_WRRSP        BIT(1)
   #define MESON_SDHC_ENHC_MESON8M2_CHK_DMA        BIT(2)
   #define MESON_SDHC_ENHC_MESON8M2_DEBUG            GENMASK(5, 3)
   #define MESON_SDHC_ENHC_MESON6_RX_TIMEOUT        GENMASK(7, 0)
   #define MESON_SDHC_ENHC_MESON6_DMA_RD_RESP        BIT(16)
   #define MESON_SDHC_ENHC_MESON6_DMA_WR_RESP        BIT(17)
   #define MESON_SDHC_ENHC_SDIO_IRQ_PERIOD            GENMASK(15, 8)
   #define MESON_SDHC_ENHC_RXFIFO_TH            GENMASK(24, 18)
   #define MESON_SDHC_ENHC_TXFIFO_TH            GENMASK(31, 25)
 
#define MESON_SDHC_CLK2                        0x38
   #define MESON_SDHC_CLK2_RX_CLK_PHASE            GENMASK(11, 0)
   #define MESON_SDHC_CLK2_SD_CLK_PHASE            GENMASK(23, 12)
 
struct clk_bulk_data;
 
int meson_mx_sdhc_register_clkc(struct device *dev, void __iomem *base,
               struct clk_bulk_data *clk_bulk_data);
 
#endif /* _MESON_MX_SDHC_H_ */