1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * SPI driver for Nvidia's Tegra20/Tegra30 SLINK Controller.
4  *
5  * Copyright (c) 2012, NVIDIA CORPORATION.  All rights reserved.
6  */
7 
8 #include <linux/clk.h>
9 #include <linux/completion.h>
10 #include <linux/delay.h>
11 #include <linux/dmaengine.h>
12 #include <linux/dma-mapping.h>
13 #include <linux/dmapool.h>
14 #include <linux/err.h>
15 #include <linux/interrupt.h>
16 #include <linux/io.h>
17 #include <linux/kernel.h>
18 #include <linux/kthread.h>
19 #include <linux/module.h>
20 #include <linux/platform_device.h>
21 #include <linux/pm_runtime.h>
22 #include <linux/of.h>
23 #include <linux/of_device.h>
24 #include <linux/reset.h>
25 #include <linux/spi/spi.h>
26 
27 #define SLINK_COMMAND			0x000
28 #define SLINK_BIT_LENGTH(x)		(((x) & 0x1f) << 0)
29 #define SLINK_WORD_SIZE(x)		(((x) & 0x1f) << 5)
30 #define SLINK_BOTH_EN			(1 << 10)
31 #define SLINK_CS_SW			(1 << 11)
32 #define SLINK_CS_VALUE			(1 << 12)
33 #define SLINK_CS_POLARITY		(1 << 13)
34 #define SLINK_IDLE_SDA_DRIVE_LOW	(0 << 16)
35 #define SLINK_IDLE_SDA_DRIVE_HIGH	(1 << 16)
36 #define SLINK_IDLE_SDA_PULL_LOW		(2 << 16)
37 #define SLINK_IDLE_SDA_PULL_HIGH	(3 << 16)
38 #define SLINK_IDLE_SDA_MASK		(3 << 16)
39 #define SLINK_CS_POLARITY1		(1 << 20)
40 #define SLINK_CK_SDA			(1 << 21)
41 #define SLINK_CS_POLARITY2		(1 << 22)
42 #define SLINK_CS_POLARITY3		(1 << 23)
43 #define SLINK_IDLE_SCLK_DRIVE_LOW	(0 << 24)
44 #define SLINK_IDLE_SCLK_DRIVE_HIGH	(1 << 24)
45 #define SLINK_IDLE_SCLK_PULL_LOW	(2 << 24)
46 #define SLINK_IDLE_SCLK_PULL_HIGH	(3 << 24)
47 #define SLINK_IDLE_SCLK_MASK		(3 << 24)
48 #define SLINK_M_S			(1 << 28)
49 #define SLINK_WAIT			(1 << 29)
50 #define SLINK_GO			(1 << 30)
51 #define SLINK_ENB			(1 << 31)
52 
53 #define SLINK_MODES			(SLINK_IDLE_SCLK_MASK | SLINK_CK_SDA)
54 
55 #define SLINK_COMMAND2			0x004
56 #define SLINK_LSBFE			(1 << 0)
57 #define SLINK_SSOE			(1 << 1)
58 #define SLINK_SPIE			(1 << 4)
59 #define SLINK_BIDIROE			(1 << 6)
60 #define SLINK_MODFEN			(1 << 7)
61 #define SLINK_INT_SIZE(x)		(((x) & 0x1f) << 8)
62 #define SLINK_CS_ACTIVE_BETWEEN		(1 << 17)
63 #define SLINK_SS_EN_CS(x)		(((x) & 0x3) << 18)
64 #define SLINK_SS_SETUP(x)		(((x) & 0x3) << 20)
65 #define SLINK_FIFO_REFILLS_0		(0 << 22)
66 #define SLINK_FIFO_REFILLS_1		(1 << 22)
67 #define SLINK_FIFO_REFILLS_2		(2 << 22)
68 #define SLINK_FIFO_REFILLS_3		(3 << 22)
69 #define SLINK_FIFO_REFILLS_MASK		(3 << 22)
70 #define SLINK_WAIT_PACK_INT(x)		(((x) & 0x7) << 26)
71 #define SLINK_SPC0			(1 << 29)
72 #define SLINK_TXEN			(1 << 30)
73 #define SLINK_RXEN			(1 << 31)
74 
75 #define SLINK_STATUS			0x008
76 #define SLINK_COUNT(val)		(((val) >> 0) & 0x1f)
77 #define SLINK_WORD(val)			(((val) >> 5) & 0x1f)
78 #define SLINK_BLK_CNT(val)		(((val) >> 0) & 0xffff)
79 #define SLINK_MODF			(1 << 16)
80 #define SLINK_RX_UNF			(1 << 18)
81 #define SLINK_TX_OVF			(1 << 19)
82 #define SLINK_TX_FULL			(1 << 20)
83 #define SLINK_TX_EMPTY			(1 << 21)
84 #define SLINK_RX_FULL			(1 << 22)
85 #define SLINK_RX_EMPTY			(1 << 23)
86 #define SLINK_TX_UNF			(1 << 24)
87 #define SLINK_RX_OVF			(1 << 25)
88 #define SLINK_TX_FLUSH			(1 << 26)
89 #define SLINK_RX_FLUSH			(1 << 27)
90 #define SLINK_SCLK			(1 << 28)
91 #define SLINK_ERR			(1 << 29)
92 #define SLINK_RDY			(1 << 30)
93 #define SLINK_BSY			(1 << 31)
94 #define SLINK_FIFO_ERROR		(SLINK_TX_OVF | SLINK_RX_UNF |	\
95 					SLINK_TX_UNF | SLINK_RX_OVF)
96 
97 #define SLINK_FIFO_EMPTY		(SLINK_TX_EMPTY | SLINK_RX_EMPTY)
98 
99 #define SLINK_MAS_DATA			0x010
100 #define SLINK_SLAVE_DATA		0x014
101 
102 #define SLINK_DMA_CTL			0x018
103 #define SLINK_DMA_BLOCK_SIZE(x)		(((x) & 0xffff) << 0)
104 #define SLINK_TX_TRIG_1			(0 << 16)
105 #define SLINK_TX_TRIG_4			(1 << 16)
106 #define SLINK_TX_TRIG_8			(2 << 16)
107 #define SLINK_TX_TRIG_16		(3 << 16)
108 #define SLINK_TX_TRIG_MASK		(3 << 16)
109 #define SLINK_RX_TRIG_1			(0 << 18)
110 #define SLINK_RX_TRIG_4			(1 << 18)
111 #define SLINK_RX_TRIG_8			(2 << 18)
112 #define SLINK_RX_TRIG_16		(3 << 18)
113 #define SLINK_RX_TRIG_MASK		(3 << 18)
114 #define SLINK_PACKED			(1 << 20)
115 #define SLINK_PACK_SIZE_4		(0 << 21)
116 #define SLINK_PACK_SIZE_8		(1 << 21)
117 #define SLINK_PACK_SIZE_16		(2 << 21)
118 #define SLINK_PACK_SIZE_32		(3 << 21)
119 #define SLINK_PACK_SIZE_MASK		(3 << 21)
120 #define SLINK_IE_TXC			(1 << 26)
121 #define SLINK_IE_RXC			(1 << 27)
122 #define SLINK_DMA_EN			(1 << 31)
123 
124 #define SLINK_STATUS2			0x01c
125 #define SLINK_TX_FIFO_EMPTY_COUNT(val)	(((val) & 0x3f) >> 0)
126 #define SLINK_RX_FIFO_FULL_COUNT(val)	(((val) & 0x3f0000) >> 16)
127 #define SLINK_SS_HOLD_TIME(val)		(((val) & 0xF) << 6)
128 
129 #define SLINK_TX_FIFO			0x100
130 #define SLINK_RX_FIFO			0x180
131 
132 #define DATA_DIR_TX			(1 << 0)
133 #define DATA_DIR_RX			(1 << 1)
134 
135 #define SLINK_DMA_TIMEOUT		(msecs_to_jiffies(1000))
136 
137 #define DEFAULT_SPI_DMA_BUF_LEN		(16*1024)
138 #define TX_FIFO_EMPTY_COUNT_MAX		SLINK_TX_FIFO_EMPTY_COUNT(0x20)
139 #define RX_FIFO_FULL_COUNT_ZERO		SLINK_RX_FIFO_FULL_COUNT(0)
140 
141 #define SLINK_STATUS2_RESET \
142 	(TX_FIFO_EMPTY_COUNT_MAX | RX_FIFO_FULL_COUNT_ZERO << 16)
143 
144 #define MAX_CHIP_SELECT			4
145 #define SLINK_FIFO_DEPTH		32
146 
147 struct tegra_slink_chip_data {
148 	bool cs_hold_time;
149 };
150 
151 struct tegra_slink_data {
152 	struct device				*dev;
153 	struct spi_master			*master;
154 	const struct tegra_slink_chip_data	*chip_data;
155 	spinlock_t				lock;
156 
157 	struct clk				*clk;
158 	struct reset_control			*rst;
159 	void __iomem				*base;
160 	phys_addr_t				phys;
161 	unsigned				irq;
162 	u32					cur_speed;
163 
164 	struct spi_device			*cur_spi;
165 	unsigned				cur_pos;
166 	unsigned				cur_len;
167 	unsigned				words_per_32bit;
168 	unsigned				bytes_per_word;
169 	unsigned				curr_dma_words;
170 	unsigned				cur_direction;
171 
172 	unsigned				cur_rx_pos;
173 	unsigned				cur_tx_pos;
174 
175 	unsigned				dma_buf_size;
176 	unsigned				max_buf_size;
177 	bool					is_curr_dma_xfer;
178 
179 	struct completion			rx_dma_complete;
180 	struct completion			tx_dma_complete;
181 
182 	u32					tx_status;
183 	u32					rx_status;
184 	u32					status_reg;
185 	bool					is_packed;
186 	u32					packed_size;
187 
188 	u32					command_reg;
189 	u32					command2_reg;
190 	u32					dma_control_reg;
191 	u32					def_command_reg;
192 	u32					def_command2_reg;
193 
194 	struct completion			xfer_completion;
195 	struct spi_transfer			*curr_xfer;
196 	struct dma_chan				*rx_dma_chan;
197 	u32					*rx_dma_buf;
198 	dma_addr_t				rx_dma_phys;
199 	struct dma_async_tx_descriptor		*rx_dma_desc;
200 
201 	struct dma_chan				*tx_dma_chan;
202 	u32					*tx_dma_buf;
203 	dma_addr_t				tx_dma_phys;
204 	struct dma_async_tx_descriptor		*tx_dma_desc;
205 };
206 
tegra_slink_readl(struct tegra_slink_data * tspi,unsigned long reg)207 static inline u32 tegra_slink_readl(struct tegra_slink_data *tspi,
208 		unsigned long reg)
209 {
210 	return readl(tspi->base + reg);
211 }
212 
tegra_slink_writel(struct tegra_slink_data * tspi,u32 val,unsigned long reg)213 static inline void tegra_slink_writel(struct tegra_slink_data *tspi,
214 		u32 val, unsigned long reg)
215 {
216 	writel(val, tspi->base + reg);
217 
218 	/* Read back register to make sure that register writes completed */
219 	if (reg != SLINK_TX_FIFO)
220 		readl(tspi->base + SLINK_MAS_DATA);
221 }
222 
tegra_slink_clear_status(struct tegra_slink_data * tspi)223 static void tegra_slink_clear_status(struct tegra_slink_data *tspi)
224 {
225 	u32 val_write;
226 
227 	tegra_slink_readl(tspi, SLINK_STATUS);
228 
229 	/* Write 1 to clear status register */
230 	val_write = SLINK_RDY | SLINK_FIFO_ERROR;
231 	tegra_slink_writel(tspi, val_write, SLINK_STATUS);
232 }
233 
tegra_slink_get_packed_size(struct tegra_slink_data * tspi,struct spi_transfer * t)234 static u32 tegra_slink_get_packed_size(struct tegra_slink_data *tspi,
235 				  struct spi_transfer *t)
236 {
237 	switch (tspi->bytes_per_word) {
238 	case 0:
239 		return SLINK_PACK_SIZE_4;
240 	case 1:
241 		return SLINK_PACK_SIZE_8;
242 	case 2:
243 		return SLINK_PACK_SIZE_16;
244 	case 4:
245 		return SLINK_PACK_SIZE_32;
246 	default:
247 		return 0;
248 	}
249 }
250 
tegra_slink_calculate_curr_xfer_param(struct spi_device * spi,struct tegra_slink_data * tspi,struct spi_transfer * t)251 static unsigned tegra_slink_calculate_curr_xfer_param(
252 	struct spi_device *spi, struct tegra_slink_data *tspi,
253 	struct spi_transfer *t)
254 {
255 	unsigned remain_len = t->len - tspi->cur_pos;
256 	unsigned max_word;
257 	unsigned bits_per_word;
258 	unsigned max_len;
259 	unsigned total_fifo_words;
260 
261 	bits_per_word = t->bits_per_word;
262 	tspi->bytes_per_word = DIV_ROUND_UP(bits_per_word, 8);
263 
264 	if (bits_per_word == 8 || bits_per_word == 16) {
265 		tspi->is_packed = true;
266 		tspi->words_per_32bit = 32/bits_per_word;
267 	} else {
268 		tspi->is_packed = false;
269 		tspi->words_per_32bit = 1;
270 	}
271 	tspi->packed_size = tegra_slink_get_packed_size(tspi, t);
272 
273 	if (tspi->is_packed) {
274 		max_len = min(remain_len, tspi->max_buf_size);
275 		tspi->curr_dma_words = max_len/tspi->bytes_per_word;
276 		total_fifo_words = max_len/4;
277 	} else {
278 		max_word = (remain_len - 1) / tspi->bytes_per_word + 1;
279 		max_word = min(max_word, tspi->max_buf_size/4);
280 		tspi->curr_dma_words = max_word;
281 		total_fifo_words = max_word;
282 	}
283 	return total_fifo_words;
284 }
285 
tegra_slink_fill_tx_fifo_from_client_txbuf(struct tegra_slink_data * tspi,struct spi_transfer * t)286 static unsigned tegra_slink_fill_tx_fifo_from_client_txbuf(
287 	struct tegra_slink_data *tspi, struct spi_transfer *t)
288 {
289 	unsigned nbytes;
290 	unsigned tx_empty_count;
291 	u32 fifo_status;
292 	unsigned max_n_32bit;
293 	unsigned i, count;
294 	unsigned int written_words;
295 	unsigned fifo_words_left;
296 	u8 *tx_buf = (u8 *)t->tx_buf + tspi->cur_tx_pos;
297 
298 	fifo_status = tegra_slink_readl(tspi, SLINK_STATUS2);
299 	tx_empty_count = SLINK_TX_FIFO_EMPTY_COUNT(fifo_status);
300 
301 	if (tspi->is_packed) {
302 		fifo_words_left = tx_empty_count * tspi->words_per_32bit;
303 		written_words = min(fifo_words_left, tspi->curr_dma_words);
304 		nbytes = written_words * tspi->bytes_per_word;
305 		max_n_32bit = DIV_ROUND_UP(nbytes, 4);
306 		for (count = 0; count < max_n_32bit; count++) {
307 			u32 x = 0;
308 			for (i = 0; (i < 4) && nbytes; i++, nbytes--)
309 				x |= (u32)(*tx_buf++) << (i * 8);
310 			tegra_slink_writel(tspi, x, SLINK_TX_FIFO);
311 		}
312 	} else {
313 		max_n_32bit = min(tspi->curr_dma_words,  tx_empty_count);
314 		written_words = max_n_32bit;
315 		nbytes = written_words * tspi->bytes_per_word;
316 		for (count = 0; count < max_n_32bit; count++) {
317 			u32 x = 0;
318 			for (i = 0; nbytes && (i < tspi->bytes_per_word);
319 							i++, nbytes--)
320 				x |= (u32)(*tx_buf++) << (i * 8);
321 			tegra_slink_writel(tspi, x, SLINK_TX_FIFO);
322 		}
323 	}
324 	tspi->cur_tx_pos += written_words * tspi->bytes_per_word;
325 	return written_words;
326 }
327 
tegra_slink_read_rx_fifo_to_client_rxbuf(struct tegra_slink_data * tspi,struct spi_transfer * t)328 static unsigned int tegra_slink_read_rx_fifo_to_client_rxbuf(
329 		struct tegra_slink_data *tspi, struct spi_transfer *t)
330 {
331 	unsigned rx_full_count;
332 	u32 fifo_status;
333 	unsigned i, count;
334 	unsigned int read_words = 0;
335 	unsigned len;
336 	u8 *rx_buf = (u8 *)t->rx_buf + tspi->cur_rx_pos;
337 
338 	fifo_status = tegra_slink_readl(tspi, SLINK_STATUS2);
339 	rx_full_count = SLINK_RX_FIFO_FULL_COUNT(fifo_status);
340 	if (tspi->is_packed) {
341 		len = tspi->curr_dma_words * tspi->bytes_per_word;
342 		for (count = 0; count < rx_full_count; count++) {
343 			u32 x = tegra_slink_readl(tspi, SLINK_RX_FIFO);
344 			for (i = 0; len && (i < 4); i++, len--)
345 				*rx_buf++ = (x >> i*8) & 0xFF;
346 		}
347 		tspi->cur_rx_pos += tspi->curr_dma_words * tspi->bytes_per_word;
348 		read_words += tspi->curr_dma_words;
349 	} else {
350 		for (count = 0; count < rx_full_count; count++) {
351 			u32 x = tegra_slink_readl(tspi, SLINK_RX_FIFO);
352 			for (i = 0; (i < tspi->bytes_per_word); i++)
353 				*rx_buf++ = (x >> (i*8)) & 0xFF;
354 		}
355 		tspi->cur_rx_pos += rx_full_count * tspi->bytes_per_word;
356 		read_words += rx_full_count;
357 	}
358 	return read_words;
359 }
360 
tegra_slink_copy_client_txbuf_to_spi_txbuf(struct tegra_slink_data * tspi,struct spi_transfer * t)361 static void tegra_slink_copy_client_txbuf_to_spi_txbuf(
362 		struct tegra_slink_data *tspi, struct spi_transfer *t)
363 {
364 	/* Make the dma buffer to read by cpu */
365 	dma_sync_single_for_cpu(tspi->dev, tspi->tx_dma_phys,
366 				tspi->dma_buf_size, DMA_TO_DEVICE);
367 
368 	if (tspi->is_packed) {
369 		unsigned len = tspi->curr_dma_words * tspi->bytes_per_word;
370 		memcpy(tspi->tx_dma_buf, t->tx_buf + tspi->cur_pos, len);
371 	} else {
372 		unsigned int i;
373 		unsigned int count;
374 		u8 *tx_buf = (u8 *)t->tx_buf + tspi->cur_tx_pos;
375 		unsigned consume = tspi->curr_dma_words * tspi->bytes_per_word;
376 
377 		for (count = 0; count < tspi->curr_dma_words; count++) {
378 			u32 x = 0;
379 			for (i = 0; consume && (i < tspi->bytes_per_word);
380 							i++, consume--)
381 				x |= (u32)(*tx_buf++) << (i * 8);
382 			tspi->tx_dma_buf[count] = x;
383 		}
384 	}
385 	tspi->cur_tx_pos += tspi->curr_dma_words * tspi->bytes_per_word;
386 
387 	/* Make the dma buffer to read by dma */
388 	dma_sync_single_for_device(tspi->dev, tspi->tx_dma_phys,
389 				tspi->dma_buf_size, DMA_TO_DEVICE);
390 }
391 
tegra_slink_copy_spi_rxbuf_to_client_rxbuf(struct tegra_slink_data * tspi,struct spi_transfer * t)392 static void tegra_slink_copy_spi_rxbuf_to_client_rxbuf(
393 		struct tegra_slink_data *tspi, struct spi_transfer *t)
394 {
395 	unsigned len;
396 
397 	/* Make the dma buffer to read by cpu */
398 	dma_sync_single_for_cpu(tspi->dev, tspi->rx_dma_phys,
399 		tspi->dma_buf_size, DMA_FROM_DEVICE);
400 
401 	if (tspi->is_packed) {
402 		len = tspi->curr_dma_words * tspi->bytes_per_word;
403 		memcpy(t->rx_buf + tspi->cur_rx_pos, tspi->rx_dma_buf, len);
404 	} else {
405 		unsigned int i;
406 		unsigned int count;
407 		unsigned char *rx_buf = t->rx_buf + tspi->cur_rx_pos;
408 		u32 rx_mask = ((u32)1 << t->bits_per_word) - 1;
409 
410 		for (count = 0; count < tspi->curr_dma_words; count++) {
411 			u32 x = tspi->rx_dma_buf[count] & rx_mask;
412 			for (i = 0; (i < tspi->bytes_per_word); i++)
413 				*rx_buf++ = (x >> (i*8)) & 0xFF;
414 		}
415 	}
416 	tspi->cur_rx_pos += tspi->curr_dma_words * tspi->bytes_per_word;
417 
418 	/* Make the dma buffer to read by dma */
419 	dma_sync_single_for_device(tspi->dev, tspi->rx_dma_phys,
420 		tspi->dma_buf_size, DMA_FROM_DEVICE);
421 }
422 
tegra_slink_dma_complete(void * args)423 static void tegra_slink_dma_complete(void *args)
424 {
425 	struct completion *dma_complete = args;
426 
427 	complete(dma_complete);
428 }
429 
tegra_slink_start_tx_dma(struct tegra_slink_data * tspi,int len)430 static int tegra_slink_start_tx_dma(struct tegra_slink_data *tspi, int len)
431 {
432 	reinit_completion(&tspi->tx_dma_complete);
433 	tspi->tx_dma_desc = dmaengine_prep_slave_single(tspi->tx_dma_chan,
434 				tspi->tx_dma_phys, len, DMA_MEM_TO_DEV,
435 				DMA_PREP_INTERRUPT |  DMA_CTRL_ACK);
436 	if (!tspi->tx_dma_desc) {
437 		dev_err(tspi->dev, "Not able to get desc for Tx\n");
438 		return -EIO;
439 	}
440 
441 	tspi->tx_dma_desc->callback = tegra_slink_dma_complete;
442 	tspi->tx_dma_desc->callback_param = &tspi->tx_dma_complete;
443 
444 	dmaengine_submit(tspi->tx_dma_desc);
445 	dma_async_issue_pending(tspi->tx_dma_chan);
446 	return 0;
447 }
448 
tegra_slink_start_rx_dma(struct tegra_slink_data * tspi,int len)449 static int tegra_slink_start_rx_dma(struct tegra_slink_data *tspi, int len)
450 {
451 	reinit_completion(&tspi->rx_dma_complete);
452 	tspi->rx_dma_desc = dmaengine_prep_slave_single(tspi->rx_dma_chan,
453 				tspi->rx_dma_phys, len, DMA_DEV_TO_MEM,
454 				DMA_PREP_INTERRUPT |  DMA_CTRL_ACK);
455 	if (!tspi->rx_dma_desc) {
456 		dev_err(tspi->dev, "Not able to get desc for Rx\n");
457 		return -EIO;
458 	}
459 
460 	tspi->rx_dma_desc->callback = tegra_slink_dma_complete;
461 	tspi->rx_dma_desc->callback_param = &tspi->rx_dma_complete;
462 
463 	dmaengine_submit(tspi->rx_dma_desc);
464 	dma_async_issue_pending(tspi->rx_dma_chan);
465 	return 0;
466 }
467 
tegra_slink_start_dma_based_transfer(struct tegra_slink_data * tspi,struct spi_transfer * t)468 static int tegra_slink_start_dma_based_transfer(
469 		struct tegra_slink_data *tspi, struct spi_transfer *t)
470 {
471 	u32 val;
472 	unsigned int len;
473 	int ret = 0;
474 	u32 status;
475 
476 	/* Make sure that Rx and Tx fifo are empty */
477 	status = tegra_slink_readl(tspi, SLINK_STATUS);
478 	if ((status & SLINK_FIFO_EMPTY) != SLINK_FIFO_EMPTY) {
479 		dev_err(tspi->dev, "Rx/Tx fifo are not empty status 0x%08x\n",
480 			(unsigned)status);
481 		return -EIO;
482 	}
483 
484 	val = SLINK_DMA_BLOCK_SIZE(tspi->curr_dma_words - 1);
485 	val |= tspi->packed_size;
486 	if (tspi->is_packed)
487 		len = DIV_ROUND_UP(tspi->curr_dma_words * tspi->bytes_per_word,
488 					4) * 4;
489 	else
490 		len = tspi->curr_dma_words * 4;
491 
492 	/* Set attention level based on length of transfer */
493 	if (len & 0xF)
494 		val |= SLINK_TX_TRIG_1 | SLINK_RX_TRIG_1;
495 	else if (((len) >> 4) & 0x1)
496 		val |= SLINK_TX_TRIG_4 | SLINK_RX_TRIG_4;
497 	else
498 		val |= SLINK_TX_TRIG_8 | SLINK_RX_TRIG_8;
499 
500 	if (tspi->cur_direction & DATA_DIR_TX)
501 		val |= SLINK_IE_TXC;
502 
503 	if (tspi->cur_direction & DATA_DIR_RX)
504 		val |= SLINK_IE_RXC;
505 
506 	tegra_slink_writel(tspi, val, SLINK_DMA_CTL);
507 	tspi->dma_control_reg = val;
508 
509 	if (tspi->cur_direction & DATA_DIR_TX) {
510 		tegra_slink_copy_client_txbuf_to_spi_txbuf(tspi, t);
511 		wmb();
512 		ret = tegra_slink_start_tx_dma(tspi, len);
513 		if (ret < 0) {
514 			dev_err(tspi->dev,
515 				"Starting tx dma failed, err %d\n", ret);
516 			return ret;
517 		}
518 
519 		/* Wait for tx fifo to be fill before starting slink */
520 		status = tegra_slink_readl(tspi, SLINK_STATUS);
521 		while (!(status & SLINK_TX_FULL))
522 			status = tegra_slink_readl(tspi, SLINK_STATUS);
523 	}
524 
525 	if (tspi->cur_direction & DATA_DIR_RX) {
526 		/* Make the dma buffer to read by dma */
527 		dma_sync_single_for_device(tspi->dev, tspi->rx_dma_phys,
528 				tspi->dma_buf_size, DMA_FROM_DEVICE);
529 
530 		ret = tegra_slink_start_rx_dma(tspi, len);
531 		if (ret < 0) {
532 			dev_err(tspi->dev,
533 				"Starting rx dma failed, err %d\n", ret);
534 			if (tspi->cur_direction & DATA_DIR_TX)
535 				dmaengine_terminate_all(tspi->tx_dma_chan);
536 			return ret;
537 		}
538 	}
539 	tspi->is_curr_dma_xfer = true;
540 	if (tspi->is_packed) {
541 		val |= SLINK_PACKED;
542 		tegra_slink_writel(tspi, val, SLINK_DMA_CTL);
543 		/* HW need small delay after settign Packed mode */
544 		udelay(1);
545 	}
546 	tspi->dma_control_reg = val;
547 
548 	val |= SLINK_DMA_EN;
549 	tegra_slink_writel(tspi, val, SLINK_DMA_CTL);
550 	return ret;
551 }
552 
tegra_slink_start_cpu_based_transfer(struct tegra_slink_data * tspi,struct spi_transfer * t)553 static int tegra_slink_start_cpu_based_transfer(
554 		struct tegra_slink_data *tspi, struct spi_transfer *t)
555 {
556 	u32 val;
557 	unsigned cur_words;
558 
559 	val = tspi->packed_size;
560 	if (tspi->cur_direction & DATA_DIR_TX)
561 		val |= SLINK_IE_TXC;
562 
563 	if (tspi->cur_direction & DATA_DIR_RX)
564 		val |= SLINK_IE_RXC;
565 
566 	tegra_slink_writel(tspi, val, SLINK_DMA_CTL);
567 	tspi->dma_control_reg = val;
568 
569 	if (tspi->cur_direction & DATA_DIR_TX)
570 		cur_words = tegra_slink_fill_tx_fifo_from_client_txbuf(tspi, t);
571 	else
572 		cur_words = tspi->curr_dma_words;
573 	val |= SLINK_DMA_BLOCK_SIZE(cur_words - 1);
574 	tegra_slink_writel(tspi, val, SLINK_DMA_CTL);
575 	tspi->dma_control_reg = val;
576 
577 	tspi->is_curr_dma_xfer = false;
578 	if (tspi->is_packed) {
579 		val |= SLINK_PACKED;
580 		tegra_slink_writel(tspi, val, SLINK_DMA_CTL);
581 		udelay(1);
582 		wmb();
583 	}
584 	tspi->dma_control_reg = val;
585 	val |= SLINK_DMA_EN;
586 	tegra_slink_writel(tspi, val, SLINK_DMA_CTL);
587 	return 0;
588 }
589 
tegra_slink_init_dma_param(struct tegra_slink_data * tspi,bool dma_to_memory)590 static int tegra_slink_init_dma_param(struct tegra_slink_data *tspi,
591 			bool dma_to_memory)
592 {
593 	struct dma_chan *dma_chan;
594 	u32 *dma_buf;
595 	dma_addr_t dma_phys;
596 	int ret;
597 	struct dma_slave_config dma_sconfig;
598 
599 	dma_chan = dma_request_chan(tspi->dev, dma_to_memory ? "rx" : "tx");
600 	if (IS_ERR(dma_chan))
601 		return dev_err_probe(tspi->dev, PTR_ERR(dma_chan),
602 				     "Dma channel is not available\n");
603 
604 	dma_buf = dma_alloc_coherent(tspi->dev, tspi->dma_buf_size,
605 				&dma_phys, GFP_KERNEL);
606 	if (!dma_buf) {
607 		dev_err(tspi->dev, " Not able to allocate the dma buffer\n");
608 		dma_release_channel(dma_chan);
609 		return -ENOMEM;
610 	}
611 
612 	if (dma_to_memory) {
613 		dma_sconfig.src_addr = tspi->phys + SLINK_RX_FIFO;
614 		dma_sconfig.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
615 		dma_sconfig.src_maxburst = 0;
616 	} else {
617 		dma_sconfig.dst_addr = tspi->phys + SLINK_TX_FIFO;
618 		dma_sconfig.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
619 		dma_sconfig.dst_maxburst = 0;
620 	}
621 
622 	ret = dmaengine_slave_config(dma_chan, &dma_sconfig);
623 	if (ret)
624 		goto scrub;
625 	if (dma_to_memory) {
626 		tspi->rx_dma_chan = dma_chan;
627 		tspi->rx_dma_buf = dma_buf;
628 		tspi->rx_dma_phys = dma_phys;
629 	} else {
630 		tspi->tx_dma_chan = dma_chan;
631 		tspi->tx_dma_buf = dma_buf;
632 		tspi->tx_dma_phys = dma_phys;
633 	}
634 	return 0;
635 
636 scrub:
637 	dma_free_coherent(tspi->dev, tspi->dma_buf_size, dma_buf, dma_phys);
638 	dma_release_channel(dma_chan);
639 	return ret;
640 }
641 
tegra_slink_deinit_dma_param(struct tegra_slink_data * tspi,bool dma_to_memory)642 static void tegra_slink_deinit_dma_param(struct tegra_slink_data *tspi,
643 	bool dma_to_memory)
644 {
645 	u32 *dma_buf;
646 	dma_addr_t dma_phys;
647 	struct dma_chan *dma_chan;
648 
649 	if (dma_to_memory) {
650 		dma_buf = tspi->rx_dma_buf;
651 		dma_chan = tspi->rx_dma_chan;
652 		dma_phys = tspi->rx_dma_phys;
653 		tspi->rx_dma_chan = NULL;
654 		tspi->rx_dma_buf = NULL;
655 	} else {
656 		dma_buf = tspi->tx_dma_buf;
657 		dma_chan = tspi->tx_dma_chan;
658 		dma_phys = tspi->tx_dma_phys;
659 		tspi->tx_dma_buf = NULL;
660 		tspi->tx_dma_chan = NULL;
661 	}
662 	if (!dma_chan)
663 		return;
664 
665 	dma_free_coherent(tspi->dev, tspi->dma_buf_size, dma_buf, dma_phys);
666 	dma_release_channel(dma_chan);
667 }
668 
tegra_slink_start_transfer_one(struct spi_device * spi,struct spi_transfer * t)669 static int tegra_slink_start_transfer_one(struct spi_device *spi,
670 		struct spi_transfer *t)
671 {
672 	struct tegra_slink_data *tspi = spi_master_get_devdata(spi->master);
673 	u32 speed;
674 	u8 bits_per_word;
675 	unsigned total_fifo_words;
676 	int ret;
677 	u32 command;
678 	u32 command2;
679 
680 	bits_per_word = t->bits_per_word;
681 	speed = t->speed_hz;
682 	if (speed != tspi->cur_speed) {
683 		clk_set_rate(tspi->clk, speed * 4);
684 		tspi->cur_speed = speed;
685 	}
686 
687 	tspi->cur_spi = spi;
688 	tspi->cur_pos = 0;
689 	tspi->cur_rx_pos = 0;
690 	tspi->cur_tx_pos = 0;
691 	tspi->curr_xfer = t;
692 	total_fifo_words = tegra_slink_calculate_curr_xfer_param(spi, tspi, t);
693 
694 	command = tspi->command_reg;
695 	command &= ~SLINK_BIT_LENGTH(~0);
696 	command |= SLINK_BIT_LENGTH(bits_per_word - 1);
697 
698 	command2 = tspi->command2_reg;
699 	command2 &= ~(SLINK_RXEN | SLINK_TXEN);
700 
701 	tspi->cur_direction = 0;
702 	if (t->rx_buf) {
703 		command2 |= SLINK_RXEN;
704 		tspi->cur_direction |= DATA_DIR_RX;
705 	}
706 	if (t->tx_buf) {
707 		command2 |= SLINK_TXEN;
708 		tspi->cur_direction |= DATA_DIR_TX;
709 	}
710 
711 	/*
712 	 * Writing to the command2 register bevore the command register prevents
713 	 * a spike in chip_select line 0. This selects the chip_select line
714 	 * before changing the chip_select value.
715 	 */
716 	tegra_slink_writel(tspi, command2, SLINK_COMMAND2);
717 	tspi->command2_reg = command2;
718 
719 	tegra_slink_writel(tspi, command, SLINK_COMMAND);
720 	tspi->command_reg = command;
721 
722 	if (total_fifo_words > SLINK_FIFO_DEPTH)
723 		ret = tegra_slink_start_dma_based_transfer(tspi, t);
724 	else
725 		ret = tegra_slink_start_cpu_based_transfer(tspi, t);
726 	return ret;
727 }
728 
tegra_slink_setup(struct spi_device * spi)729 static int tegra_slink_setup(struct spi_device *spi)
730 {
731 	static const u32 cs_pol_bit[MAX_CHIP_SELECT] = {
732 			SLINK_CS_POLARITY,
733 			SLINK_CS_POLARITY1,
734 			SLINK_CS_POLARITY2,
735 			SLINK_CS_POLARITY3,
736 	};
737 
738 	struct tegra_slink_data *tspi = spi_master_get_devdata(spi->master);
739 	u32 val;
740 	unsigned long flags;
741 	int ret;
742 
743 	dev_dbg(&spi->dev, "setup %d bpw, %scpol, %scpha, %dHz\n",
744 		spi->bits_per_word,
745 		spi->mode & SPI_CPOL ? "" : "~",
746 		spi->mode & SPI_CPHA ? "" : "~",
747 		spi->max_speed_hz);
748 
749 	ret = pm_runtime_get_sync(tspi->dev);
750 	if (ret < 0) {
751 		pm_runtime_put_noidle(tspi->dev);
752 		dev_err(tspi->dev, "pm runtime failed, e = %d\n", ret);
753 		return ret;
754 	}
755 
756 	spin_lock_irqsave(&tspi->lock, flags);
757 	val = tspi->def_command_reg;
758 	if (spi->mode & SPI_CS_HIGH)
759 		val |= cs_pol_bit[spi->chip_select];
760 	else
761 		val &= ~cs_pol_bit[spi->chip_select];
762 	tspi->def_command_reg = val;
763 	tegra_slink_writel(tspi, tspi->def_command_reg, SLINK_COMMAND);
764 	spin_unlock_irqrestore(&tspi->lock, flags);
765 
766 	pm_runtime_put(tspi->dev);
767 	return 0;
768 }
769 
tegra_slink_prepare_message(struct spi_master * master,struct spi_message * msg)770 static int tegra_slink_prepare_message(struct spi_master *master,
771 				       struct spi_message *msg)
772 {
773 	struct tegra_slink_data *tspi = spi_master_get_devdata(master);
774 	struct spi_device *spi = msg->spi;
775 
776 	tegra_slink_clear_status(tspi);
777 
778 	tspi->command_reg = tspi->def_command_reg;
779 	tspi->command_reg |= SLINK_CS_SW | SLINK_CS_VALUE;
780 
781 	tspi->command2_reg = tspi->def_command2_reg;
782 	tspi->command2_reg |= SLINK_SS_EN_CS(spi->chip_select);
783 
784 	tspi->command_reg &= ~SLINK_MODES;
785 	if (spi->mode & SPI_CPHA)
786 		tspi->command_reg |= SLINK_CK_SDA;
787 
788 	if (spi->mode & SPI_CPOL)
789 		tspi->command_reg |= SLINK_IDLE_SCLK_DRIVE_HIGH;
790 	else
791 		tspi->command_reg |= SLINK_IDLE_SCLK_DRIVE_LOW;
792 
793 	return 0;
794 }
795 
tegra_slink_transfer_one(struct spi_master * master,struct spi_device * spi,struct spi_transfer * xfer)796 static int tegra_slink_transfer_one(struct spi_master *master,
797 				    struct spi_device *spi,
798 				    struct spi_transfer *xfer)
799 {
800 	struct tegra_slink_data *tspi = spi_master_get_devdata(master);
801 	int ret;
802 
803 	reinit_completion(&tspi->xfer_completion);
804 	ret = tegra_slink_start_transfer_one(spi, xfer);
805 	if (ret < 0) {
806 		dev_err(tspi->dev,
807 			"spi can not start transfer, err %d\n", ret);
808 		return ret;
809 	}
810 
811 	ret = wait_for_completion_timeout(&tspi->xfer_completion,
812 					  SLINK_DMA_TIMEOUT);
813 	if (WARN_ON(ret == 0)) {
814 		dev_err(tspi->dev,
815 			"spi transfer timeout, err %d\n", ret);
816 		return -EIO;
817 	}
818 
819 	if (tspi->tx_status)
820 		return tspi->tx_status;
821 	if (tspi->rx_status)
822 		return tspi->rx_status;
823 
824 	return 0;
825 }
826 
tegra_slink_unprepare_message(struct spi_master * master,struct spi_message * msg)827 static int tegra_slink_unprepare_message(struct spi_master *master,
828 					 struct spi_message *msg)
829 {
830 	struct tegra_slink_data *tspi = spi_master_get_devdata(master);
831 
832 	tegra_slink_writel(tspi, tspi->def_command_reg, SLINK_COMMAND);
833 	tegra_slink_writel(tspi, tspi->def_command2_reg, SLINK_COMMAND2);
834 
835 	return 0;
836 }
837 
handle_cpu_based_xfer(struct tegra_slink_data * tspi)838 static irqreturn_t handle_cpu_based_xfer(struct tegra_slink_data *tspi)
839 {
840 	struct spi_transfer *t = tspi->curr_xfer;
841 	unsigned long flags;
842 
843 	spin_lock_irqsave(&tspi->lock, flags);
844 	if (tspi->tx_status ||  tspi->rx_status ||
845 				(tspi->status_reg & SLINK_BSY)) {
846 		dev_err(tspi->dev,
847 			"CpuXfer ERROR bit set 0x%x\n", tspi->status_reg);
848 		dev_err(tspi->dev,
849 			"CpuXfer 0x%08x:0x%08x:0x%08x\n", tspi->command_reg,
850 				tspi->command2_reg, tspi->dma_control_reg);
851 		reset_control_assert(tspi->rst);
852 		udelay(2);
853 		reset_control_deassert(tspi->rst);
854 		complete(&tspi->xfer_completion);
855 		goto exit;
856 	}
857 
858 	if (tspi->cur_direction & DATA_DIR_RX)
859 		tegra_slink_read_rx_fifo_to_client_rxbuf(tspi, t);
860 
861 	if (tspi->cur_direction & DATA_DIR_TX)
862 		tspi->cur_pos = tspi->cur_tx_pos;
863 	else
864 		tspi->cur_pos = tspi->cur_rx_pos;
865 
866 	if (tspi->cur_pos == t->len) {
867 		complete(&tspi->xfer_completion);
868 		goto exit;
869 	}
870 
871 	tegra_slink_calculate_curr_xfer_param(tspi->cur_spi, tspi, t);
872 	tegra_slink_start_cpu_based_transfer(tspi, t);
873 exit:
874 	spin_unlock_irqrestore(&tspi->lock, flags);
875 	return IRQ_HANDLED;
876 }
877 
handle_dma_based_xfer(struct tegra_slink_data * tspi)878 static irqreturn_t handle_dma_based_xfer(struct tegra_slink_data *tspi)
879 {
880 	struct spi_transfer *t = tspi->curr_xfer;
881 	long wait_status;
882 	int err = 0;
883 	unsigned total_fifo_words;
884 	unsigned long flags;
885 
886 	/* Abort dmas if any error */
887 	if (tspi->cur_direction & DATA_DIR_TX) {
888 		if (tspi->tx_status) {
889 			dmaengine_terminate_all(tspi->tx_dma_chan);
890 			err += 1;
891 		} else {
892 			wait_status = wait_for_completion_interruptible_timeout(
893 				&tspi->tx_dma_complete, SLINK_DMA_TIMEOUT);
894 			if (wait_status <= 0) {
895 				dmaengine_terminate_all(tspi->tx_dma_chan);
896 				dev_err(tspi->dev, "TxDma Xfer failed\n");
897 				err += 1;
898 			}
899 		}
900 	}
901 
902 	if (tspi->cur_direction & DATA_DIR_RX) {
903 		if (tspi->rx_status) {
904 			dmaengine_terminate_all(tspi->rx_dma_chan);
905 			err += 2;
906 		} else {
907 			wait_status = wait_for_completion_interruptible_timeout(
908 				&tspi->rx_dma_complete, SLINK_DMA_TIMEOUT);
909 			if (wait_status <= 0) {
910 				dmaengine_terminate_all(tspi->rx_dma_chan);
911 				dev_err(tspi->dev, "RxDma Xfer failed\n");
912 				err += 2;
913 			}
914 		}
915 	}
916 
917 	spin_lock_irqsave(&tspi->lock, flags);
918 	if (err) {
919 		dev_err(tspi->dev,
920 			"DmaXfer: ERROR bit set 0x%x\n", tspi->status_reg);
921 		dev_err(tspi->dev,
922 			"DmaXfer 0x%08x:0x%08x:0x%08x\n", tspi->command_reg,
923 				tspi->command2_reg, tspi->dma_control_reg);
924 		reset_control_assert(tspi->rst);
925 		udelay(2);
926 		reset_control_assert(tspi->rst);
927 		complete(&tspi->xfer_completion);
928 		spin_unlock_irqrestore(&tspi->lock, flags);
929 		return IRQ_HANDLED;
930 	}
931 
932 	if (tspi->cur_direction & DATA_DIR_RX)
933 		tegra_slink_copy_spi_rxbuf_to_client_rxbuf(tspi, t);
934 
935 	if (tspi->cur_direction & DATA_DIR_TX)
936 		tspi->cur_pos = tspi->cur_tx_pos;
937 	else
938 		tspi->cur_pos = tspi->cur_rx_pos;
939 
940 	if (tspi->cur_pos == t->len) {
941 		complete(&tspi->xfer_completion);
942 		goto exit;
943 	}
944 
945 	/* Continue transfer in current message */
946 	total_fifo_words = tegra_slink_calculate_curr_xfer_param(tspi->cur_spi,
947 							tspi, t);
948 	if (total_fifo_words > SLINK_FIFO_DEPTH)
949 		err = tegra_slink_start_dma_based_transfer(tspi, t);
950 	else
951 		err = tegra_slink_start_cpu_based_transfer(tspi, t);
952 
953 exit:
954 	spin_unlock_irqrestore(&tspi->lock, flags);
955 	return IRQ_HANDLED;
956 }
957 
tegra_slink_isr_thread(int irq,void * context_data)958 static irqreturn_t tegra_slink_isr_thread(int irq, void *context_data)
959 {
960 	struct tegra_slink_data *tspi = context_data;
961 
962 	if (!tspi->is_curr_dma_xfer)
963 		return handle_cpu_based_xfer(tspi);
964 	return handle_dma_based_xfer(tspi);
965 }
966 
tegra_slink_isr(int irq,void * context_data)967 static irqreturn_t tegra_slink_isr(int irq, void *context_data)
968 {
969 	struct tegra_slink_data *tspi = context_data;
970 
971 	tspi->status_reg = tegra_slink_readl(tspi, SLINK_STATUS);
972 	if (tspi->cur_direction & DATA_DIR_TX)
973 		tspi->tx_status = tspi->status_reg &
974 					(SLINK_TX_OVF | SLINK_TX_UNF);
975 
976 	if (tspi->cur_direction & DATA_DIR_RX)
977 		tspi->rx_status = tspi->status_reg &
978 					(SLINK_RX_OVF | SLINK_RX_UNF);
979 	tegra_slink_clear_status(tspi);
980 
981 	return IRQ_WAKE_THREAD;
982 }
983 
984 static const struct tegra_slink_chip_data tegra30_spi_cdata = {
985 	.cs_hold_time = true,
986 };
987 
988 static const struct tegra_slink_chip_data tegra20_spi_cdata = {
989 	.cs_hold_time = false,
990 };
991 
992 static const struct of_device_id tegra_slink_of_match[] = {
993 	{ .compatible = "nvidia,tegra30-slink", .data = &tegra30_spi_cdata, },
994 	{ .compatible = "nvidia,tegra20-slink", .data = &tegra20_spi_cdata, },
995 	{}
996 };
997 MODULE_DEVICE_TABLE(of, tegra_slink_of_match);
998 
tegra_slink_probe(struct platform_device * pdev)999 static int tegra_slink_probe(struct platform_device *pdev)
1000 {
1001 	struct spi_master	*master;
1002 	struct tegra_slink_data	*tspi;
1003 	struct resource		*r;
1004 	int ret, spi_irq;
1005 	const struct tegra_slink_chip_data *cdata = NULL;
1006 	const struct of_device_id *match;
1007 
1008 	match = of_match_device(tegra_slink_of_match, &pdev->dev);
1009 	if (!match) {
1010 		dev_err(&pdev->dev, "Error: No device match found\n");
1011 		return -ENODEV;
1012 	}
1013 	cdata = match->data;
1014 
1015 	master = spi_alloc_master(&pdev->dev, sizeof(*tspi));
1016 	if (!master) {
1017 		dev_err(&pdev->dev, "master allocation failed\n");
1018 		return -ENOMEM;
1019 	}
1020 
1021 	/* the spi->mode bits understood by this driver: */
1022 	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
1023 	master->setup = tegra_slink_setup;
1024 	master->prepare_message = tegra_slink_prepare_message;
1025 	master->transfer_one = tegra_slink_transfer_one;
1026 	master->unprepare_message = tegra_slink_unprepare_message;
1027 	master->auto_runtime_pm = true;
1028 	master->num_chipselect = MAX_CHIP_SELECT;
1029 
1030 	platform_set_drvdata(pdev, master);
1031 	tspi = spi_master_get_devdata(master);
1032 	tspi->master = master;
1033 	tspi->dev = &pdev->dev;
1034 	tspi->chip_data = cdata;
1035 	spin_lock_init(&tspi->lock);
1036 
1037 	if (of_property_read_u32(tspi->dev->of_node, "spi-max-frequency",
1038 				 &master->max_speed_hz))
1039 		master->max_speed_hz = 25000000; /* 25MHz */
1040 
1041 	r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1042 	if (!r) {
1043 		dev_err(&pdev->dev, "No IO memory resource\n");
1044 		ret = -ENODEV;
1045 		goto exit_free_master;
1046 	}
1047 	tspi->phys = r->start;
1048 	tspi->base = devm_ioremap_resource(&pdev->dev, r);
1049 	if (IS_ERR(tspi->base)) {
1050 		ret = PTR_ERR(tspi->base);
1051 		goto exit_free_master;
1052 	}
1053 
1054 	/* disabled clock may cause interrupt storm upon request */
1055 	tspi->clk = devm_clk_get(&pdev->dev, NULL);
1056 	if (IS_ERR(tspi->clk)) {
1057 		ret = PTR_ERR(tspi->clk);
1058 		dev_err(&pdev->dev, "Can not get clock %d\n", ret);
1059 		goto exit_free_master;
1060 	}
1061 
1062 	tspi->rst = devm_reset_control_get_exclusive(&pdev->dev, "spi");
1063 	if (IS_ERR(tspi->rst)) {
1064 		dev_err(&pdev->dev, "can not get reset\n");
1065 		ret = PTR_ERR(tspi->rst);
1066 		goto exit_free_master;
1067 	}
1068 
1069 	tspi->max_buf_size = SLINK_FIFO_DEPTH << 2;
1070 	tspi->dma_buf_size = DEFAULT_SPI_DMA_BUF_LEN;
1071 
1072 	ret = tegra_slink_init_dma_param(tspi, true);
1073 	if (ret < 0)
1074 		goto exit_free_master;
1075 	ret = tegra_slink_init_dma_param(tspi, false);
1076 	if (ret < 0)
1077 		goto exit_rx_dma_free;
1078 	tspi->max_buf_size = tspi->dma_buf_size;
1079 	init_completion(&tspi->tx_dma_complete);
1080 	init_completion(&tspi->rx_dma_complete);
1081 
1082 	init_completion(&tspi->xfer_completion);
1083 
1084 	pm_runtime_enable(&pdev->dev);
1085 	ret = pm_runtime_resume_and_get(&pdev->dev);
1086 	if (ret) {
1087 		dev_err(&pdev->dev, "pm runtime get failed, e = %d\n", ret);
1088 		goto exit_pm_disable;
1089 	}
1090 
1091 	reset_control_assert(tspi->rst);
1092 	udelay(2);
1093 	reset_control_deassert(tspi->rst);
1094 
1095 	spi_irq = platform_get_irq(pdev, 0);
1096 	tspi->irq = spi_irq;
1097 	ret = request_threaded_irq(tspi->irq, tegra_slink_isr,
1098 				   tegra_slink_isr_thread, IRQF_ONESHOT,
1099 				   dev_name(&pdev->dev), tspi);
1100 	if (ret < 0) {
1101 		dev_err(&pdev->dev, "Failed to register ISR for IRQ %d\n",
1102 			tspi->irq);
1103 		goto exit_pm_put;
1104 	}
1105 
1106 	tspi->def_command_reg  = SLINK_M_S;
1107 	tspi->def_command2_reg = SLINK_CS_ACTIVE_BETWEEN;
1108 	tegra_slink_writel(tspi, tspi->def_command_reg, SLINK_COMMAND);
1109 	tegra_slink_writel(tspi, tspi->def_command2_reg, SLINK_COMMAND2);
1110 
1111 	master->dev.of_node = pdev->dev.of_node;
1112 	ret = spi_register_master(master);
1113 	if (ret < 0) {
1114 		dev_err(&pdev->dev, "can not register to master err %d\n", ret);
1115 		goto exit_free_irq;
1116 	}
1117 
1118 	pm_runtime_put(&pdev->dev);
1119 
1120 	return ret;
1121 
1122 exit_free_irq:
1123 	free_irq(spi_irq, tspi);
1124 exit_pm_put:
1125 	pm_runtime_put(&pdev->dev);
1126 exit_pm_disable:
1127 	pm_runtime_disable(&pdev->dev);
1128 
1129 	tegra_slink_deinit_dma_param(tspi, false);
1130 exit_rx_dma_free:
1131 	tegra_slink_deinit_dma_param(tspi, true);
1132 exit_free_master:
1133 	spi_master_put(master);
1134 	return ret;
1135 }
1136 
tegra_slink_remove(struct platform_device * pdev)1137 static int tegra_slink_remove(struct platform_device *pdev)
1138 {
1139 	struct spi_master *master = platform_get_drvdata(pdev);
1140 	struct tegra_slink_data	*tspi = spi_master_get_devdata(master);
1141 
1142 	spi_unregister_master(master);
1143 
1144 	free_irq(tspi->irq, tspi);
1145 
1146 	pm_runtime_disable(&pdev->dev);
1147 
1148 	if (tspi->tx_dma_chan)
1149 		tegra_slink_deinit_dma_param(tspi, false);
1150 
1151 	if (tspi->rx_dma_chan)
1152 		tegra_slink_deinit_dma_param(tspi, true);
1153 
1154 	return 0;
1155 }
1156 
1157 #ifdef CONFIG_PM_SLEEP
tegra_slink_suspend(struct device * dev)1158 static int tegra_slink_suspend(struct device *dev)
1159 {
1160 	struct spi_master *master = dev_get_drvdata(dev);
1161 
1162 	return spi_master_suspend(master);
1163 }
1164 
tegra_slink_resume(struct device * dev)1165 static int tegra_slink_resume(struct device *dev)
1166 {
1167 	struct spi_master *master = dev_get_drvdata(dev);
1168 	struct tegra_slink_data *tspi = spi_master_get_devdata(master);
1169 	int ret;
1170 
1171 	ret = pm_runtime_get_sync(dev);
1172 	if (ret < 0) {
1173 		pm_runtime_put_noidle(dev);
1174 		dev_err(dev, "pm runtime failed, e = %d\n", ret);
1175 		return ret;
1176 	}
1177 	tegra_slink_writel(tspi, tspi->command_reg, SLINK_COMMAND);
1178 	tegra_slink_writel(tspi, tspi->command2_reg, SLINK_COMMAND2);
1179 	pm_runtime_put(dev);
1180 
1181 	return spi_master_resume(master);
1182 }
1183 #endif
1184 
tegra_slink_runtime_suspend(struct device * dev)1185 static int __maybe_unused tegra_slink_runtime_suspend(struct device *dev)
1186 {
1187 	struct spi_master *master = dev_get_drvdata(dev);
1188 	struct tegra_slink_data *tspi = spi_master_get_devdata(master);
1189 
1190 	/* Flush all write which are in PPSB queue by reading back */
1191 	tegra_slink_readl(tspi, SLINK_MAS_DATA);
1192 
1193 	clk_disable_unprepare(tspi->clk);
1194 	return 0;
1195 }
1196 
tegra_slink_runtime_resume(struct device * dev)1197 static int __maybe_unused tegra_slink_runtime_resume(struct device *dev)
1198 {
1199 	struct spi_master *master = dev_get_drvdata(dev);
1200 	struct tegra_slink_data *tspi = spi_master_get_devdata(master);
1201 	int ret;
1202 
1203 	ret = clk_prepare_enable(tspi->clk);
1204 	if (ret < 0) {
1205 		dev_err(tspi->dev, "clk_prepare failed: %d\n", ret);
1206 		return ret;
1207 	}
1208 	return 0;
1209 }
1210 
1211 static const struct dev_pm_ops slink_pm_ops = {
1212 	SET_RUNTIME_PM_OPS(tegra_slink_runtime_suspend,
1213 		tegra_slink_runtime_resume, NULL)
1214 	SET_SYSTEM_SLEEP_PM_OPS(tegra_slink_suspend, tegra_slink_resume)
1215 };
1216 static struct platform_driver tegra_slink_driver = {
1217 	.driver = {
1218 		.name		= "spi-tegra-slink",
1219 		.pm		= &slink_pm_ops,
1220 		.of_match_table	= tegra_slink_of_match,
1221 	},
1222 	.probe =	tegra_slink_probe,
1223 	.remove =	tegra_slink_remove,
1224 };
1225 module_platform_driver(tegra_slink_driver);
1226 
1227 MODULE_ALIAS("platform:spi-tegra-slink");
1228 MODULE_DESCRIPTION("NVIDIA Tegra20/Tegra30 SLINK Controller Driver");
1229 MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
1230 MODULE_LICENSE("GPL v2");
1231