Merge tag 'regmap-fix-v5.0-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / drivers / spi / spi-at91-usart.c
1 // SPDX-License-Identifier: GPL-2.0
2 //
3 // Driver for AT91 USART Controllers as SPI
4 //
5 // Copyright (C) 2018 Microchip Technology Inc.
6 //
7 // Author: Radu Pirea <radu.pirea@microchip.com>
8
9 #include <linux/clk.h>
10 #include <linux/delay.h>
11 #include <linux/interrupt.h>
12 #include <linux/kernel.h>
13 #include <linux/module.h>
14 #include <linux/of_gpio.h>
15 #include <linux/pinctrl/consumer.h>
16 #include <linux/platform_device.h>
17 #include <linux/pm_runtime.h>
18
19 #include <linux/spi/spi.h>
20
21 #define US_CR                   0x00
22 #define US_MR                   0x04
23 #define US_IER                  0x08
24 #define US_IDR                  0x0C
25 #define US_CSR                  0x14
26 #define US_RHR                  0x18
27 #define US_THR                  0x1C
28 #define US_BRGR                 0x20
29 #define US_VERSION              0xFC
30
31 #define US_CR_RSTRX             BIT(2)
32 #define US_CR_RSTTX             BIT(3)
33 #define US_CR_RXEN              BIT(4)
34 #define US_CR_RXDIS             BIT(5)
35 #define US_CR_TXEN              BIT(6)
36 #define US_CR_TXDIS             BIT(7)
37
38 #define US_MR_SPI_MASTER        0x0E
39 #define US_MR_CHRL              GENMASK(7, 6)
40 #define US_MR_CPHA              BIT(8)
41 #define US_MR_CPOL              BIT(16)
42 #define US_MR_CLKO              BIT(18)
43 #define US_MR_WRDBT             BIT(20)
44 #define US_MR_LOOP              BIT(15)
45
46 #define US_IR_RXRDY             BIT(0)
47 #define US_IR_TXRDY             BIT(1)
48 #define US_IR_OVRE              BIT(5)
49
50 #define US_BRGR_SIZE            BIT(16)
51
52 #define US_MIN_CLK_DIV          0x06
53 #define US_MAX_CLK_DIV          BIT(16)
54
55 #define US_RESET                (US_CR_RSTRX | US_CR_RSTTX)
56 #define US_DISABLE              (US_CR_RXDIS | US_CR_TXDIS)
57 #define US_ENABLE               (US_CR_RXEN | US_CR_TXEN)
58 #define US_OVRE_RXRDY_IRQS      (US_IR_OVRE | US_IR_RXRDY)
59
60 #define US_INIT \
61         (US_MR_SPI_MASTER | US_MR_CHRL | US_MR_CLKO | US_MR_WRDBT)
62
63 /* Register access macros */
64 #define at91_usart_spi_readl(port, reg) \
65         readl_relaxed((port)->regs + US_##reg)
66 #define at91_usart_spi_writel(port, reg, value) \
67         writel_relaxed((value), (port)->regs + US_##reg)
68
69 #define at91_usart_spi_readb(port, reg) \
70         readb_relaxed((port)->regs + US_##reg)
71 #define at91_usart_spi_writeb(port, reg, value) \
72         writeb_relaxed((value), (port)->regs + US_##reg)
73
74 struct at91_usart_spi {
75         struct spi_transfer     *current_transfer;
76         void __iomem            *regs;
77         struct device           *dev;
78         struct clk              *clk;
79
80         /*used in interrupt to protect data reading*/
81         spinlock_t              lock;
82
83         int                     irq;
84         unsigned int            current_tx_remaining_bytes;
85         unsigned int            current_rx_remaining_bytes;
86
87         u32                     spi_clk;
88         u32                     status;
89
90         bool                    xfer_failed;
91 };
92
93 static inline u32 at91_usart_spi_tx_ready(struct at91_usart_spi *aus)
94 {
95         return aus->status & US_IR_TXRDY;
96 }
97
98 static inline u32 at91_usart_spi_rx_ready(struct at91_usart_spi *aus)
99 {
100         return aus->status & US_IR_RXRDY;
101 }
102
103 static inline u32 at91_usart_spi_check_overrun(struct at91_usart_spi *aus)
104 {
105         return aus->status & US_IR_OVRE;
106 }
107
108 static inline u32 at91_usart_spi_read_status(struct at91_usart_spi *aus)
109 {
110         aus->status = at91_usart_spi_readl(aus, CSR);
111         return aus->status;
112 }
113
114 static inline void at91_usart_spi_tx(struct at91_usart_spi *aus)
115 {
116         unsigned int len = aus->current_transfer->len;
117         unsigned int remaining = aus->current_tx_remaining_bytes;
118         const u8  *tx_buf = aus->current_transfer->tx_buf;
119
120         if (!remaining)
121                 return;
122
123         if (at91_usart_spi_tx_ready(aus)) {
124                 at91_usart_spi_writeb(aus, THR, tx_buf[len - remaining]);
125                 aus->current_tx_remaining_bytes--;
126         }
127 }
128
129 static inline void at91_usart_spi_rx(struct at91_usart_spi *aus)
130 {
131         int len = aus->current_transfer->len;
132         int remaining = aus->current_rx_remaining_bytes;
133         u8  *rx_buf = aus->current_transfer->rx_buf;
134
135         if (!remaining)
136                 return;
137
138         rx_buf[len - remaining] = at91_usart_spi_readb(aus, RHR);
139         aus->current_rx_remaining_bytes--;
140 }
141
142 static inline void
143 at91_usart_spi_set_xfer_speed(struct at91_usart_spi *aus,
144                               struct spi_transfer *xfer)
145 {
146         at91_usart_spi_writel(aus, BRGR,
147                               DIV_ROUND_UP(aus->spi_clk, xfer->speed_hz));
148 }
149
150 static irqreturn_t at91_usart_spi_interrupt(int irq, void *dev_id)
151 {
152         struct spi_controller *controller = dev_id;
153         struct at91_usart_spi *aus = spi_master_get_devdata(controller);
154
155         spin_lock(&aus->lock);
156         at91_usart_spi_read_status(aus);
157
158         if (at91_usart_spi_check_overrun(aus)) {
159                 aus->xfer_failed = true;
160                 at91_usart_spi_writel(aus, IDR, US_IR_OVRE | US_IR_RXRDY);
161                 spin_unlock(&aus->lock);
162                 return IRQ_HANDLED;
163         }
164
165         if (at91_usart_spi_rx_ready(aus)) {
166                 at91_usart_spi_rx(aus);
167                 spin_unlock(&aus->lock);
168                 return IRQ_HANDLED;
169         }
170
171         spin_unlock(&aus->lock);
172
173         return IRQ_NONE;
174 }
175
176 static int at91_usart_spi_setup(struct spi_device *spi)
177 {
178         struct at91_usart_spi *aus = spi_master_get_devdata(spi->controller);
179         u32 *ausd = spi->controller_state;
180         unsigned int mr = at91_usart_spi_readl(aus, MR);
181         u8 bits = spi->bits_per_word;
182
183         if (bits != 8) {
184                 dev_dbg(&spi->dev, "Only 8 bits per word are supported\n");
185                 return -EINVAL;
186         }
187
188         if (spi->mode & SPI_CPOL)
189                 mr |= US_MR_CPOL;
190         else
191                 mr &= ~US_MR_CPOL;
192
193         if (spi->mode & SPI_CPHA)
194                 mr |= US_MR_CPHA;
195         else
196                 mr &= ~US_MR_CPHA;
197
198         if (spi->mode & SPI_LOOP)
199                 mr |= US_MR_LOOP;
200         else
201                 mr &= ~US_MR_LOOP;
202
203         if (!ausd) {
204                 ausd = kzalloc(sizeof(*ausd), GFP_KERNEL);
205                 if (!ausd)
206                         return -ENOMEM;
207
208                 spi->controller_state = ausd;
209         }
210
211         *ausd = mr;
212
213         dev_dbg(&spi->dev,
214                 "setup: bpw %u mode 0x%x -> mr %d %08x\n",
215                 bits, spi->mode, spi->chip_select, mr);
216
217         return 0;
218 }
219
220 static int at91_usart_spi_transfer_one(struct spi_controller *ctlr,
221                                        struct spi_device *spi,
222                                        struct spi_transfer *xfer)
223 {
224         struct at91_usart_spi *aus = spi_master_get_devdata(ctlr);
225
226         at91_usart_spi_set_xfer_speed(aus, xfer);
227         aus->xfer_failed = false;
228         aus->current_transfer = xfer;
229         aus->current_tx_remaining_bytes = xfer->len;
230         aus->current_rx_remaining_bytes = xfer->len;
231
232         while ((aus->current_tx_remaining_bytes ||
233                 aus->current_rx_remaining_bytes) && !aus->xfer_failed) {
234                 at91_usart_spi_read_status(aus);
235                 at91_usart_spi_tx(aus);
236                 cpu_relax();
237         }
238
239         if (aus->xfer_failed) {
240                 dev_err(aus->dev, "Overrun!\n");
241                 return -EIO;
242         }
243
244         return 0;
245 }
246
247 static int at91_usart_spi_prepare_message(struct spi_controller *ctlr,
248                                           struct spi_message *message)
249 {
250         struct at91_usart_spi *aus = spi_master_get_devdata(ctlr);
251         struct spi_device *spi = message->spi;
252         u32 *ausd = spi->controller_state;
253
254         at91_usart_spi_writel(aus, CR, US_ENABLE);
255         at91_usart_spi_writel(aus, IER, US_OVRE_RXRDY_IRQS);
256         at91_usart_spi_writel(aus, MR, *ausd);
257
258         return 0;
259 }
260
261 static int at91_usart_spi_unprepare_message(struct spi_controller *ctlr,
262                                             struct spi_message *message)
263 {
264         struct at91_usart_spi *aus = spi_master_get_devdata(ctlr);
265
266         at91_usart_spi_writel(aus, CR, US_RESET | US_DISABLE);
267         at91_usart_spi_writel(aus, IDR, US_OVRE_RXRDY_IRQS);
268
269         return 0;
270 }
271
272 static void at91_usart_spi_cleanup(struct spi_device *spi)
273 {
274         struct at91_usart_spi_device *ausd = spi->controller_state;
275
276         spi->controller_state = NULL;
277         kfree(ausd);
278 }
279
280 static void at91_usart_spi_init(struct at91_usart_spi *aus)
281 {
282         at91_usart_spi_writel(aus, MR, US_INIT);
283         at91_usart_spi_writel(aus, CR, US_RESET | US_DISABLE);
284 }
285
286 static int at91_usart_gpio_setup(struct platform_device *pdev)
287 {
288         struct device_node *np = pdev->dev.parent->of_node;
289         int i;
290         int ret;
291         int nb;
292
293         if (!np)
294                 return -EINVAL;
295
296         nb = of_gpio_named_count(np, "cs-gpios");
297         for (i = 0; i < nb; i++) {
298                 int cs_gpio = of_get_named_gpio(np, "cs-gpios", i);
299
300                 if (cs_gpio < 0)
301                         return cs_gpio;
302
303                 if (gpio_is_valid(cs_gpio)) {
304                         ret = devm_gpio_request_one(&pdev->dev, cs_gpio,
305                                                     GPIOF_DIR_OUT,
306                                                     dev_name(&pdev->dev));
307                         if (ret)
308                                 return ret;
309                 }
310         }
311
312         return 0;
313 }
314
315 static int at91_usart_spi_probe(struct platform_device *pdev)
316 {
317         struct resource *regs;
318         struct spi_controller *controller;
319         struct at91_usart_spi *aus;
320         struct clk *clk;
321         int irq;
322         int ret;
323
324         regs = platform_get_resource(to_platform_device(pdev->dev.parent),
325                                      IORESOURCE_MEM, 0);
326         if (!regs)
327                 return -EINVAL;
328
329         irq = platform_get_irq(to_platform_device(pdev->dev.parent), 0);
330         if (irq < 0)
331                 return irq;
332
333         clk = devm_clk_get(pdev->dev.parent, "usart");
334         if (IS_ERR(clk))
335                 return PTR_ERR(clk);
336
337         ret = -ENOMEM;
338         controller = spi_alloc_master(&pdev->dev, sizeof(*aus));
339         if (!controller)
340                 goto at91_usart_spi_probe_fail;
341
342         ret = at91_usart_gpio_setup(pdev);
343         if (ret)
344                 goto at91_usart_spi_probe_fail;
345
346         controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP | SPI_CS_HIGH;
347         controller->dev.of_node = pdev->dev.parent->of_node;
348         controller->bits_per_word_mask = SPI_BPW_MASK(8);
349         controller->setup = at91_usart_spi_setup;
350         controller->flags = SPI_MASTER_MUST_RX | SPI_MASTER_MUST_TX;
351         controller->transfer_one = at91_usart_spi_transfer_one;
352         controller->prepare_message = at91_usart_spi_prepare_message;
353         controller->unprepare_message = at91_usart_spi_unprepare_message;
354         controller->cleanup = at91_usart_spi_cleanup;
355         controller->max_speed_hz = DIV_ROUND_UP(clk_get_rate(clk),
356                                                 US_MIN_CLK_DIV);
357         controller->min_speed_hz = DIV_ROUND_UP(clk_get_rate(clk),
358                                                 US_MAX_CLK_DIV);
359         platform_set_drvdata(pdev, controller);
360
361         aus = spi_master_get_devdata(controller);
362
363         aus->dev = &pdev->dev;
364         aus->regs = devm_ioremap_resource(&pdev->dev, regs);
365         if (IS_ERR(aus->regs)) {
366                 ret = PTR_ERR(aus->regs);
367                 goto at91_usart_spi_probe_fail;
368         }
369
370         aus->irq = irq;
371         aus->clk = clk;
372
373         ret = devm_request_irq(&pdev->dev, irq, at91_usart_spi_interrupt, 0,
374                                dev_name(&pdev->dev), controller);
375         if (ret)
376                 goto at91_usart_spi_probe_fail;
377
378         ret = clk_prepare_enable(clk);
379         if (ret)
380                 goto at91_usart_spi_probe_fail;
381
382         aus->spi_clk = clk_get_rate(clk);
383         at91_usart_spi_init(aus);
384
385         spin_lock_init(&aus->lock);
386         ret = devm_spi_register_master(&pdev->dev, controller);
387         if (ret)
388                 goto at91_usart_fail_register_master;
389
390         dev_info(&pdev->dev,
391                  "AT91 USART SPI Controller version 0x%x at %pa (irq %d)\n",
392                  at91_usart_spi_readl(aus, VERSION),
393                  &regs->start, irq);
394
395         return 0;
396
397 at91_usart_fail_register_master:
398         clk_disable_unprepare(clk);
399 at91_usart_spi_probe_fail:
400         spi_master_put(controller);
401         return ret;
402 }
403
404 __maybe_unused static int at91_usart_spi_runtime_suspend(struct device *dev)
405 {
406         struct spi_controller *ctlr = dev_get_drvdata(dev);
407         struct at91_usart_spi *aus = spi_master_get_devdata(ctlr);
408
409         clk_disable_unprepare(aus->clk);
410         pinctrl_pm_select_sleep_state(dev);
411
412         return 0;
413 }
414
415 __maybe_unused static int at91_usart_spi_runtime_resume(struct device *dev)
416 {
417         struct spi_controller *ctrl = dev_get_drvdata(dev);
418         struct at91_usart_spi *aus = spi_master_get_devdata(ctrl);
419
420         pinctrl_pm_select_default_state(dev);
421
422         return clk_prepare_enable(aus->clk);
423 }
424
425 __maybe_unused static int at91_usart_spi_suspend(struct device *dev)
426 {
427         struct spi_controller *ctrl = dev_get_drvdata(dev);
428         int ret;
429
430         ret = spi_controller_suspend(ctrl);
431         if (ret)
432                 return ret;
433
434         if (!pm_runtime_suspended(dev))
435                 at91_usart_spi_runtime_suspend(dev);
436
437         return 0;
438 }
439
440 __maybe_unused static int at91_usart_spi_resume(struct device *dev)
441 {
442         struct spi_controller *ctrl = dev_get_drvdata(dev);
443         struct at91_usart_spi *aus = spi_master_get_devdata(ctrl);
444         int ret;
445
446         if (!pm_runtime_suspended(dev)) {
447                 ret = at91_usart_spi_runtime_resume(dev);
448                 if (ret)
449                         return ret;
450         }
451
452         at91_usart_spi_init(aus);
453
454         return spi_controller_resume(ctrl);
455 }
456
457 static int at91_usart_spi_remove(struct platform_device *pdev)
458 {
459         struct spi_controller *ctlr = platform_get_drvdata(pdev);
460         struct at91_usart_spi *aus = spi_master_get_devdata(ctlr);
461
462         clk_disable_unprepare(aus->clk);
463
464         return 0;
465 }
466
467 static const struct dev_pm_ops at91_usart_spi_pm_ops = {
468         SET_SYSTEM_SLEEP_PM_OPS(at91_usart_spi_suspend, at91_usart_spi_resume)
469         SET_RUNTIME_PM_OPS(at91_usart_spi_runtime_suspend,
470                            at91_usart_spi_runtime_resume, NULL)
471 };
472
473 static const struct of_device_id at91_usart_spi_dt_ids[] = {
474         { .compatible = "microchip,at91sam9g45-usart-spi"},
475         { /* sentinel */}
476 };
477
478 MODULE_DEVICE_TABLE(of, at91_usart_spi_dt_ids);
479
480 static struct platform_driver at91_usart_spi_driver = {
481         .driver = {
482                 .name = "at91_usart_spi",
483                 .pm = &at91_usart_spi_pm_ops,
484         },
485         .probe = at91_usart_spi_probe,
486         .remove = at91_usart_spi_remove,
487 };
488
489 module_platform_driver(at91_usart_spi_driver);
490
491 MODULE_DESCRIPTION("Microchip AT91 USART SPI Controller driver");
492 MODULE_AUTHOR("Radu Pirea <radu.pirea@microchip.com>");
493 MODULE_LICENSE("GPL v2");
494 MODULE_ALIAS("platform:at91_usart_spi");