1 #include <linux/module.h>
2 #include <linux/init.h>
3 #include <linux/console.h>
4 #include <linux/platform_device.h>
5 #include <linux/serial_core.h>
6 #include <linux/tty_flip.h>
7 #include <linux/of.h>
8 #include <linux/gpio.h>
9 #include <linux/of_irq.h>
10 #include <linux/of_address.h>
11 #include <hwregs/ser_defs.h>
12 
13 #define DRV_NAME "etraxfs-uart"
14 #define UART_NR CONFIG_ETRAX_SERIAL_PORTS
15 
16 #define MODIFY_REG(instance, reg, var)				\
17 	do {							\
18 		if (REG_RD_INT(ser, instance, reg) !=		\
19 		    REG_TYPE_CONV(int, reg_ser_##reg, var))	\
20 			REG_WR(ser, instance, reg, var);	\
21 	} while (0)
22 
23 struct uart_cris_port {
24 	struct uart_port port;
25 
26 	int initialized;
27 	int irq;
28 
29 	void __iomem *regi_ser;
30 
31 	struct gpio_desc *dtr_pin;
32 	struct gpio_desc *dsr_pin;
33 	struct gpio_desc *ri_pin;
34 	struct gpio_desc *cd_pin;
35 
36 	int write_ongoing;
37 };
38 
39 static struct uart_driver etraxfs_uart_driver;
40 static struct uart_port *console_port;
41 static int console_baud = 115200;
42 static struct uart_cris_port *etraxfs_uart_ports[UART_NR];
43 
44 static void cris_serial_port_init(struct uart_port *port, int line);
45 static void etraxfs_uart_stop_rx(struct uart_port *port);
46 static inline void etraxfs_uart_start_tx_bottom(struct uart_port *port);
47 
48 #ifdef CONFIG_SERIAL_ETRAXFS_CONSOLE
49 static void
cris_console_write(struct console * co,const char * s,unsigned int count)50 cris_console_write(struct console *co, const char *s, unsigned int count)
51 {
52 	struct uart_cris_port *up;
53 	int i;
54 	reg_ser_r_stat_din stat;
55 	reg_ser_rw_tr_dma_en tr_dma_en, old;
56 
57 	up = etraxfs_uart_ports[co->index];
58 
59 	if (!up)
60 		return;
61 
62 	/* Switch to manual mode. */
63 	tr_dma_en = old = REG_RD(ser, up->regi_ser, rw_tr_dma_en);
64 	if (tr_dma_en.en == regk_ser_yes) {
65 		tr_dma_en.en = regk_ser_no;
66 		REG_WR(ser, up->regi_ser, rw_tr_dma_en, tr_dma_en);
67 	}
68 
69 	/* Send data. */
70 	for (i = 0; i < count; i++) {
71 		/* LF -> CRLF */
72 		if (s[i] == '\n') {
73 			do {
74 				stat = REG_RD(ser, up->regi_ser, r_stat_din);
75 			} while (!stat.tr_rdy);
76 			REG_WR_INT(ser, up->regi_ser, rw_dout, '\r');
77 		}
78 		/* Wait until transmitter is ready and send. */
79 		do {
80 			stat = REG_RD(ser, up->regi_ser, r_stat_din);
81 		} while (!stat.tr_rdy);
82 		REG_WR_INT(ser, up->regi_ser, rw_dout, s[i]);
83 	}
84 
85 	/* Restore mode. */
86 	if (tr_dma_en.en != old.en)
87 		REG_WR(ser, up->regi_ser, rw_tr_dma_en, old);
88 }
89 
90 static int __init
cris_console_setup(struct console * co,char * options)91 cris_console_setup(struct console *co, char *options)
92 {
93 	struct uart_port *port;
94 	int baud = 115200;
95 	int bits = 8;
96 	int parity = 'n';
97 	int flow = 'n';
98 
99 	if (co->index < 0 || co->index >= UART_NR)
100 		co->index = 0;
101 	port = &etraxfs_uart_ports[co->index]->port;
102 	console_port = port;
103 
104 	co->flags |= CON_CONSDEV;
105 
106 	if (options)
107 		uart_parse_options(options, &baud, &parity, &bits, &flow);
108 	console_baud = baud;
109 	cris_serial_port_init(port, co->index);
110 	uart_set_options(port, co, baud, parity, bits, flow);
111 
112 	return 0;
113 }
114 
cris_console_device(struct console * co,int * index)115 static struct tty_driver *cris_console_device(struct console *co, int *index)
116 {
117 	struct uart_driver *p = co->data;
118 	*index = co->index;
119 	return p->tty_driver;
120 }
121 
122 static struct console cris_console = {
123 	.name = "ttyS",
124 	.write = cris_console_write,
125 	.device = cris_console_device,
126 	.setup = cris_console_setup,
127 	.flags = CON_PRINTBUFFER,
128 	.index = -1,
129 	.data = &etraxfs_uart_driver,
130 };
131 #endif /* CONFIG_SERIAL_ETRAXFS_CONSOLE */
132 
133 static struct uart_driver etraxfs_uart_driver = {
134 	.owner = THIS_MODULE,
135 	.driver_name = "serial",
136 	.dev_name = "ttyS",
137 	.major = TTY_MAJOR,
138 	.minor = 64,
139 	.nr = UART_NR,
140 #ifdef CONFIG_SERIAL_ETRAXFS_CONSOLE
141 	.cons = &cris_console,
142 #endif /* CONFIG_SERIAL_ETRAXFS_CONSOLE */
143 };
144 
crisv32_serial_get_rts(struct uart_cris_port * up)145 static inline int crisv32_serial_get_rts(struct uart_cris_port *up)
146 {
147 	void __iomem *regi_ser = up->regi_ser;
148 	/*
149 	 * Return what the user has controlled rts to or
150 	 * what the pin is? (if auto_rts is used it differs during tx)
151 	 */
152 	reg_ser_r_stat_din rstat = REG_RD(ser, regi_ser, r_stat_din);
153 
154 	return !(rstat.rts_n == regk_ser_active);
155 }
156 
157 /*
158  * A set = 0 means 3.3V on the pin, bitvalue: 0=active, 1=inactive
159  *                                            0=0V    , 1=3.3V
160  */
crisv32_serial_set_rts(struct uart_cris_port * up,int set,int force)161 static inline void crisv32_serial_set_rts(struct uart_cris_port *up,
162 					  int set, int force)
163 {
164 	void __iomem *regi_ser = up->regi_ser;
165 
166 	unsigned long flags;
167 	reg_ser_rw_rec_ctrl rec_ctrl;
168 
169 	local_irq_save(flags);
170 	rec_ctrl = REG_RD(ser, regi_ser, rw_rec_ctrl);
171 
172 	if (set)
173 		rec_ctrl.rts_n = regk_ser_active;
174 	else
175 		rec_ctrl.rts_n = regk_ser_inactive;
176 	REG_WR(ser, regi_ser, rw_rec_ctrl, rec_ctrl);
177 	local_irq_restore(flags);
178 }
179 
crisv32_serial_get_cts(struct uart_cris_port * up)180 static inline int crisv32_serial_get_cts(struct uart_cris_port *up)
181 {
182 	void __iomem *regi_ser = up->regi_ser;
183 	reg_ser_r_stat_din rstat = REG_RD(ser, regi_ser, r_stat_din);
184 
185 	return (rstat.cts_n == regk_ser_active);
186 }
187 
188 /*
189  * Send a single character for XON/XOFF purposes.  We do it in this separate
190  * function instead of the alternative support port.x_char, in the ...start_tx
191  * function, so we don't mix up this case with possibly enabling transmission
192  * of queued-up data (in case that's disabled after *receiving* an XOFF or
193  * negative CTS).  This function is used for both DMA and non-DMA case; see HW
194  * docs specifically blessing sending characters manually when DMA for
195  * transmission is enabled and running.  We may be asked to transmit despite
196  * the transmitter being disabled by a ..._stop_tx call so we need to enable
197  * it temporarily but restore the state afterwards.
198  */
etraxfs_uart_send_xchar(struct uart_port * port,char ch)199 static void etraxfs_uart_send_xchar(struct uart_port *port, char ch)
200 {
201 	struct uart_cris_port *up = (struct uart_cris_port *)port;
202 	reg_ser_rw_dout dout = { .data = ch };
203 	reg_ser_rw_ack_intr ack_intr = { .tr_rdy = regk_ser_yes };
204 	reg_ser_r_stat_din rstat;
205 	reg_ser_rw_tr_ctrl prev_tr_ctrl, tr_ctrl;
206 	void __iomem *regi_ser = up->regi_ser;
207 	unsigned long flags;
208 
209 	/*
210 	 * Wait for tr_rdy in case a character is already being output.  Make
211 	 * sure we have integrity between the register reads and the writes
212 	 * below, but don't busy-wait with interrupts off and the port lock
213 	 * taken.
214 	 */
215 	spin_lock_irqsave(&port->lock, flags);
216 	do {
217 		spin_unlock_irqrestore(&port->lock, flags);
218 		spin_lock_irqsave(&port->lock, flags);
219 		prev_tr_ctrl = tr_ctrl = REG_RD(ser, regi_ser, rw_tr_ctrl);
220 		rstat = REG_RD(ser, regi_ser, r_stat_din);
221 	} while (!rstat.tr_rdy);
222 
223 	/*
224 	 * Ack an interrupt if one was just issued for the previous character
225 	 * that was output.  This is required for non-DMA as the interrupt is
226 	 * used as the only indicator that the transmitter is ready and it
227 	 * isn't while this x_char is being transmitted.
228 	 */
229 	REG_WR(ser, regi_ser, rw_ack_intr, ack_intr);
230 
231 	/* Enable the transmitter in case it was disabled. */
232 	tr_ctrl.stop = 0;
233 	REG_WR(ser, regi_ser, rw_tr_ctrl, tr_ctrl);
234 
235 	/*
236 	 * Finally, send the blessed character; nothing should stop it now,
237 	 * except for an xoff-detected state, which we'll handle below.
238 	 */
239 	REG_WR(ser, regi_ser, rw_dout, dout);
240 	up->port.icount.tx++;
241 
242 	/* There might be an xoff state to clear. */
243 	rstat = REG_RD(ser, up->regi_ser, r_stat_din);
244 
245 	/*
246 	 * Clear any xoff state that *may* have been there to
247 	 * inhibit transmission of the character.
248 	 */
249 	if (rstat.xoff_detect) {
250 		reg_ser_rw_xoff_clr xoff_clr = { .clr = 1 };
251 		reg_ser_rw_tr_dma_en tr_dma_en;
252 
253 		REG_WR(ser, regi_ser, rw_xoff_clr, xoff_clr);
254 		tr_dma_en = REG_RD(ser, regi_ser, rw_tr_dma_en);
255 
256 		/*
257 		 * If we had an xoff state but cleared it, instead sneak in a
258 		 * disabled state for the transmitter, after the character we
259 		 * sent.  Thus we keep the port disabled, just as if the xoff
260 		 * state was still in effect (or actually, as if stop_tx had
261 		 * been called, as we stop DMA too).
262 		 */
263 		prev_tr_ctrl.stop = 1;
264 
265 		tr_dma_en.en = 0;
266 		REG_WR(ser, regi_ser, rw_tr_dma_en, tr_dma_en);
267 	}
268 
269 	/* Restore "previous" enabled/disabled state of the transmitter. */
270 	REG_WR(ser, regi_ser, rw_tr_ctrl, prev_tr_ctrl);
271 
272 	spin_unlock_irqrestore(&port->lock, flags);
273 }
274 
275 /*
276  * Do not spin_lock_irqsave or disable interrupts by other means here; it's
277  * already done by the caller.
278  */
etraxfs_uart_start_tx(struct uart_port * port)279 static void etraxfs_uart_start_tx(struct uart_port *port)
280 {
281 	struct uart_cris_port *up = (struct uart_cris_port *)port;
282 
283 	/* we have already done below if a write is ongoing */
284 	if (up->write_ongoing)
285 		return;
286 
287 	/* Signal that write is ongoing */
288 	up->write_ongoing = 1;
289 
290 	etraxfs_uart_start_tx_bottom(port);
291 }
292 
etraxfs_uart_start_tx_bottom(struct uart_port * port)293 static inline void etraxfs_uart_start_tx_bottom(struct uart_port *port)
294 {
295 	struct uart_cris_port *up = (struct uart_cris_port *)port;
296 	void __iomem *regi_ser = up->regi_ser;
297 	reg_ser_rw_tr_ctrl tr_ctrl;
298 	reg_ser_rw_intr_mask intr_mask;
299 
300 	tr_ctrl = REG_RD(ser, regi_ser, rw_tr_ctrl);
301 	tr_ctrl.stop = regk_ser_no;
302 	REG_WR(ser, regi_ser, rw_tr_ctrl, tr_ctrl);
303 	intr_mask = REG_RD(ser, regi_ser, rw_intr_mask);
304 	intr_mask.tr_rdy = regk_ser_yes;
305 	REG_WR(ser, regi_ser, rw_intr_mask, intr_mask);
306 }
307 
308 /*
309  * This function handles both the DMA and non-DMA case by ordering the
310  * transmitter to stop of after the current character.  We don't need to wait
311  * for any such character to be completely transmitted; we do that where it
312  * matters, like in etraxfs_uart_set_termios.  Don't busy-wait here; see
313  * Documentation/serial/driver: this function is called within
314  * spin_lock_irq{,save} and thus separate ones would be disastrous (when SMP).
315  * There's no documented need to set the txd pin to any particular value;
316  * break setting is controlled solely by etraxfs_uart_break_ctl.
317  */
etraxfs_uart_stop_tx(struct uart_port * port)318 static void etraxfs_uart_stop_tx(struct uart_port *port)
319 {
320 	struct uart_cris_port *up = (struct uart_cris_port *)port;
321 	void __iomem *regi_ser = up->regi_ser;
322 	reg_ser_rw_tr_ctrl tr_ctrl;
323 	reg_ser_rw_intr_mask intr_mask;
324 	reg_ser_rw_tr_dma_en tr_dma_en = {0};
325 	reg_ser_rw_xoff_clr xoff_clr = {0};
326 
327 	/*
328 	 * For the non-DMA case, we'd get a tr_rdy interrupt that we're not
329 	 * interested in as we're not transmitting any characters.  For the
330 	 * DMA case, that interrupt is already turned off, but no reason to
331 	 * waste code on conditionals here.
332 	 */
333 	intr_mask = REG_RD(ser, regi_ser, rw_intr_mask);
334 	intr_mask.tr_rdy = regk_ser_no;
335 	REG_WR(ser, regi_ser, rw_intr_mask, intr_mask);
336 
337 	tr_ctrl = REG_RD(ser, regi_ser, rw_tr_ctrl);
338 	tr_ctrl.stop = 1;
339 	REG_WR(ser, regi_ser, rw_tr_ctrl, tr_ctrl);
340 
341 	/*
342 	 * Always clear possible hardware xoff-detected state here, no need to
343 	 * unnecessary consider mctrl settings and when they change.  We clear
344 	 * it here rather than in start_tx: both functions are called as the
345 	 * effect of XOFF processing, but start_tx is also called when upper
346 	 * levels tell the driver that there are more characters to send, so
347 	 * avoid adding code there.
348 	 */
349 	xoff_clr.clr = 1;
350 	REG_WR(ser, regi_ser, rw_xoff_clr, xoff_clr);
351 
352 	/*
353 	 * Disable transmitter DMA, so that if we're in XON/XOFF, we can send
354 	 * those single characters without also giving go-ahead for queued up
355 	 * DMA data.
356 	 */
357 	tr_dma_en.en = 0;
358 	REG_WR(ser, regi_ser, rw_tr_dma_en, tr_dma_en);
359 
360 	/*
361 	 * Make sure that write_ongoing is reset when stopping tx.
362 	 */
363 	up->write_ongoing = 0;
364 }
365 
etraxfs_uart_stop_rx(struct uart_port * port)366 static void etraxfs_uart_stop_rx(struct uart_port *port)
367 {
368 	struct uart_cris_port *up = (struct uart_cris_port *)port;
369 	void __iomem *regi_ser = up->regi_ser;
370 	reg_ser_rw_rec_ctrl rec_ctrl = REG_RD(ser, regi_ser, rw_rec_ctrl);
371 
372 	rec_ctrl.en = regk_ser_no;
373 	REG_WR(ser, regi_ser, rw_rec_ctrl, rec_ctrl);
374 }
375 
etraxfs_uart_enable_ms(struct uart_port * port)376 static void etraxfs_uart_enable_ms(struct uart_port *port)
377 {
378 }
379 
check_modem_status(struct uart_cris_port * up)380 static void check_modem_status(struct uart_cris_port *up)
381 {
382 }
383 
etraxfs_uart_tx_empty(struct uart_port * port)384 static unsigned int etraxfs_uart_tx_empty(struct uart_port *port)
385 {
386 	struct uart_cris_port *up = (struct uart_cris_port *)port;
387 	unsigned long flags;
388 	unsigned int ret;
389 	reg_ser_r_stat_din rstat = {0};
390 
391 	spin_lock_irqsave(&up->port.lock, flags);
392 
393 	rstat = REG_RD(ser, up->regi_ser, r_stat_din);
394 	ret = rstat.tr_empty ? TIOCSER_TEMT : 0;
395 
396 	spin_unlock_irqrestore(&up->port.lock, flags);
397 	return ret;
398 }
etraxfs_uart_get_mctrl(struct uart_port * port)399 static unsigned int etraxfs_uart_get_mctrl(struct uart_port *port)
400 {
401 	struct uart_cris_port *up = (struct uart_cris_port *)port;
402 	unsigned int ret;
403 
404 	ret = 0;
405 	if (crisv32_serial_get_rts(up))
406 		ret |= TIOCM_RTS;
407 	/* DTR is active low */
408 	if (up->dtr_pin && !gpiod_get_raw_value(up->dtr_pin))
409 		ret |= TIOCM_DTR;
410 	/* CD is active low */
411 	if (up->cd_pin && !gpiod_get_raw_value(up->cd_pin))
412 		ret |= TIOCM_CD;
413 	/* RI is active low */
414 	if (up->ri_pin && !gpiod_get_raw_value(up->ri_pin))
415 		ret |= TIOCM_RI;
416 	/* DSR is active low */
417 	if (up->dsr_pin && !gpiod_get_raw_value(up->dsr_pin))
418 		ret |= TIOCM_DSR;
419 	if (crisv32_serial_get_cts(up))
420 		ret |= TIOCM_CTS;
421 	return ret;
422 }
423 
etraxfs_uart_set_mctrl(struct uart_port * port,unsigned int mctrl)424 static void etraxfs_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
425 {
426 	struct uart_cris_port *up = (struct uart_cris_port *)port;
427 
428 	crisv32_serial_set_rts(up, mctrl & TIOCM_RTS ? 1 : 0, 0);
429 	/* DTR is active low */
430 	if (up->dtr_pin)
431 		gpiod_set_raw_value(up->dtr_pin, mctrl & TIOCM_DTR ? 0 : 1);
432 	/* RI is active low */
433 	if (up->ri_pin)
434 		gpiod_set_raw_value(up->ri_pin, mctrl & TIOCM_RNG ? 0 : 1);
435 	/* CD is active low */
436 	if (up->cd_pin)
437 		gpiod_set_raw_value(up->cd_pin, mctrl & TIOCM_CD ? 0 : 1);
438 }
439 
etraxfs_uart_break_ctl(struct uart_port * port,int break_state)440 static void etraxfs_uart_break_ctl(struct uart_port *port, int break_state)
441 {
442 	struct uart_cris_port *up = (struct uart_cris_port *)port;
443 	unsigned long flags;
444 	reg_ser_rw_tr_ctrl tr_ctrl;
445 	reg_ser_rw_tr_dma_en tr_dma_en;
446 	reg_ser_rw_intr_mask intr_mask;
447 
448 	spin_lock_irqsave(&up->port.lock, flags);
449 	tr_ctrl = REG_RD(ser, up->regi_ser, rw_tr_ctrl);
450 	tr_dma_en = REG_RD(ser, up->regi_ser, rw_tr_dma_en);
451 	intr_mask = REG_RD(ser, up->regi_ser, rw_intr_mask);
452 
453 	if (break_state != 0) { /* Send break */
454 		/*
455 		 * We need to disable DMA (if used) or tr_rdy interrupts if no
456 		 * DMA.  No need to make this conditional on use of DMA;
457 		 * disabling will be a no-op for the other mode.
458 		 */
459 		intr_mask.tr_rdy = regk_ser_no;
460 		tr_dma_en.en = 0;
461 
462 		/*
463 		 * Stop transmission and set the txd pin to 0 after the
464 		 * current character.  The txd setting will take effect after
465 		 * any current transmission has completed.
466 		 */
467 		tr_ctrl.stop = 1;
468 		tr_ctrl.txd = 0;
469 	} else {
470 		/* Re-enable the serial interrupt. */
471 		intr_mask.tr_rdy = regk_ser_yes;
472 
473 		tr_ctrl.stop = 0;
474 		tr_ctrl.txd = 1;
475 	}
476 	REG_WR(ser, up->regi_ser, rw_tr_ctrl, tr_ctrl);
477 	REG_WR(ser, up->regi_ser, rw_tr_dma_en, tr_dma_en);
478 	REG_WR(ser, up->regi_ser, rw_intr_mask, intr_mask);
479 
480 	spin_unlock_irqrestore(&up->port.lock, flags);
481 }
482 
483 static void
transmit_chars_no_dma(struct uart_cris_port * up)484 transmit_chars_no_dma(struct uart_cris_port *up)
485 {
486 	int max_count;
487 	struct circ_buf *xmit = &up->port.state->xmit;
488 
489 	void __iomem *regi_ser = up->regi_ser;
490 	reg_ser_r_stat_din rstat;
491 	reg_ser_rw_ack_intr ack_intr = { .tr_rdy = regk_ser_yes };
492 
493 	if (uart_circ_empty(xmit) || uart_tx_stopped(&up->port)) {
494 		/* No more to send, so disable the interrupt. */
495 		reg_ser_rw_intr_mask intr_mask;
496 
497 		intr_mask = REG_RD(ser, regi_ser, rw_intr_mask);
498 		intr_mask.tr_rdy = 0;
499 		intr_mask.tr_empty = 0;
500 		REG_WR(ser, regi_ser, rw_intr_mask, intr_mask);
501 		up->write_ongoing = 0;
502 		return;
503 	}
504 
505 	/* If the serport is fast, we send up to max_count bytes before
506 	   exiting the loop.  */
507 	max_count = 64;
508 	do {
509 		reg_ser_rw_dout dout = { .data = xmit->buf[xmit->tail] };
510 
511 		REG_WR(ser, regi_ser, rw_dout, dout);
512 		REG_WR(ser, regi_ser, rw_ack_intr, ack_intr);
513 		xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE-1);
514 		up->port.icount.tx++;
515 		if (xmit->head == xmit->tail)
516 			break;
517 		rstat = REG_RD(ser, regi_ser, r_stat_din);
518 	} while ((--max_count > 0) && rstat.tr_rdy);
519 
520 	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
521 		uart_write_wakeup(&up->port);
522 }
523 
receive_chars_no_dma(struct uart_cris_port * up)524 static void receive_chars_no_dma(struct uart_cris_port *up)
525 {
526 	reg_ser_rs_stat_din stat_din;
527 	reg_ser_r_stat_din rstat;
528 	struct tty_port *port;
529 	struct uart_icount *icount;
530 	int max_count = 16;
531 	char flag;
532 	reg_ser_rw_ack_intr ack_intr = { 0 };
533 
534 	rstat = REG_RD(ser, up->regi_ser, r_stat_din);
535 	icount = &up->port.icount;
536 	port = &up->port.state->port;
537 
538 	do {
539 		stat_din = REG_RD(ser, up->regi_ser, rs_stat_din);
540 
541 		flag = TTY_NORMAL;
542 		ack_intr.dav = 1;
543 		REG_WR(ser, up->regi_ser, rw_ack_intr, ack_intr);
544 		icount->rx++;
545 
546 		if (stat_din.framing_err | stat_din.par_err | stat_din.orun) {
547 			if (stat_din.data == 0x00 &&
548 			    stat_din.framing_err) {
549 				/* Most likely a break. */
550 				flag = TTY_BREAK;
551 				icount->brk++;
552 			} else if (stat_din.par_err) {
553 				flag = TTY_PARITY;
554 				icount->parity++;
555 			} else if (stat_din.orun) {
556 				flag = TTY_OVERRUN;
557 				icount->overrun++;
558 			} else if (stat_din.framing_err) {
559 				flag = TTY_FRAME;
560 				icount->frame++;
561 			}
562 		}
563 
564 		/*
565 		 * If this becomes important, we probably *could* handle this
566 		 * gracefully by keeping track of the unhandled character.
567 		 */
568 		if (!tty_insert_flip_char(port, stat_din.data, flag))
569 			panic("%s: No tty buffer space", __func__);
570 		rstat = REG_RD(ser, up->regi_ser, r_stat_din);
571 	} while (rstat.dav && (max_count-- > 0));
572 	spin_unlock(&up->port.lock);
573 	tty_flip_buffer_push(port);
574 	spin_lock(&up->port.lock);
575 }
576 
577 static irqreturn_t
ser_interrupt(int irq,void * dev_id)578 ser_interrupt(int irq, void *dev_id)
579 {
580 	struct uart_cris_port *up = (struct uart_cris_port *)dev_id;
581 	void __iomem *regi_ser;
582 	int handled = 0;
583 
584 	spin_lock(&up->port.lock);
585 
586 	regi_ser = up->regi_ser;
587 
588 	if (regi_ser) {
589 		reg_ser_r_masked_intr masked_intr;
590 
591 		masked_intr = REG_RD(ser, regi_ser, r_masked_intr);
592 		/*
593 		 * Check what interrupts are active before taking
594 		 * actions. If DMA is used the interrupt shouldn't
595 		 * be enabled.
596 		 */
597 		if (masked_intr.dav) {
598 			receive_chars_no_dma(up);
599 			handled = 1;
600 		}
601 		check_modem_status(up);
602 
603 		if (masked_intr.tr_rdy) {
604 			transmit_chars_no_dma(up);
605 			handled = 1;
606 		}
607 	}
608 	spin_unlock(&up->port.lock);
609 	return IRQ_RETVAL(handled);
610 }
611 
612 #ifdef CONFIG_CONSOLE_POLL
etraxfs_uart_get_poll_char(struct uart_port * port)613 static int etraxfs_uart_get_poll_char(struct uart_port *port)
614 {
615 	reg_ser_rs_stat_din stat;
616 	reg_ser_rw_ack_intr ack_intr = { 0 };
617 	struct uart_cris_port *up = (struct uart_cris_port *)port;
618 
619 	do {
620 		stat = REG_RD(ser, up->regi_ser, rs_stat_din);
621 	} while (!stat.dav);
622 
623 	/* Ack the data_avail interrupt. */
624 	ack_intr.dav = 1;
625 	REG_WR(ser, up->regi_ser, rw_ack_intr, ack_intr);
626 
627 	return stat.data;
628 }
629 
etraxfs_uart_put_poll_char(struct uart_port * port,unsigned char c)630 static void etraxfs_uart_put_poll_char(struct uart_port *port,
631 					unsigned char c)
632 {
633 	reg_ser_r_stat_din stat;
634 	struct uart_cris_port *up = (struct uart_cris_port *)port;
635 
636 	do {
637 		stat = REG_RD(ser, up->regi_ser, r_stat_din);
638 	} while (!stat.tr_rdy);
639 	REG_WR_INT(ser, up->regi_ser, rw_dout, c);
640 }
641 #endif /* CONFIG_CONSOLE_POLL */
642 
etraxfs_uart_startup(struct uart_port * port)643 static int etraxfs_uart_startup(struct uart_port *port)
644 {
645 	struct uart_cris_port *up = (struct uart_cris_port *)port;
646 	unsigned long flags;
647 	reg_ser_rw_intr_mask ser_intr_mask = {0};
648 
649 	ser_intr_mask.dav = regk_ser_yes;
650 
651 	if (request_irq(etraxfs_uart_ports[port->line]->irq, ser_interrupt,
652 			0, DRV_NAME, etraxfs_uart_ports[port->line]))
653 		panic("irq ser%d", port->line);
654 
655 	spin_lock_irqsave(&up->port.lock, flags);
656 
657 	REG_WR(ser, up->regi_ser, rw_intr_mask, ser_intr_mask);
658 
659 	etraxfs_uart_set_mctrl(&up->port, up->port.mctrl);
660 
661 	spin_unlock_irqrestore(&up->port.lock, flags);
662 
663 	return 0;
664 }
665 
etraxfs_uart_shutdown(struct uart_port * port)666 static void etraxfs_uart_shutdown(struct uart_port *port)
667 {
668 	struct uart_cris_port *up = (struct uart_cris_port *)port;
669 	unsigned long flags;
670 
671 	spin_lock_irqsave(&up->port.lock, flags);
672 
673 	etraxfs_uart_stop_tx(port);
674 	etraxfs_uart_stop_rx(port);
675 
676 	free_irq(etraxfs_uart_ports[port->line]->irq,
677 		 etraxfs_uart_ports[port->line]);
678 
679 	etraxfs_uart_set_mctrl(&up->port, up->port.mctrl);
680 
681 	spin_unlock_irqrestore(&up->port.lock, flags);
682 
683 }
684 
685 static void
etraxfs_uart_set_termios(struct uart_port * port,struct ktermios * termios,struct ktermios * old)686 etraxfs_uart_set_termios(struct uart_port *port, struct ktermios *termios,
687 			 struct ktermios *old)
688 {
689 	struct uart_cris_port *up = (struct uart_cris_port *)port;
690 	unsigned long flags;
691 	reg_ser_rw_xoff xoff;
692 	reg_ser_rw_xoff_clr xoff_clr = {0};
693 	reg_ser_rw_tr_ctrl tx_ctrl = {0};
694 	reg_ser_rw_tr_dma_en tx_dma_en = {0};
695 	reg_ser_rw_rec_ctrl rx_ctrl = {0};
696 	reg_ser_rw_tr_baud_div tx_baud_div = {0};
697 	reg_ser_rw_rec_baud_div rx_baud_div = {0};
698 	int baud;
699 
700 	if (old &&
701 	    termios->c_cflag == old->c_cflag &&
702 	    termios->c_iflag == old->c_iflag)
703 		return;
704 
705 	/* Tx: 8 bit, no/even parity, 1 stop bit, no cts. */
706 	tx_ctrl.base_freq = regk_ser_f29_493;
707 	tx_ctrl.en = 0;
708 	tx_ctrl.stop = 0;
709 	tx_ctrl.auto_rts = regk_ser_no;
710 	tx_ctrl.txd = 1;
711 	tx_ctrl.auto_cts = 0;
712 	/* Rx: 8 bit, no/even parity. */
713 	rx_ctrl.dma_err = regk_ser_stop;
714 	rx_ctrl.sampling = regk_ser_majority;
715 	rx_ctrl.timeout = 1;
716 
717 	rx_ctrl.rts_n = regk_ser_inactive;
718 
719 	/* Common for tx and rx: 8N1. */
720 	tx_ctrl.data_bits = regk_ser_bits8;
721 	rx_ctrl.data_bits = regk_ser_bits8;
722 	tx_ctrl.par = regk_ser_even;
723 	rx_ctrl.par = regk_ser_even;
724 	tx_ctrl.par_en = regk_ser_no;
725 	rx_ctrl.par_en = regk_ser_no;
726 
727 	tx_ctrl.stop_bits = regk_ser_bits1;
728 
729 	/*
730 	 * Change baud-rate and write it to the hardware.
731 	 *
732 	 * baud_clock = base_freq / (divisor*8)
733 	 * divisor = base_freq / (baud_clock * 8)
734 	 * base_freq is either:
735 	 * off, ext, 29.493MHz, 32.000 MHz, 32.768 MHz or 100 MHz
736 	 * 20.493MHz is used for standard baudrates
737 	 */
738 
739 	/*
740 	 * For the console port we keep the original baudrate here.  Not very
741 	 * beautiful.
742 	 */
743 	if ((port != console_port) || old)
744 		baud = uart_get_baud_rate(port, termios, old, 0,
745 					  port->uartclk / 8);
746 	else
747 		baud = console_baud;
748 
749 	tx_baud_div.div = 29493000 / (8 * baud);
750 	/* Rx uses same as tx. */
751 	rx_baud_div.div = tx_baud_div.div;
752 	rx_ctrl.base_freq = tx_ctrl.base_freq;
753 
754 	if ((termios->c_cflag & CSIZE) == CS7) {
755 		/* Set 7 bit mode. */
756 		tx_ctrl.data_bits = regk_ser_bits7;
757 		rx_ctrl.data_bits = regk_ser_bits7;
758 	}
759 
760 	if (termios->c_cflag & CSTOPB) {
761 		/* Set 2 stop bit mode. */
762 		tx_ctrl.stop_bits = regk_ser_bits2;
763 	}
764 
765 	if (termios->c_cflag & PARENB) {
766 		/* Enable parity. */
767 		tx_ctrl.par_en = regk_ser_yes;
768 		rx_ctrl.par_en = regk_ser_yes;
769 	}
770 
771 	if (termios->c_cflag & CMSPAR) {
772 		if (termios->c_cflag & PARODD) {
773 			/* Set mark parity if PARODD and CMSPAR. */
774 			tx_ctrl.par = regk_ser_mark;
775 			rx_ctrl.par = regk_ser_mark;
776 		} else {
777 			tx_ctrl.par = regk_ser_space;
778 			rx_ctrl.par = regk_ser_space;
779 		}
780 	} else {
781 		if (termios->c_cflag & PARODD) {
782 			/* Set odd parity. */
783 		       tx_ctrl.par = regk_ser_odd;
784 		       rx_ctrl.par = regk_ser_odd;
785 		}
786 	}
787 
788 	if (termios->c_cflag & CRTSCTS) {
789 		/* Enable automatic CTS handling. */
790 		tx_ctrl.auto_cts = regk_ser_yes;
791 	}
792 
793 	/* Make sure the tx and rx are enabled. */
794 	tx_ctrl.en = regk_ser_yes;
795 	rx_ctrl.en = regk_ser_yes;
796 
797 	spin_lock_irqsave(&port->lock, flags);
798 
799 	tx_dma_en.en = 0;
800 	REG_WR(ser, up->regi_ser, rw_tr_dma_en, tx_dma_en);
801 
802 	/* Actually write the control regs (if modified) to the hardware. */
803 	uart_update_timeout(port, termios->c_cflag, port->uartclk/8);
804 	MODIFY_REG(up->regi_ser, rw_rec_baud_div, rx_baud_div);
805 	MODIFY_REG(up->regi_ser, rw_rec_ctrl, rx_ctrl);
806 
807 	MODIFY_REG(up->regi_ser, rw_tr_baud_div, tx_baud_div);
808 	MODIFY_REG(up->regi_ser, rw_tr_ctrl, tx_ctrl);
809 
810 	tx_dma_en.en = 0;
811 	REG_WR(ser, up->regi_ser, rw_tr_dma_en, tx_dma_en);
812 
813 	xoff = REG_RD(ser, up->regi_ser, rw_xoff);
814 
815 	if (up->port.state && up->port.state->port.tty &&
816 	    (up->port.state->port.tty->termios.c_iflag & IXON)) {
817 		xoff.chr = STOP_CHAR(up->port.state->port.tty);
818 		xoff.automatic = regk_ser_yes;
819 	} else
820 		xoff.automatic = regk_ser_no;
821 
822 	MODIFY_REG(up->regi_ser, rw_xoff, xoff);
823 
824 	/*
825 	 * Make sure we don't start in an automatically shut-off state due to
826 	 * a previous early exit.
827 	 */
828 	xoff_clr.clr = 1;
829 	REG_WR(ser, up->regi_ser, rw_xoff_clr, xoff_clr);
830 
831 	etraxfs_uart_set_mctrl(&up->port, up->port.mctrl);
832 	spin_unlock_irqrestore(&up->port.lock, flags);
833 }
834 
835 static const char *
etraxfs_uart_type(struct uart_port * port)836 etraxfs_uart_type(struct uart_port *port)
837 {
838 	return "CRISv32";
839 }
840 
etraxfs_uart_release_port(struct uart_port * port)841 static void etraxfs_uart_release_port(struct uart_port *port)
842 {
843 }
844 
etraxfs_uart_request_port(struct uart_port * port)845 static int etraxfs_uart_request_port(struct uart_port *port)
846 {
847 	return 0;
848 }
849 
etraxfs_uart_config_port(struct uart_port * port,int flags)850 static void etraxfs_uart_config_port(struct uart_port *port, int flags)
851 {
852 	struct uart_cris_port *up = (struct uart_cris_port *)port;
853 
854 	up->port.type = PORT_CRIS;
855 }
856 
857 static const struct uart_ops etraxfs_uart_pops = {
858 	.tx_empty = etraxfs_uart_tx_empty,
859 	.set_mctrl = etraxfs_uart_set_mctrl,
860 	.get_mctrl = etraxfs_uart_get_mctrl,
861 	.stop_tx = etraxfs_uart_stop_tx,
862 	.start_tx = etraxfs_uart_start_tx,
863 	.send_xchar = etraxfs_uart_send_xchar,
864 	.stop_rx = etraxfs_uart_stop_rx,
865 	.enable_ms = etraxfs_uart_enable_ms,
866 	.break_ctl = etraxfs_uart_break_ctl,
867 	.startup = etraxfs_uart_startup,
868 	.shutdown = etraxfs_uart_shutdown,
869 	.set_termios = etraxfs_uart_set_termios,
870 	.type = etraxfs_uart_type,
871 	.release_port = etraxfs_uart_release_port,
872 	.request_port = etraxfs_uart_request_port,
873 	.config_port = etraxfs_uart_config_port,
874 #ifdef CONFIG_CONSOLE_POLL
875 	.poll_get_char = etraxfs_uart_get_poll_char,
876 	.poll_put_char = etraxfs_uart_put_poll_char,
877 #endif
878 };
879 
cris_serial_port_init(struct uart_port * port,int line)880 static void cris_serial_port_init(struct uart_port *port, int line)
881 {
882 	struct uart_cris_port *up = (struct uart_cris_port *)port;
883 
884 	if (up->initialized)
885 		return;
886 	up->initialized = 1;
887 	port->line = line;
888 	spin_lock_init(&port->lock);
889 	port->ops = &etraxfs_uart_pops;
890 	port->irq = up->irq;
891 	port->iobase = (unsigned long) up->regi_ser;
892 	port->uartclk = 29493000;
893 
894 	/*
895 	 * We can't fit any more than 255 here (unsigned char), though
896 	 * actually UART_XMIT_SIZE characters could be pending output.
897 	 * At time of this writing, the definition of "fifosize" is here the
898 	 * amount of characters that can be pending output after a start_tx call
899 	 * until tx_empty returns 1: see serial_core.c:uart_wait_until_sent.
900 	 * This matters for timeout calculations unfortunately, but keeping
901 	 * larger amounts at the DMA wouldn't win much so let's just play nice.
902 	 */
903 	port->fifosize = 255;
904 	port->flags = UPF_BOOT_AUTOCONF;
905 }
906 
etraxfs_uart_probe(struct platform_device * pdev)907 static int etraxfs_uart_probe(struct platform_device *pdev)
908 {
909 	struct device_node *np = pdev->dev.of_node;
910 	struct uart_cris_port *up;
911 	int dev_id;
912 
913 	if (!np)
914 		return -ENODEV;
915 
916 	dev_id = of_alias_get_id(np, "serial");
917 	if (dev_id < 0)
918 		dev_id = 0;
919 
920 	if (dev_id >= UART_NR)
921 		return -EINVAL;
922 
923 	if (etraxfs_uart_ports[dev_id])
924 		return -EBUSY;
925 
926 	up = devm_kzalloc(&pdev->dev, sizeof(struct uart_cris_port),
927 			  GFP_KERNEL);
928 	if (!up)
929 		return -ENOMEM;
930 
931 	up->irq = irq_of_parse_and_map(np, 0);
932 	up->regi_ser = of_iomap(np, 0);
933 	up->dtr_pin = devm_gpiod_get_optional(&pdev->dev, "dtr");
934 	up->dsr_pin = devm_gpiod_get_optional(&pdev->dev, "dsr");
935 	up->ri_pin = devm_gpiod_get_optional(&pdev->dev, "ri");
936 	up->cd_pin = devm_gpiod_get_optional(&pdev->dev, "cd");
937 	up->port.dev = &pdev->dev;
938 	cris_serial_port_init(&up->port, dev_id);
939 
940 	etraxfs_uart_ports[dev_id] = up;
941 	platform_set_drvdata(pdev, &up->port);
942 	uart_add_one_port(&etraxfs_uart_driver, &up->port);
943 
944 	return 0;
945 }
946 
etraxfs_uart_remove(struct platform_device * pdev)947 static int etraxfs_uart_remove(struct platform_device *pdev)
948 {
949 	struct uart_port *port;
950 
951 	port = platform_get_drvdata(pdev);
952 	uart_remove_one_port(&etraxfs_uart_driver, port);
953 	etraxfs_uart_ports[pdev->id] = NULL;
954 
955 	return 0;
956 }
957 
958 static const struct of_device_id etraxfs_uart_dt_ids[] = {
959 	{ .compatible = "axis,etraxfs-uart" },
960 	{ /* sentinel */ }
961 };
962 
963 MODULE_DEVICE_TABLE(of, etraxfs_uart_dt_ids);
964 
965 static struct platform_driver etraxfs_uart_platform_driver = {
966 	.driver = {
967 		.name   = DRV_NAME,
968 		.of_match_table	= of_match_ptr(etraxfs_uart_dt_ids),
969 	},
970 	.probe          = etraxfs_uart_probe,
971 	.remove         = etraxfs_uart_remove,
972 };
973 
etraxfs_uart_init(void)974 static int __init etraxfs_uart_init(void)
975 {
976 	int ret;
977 
978 	ret = uart_register_driver(&etraxfs_uart_driver);
979 	if (ret)
980 		return ret;
981 
982 	ret = platform_driver_register(&etraxfs_uart_platform_driver);
983 	if (ret)
984 		uart_unregister_driver(&etraxfs_uart_driver);
985 
986 	return ret;
987 }
988 
etraxfs_uart_exit(void)989 static void __exit etraxfs_uart_exit(void)
990 {
991 	platform_driver_unregister(&etraxfs_uart_platform_driver);
992 	uart_unregister_driver(&etraxfs_uart_driver);
993 }
994 
995 module_init(etraxfs_uart_init);
996 module_exit(etraxfs_uart_exit);
997