etraxfs-uart.c 26 KB

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