xref: /linux/drivers/spi/spi-ingenic.c (revision 301940020a92ebdef9352a0573075a1db42d17aa)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * SPI bus driver for the Ingenic SoCs
4  * Copyright (c) 2017-2021 Artur Rojek <contact@artur-rojek.eu>
5  * Copyright (c) 2017-2021 Paul Cercueil <paul@crapouillou.net>
6  * Copyright (c) 2022 周琰杰 (Zhou Yanjie) <zhouyanjie@wanyeetech.com>
7  */
8 
9 #include <linux/clk.h>
10 #include <linux/delay.h>
11 #include <linux/dmaengine.h>
12 #include <linux/dma-mapping.h>
13 #include <linux/iopoll.h>
14 #include <linux/module.h>
15 #include <linux/of.h>
16 #include <linux/platform_device.h>
17 #include <linux/regmap.h>
18 #include <linux/spi/spi.h>
19 
20 #define REG_SSIDR	0x0
21 #define REG_SSICR0	0x4
22 #define REG_SSICR1	0x8
23 #define REG_SSISR	0xc
24 #define REG_SSIGR	0x18
25 
26 #define REG_SSICR0_TENDIAN_LSB		BIT(19)
27 #define REG_SSICR0_RENDIAN_LSB		BIT(17)
28 #define REG_SSICR0_SSIE			BIT(15)
29 #define REG_SSICR0_LOOP			BIT(10)
30 #define REG_SSICR0_EACLRUN		BIT(7)
31 #define REG_SSICR0_FSEL			BIT(6)
32 #define REG_SSICR0_TFLUSH		BIT(2)
33 #define REG_SSICR0_RFLUSH		BIT(1)
34 
35 #define REG_SSICR1_FRMHL_MASK		(BIT(31) | BIT(30))
36 #define REG_SSICR1_FRMHL		BIT(30)
37 #define REG_SSICR1_LFST			BIT(25)
38 #define REG_SSICR1_UNFIN		BIT(23)
39 #define REG_SSICR1_PHA			BIT(1)
40 #define REG_SSICR1_POL			BIT(0)
41 
42 #define REG_SSISR_END			BIT(7)
43 #define REG_SSISR_BUSY			BIT(6)
44 #define REG_SSISR_TFF			BIT(5)
45 #define REG_SSISR_RFE			BIT(4)
46 #define REG_SSISR_RFHF			BIT(2)
47 #define REG_SSISR_UNDR			BIT(1)
48 #define REG_SSISR_OVER			BIT(0)
49 
50 #define SPI_INGENIC_FIFO_SIZE		128u
51 
52 struct jz_soc_info {
53 	u32 bits_per_word_mask;
54 	struct reg_field flen_field;
55 	bool has_trendian;
56 
57 	unsigned int max_speed_hz;
58 	unsigned int max_native_cs;
59 };
60 
61 struct ingenic_spi {
62 	const struct jz_soc_info *soc_info;
63 	struct clk *clk;
64 	struct resource *mem_res;
65 
66 	struct regmap *map;
67 	struct regmap_field *flen_field;
68 };
69 
70 static int spi_ingenic_wait(struct ingenic_spi *priv,
71 			    unsigned long mask,
72 			    bool condition)
73 {
74 	unsigned int val;
75 
76 	return regmap_read_poll_timeout(priv->map, REG_SSISR, val,
77 					!!(val & mask) == condition,
78 					100, 10000);
79 }
80 
81 static void spi_ingenic_set_cs(struct spi_device *spi, bool disable)
82 {
83 	struct ingenic_spi *priv = spi_controller_get_devdata(spi->controller);
84 
85 	if (disable) {
86 		regmap_clear_bits(priv->map, REG_SSICR1, REG_SSICR1_UNFIN);
87 		regmap_clear_bits(priv->map, REG_SSISR,
88 				  REG_SSISR_UNDR | REG_SSISR_OVER);
89 
90 		spi_ingenic_wait(priv, REG_SSISR_END, true);
91 	} else {
92 		regmap_set_bits(priv->map, REG_SSICR1, REG_SSICR1_UNFIN);
93 	}
94 
95 	regmap_set_bits(priv->map, REG_SSICR0,
96 			REG_SSICR0_RFLUSH | REG_SSICR0_TFLUSH);
97 }
98 
99 static void spi_ingenic_prepare_transfer(struct ingenic_spi *priv,
100 					 struct spi_device *spi,
101 					 struct spi_transfer *xfer)
102 {
103 	unsigned long clk_hz = clk_get_rate(priv->clk);
104 	u32 cdiv, speed_hz = xfer->speed_hz ?: spi->max_speed_hz,
105 	    bits_per_word = xfer->bits_per_word ?: spi->bits_per_word;
106 
107 	cdiv = clk_hz / (speed_hz * 2);
108 	cdiv = clamp(cdiv, 1u, 0x100u) - 1;
109 
110 	regmap_write(priv->map, REG_SSIGR, cdiv);
111 
112 	regmap_field_write(priv->flen_field, bits_per_word - 2);
113 }
114 
115 static void spi_ingenic_finalize_transfer(void *controller)
116 {
117 	spi_finalize_current_transfer(controller);
118 }
119 
120 static struct dma_async_tx_descriptor *
121 spi_ingenic_prepare_dma(struct spi_controller *ctlr, struct dma_chan *chan,
122 			struct sg_table *sg, enum dma_transfer_direction dir,
123 			unsigned int bits)
124 {
125 	struct ingenic_spi *priv = spi_controller_get_devdata(ctlr);
126 	struct dma_slave_config cfg = {
127 		.direction = dir,
128 		.src_addr = priv->mem_res->start + REG_SSIDR,
129 		.dst_addr = priv->mem_res->start + REG_SSIDR,
130 	};
131 	struct dma_async_tx_descriptor *desc;
132 	dma_cookie_t cookie;
133 	int ret;
134 
135 	if (bits > 16) {
136 		cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
137 		cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
138 		cfg.src_maxburst = cfg.dst_maxburst = 4;
139 	} else if (bits > 8) {
140 		cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
141 		cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
142 		cfg.src_maxburst = cfg.dst_maxburst = 2;
143 	} else {
144 		cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
145 		cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
146 		cfg.src_maxburst = cfg.dst_maxburst = 1;
147 	}
148 
149 	ret = dmaengine_slave_config(chan, &cfg);
150 	if (ret)
151 		return ERR_PTR(ret);
152 
153 	desc = dmaengine_prep_slave_sg(chan, sg->sgl, sg->nents, dir,
154 				       DMA_PREP_INTERRUPT);
155 	if (!desc)
156 		return ERR_PTR(-ENOMEM);
157 
158 	if (dir == DMA_DEV_TO_MEM) {
159 		desc->callback = spi_ingenic_finalize_transfer;
160 		desc->callback_param = ctlr;
161 	}
162 
163 	cookie = dmaengine_submit(desc);
164 
165 	ret = dma_submit_error(cookie);
166 	if (ret) {
167 		dmaengine_desc_free(desc);
168 		return ERR_PTR(ret);
169 	}
170 
171 	return desc;
172 }
173 
174 static int spi_ingenic_dma_tx(struct spi_controller *ctlr,
175 			      struct spi_transfer *xfer, unsigned int bits)
176 {
177 	struct dma_async_tx_descriptor *rx_desc, *tx_desc;
178 
179 	rx_desc = spi_ingenic_prepare_dma(ctlr, ctlr->dma_rx,
180 					  &xfer->rx_sg, DMA_DEV_TO_MEM, bits);
181 	if (IS_ERR(rx_desc))
182 		return PTR_ERR(rx_desc);
183 
184 	tx_desc = spi_ingenic_prepare_dma(ctlr, ctlr->dma_tx,
185 					  &xfer->tx_sg, DMA_MEM_TO_DEV, bits);
186 	if (IS_ERR(tx_desc)) {
187 		dmaengine_terminate_async(ctlr->dma_rx);
188 		dmaengine_desc_free(rx_desc);
189 		return PTR_ERR(tx_desc);
190 	}
191 
192 	dma_async_issue_pending(ctlr->dma_rx);
193 	dma_async_issue_pending(ctlr->dma_tx);
194 
195 	return 1;
196 }
197 
198 #define SPI_INGENIC_TX(x)							\
199 static int spi_ingenic_tx##x(struct ingenic_spi *priv,				\
200 			     struct spi_transfer *xfer)				\
201 {										\
202 	unsigned int count = xfer->len / (x / 8);				\
203 	unsigned int prefill = min(count, SPI_INGENIC_FIFO_SIZE);		\
204 	const u##x *tx_buf = xfer->tx_buf;					\
205 	u##x *rx_buf = xfer->rx_buf;						\
206 	unsigned int i, val;							\
207 	int err;								\
208 										\
209 	/* Fill up the TX fifo */						\
210 	for (i = 0; i < prefill; i++) {						\
211 		val = tx_buf ? tx_buf[i] : 0;					\
212 										\
213 		regmap_write(priv->map, REG_SSIDR, val);			\
214 	}									\
215 										\
216 	for (i = 0; i < count; i++) {						\
217 		err = spi_ingenic_wait(priv, REG_SSISR_RFE, false);		\
218 		if (err)							\
219 			return err;						\
220 										\
221 		regmap_read(priv->map, REG_SSIDR, &val);			\
222 		if (rx_buf)							\
223 			rx_buf[i] = val;					\
224 										\
225 		if (i < count - prefill) {					\
226 			val = tx_buf ? tx_buf[i + prefill] : 0;			\
227 										\
228 			regmap_write(priv->map, REG_SSIDR, val);		\
229 		}								\
230 	}									\
231 										\
232 	return 0;								\
233 }
234 SPI_INGENIC_TX(8)
235 SPI_INGENIC_TX(16)
236 SPI_INGENIC_TX(32)
237 #undef SPI_INGENIC_TX
238 
239 static int spi_ingenic_transfer_one(struct spi_controller *ctlr,
240 				    struct spi_device *spi,
241 				    struct spi_transfer *xfer)
242 {
243 	struct ingenic_spi *priv = spi_controller_get_devdata(ctlr);
244 	unsigned int bits = xfer->bits_per_word ?: spi->bits_per_word;
245 	bool can_dma = ctlr->can_dma && ctlr->can_dma(ctlr, spi, xfer);
246 
247 	spi_ingenic_prepare_transfer(priv, spi, xfer);
248 
249 	if (ctlr->cur_msg_mapped && can_dma)
250 		return spi_ingenic_dma_tx(ctlr, xfer, bits);
251 
252 	if (bits > 16)
253 		return spi_ingenic_tx32(priv, xfer);
254 
255 	if (bits > 8)
256 		return spi_ingenic_tx16(priv, xfer);
257 
258 	return spi_ingenic_tx8(priv, xfer);
259 }
260 
261 static int spi_ingenic_prepare_message(struct spi_controller *ctlr,
262 				       struct spi_message *message)
263 {
264 	struct ingenic_spi *priv = spi_controller_get_devdata(ctlr);
265 	struct spi_device *spi = message->spi;
266 	unsigned int cs = REG_SSICR1_FRMHL << spi_get_chipselect(spi, 0);
267 	unsigned int ssicr0_mask = REG_SSICR0_LOOP | REG_SSICR0_FSEL;
268 	unsigned int ssicr1_mask = REG_SSICR1_PHA | REG_SSICR1_POL | cs;
269 	unsigned int ssicr0 = 0, ssicr1 = 0;
270 
271 	if (priv->soc_info->has_trendian) {
272 		ssicr0_mask |= REG_SSICR0_RENDIAN_LSB | REG_SSICR0_TENDIAN_LSB;
273 
274 		if (spi->mode & SPI_LSB_FIRST)
275 			ssicr0 |= REG_SSICR0_RENDIAN_LSB | REG_SSICR0_TENDIAN_LSB;
276 	} else {
277 		ssicr1_mask |= REG_SSICR1_LFST;
278 
279 		if (spi->mode & SPI_LSB_FIRST)
280 			ssicr1 |= REG_SSICR1_LFST;
281 	}
282 
283 	if (spi->mode & SPI_LOOP)
284 		ssicr0 |= REG_SSICR0_LOOP;
285 	if (spi_get_chipselect(spi, 0))
286 		ssicr0 |= REG_SSICR0_FSEL;
287 
288 	if (spi->mode & SPI_CPHA)
289 		ssicr1 |= REG_SSICR1_PHA;
290 	if (spi->mode & SPI_CPOL)
291 		ssicr1 |= REG_SSICR1_POL;
292 	if (spi->mode & SPI_CS_HIGH)
293 		ssicr1 |= cs;
294 
295 	regmap_update_bits(priv->map, REG_SSICR0, ssicr0_mask, ssicr0);
296 	regmap_update_bits(priv->map, REG_SSICR1, ssicr1_mask, ssicr1);
297 
298 	return 0;
299 }
300 
301 static int spi_ingenic_prepare_hardware(struct spi_controller *ctlr)
302 {
303 	struct ingenic_spi *priv = spi_controller_get_devdata(ctlr);
304 	int ret;
305 
306 	ret = clk_prepare_enable(priv->clk);
307 	if (ret)
308 		return ret;
309 
310 	regmap_write(priv->map, REG_SSICR0, REG_SSICR0_EACLRUN);
311 	regmap_write(priv->map, REG_SSICR1, 0);
312 	regmap_write(priv->map, REG_SSISR, 0);
313 	regmap_set_bits(priv->map, REG_SSICR0, REG_SSICR0_SSIE);
314 
315 	return 0;
316 }
317 
318 static int spi_ingenic_unprepare_hardware(struct spi_controller *ctlr)
319 {
320 	struct ingenic_spi *priv = spi_controller_get_devdata(ctlr);
321 
322 	regmap_clear_bits(priv->map, REG_SSICR0, REG_SSICR0_SSIE);
323 
324 	clk_disable_unprepare(priv->clk);
325 
326 	return 0;
327 }
328 
329 static bool spi_ingenic_can_dma(struct spi_controller *ctlr,
330 				struct spi_device *spi,
331 				struct spi_transfer *xfer)
332 {
333 	struct dma_slave_caps caps;
334 	int ret;
335 
336 	ret = dma_get_slave_caps(ctlr->dma_tx, &caps);
337 	if (ret) {
338 		dev_err(&spi->dev, "Unable to get slave caps: %d\n", ret);
339 		return false;
340 	}
341 
342 	return !caps.max_sg_burst ||
343 		xfer->len <= caps.max_sg_burst * SPI_INGENIC_FIFO_SIZE;
344 }
345 
346 static int spi_ingenic_request_dma(struct spi_controller *ctlr,
347 				   struct device *dev)
348 {
349 	struct dma_chan *chan;
350 
351 	chan = dma_request_chan(dev, "tx");
352 	if (IS_ERR(chan))
353 		return PTR_ERR(chan);
354 	ctlr->dma_tx = chan;
355 
356 	chan = dma_request_chan(dev, "rx");
357 	if (IS_ERR(chan))
358 		return PTR_ERR(chan);
359 	ctlr->dma_rx = chan;
360 
361 	ctlr->can_dma = spi_ingenic_can_dma;
362 
363 	return 0;
364 }
365 
366 static void spi_ingenic_release_dma(void *data)
367 {
368 	struct spi_controller *ctlr = data;
369 
370 	if (ctlr->dma_tx)
371 		dma_release_channel(ctlr->dma_tx);
372 	if (ctlr->dma_rx)
373 		dma_release_channel(ctlr->dma_rx);
374 }
375 
376 static const struct regmap_config spi_ingenic_regmap_config = {
377 	.reg_bits = 32,
378 	.val_bits = 32,
379 	.reg_stride = 4,
380 	.max_register = REG_SSIGR,
381 };
382 
383 static int spi_ingenic_probe(struct platform_device *pdev)
384 {
385 	const struct jz_soc_info *pdata;
386 	struct device *dev = &pdev->dev;
387 	struct spi_controller *ctlr;
388 	struct ingenic_spi *priv;
389 	void __iomem *base;
390 	int num_cs, ret;
391 
392 	pdata = of_device_get_match_data(dev);
393 	if (!pdata) {
394 		dev_err(dev, "Missing platform data.\n");
395 		return -EINVAL;
396 	}
397 
398 	ctlr = devm_spi_alloc_host(dev, sizeof(*priv));
399 	if (!ctlr) {
400 		dev_err(dev, "Unable to allocate SPI controller.\n");
401 		return -ENOMEM;
402 	}
403 
404 	priv = spi_controller_get_devdata(ctlr);
405 	priv->soc_info = pdata;
406 
407 	priv->clk = devm_clk_get(dev, NULL);
408 	if (IS_ERR(priv->clk)) {
409 		return dev_err_probe(dev, PTR_ERR(priv->clk),
410 				     "Unable to get clock.\n");
411 	}
412 
413 	base = devm_platform_get_and_ioremap_resource(pdev, 0, &priv->mem_res);
414 	if (IS_ERR(base))
415 		return PTR_ERR(base);
416 
417 	priv->map = devm_regmap_init_mmio(dev, base, &spi_ingenic_regmap_config);
418 	if (IS_ERR(priv->map))
419 		return PTR_ERR(priv->map);
420 
421 	priv->flen_field = devm_regmap_field_alloc(dev, priv->map,
422 						   pdata->flen_field);
423 	if (IS_ERR(priv->flen_field))
424 		return PTR_ERR(priv->flen_field);
425 
426 	if (device_property_read_u32(dev, "num-cs", &num_cs))
427 		num_cs = pdata->max_native_cs;
428 
429 	platform_set_drvdata(pdev, ctlr);
430 
431 	ctlr->prepare_transfer_hardware = spi_ingenic_prepare_hardware;
432 	ctlr->unprepare_transfer_hardware = spi_ingenic_unprepare_hardware;
433 	ctlr->prepare_message = spi_ingenic_prepare_message;
434 	ctlr->set_cs = spi_ingenic_set_cs;
435 	ctlr->transfer_one = spi_ingenic_transfer_one;
436 	ctlr->mode_bits = SPI_MODE_3 | SPI_LSB_FIRST | SPI_LOOP | SPI_CS_HIGH;
437 	ctlr->flags = SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX;
438 	ctlr->max_dma_len = SPI_INGENIC_FIFO_SIZE;
439 	ctlr->bits_per_word_mask = pdata->bits_per_word_mask;
440 	ctlr->min_speed_hz = 7200;
441 	ctlr->max_speed_hz = pdata->max_speed_hz;
442 	ctlr->use_gpio_descriptors = true;
443 	ctlr->max_native_cs = pdata->max_native_cs;
444 	ctlr->num_chipselect = num_cs;
445 	ctlr->dev.of_node = pdev->dev.of_node;
446 
447 	if (spi_ingenic_request_dma(ctlr, dev))
448 		dev_warn(dev, "DMA not available.\n");
449 
450 	ret = devm_add_action_or_reset(dev, spi_ingenic_release_dma, ctlr);
451 	if (ret) {
452 		dev_err(dev, "Unable to add action.\n");
453 		return ret;
454 	}
455 
456 	ret = devm_spi_register_controller(dev, ctlr);
457 	if (ret)
458 		dev_err(dev, "Unable to register SPI controller.\n");
459 
460 	return ret;
461 }
462 
463 static const struct jz_soc_info jz4750_soc_info = {
464 	.bits_per_word_mask = SPI_BPW_RANGE_MASK(2, 17),
465 	.flen_field = REG_FIELD(REG_SSICR1, 4, 7),
466 	.has_trendian = false,
467 
468 	.max_speed_hz = 54000000,
469 	.max_native_cs = 2,
470 };
471 
472 static const struct jz_soc_info jz4780_soc_info = {
473 	.bits_per_word_mask = SPI_BPW_RANGE_MASK(2, 32),
474 	.flen_field = REG_FIELD(REG_SSICR1, 3, 7),
475 	.has_trendian = true,
476 
477 	.max_speed_hz = 54000000,
478 	.max_native_cs = 2,
479 };
480 
481 static const struct jz_soc_info x1000_soc_info = {
482 	.bits_per_word_mask = SPI_BPW_RANGE_MASK(2, 32),
483 	.flen_field = REG_FIELD(REG_SSICR1, 3, 7),
484 	.has_trendian = true,
485 
486 	.max_speed_hz = 50000000,
487 	.max_native_cs = 2,
488 };
489 
490 static const struct jz_soc_info x2000_soc_info = {
491 	.bits_per_word_mask = SPI_BPW_RANGE_MASK(2, 32),
492 	.flen_field = REG_FIELD(REG_SSICR1, 3, 7),
493 	.has_trendian = true,
494 
495 	.max_speed_hz = 50000000,
496 	.max_native_cs = 1,
497 };
498 
499 static const struct of_device_id spi_ingenic_of_match[] = {
500 	{ .compatible = "ingenic,jz4750-spi", .data = &jz4750_soc_info },
501 	{ .compatible = "ingenic,jz4775-spi", .data = &jz4780_soc_info },
502 	{ .compatible = "ingenic,jz4780-spi", .data = &jz4780_soc_info },
503 	{ .compatible = "ingenic,x1000-spi", .data = &x1000_soc_info },
504 	{ .compatible = "ingenic,x2000-spi", .data = &x2000_soc_info },
505 	{}
506 };
507 MODULE_DEVICE_TABLE(of, spi_ingenic_of_match);
508 
509 static struct platform_driver spi_ingenic_driver = {
510 	.driver = {
511 		.name = "spi-ingenic",
512 		.of_match_table = spi_ingenic_of_match,
513 	},
514 	.probe = spi_ingenic_probe,
515 };
516 
517 module_platform_driver(spi_ingenic_driver);
518 MODULE_DESCRIPTION("SPI bus driver for the Ingenic SoCs");
519 MODULE_AUTHOR("Artur Rojek <contact@artur-rojek.eu>");
520 MODULE_AUTHOR("Paul Cercueil <paul@crapouillou.net>");
521 MODULE_AUTHOR("周琰杰 (Zhou Yanjie) <zhouyanjie@wanyeetech.com>");
522 MODULE_LICENSE("GPL");
523