Merge tag 'vfio-v6.8-rc1' of https://github.com/awilliam/linux-vfio
[sfrench/cifs-2.6.git] / drivers / tty / serial / esp32_uart.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2
3 #include <linux/bitfield.h>
4 #include <linux/bits.h>
5 #include <linux/clk.h>
6 #include <linux/console.h>
7 #include <linux/delay.h>
8 #include <linux/io.h>
9 #include <linux/irq.h>
10 #include <linux/module.h>
11 #include <linux/of.h>
12 #include <linux/platform_device.h>
13 #include <linux/property.h>
14 #include <linux/serial_core.h>
15 #include <linux/slab.h>
16 #include <linux/tty_flip.h>
17 #include <asm/serial.h>
18
19 #define DRIVER_NAME     "esp32-uart"
20 #define DEV_NAME        "ttyS"
21 #define UART_NR         3
22
23 #define ESP32_UART_TX_FIFO_SIZE 127
24 #define ESP32_UART_RX_FIFO_SIZE 127
25
26 #define UART_FIFO_REG                   0x00
27 #define UART_INT_RAW_REG                0x04
28 #define UART_INT_ST_REG                 0x08
29 #define UART_INT_ENA_REG                0x0c
30 #define UART_INT_CLR_REG                0x10
31 #define UART_RXFIFO_FULL_INT                    BIT(0)
32 #define UART_TXFIFO_EMPTY_INT                   BIT(1)
33 #define UART_BRK_DET_INT                        BIT(7)
34 #define UART_CLKDIV_REG                 0x14
35 #define ESP32_UART_CLKDIV                       GENMASK(19, 0)
36 #define ESP32S3_UART_CLKDIV                     GENMASK(11, 0)
37 #define UART_CLKDIV_SHIFT                       0
38 #define UART_CLKDIV_FRAG                        GENMASK(23, 20)
39 #define UART_STATUS_REG                 0x1c
40 #define ESP32_UART_RXFIFO_CNT                   GENMASK(7, 0)
41 #define ESP32S3_UART_RXFIFO_CNT                 GENMASK(9, 0)
42 #define UART_RXFIFO_CNT_SHIFT                   0
43 #define UART_DSRN                               BIT(13)
44 #define UART_CTSN                               BIT(14)
45 #define ESP32_UART_TXFIFO_CNT                   GENMASK(23, 16)
46 #define ESP32S3_UART_TXFIFO_CNT                 GENMASK(25, 16)
47 #define UART_TXFIFO_CNT_SHIFT                   16
48 #define UART_CONF0_REG                  0x20
49 #define UART_PARITY                             BIT(0)
50 #define UART_PARITY_EN                          BIT(1)
51 #define UART_BIT_NUM                            GENMASK(3, 2)
52 #define UART_BIT_NUM_5                          0
53 #define UART_BIT_NUM_6                          1
54 #define UART_BIT_NUM_7                          2
55 #define UART_BIT_NUM_8                          3
56 #define UART_STOP_BIT_NUM                       GENMASK(5, 4)
57 #define UART_STOP_BIT_NUM_1                     1
58 #define UART_STOP_BIT_NUM_2                     3
59 #define UART_SW_RTS                             BIT(6)
60 #define UART_SW_DTR                             BIT(7)
61 #define UART_LOOPBACK                           BIT(14)
62 #define UART_TX_FLOW_EN                         BIT(15)
63 #define UART_RTS_INV                            BIT(23)
64 #define UART_DTR_INV                            BIT(24)
65 #define UART_CONF1_REG                  0x24
66 #define UART_RXFIFO_FULL_THRHD_SHIFT            0
67 #define ESP32_UART_TXFIFO_EMPTY_THRHD_SHIFT     8
68 #define ESP32S3_UART_TXFIFO_EMPTY_THRHD_SHIFT   10
69 #define ESP32_UART_RX_FLOW_EN                   BIT(23)
70 #define ESP32S3_UART_RX_FLOW_EN                 BIT(22)
71 #define ESP32S3_UART_CLK_CONF_REG       0x78
72 #define ESP32S3_UART_SCLK_DIV_B                 GENMASK(5, 0)
73 #define ESP32S3_UART_SCLK_DIV_A                 GENMASK(11, 6)
74 #define ESP32S3_UART_SCLK_DIV_NUM               GENMASK(19, 12)
75 #define ESP32S3_UART_SCLK_SEL                   GENMASK(21, 20)
76 #define APB_CLK                                 1
77 #define RC_FAST_CLK                             2
78 #define XTAL_CLK                                3
79 #define ESP32S3_UART_SCLK_EN                    BIT(22)
80 #define ESP32S3_UART_RST_CORE                   BIT(23)
81 #define ESP32S3_UART_TX_SCLK_EN                 BIT(24)
82 #define ESP32S3_UART_RX_SCLK_EN                 BIT(25)
83 #define ESP32S3_UART_TX_RST_CORE                BIT(26)
84 #define ESP32S3_UART_RX_RST_CORE                BIT(27)
85
86 #define ESP32S3_UART_CLK_CONF_DEFAULT \
87         (ESP32S3_UART_RX_SCLK_EN | \
88          ESP32S3_UART_TX_SCLK_EN | \
89          ESP32S3_UART_SCLK_EN | \
90          FIELD_PREP(ESP32S3_UART_SCLK_SEL, XTAL_CLK))
91
92 struct esp32_port {
93         struct uart_port port;
94         struct clk *clk;
95 };
96
97 struct esp32_uart_variant {
98         u32 clkdiv_mask;
99         u32 rxfifo_cnt_mask;
100         u32 txfifo_cnt_mask;
101         u32 txfifo_empty_thrhd_shift;
102         u32 rx_flow_en;
103         const char *type;
104         bool has_clkconf;
105 };
106
107 static const struct esp32_uart_variant esp32_variant = {
108         .clkdiv_mask = ESP32_UART_CLKDIV,
109         .rxfifo_cnt_mask = ESP32_UART_RXFIFO_CNT,
110         .txfifo_cnt_mask = ESP32_UART_TXFIFO_CNT,
111         .txfifo_empty_thrhd_shift = ESP32_UART_TXFIFO_EMPTY_THRHD_SHIFT,
112         .rx_flow_en = ESP32_UART_RX_FLOW_EN,
113         .type = "ESP32 UART",
114 };
115
116 static const struct esp32_uart_variant esp32s3_variant = {
117         .clkdiv_mask = ESP32S3_UART_CLKDIV,
118         .rxfifo_cnt_mask = ESP32S3_UART_RXFIFO_CNT,
119         .txfifo_cnt_mask = ESP32S3_UART_TXFIFO_CNT,
120         .txfifo_empty_thrhd_shift = ESP32S3_UART_TXFIFO_EMPTY_THRHD_SHIFT,
121         .rx_flow_en = ESP32S3_UART_RX_FLOW_EN,
122         .type = "ESP32S3 UART",
123         .has_clkconf = true,
124 };
125
126 static const struct of_device_id esp32_uart_dt_ids[] = {
127         {
128                 .compatible = "esp,esp32-uart",
129                 .data = &esp32_variant,
130         }, {
131                 .compatible = "esp,esp32s3-uart",
132                 .data = &esp32s3_variant,
133         }, { /* sentinel */ }
134 };
135 MODULE_DEVICE_TABLE(of, esp32_uart_dt_ids);
136
137 static struct esp32_port *esp32_uart_ports[UART_NR];
138
139 static const struct esp32_uart_variant *port_variant(struct uart_port *port)
140 {
141         return port->private_data;
142 }
143
144 static void esp32_uart_write(struct uart_port *port, unsigned long reg, u32 v)
145 {
146         writel(v, port->membase + reg);
147 }
148
149 static u32 esp32_uart_read(struct uart_port *port, unsigned long reg)
150 {
151         return readl(port->membase + reg);
152 }
153
154 static u32 esp32_uart_tx_fifo_cnt(struct uart_port *port)
155 {
156         u32 status = esp32_uart_read(port, UART_STATUS_REG);
157
158         return (status & port_variant(port)->txfifo_cnt_mask) >> UART_TXFIFO_CNT_SHIFT;
159 }
160
161 static u32 esp32_uart_rx_fifo_cnt(struct uart_port *port)
162 {
163         u32 status = esp32_uart_read(port, UART_STATUS_REG);
164
165         return (status & port_variant(port)->rxfifo_cnt_mask) >> UART_RXFIFO_CNT_SHIFT;
166 }
167
168 /* return TIOCSER_TEMT when transmitter is not busy */
169 static unsigned int esp32_uart_tx_empty(struct uart_port *port)
170 {
171         return esp32_uart_tx_fifo_cnt(port) ? 0 : TIOCSER_TEMT;
172 }
173
174 static void esp32_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
175 {
176         u32 conf0 = esp32_uart_read(port, UART_CONF0_REG);
177
178         conf0 &= ~(UART_LOOPBACK |
179                    UART_SW_RTS | UART_RTS_INV |
180                    UART_SW_DTR | UART_DTR_INV);
181
182         if (mctrl & TIOCM_RTS)
183                 conf0 |= UART_SW_RTS;
184         if (mctrl & TIOCM_DTR)
185                 conf0 |= UART_SW_DTR;
186         if (mctrl & TIOCM_LOOP)
187                 conf0 |= UART_LOOPBACK;
188
189         esp32_uart_write(port, UART_CONF0_REG, conf0);
190 }
191
192 static unsigned int esp32_uart_get_mctrl(struct uart_port *port)
193 {
194         u32 status = esp32_uart_read(port, UART_STATUS_REG);
195         unsigned int ret = TIOCM_CAR;
196
197         if (status & UART_DSRN)
198                 ret |= TIOCM_DSR;
199         if (status & UART_CTSN)
200                 ret |= TIOCM_CTS;
201
202         return ret;
203 }
204
205 static void esp32_uart_stop_tx(struct uart_port *port)
206 {
207         u32 int_ena;
208
209         int_ena = esp32_uart_read(port, UART_INT_ENA_REG);
210         int_ena &= ~UART_TXFIFO_EMPTY_INT;
211         esp32_uart_write(port, UART_INT_ENA_REG, int_ena);
212 }
213
214 static void esp32_uart_rxint(struct uart_port *port)
215 {
216         struct tty_port *tty_port = &port->state->port;
217         u32 rx_fifo_cnt = esp32_uart_rx_fifo_cnt(port);
218         unsigned long flags;
219         u32 i;
220
221         if (!rx_fifo_cnt)
222                 return;
223
224         spin_lock_irqsave(&port->lock, flags);
225
226         for (i = 0; i < rx_fifo_cnt; ++i) {
227                 u32 rx = esp32_uart_read(port, UART_FIFO_REG);
228
229                 if (!rx &&
230                     (esp32_uart_read(port, UART_INT_ST_REG) & UART_BRK_DET_INT)) {
231                         esp32_uart_write(port, UART_INT_CLR_REG, UART_BRK_DET_INT);
232                         ++port->icount.brk;
233                         uart_handle_break(port);
234                 } else {
235                         if (uart_handle_sysrq_char(port, (unsigned char)rx))
236                                 continue;
237                         tty_insert_flip_char(tty_port, rx, TTY_NORMAL);
238                         ++port->icount.rx;
239                 }
240         }
241         spin_unlock_irqrestore(&port->lock, flags);
242
243         tty_flip_buffer_push(tty_port);
244 }
245
246 static void esp32_uart_put_char(struct uart_port *port, u8 c)
247 {
248         esp32_uart_write(port, UART_FIFO_REG, c);
249 }
250
251 static void esp32_uart_put_char_sync(struct uart_port *port, u8 c)
252 {
253         unsigned long timeout = jiffies + HZ;
254
255         while (esp32_uart_tx_fifo_cnt(port) >= ESP32_UART_TX_FIFO_SIZE) {
256                 if (time_after(jiffies, timeout)) {
257                         dev_warn(port->dev, "timeout waiting for TX FIFO\n");
258                         return;
259                 }
260                 cpu_relax();
261         }
262         esp32_uart_put_char(port, c);
263 }
264
265 static void esp32_uart_transmit_buffer(struct uart_port *port)
266 {
267         u32 tx_fifo_used = esp32_uart_tx_fifo_cnt(port);
268         unsigned int pending;
269         u8 ch;
270
271         if (tx_fifo_used >= ESP32_UART_TX_FIFO_SIZE)
272                 return;
273
274         pending = uart_port_tx_limited(port, ch,
275                                        ESP32_UART_TX_FIFO_SIZE - tx_fifo_used,
276                                        true, esp32_uart_put_char(port, ch),
277                                        ({}));
278         if (pending) {
279                 u32 int_ena;
280
281                 int_ena = esp32_uart_read(port, UART_INT_ENA_REG);
282                 int_ena |= UART_TXFIFO_EMPTY_INT;
283                 esp32_uart_write(port, UART_INT_ENA_REG, int_ena);
284         }
285 }
286
287 static void esp32_uart_txint(struct uart_port *port)
288 {
289         esp32_uart_transmit_buffer(port);
290 }
291
292 static irqreturn_t esp32_uart_int(int irq, void *dev_id)
293 {
294         struct uart_port *port = dev_id;
295         u32 status;
296
297         status = esp32_uart_read(port, UART_INT_ST_REG);
298
299         if (status & (UART_RXFIFO_FULL_INT | UART_BRK_DET_INT))
300                 esp32_uart_rxint(port);
301         if (status & UART_TXFIFO_EMPTY_INT)
302                 esp32_uart_txint(port);
303
304         esp32_uart_write(port, UART_INT_CLR_REG, status);
305
306         return IRQ_RETVAL(status);
307 }
308
309 static void esp32_uart_start_tx(struct uart_port *port)
310 {
311         esp32_uart_transmit_buffer(port);
312 }
313
314 static void esp32_uart_stop_rx(struct uart_port *port)
315 {
316         u32 int_ena;
317
318         int_ena = esp32_uart_read(port, UART_INT_ENA_REG);
319         int_ena &= ~UART_RXFIFO_FULL_INT;
320         esp32_uart_write(port, UART_INT_ENA_REG, int_ena);
321 }
322
323 static int esp32_uart_startup(struct uart_port *port)
324 {
325         int ret = 0;
326         unsigned long flags;
327         struct esp32_port *sport = container_of(port, struct esp32_port, port);
328
329         ret = clk_prepare_enable(sport->clk);
330         if (ret)
331                 return ret;
332
333         ret = request_irq(port->irq, esp32_uart_int, 0, DRIVER_NAME, port);
334         if (ret) {
335                 clk_disable_unprepare(sport->clk);
336                 return ret;
337         }
338
339         spin_lock_irqsave(&port->lock, flags);
340         if (port_variant(port)->has_clkconf)
341                 esp32_uart_write(port, ESP32S3_UART_CLK_CONF_REG,
342                                  ESP32S3_UART_CLK_CONF_DEFAULT);
343         esp32_uart_write(port, UART_CONF1_REG,
344                          (1 << UART_RXFIFO_FULL_THRHD_SHIFT) |
345                          (1 << port_variant(port)->txfifo_empty_thrhd_shift));
346         esp32_uart_write(port, UART_INT_CLR_REG, UART_RXFIFO_FULL_INT | UART_BRK_DET_INT);
347         esp32_uart_write(port, UART_INT_ENA_REG, UART_RXFIFO_FULL_INT | UART_BRK_DET_INT);
348         spin_unlock_irqrestore(&port->lock, flags);
349
350         return ret;
351 }
352
353 static void esp32_uart_shutdown(struct uart_port *port)
354 {
355         struct esp32_port *sport = container_of(port, struct esp32_port, port);
356
357         esp32_uart_write(port, UART_INT_ENA_REG, 0);
358         free_irq(port->irq, port);
359         clk_disable_unprepare(sport->clk);
360 }
361
362 static bool esp32_uart_set_baud(struct uart_port *port, u32 baud)
363 {
364         u32 sclk = port->uartclk;
365         u32 div = sclk / baud;
366
367         if (port_variant(port)->has_clkconf) {
368                 u32 sclk_div = div / port_variant(port)->clkdiv_mask;
369
370                 if (div > port_variant(port)->clkdiv_mask) {
371                         sclk /= (sclk_div + 1);
372                         div = sclk / baud;
373                 }
374                 esp32_uart_write(port, ESP32S3_UART_CLK_CONF_REG,
375                                  FIELD_PREP(ESP32S3_UART_SCLK_DIV_NUM, sclk_div) |
376                                  ESP32S3_UART_CLK_CONF_DEFAULT);
377         }
378
379         if (div <= port_variant(port)->clkdiv_mask) {
380                 u32 frag = (sclk * 16) / baud - div * 16;
381
382                 esp32_uart_write(port, UART_CLKDIV_REG,
383                                  div | FIELD_PREP(UART_CLKDIV_FRAG, frag));
384                 return true;
385         }
386
387         return false;
388 }
389
390 static void esp32_uart_set_termios(struct uart_port *port,
391                                    struct ktermios *termios,
392                                    const struct ktermios *old)
393 {
394         unsigned long flags;
395         u32 conf0, conf1;
396         u32 baud;
397         const u32 rx_flow_en = port_variant(port)->rx_flow_en;
398         u32 max_div = port_variant(port)->clkdiv_mask;
399
400         termios->c_cflag &= ~CMSPAR;
401
402         if (port_variant(port)->has_clkconf)
403                 max_div *= FIELD_MAX(ESP32S3_UART_SCLK_DIV_NUM);
404
405         baud = uart_get_baud_rate(port, termios, old,
406                                   port->uartclk / max_div,
407                                   port->uartclk / 16);
408
409         spin_lock_irqsave(&port->lock, flags);
410
411         conf0 = esp32_uart_read(port, UART_CONF0_REG);
412         conf0 &= ~(UART_PARITY_EN | UART_PARITY | UART_BIT_NUM | UART_STOP_BIT_NUM);
413
414         conf1 = esp32_uart_read(port, UART_CONF1_REG);
415         conf1 &= ~rx_flow_en;
416
417         if (termios->c_cflag & PARENB) {
418                 conf0 |= UART_PARITY_EN;
419                 if (termios->c_cflag & PARODD)
420                         conf0 |= UART_PARITY;
421         }
422
423         switch (termios->c_cflag & CSIZE) {
424         case CS5:
425                 conf0 |= FIELD_PREP(UART_BIT_NUM, UART_BIT_NUM_5);
426                 break;
427         case CS6:
428                 conf0 |= FIELD_PREP(UART_BIT_NUM, UART_BIT_NUM_6);
429                 break;
430         case CS7:
431                 conf0 |= FIELD_PREP(UART_BIT_NUM, UART_BIT_NUM_7);
432                 break;
433         case CS8:
434                 conf0 |= FIELD_PREP(UART_BIT_NUM, UART_BIT_NUM_8);
435                 break;
436         }
437
438         if (termios->c_cflag & CSTOPB)
439                 conf0 |= FIELD_PREP(UART_STOP_BIT_NUM, UART_STOP_BIT_NUM_2);
440         else
441                 conf0 |= FIELD_PREP(UART_STOP_BIT_NUM, UART_STOP_BIT_NUM_1);
442
443         if (termios->c_cflag & CRTSCTS)
444                 conf1 |= rx_flow_en;
445
446         esp32_uart_write(port, UART_CONF0_REG, conf0);
447         esp32_uart_write(port, UART_CONF1_REG, conf1);
448
449         if (baud) {
450                 esp32_uart_set_baud(port, baud);
451                 uart_update_timeout(port, termios->c_cflag, baud);
452         } else {
453                 if (esp32_uart_set_baud(port, 115200)) {
454                         baud = 115200;
455                         tty_termios_encode_baud_rate(termios, baud, baud);
456                         uart_update_timeout(port, termios->c_cflag, baud);
457                 } else {
458                         dev_warn(port->dev,
459                                  "unable to set speed to %d baud or the default 115200\n",
460                                  baud);
461                 }
462         }
463         spin_unlock_irqrestore(&port->lock, flags);
464 }
465
466 static const char *esp32_uart_type(struct uart_port *port)
467 {
468         return port_variant(port)->type;
469 }
470
471 /* configure/auto-configure the port */
472 static void esp32_uart_config_port(struct uart_port *port, int flags)
473 {
474         if (flags & UART_CONFIG_TYPE)
475                 port->type = PORT_GENERIC;
476 }
477
478 #ifdef CONFIG_CONSOLE_POLL
479 static int esp32_uart_poll_init(struct uart_port *port)
480 {
481         struct esp32_port *sport = container_of(port, struct esp32_port, port);
482
483         return clk_prepare_enable(sport->clk);
484 }
485
486 static void esp32_uart_poll_put_char(struct uart_port *port, unsigned char c)
487 {
488         esp32_uart_put_char_sync(port, c);
489 }
490
491 static int esp32_uart_poll_get_char(struct uart_port *port)
492 {
493         if (esp32_uart_rx_fifo_cnt(port))
494                 return esp32_uart_read(port, UART_FIFO_REG);
495         else
496                 return NO_POLL_CHAR;
497
498 }
499 #endif
500
501 static const struct uart_ops esp32_uart_pops = {
502         .tx_empty       = esp32_uart_tx_empty,
503         .set_mctrl      = esp32_uart_set_mctrl,
504         .get_mctrl      = esp32_uart_get_mctrl,
505         .stop_tx        = esp32_uart_stop_tx,
506         .start_tx       = esp32_uart_start_tx,
507         .stop_rx        = esp32_uart_stop_rx,
508         .startup        = esp32_uart_startup,
509         .shutdown       = esp32_uart_shutdown,
510         .set_termios    = esp32_uart_set_termios,
511         .type           = esp32_uart_type,
512         .config_port    = esp32_uart_config_port,
513 #ifdef CONFIG_CONSOLE_POLL
514         .poll_init      = esp32_uart_poll_init,
515         .poll_put_char  = esp32_uart_poll_put_char,
516         .poll_get_char  = esp32_uart_poll_get_char,
517 #endif
518 };
519
520 static void esp32_uart_console_putchar(struct uart_port *port, u8 c)
521 {
522         esp32_uart_put_char_sync(port, c);
523 }
524
525 static void esp32_uart_string_write(struct uart_port *port, const char *s,
526                                     unsigned int count)
527 {
528         uart_console_write(port, s, count, esp32_uart_console_putchar);
529 }
530
531 static void
532 esp32_uart_console_write(struct console *co, const char *s, unsigned int count)
533 {
534         struct esp32_port *sport = esp32_uart_ports[co->index];
535         struct uart_port *port = &sport->port;
536         unsigned long flags;
537         bool locked = true;
538
539         if (port->sysrq)
540                 locked = false;
541         else if (oops_in_progress)
542                 locked = spin_trylock_irqsave(&port->lock, flags);
543         else
544                 spin_lock_irqsave(&port->lock, flags);
545
546         esp32_uart_string_write(port, s, count);
547
548         if (locked)
549                 spin_unlock_irqrestore(&port->lock, flags);
550 }
551
552 static int __init esp32_uart_console_setup(struct console *co, char *options)
553 {
554         struct esp32_port *sport;
555         int baud = 115200;
556         int bits = 8;
557         int parity = 'n';
558         int flow = 'n';
559         int ret;
560
561         /*
562          * check whether an invalid uart number has been specified, and
563          * if so, search for the first available port that does have
564          * console support.
565          */
566         if (co->index == -1 || co->index >= ARRAY_SIZE(esp32_uart_ports))
567                 co->index = 0;
568
569         sport = esp32_uart_ports[co->index];
570         if (!sport)
571                 return -ENODEV;
572
573         ret = clk_prepare_enable(sport->clk);
574         if (ret)
575                 return ret;
576
577         if (options)
578                 uart_parse_options(options, &baud, &parity, &bits, &flow);
579
580         return uart_set_options(&sport->port, co, baud, parity, bits, flow);
581 }
582
583 static int esp32_uart_console_exit(struct console *co)
584 {
585         struct esp32_port *sport = esp32_uart_ports[co->index];
586
587         clk_disable_unprepare(sport->clk);
588         return 0;
589 }
590
591 static struct uart_driver esp32_uart_reg;
592 static struct console esp32_uart_console = {
593         .name           = DEV_NAME,
594         .write          = esp32_uart_console_write,
595         .device         = uart_console_device,
596         .setup          = esp32_uart_console_setup,
597         .exit           = esp32_uart_console_exit,
598         .flags          = CON_PRINTBUFFER,
599         .index          = -1,
600         .data           = &esp32_uart_reg,
601 };
602
603 static void esp32_uart_earlycon_putchar(struct uart_port *port, u8 c)
604 {
605         esp32_uart_put_char_sync(port, c);
606 }
607
608 static void esp32_uart_earlycon_write(struct console *con, const char *s,
609                                       unsigned int n)
610 {
611         struct earlycon_device *dev = con->data;
612
613         uart_console_write(&dev->port, s, n, esp32_uart_earlycon_putchar);
614 }
615
616 #ifdef CONFIG_CONSOLE_POLL
617 static int esp32_uart_earlycon_read(struct console *con, char *s, unsigned int n)
618 {
619         struct earlycon_device *dev = con->data;
620         unsigned int num_read = 0;
621
622         while (num_read < n) {
623                 int c = esp32_uart_poll_get_char(&dev->port);
624
625                 if (c == NO_POLL_CHAR)
626                         break;
627                 s[num_read++] = c;
628         }
629         return num_read;
630 }
631 #endif
632
633 static int __init esp32xx_uart_early_console_setup(struct earlycon_device *device,
634                                                    const char *options)
635 {
636         if (!device->port.membase)
637                 return -ENODEV;
638
639         device->con->write = esp32_uart_earlycon_write;
640 #ifdef CONFIG_CONSOLE_POLL
641         device->con->read = esp32_uart_earlycon_read;
642 #endif
643         if (device->port.uartclk != BASE_BAUD * 16)
644                 esp32_uart_set_baud(&device->port, device->baud);
645
646         return 0;
647 }
648
649 static int __init esp32_uart_early_console_setup(struct earlycon_device *device,
650                                                  const char *options)
651 {
652         device->port.private_data = (void *)&esp32_variant;
653
654         return esp32xx_uart_early_console_setup(device, options);
655 }
656
657 OF_EARLYCON_DECLARE(esp32uart, "esp,esp32-uart",
658                     esp32_uart_early_console_setup);
659
660 static int __init esp32s3_uart_early_console_setup(struct earlycon_device *device,
661                                                    const char *options)
662 {
663         device->port.private_data = (void *)&esp32s3_variant;
664
665         return esp32xx_uart_early_console_setup(device, options);
666 }
667
668 OF_EARLYCON_DECLARE(esp32s3uart, "esp,esp32s3-uart",
669                     esp32s3_uart_early_console_setup);
670
671 static struct uart_driver esp32_uart_reg = {
672         .owner          = THIS_MODULE,
673         .driver_name    = DRIVER_NAME,
674         .dev_name       = DEV_NAME,
675         .nr             = ARRAY_SIZE(esp32_uart_ports),
676         .cons           = &esp32_uart_console,
677 };
678
679 static int esp32_uart_probe(struct platform_device *pdev)
680 {
681         struct device_node *np = pdev->dev.of_node;
682         struct uart_port *port;
683         struct esp32_port *sport;
684         struct resource *res;
685         int ret;
686
687         sport = devm_kzalloc(&pdev->dev, sizeof(*sport), GFP_KERNEL);
688         if (!sport)
689                 return -ENOMEM;
690
691         port = &sport->port;
692
693         ret = of_alias_get_id(np, "serial");
694         if (ret < 0) {
695                 dev_err(&pdev->dev, "failed to get alias id, errno %d\n", ret);
696                 return ret;
697         }
698         if (ret >= UART_NR) {
699                 dev_err(&pdev->dev, "driver limited to %d serial ports\n", UART_NR);
700                 return -ENOMEM;
701         }
702
703         port->line = ret;
704
705         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
706         if (!res)
707                 return -ENODEV;
708
709         port->mapbase = res->start;
710         port->membase = devm_ioremap_resource(&pdev->dev, res);
711         if (IS_ERR(port->membase))
712                 return PTR_ERR(port->membase);
713
714         sport->clk = devm_clk_get(&pdev->dev, NULL);
715         if (IS_ERR(sport->clk))
716                 return PTR_ERR(sport->clk);
717
718         port->uartclk = clk_get_rate(sport->clk);
719         port->dev = &pdev->dev;
720         port->type = PORT_GENERIC;
721         port->iotype = UPIO_MEM;
722         port->irq = platform_get_irq(pdev, 0);
723         port->ops = &esp32_uart_pops;
724         port->flags = UPF_BOOT_AUTOCONF;
725         port->has_sysrq = 1;
726         port->fifosize = ESP32_UART_TX_FIFO_SIZE;
727         port->private_data = (void *)device_get_match_data(&pdev->dev);
728
729         esp32_uart_ports[port->line] = sport;
730
731         platform_set_drvdata(pdev, port);
732
733         return uart_add_one_port(&esp32_uart_reg, port);
734 }
735
736 static void esp32_uart_remove(struct platform_device *pdev)
737 {
738         struct uart_port *port = platform_get_drvdata(pdev);
739
740         uart_remove_one_port(&esp32_uart_reg, port);
741 }
742
743
744 static struct platform_driver esp32_uart_driver = {
745         .probe          = esp32_uart_probe,
746         .remove_new     = esp32_uart_remove,
747         .driver         = {
748                 .name   = DRIVER_NAME,
749                 .of_match_table = esp32_uart_dt_ids,
750         },
751 };
752
753 static int __init esp32_uart_init(void)
754 {
755         int ret;
756
757         ret = uart_register_driver(&esp32_uart_reg);
758         if (ret)
759                 return ret;
760
761         ret = platform_driver_register(&esp32_uart_driver);
762         if (ret)
763                 uart_unregister_driver(&esp32_uart_reg);
764
765         return ret;
766 }
767
768 static void __exit esp32_uart_exit(void)
769 {
770         platform_driver_unregister(&esp32_uart_driver);
771         uart_unregister_driver(&esp32_uart_reg);
772 }
773
774 module_init(esp32_uart_init);
775 module_exit(esp32_uart_exit);
776
777 MODULE_AUTHOR("Max Filippov <jcmvbkbc@gmail.com>");
778 MODULE_LICENSE("GPL");