arm64: rockchip_defconfig: enable HARDENED_USERCOPY
[firefly-linux-kernel-4.4.55.git] / drivers / spi / spi-rockchip-core.h
1 #ifndef DW_SPI_HEADER_H
2 #define DW_SPI_HEADER_H
3
4 #include <linux/io.h>
5 #include <linux/scatterlist.h>
6 #include <linux/dmaengine.h>
7
8
9 #if 1
10 #define DBG_SPI(x...)  if(atomic_read(&dws->debug_flag) == 1) printk(KERN_DEBUG x)
11 #else
12 #define DBG_SPI(x...)
13 #endif
14
15 /* SPI register offsets */
16 #define SPIM_CTRLR0                             0x0000
17 #define SPIM_CTRLR1                             0x0004
18 #define SPIM_SSIENR                             0x0008
19 #define SPIM_SER                                0x000c
20 #define SPIM_BAUDR                              0x0010
21 #define SPIM_TXFTLR                             0x0014
22 #define SPIM_RXFTLR                             0x0018
23 #define SPIM_TXFLR                              0x001c
24 #define SPIM_RXFLR                              0x0020
25 #define SPIM_SR                                 0x0024
26 #define SPIM_IPR                0x0028
27 #define SPIM_IMR                                0x002c
28 #define SPIM_ISR                                0x0030
29 #define SPIM_RISR                               0x0034
30 #define SPIM_ICR                                0x0038
31 #define SPIM_DMACR                              0x003c
32 #define SPIM_DMATDLR                    0x0040
33 #define SPIM_DMARDLR                    0x0044
34 #define SPIM_TXDR                               0x0400
35 #define SPIM_RXDR               0x0800
36
37 /* --------Bit fields in CTRLR0--------begin */
38
39 #define SPI_DFS_OFFSET                  0                  /* Data Frame Size */
40 #define SPI_DFS_4BIT            0x00
41 #define SPI_DFS_8BIT            0x01
42 #define SPI_DFS_16BIT           0x02
43 #define SPI_DFS_RESV            0x03
44
45 #define SPI_FRF_OFFSET                  16                 /* Frame Format */
46 #define SPI_FRF_SPI                         0x00               /* motorola spi */
47 #define SPI_FRF_SSP                         0x01               /* Texas Instruments SSP*/
48 #define SPI_FRF_MICROWIRE               0x02               /*  National Semiconductors Microwire */
49 #define SPI_FRF_RESV                    0x03
50
51 #define SPI_MODE_OFFSET             6                 /* SCPH & SCOL */
52
53 #define SPI_SCPH_OFFSET                 6                  /* Serial Clock Phase */
54 #define SPI_SCPH_TOGMID         0                  /* Serial clock toggles in middle of first data bit */
55 #define SPI_SCPH_TOGSTA         1                  /* Serial clock toggles at start of first data bit */
56
57 #define SPI_SCOL_OFFSET                 7                  /* Serial Clock Polarity */
58
59 #define SPI_OPMOD_OFFSET            20
60 #define SPI_OPMOD_MASTER        0
61 #define SPI_OPMOD_SLAVE         1
62
63 #define SPI_TMOD_OFFSET                 18                 /* Transfer Mode */
64 //#define SPI_TMOD_MASK                 (0x3 << SPI_TMOD_OFFSET)
65 #define SPI_TMOD_TR                         0x00                       /* xmit & recv */
66 #define SPI_TMOD_TO                         0x01                       /* xmit only */
67 #define SPI_TMOD_RO                         0x02                       /* recv only */
68 #define SPI_TMOD_RESV               0x03
69
70 #define SPI_CFS_OFFSET                  2                  /* Control Frame Size */
71
72 #define SPI_CSM_OFFSET          8                  /* Chip Select Mode */
73 #define SPI_CSM_KEEP            0x00               /* ss_n keep low after every frame data is transferred */
74 #define SPI_CSM_HALF            0x01               /* ss_n be high for half sclk_out cycles after every frame data is transferred */
75 #define SPI_CSM_ONE             0x02               /* ss_n be high for one sclk_out cycle after every frame data is transferred */
76
77 #define SPI_SSN_DELAY_OFFSET    10
78 #define SPI_SSN_DELAY_HALF      0x00
79 #define SPI_SSN_DELAY_ONE       0x01
80
81 #define SPI_HALF_WORLD_TX_OFFSET       13
82 #define SPI_HALF_WORLD_ON       0x00
83 #define SPI_HALF_WORLD_OFF      0x01
84
85
86 /* --------Bit fields in CTRLR0--------end */
87
88
89 /* Bit fields in SR, 7 bits */
90 #define SR_MASK                         0x7f            /* cover 7 bits */
91 #define SR_BUSY                         (1 << 0)
92 #define SR_TF_FULL                  (1 << 1)
93 #define SR_TF_EMPT                      (1 << 2)
94 #define SR_RF_EMPT                  (1 << 3)
95 #define SR_RF_FULL                      (1 << 4)
96
97 /* Bit fields in ISR, IMR, RISR, 7 bits */
98 #define SPI_INT_TXEI                    (1 << 0)
99 #define SPI_INT_TXOI                    (1 << 1)
100 #define SPI_INT_RXUI                    (1 << 2)
101 #define SPI_INT_RXOI                    (1 << 3)
102 #define SPI_INT_RXFI                    (1 << 4)
103
104 /* Bit fields in DMACR */
105 #define SPI_DMACR_TX_ENABLE     (1 << 1)
106 #define SPI_DMACR_RX_ENABLE     (1 << 0)
107
108 /* Bit fields in ICR */
109 #define SPI_CLEAR_INT_ALL       (1<< 0)
110 #define SPI_CLEAR_INT_RXUI      (1 << 1)
111 #define SPI_CLEAR_INT_RXOI      (1 << 2)
112 #define SPI_CLEAR_INT_TXOI      (1 << 3)
113
114 #define SUSPND    (1<<0)
115 #define SPIBUSY   (1<<1)
116 #define RXBUSY    (1<<2)
117 #define TXBUSY    (1<<3)
118
119
120 enum dw_ssi_type {
121         SSI_MOTO_SPI = 0,
122         SSI_TI_SSP,
123         SSI_NS_MICROWIRE,
124 };
125
126 struct dw_spi;
127 struct dw_spi_dma_ops {
128         int (*dma_init)(struct dw_spi *dws);
129         void (*dma_exit)(struct dw_spi *dws);
130         int (*dma_transfer)(struct dw_spi *dws, int cs_change);
131 };
132
133 struct dw_spi {
134         struct spi_master       *master;
135         struct spi_device       *cur_dev;
136         struct device           *parent_dev;
137         enum dw_ssi_type        type;
138         char                    name[16];
139
140         struct clk          *clk_spi;
141         struct clk          *pclk_spi;
142
143         void __iomem            *regs;
144         unsigned long           paddr;
145         u32                     iolen;
146         int                     irq;
147         u32                     fifo_len;       /* depth of the FIFO buffer */
148         u32                     max_freq;       /* max bus freq supported */
149
150         u16                     bus_num;
151         u16                     num_cs;         /* supported slave numbers */
152
153         /* Driver message queue */
154         struct workqueue_struct *workqueue;
155         struct work_struct      pump_messages;
156         spinlock_t              lock;
157         struct list_head        queue;
158         int                     busy;
159         int                     run;
160
161         /* Message Transfer pump */
162         struct tasklet_struct   pump_transfers;
163
164         /* Current message transfer state info */
165         struct spi_message      *cur_msg;
166         struct spi_transfer     *cur_transfer;
167         struct chip_data        *cur_chip;
168         struct chip_data        *prev_chip;
169         size_t                  len;
170         void                    *tx;
171         void                    *tx_end;
172         void                    *rx;
173         void                    *rx_end;
174         int                             dma_mapped;
175         dma_addr_t              rx_dma;
176         dma_addr_t              tx_dma;
177         size_t                  rx_map_len;
178         size_t                  tx_map_len;
179         u8                      n_bytes;        /* current is a 1/2 bytes op */
180         u8                      max_bits_per_word;      /* maxim is 16b */
181         u32                     dma_width;
182         int                     dmatdlr;
183         int                     dmardlr;
184         int                     cs_change;
185         void                    *tx_buffer;
186         void                    *rx_buffer;
187         dma_addr_t              rx_dma_init;
188         dma_addr_t              tx_dma_init;
189         dma_cookie_t            rx_cookie;
190         dma_cookie_t            tx_cookie;
191         int                     state;
192         struct completion       xfer_completion;
193         irqreturn_t             (*transfer_handler)(struct dw_spi *dws);
194         void                    (*cs_control)(struct dw_spi *dws, u32 cs, u8 flag);
195
196         /* Dma info */
197         int                     dma_inited;
198         struct dma_chan         *txchan;
199         struct scatterlist      tx_sgl;
200         struct dma_chan         *rxchan;
201         struct scatterlist      rx_sgl;
202         int                     dma_chan_done;
203         struct device           *dma_dev;
204         dma_addr_t              tx_dma_addr; /* phy address of the Data register */     
205         dma_addr_t              rx_dma_addr; /* phy address of the Data register */
206         struct dw_spi_dma_ops   *dma_ops;
207         void                    *dma_priv; /* platform relate info */
208         
209         //struct pci_dev                *dmac;
210         atomic_t                debug_flag;
211
212         /* Bus interface info */
213         void                    *priv;
214 #ifdef CONFIG_DEBUG_FS
215         struct dentry *debugfs;
216 #endif
217 };
218
219 static inline u32 dw_readl(struct dw_spi *dws, u32 offset)
220 {
221         return __raw_readl(dws->regs + offset);
222 }
223
224 static inline void dw_writel(struct dw_spi *dws, u32 offset, u32 val)
225 {
226         __raw_writel(val, dws->regs + offset);
227 }
228
229 static inline u16 dw_readw(struct dw_spi *dws, u32 offset)
230 {
231         return __raw_readw(dws->regs + offset);
232 }
233
234 static inline void dw_writew(struct dw_spi *dws, u32 offset, u16 val)
235 {
236         __raw_writew(val, dws->regs + offset);
237 }
238
239 static inline void spi_enable_chip(struct dw_spi *dws, int enable)
240 {
241         dw_writel(dws, SPIM_SSIENR, (enable ? 1 : 0));
242 }
243
244 static inline void spi_set_clk(struct dw_spi *dws, u16 div)
245 {
246         dw_writel(dws, SPIM_BAUDR, div);
247 }
248
249 static inline void spi_chip_sel(struct dw_spi *dws, u16 cs)
250 {
251         if (cs > dws->num_cs)
252                 return;
253
254         if (dws->cs_control)
255                 dws->cs_control(dws, cs, 1);
256
257         dw_writel(dws, SPIM_SER, 1 << cs);
258
259         DBG_SPI("%s:cs=%d\n",__func__,cs);
260 }
261
262 static  inline void spi_cs_control(struct dw_spi *dws, u32 cs, u8 flag)
263 {
264         if (flag)
265                 dw_writel(dws, SPIM_SER, 1 << cs);
266         else            
267                 dw_writel(dws, SPIM_SER, 0);
268         
269         return;
270 }
271
272
273 /* Disable IRQ bits */
274 static inline void spi_mask_intr(struct dw_spi *dws, u32 mask)
275 {
276         u32 new_mask;
277
278         new_mask = dw_readl(dws, SPIM_IMR) & ~mask;
279         dw_writel(dws, SPIM_IMR, new_mask);
280 }
281
282 /* Enable IRQ bits */
283 static inline void spi_umask_intr(struct dw_spi *dws, u32 mask)
284 {
285         u32 new_mask;
286
287         new_mask = dw_readl(dws, SPIM_IMR) | mask;
288         dw_writel(dws, SPIM_IMR, new_mask);
289 }
290
291 /*
292  * Each SPI slave device to work with dw_api controller should
293  * has such a structure claiming its working mode (PIO/DMA etc),
294  * which can be save in the "controller_data" member of the
295  * struct spi_device
296  */
297 struct dw_spi_chip {
298         u8 poll_mode;   /* 0 for contoller polling mode */
299         u8 type;        /* SPI/SSP/Micrwire */
300         u8 enable_dma;
301         void (*cs_control)(struct dw_spi *dws, u32 cs, u8 flag);
302 };
303
304 extern int dw_spi_add_host(struct dw_spi *dws);
305 extern void dw_spi_remove_host(struct dw_spi *dws);
306 extern int dw_spi_suspend_host(struct dw_spi *dws);
307 extern int dw_spi_resume_host(struct dw_spi *dws);
308 extern void dw_spi_xfer_done(struct dw_spi *dws);
309
310 /* platform related setup */
311 extern int dw_spi_dma_init(struct dw_spi *dws); /* Intel MID platforms */
312 #endif /* SPIM_HEADER_H */