rda-uart.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * RDA8810PL serial device driver
  4. *
  5. * Copyright RDA Microelectronics Company Limited
  6. * Copyright (c) 2017 Andreas Färber
  7. * Copyright (c) 2018 Manivannan Sadhasivam
  8. */
  9. #include <linux/clk.h>
  10. #include <linux/console.h>
  11. #include <linux/delay.h>
  12. #include <linux/io.h>
  13. #include <linux/module.h>
  14. #include <linux/of.h>
  15. #include <linux/platform_device.h>
  16. #include <linux/serial.h>
  17. #include <linux/serial_core.h>
  18. #include <linux/tty.h>
  19. #include <linux/tty_flip.h>
  20. #define RDA_UART_PORT_NUM 3
  21. #define RDA_UART_DEV_NAME "ttyRDA"
  22. #define RDA_UART_CTRL 0x00
  23. #define RDA_UART_STATUS 0x04
  24. #define RDA_UART_RXTX_BUFFER 0x08
  25. #define RDA_UART_IRQ_MASK 0x0c
  26. #define RDA_UART_IRQ_CAUSE 0x10
  27. #define RDA_UART_IRQ_TRIGGERS 0x14
  28. #define RDA_UART_CMD_SET 0x18
  29. #define RDA_UART_CMD_CLR 0x1c
  30. /* UART_CTRL Bits */
  31. #define RDA_UART_ENABLE BIT(0)
  32. #define RDA_UART_DBITS_8 BIT(1)
  33. #define RDA_UART_TX_SBITS_2 BIT(2)
  34. #define RDA_UART_PARITY_EN BIT(3)
  35. #define RDA_UART_PARITY(x) (((x) & 0x3) << 4)
  36. #define RDA_UART_PARITY_ODD RDA_UART_PARITY(0)
  37. #define RDA_UART_PARITY_EVEN RDA_UART_PARITY(1)
  38. #define RDA_UART_PARITY_SPACE RDA_UART_PARITY(2)
  39. #define RDA_UART_PARITY_MARK RDA_UART_PARITY(3)
  40. #define RDA_UART_DIV_MODE BIT(20)
  41. #define RDA_UART_IRDA_EN BIT(21)
  42. #define RDA_UART_DMA_EN BIT(22)
  43. #define RDA_UART_FLOW_CNT_EN BIT(23)
  44. #define RDA_UART_LOOP_BACK_EN BIT(24)
  45. #define RDA_UART_RX_LOCK_ERR BIT(25)
  46. #define RDA_UART_RX_BREAK_LEN(x) (((x) & 0xf) << 28)
  47. /* UART_STATUS Bits */
  48. #define RDA_UART_RX_FIFO(x) (((x) & 0x7f) << 0)
  49. #define RDA_UART_RX_FIFO_MASK (0x7f << 0)
  50. #define RDA_UART_TX_FIFO(x) (((x) & 0x1f) << 8)
  51. #define RDA_UART_TX_FIFO_MASK (0x1f << 8)
  52. #define RDA_UART_TX_ACTIVE BIT(14)
  53. #define RDA_UART_RX_ACTIVE BIT(15)
  54. #define RDA_UART_RX_OVERFLOW_ERR BIT(16)
  55. #define RDA_UART_TX_OVERFLOW_ERR BIT(17)
  56. #define RDA_UART_RX_PARITY_ERR BIT(18)
  57. #define RDA_UART_RX_FRAMING_ERR BIT(19)
  58. #define RDA_UART_RX_BREAK_INT BIT(20)
  59. #define RDA_UART_DCTS BIT(24)
  60. #define RDA_UART_CTS BIT(25)
  61. #define RDA_UART_DTR BIT(28)
  62. #define RDA_UART_CLK_ENABLED BIT(31)
  63. /* UART_RXTX_BUFFER Bits */
  64. #define RDA_UART_RX_DATA(x) (((x) & 0xff) << 0)
  65. #define RDA_UART_TX_DATA(x) (((x) & 0xff) << 0)
  66. /* UART_IRQ_MASK Bits */
  67. #define RDA_UART_TX_MODEM_STATUS BIT(0)
  68. #define RDA_UART_RX_DATA_AVAILABLE BIT(1)
  69. #define RDA_UART_TX_DATA_NEEDED BIT(2)
  70. #define RDA_UART_RX_TIMEOUT BIT(3)
  71. #define RDA_UART_RX_LINE_ERR BIT(4)
  72. #define RDA_UART_TX_DMA_DONE BIT(5)
  73. #define RDA_UART_RX_DMA_DONE BIT(6)
  74. #define RDA_UART_RX_DMA_TIMEOUT BIT(7)
  75. #define RDA_UART_DTR_RISE BIT(8)
  76. #define RDA_UART_DTR_FALL BIT(9)
  77. /* UART_IRQ_CAUSE Bits */
  78. #define RDA_UART_TX_MODEM_STATUS_U BIT(16)
  79. #define RDA_UART_RX_DATA_AVAILABLE_U BIT(17)
  80. #define RDA_UART_TX_DATA_NEEDED_U BIT(18)
  81. #define RDA_UART_RX_TIMEOUT_U BIT(19)
  82. #define RDA_UART_RX_LINE_ERR_U BIT(20)
  83. #define RDA_UART_TX_DMA_DONE_U BIT(21)
  84. #define RDA_UART_RX_DMA_DONE_U BIT(22)
  85. #define RDA_UART_RX_DMA_TIMEOUT_U BIT(23)
  86. #define RDA_UART_DTR_RISE_U BIT(24)
  87. #define RDA_UART_DTR_FALL_U BIT(25)
  88. /* UART_TRIGGERS Bits */
  89. #define RDA_UART_RX_TRIGGER(x) (((x) & 0x1f) << 0)
  90. #define RDA_UART_TX_TRIGGER(x) (((x) & 0xf) << 8)
  91. #define RDA_UART_AFC_LEVEL(x) (((x) & 0x1f) << 16)
  92. /* UART_CMD_SET Bits */
  93. #define RDA_UART_RI BIT(0)
  94. #define RDA_UART_DCD BIT(1)
  95. #define RDA_UART_DSR BIT(2)
  96. #define RDA_UART_TX_BREAK_CONTROL BIT(3)
  97. #define RDA_UART_TX_FINISH_N_WAIT BIT(4)
  98. #define RDA_UART_RTS BIT(5)
  99. #define RDA_UART_RX_FIFO_RESET BIT(6)
  100. #define RDA_UART_TX_FIFO_RESET BIT(7)
  101. #define RDA_UART_TX_FIFO_SIZE 16
  102. static struct uart_driver rda_uart_driver;
  103. struct rda_uart_port {
  104. struct uart_port port;
  105. struct clk *clk;
  106. };
  107. #define to_rda_uart_port(port) container_of(port, struct rda_uart_port, port)
  108. static struct rda_uart_port *rda_uart_ports[RDA_UART_PORT_NUM];
  109. static inline void rda_uart_write(struct uart_port *port, u32 val,
  110. unsigned int off)
  111. {
  112. writel(val, port->membase + off);
  113. }
  114. static inline u32 rda_uart_read(struct uart_port *port, unsigned int off)
  115. {
  116. return readl(port->membase + off);
  117. }
  118. static unsigned int rda_uart_tx_empty(struct uart_port *port)
  119. {
  120. unsigned long flags;
  121. unsigned int ret;
  122. u32 val;
  123. uart_port_lock_irqsave(port, &flags);
  124. val = rda_uart_read(port, RDA_UART_STATUS);
  125. ret = (val & RDA_UART_TX_FIFO_MASK) ? TIOCSER_TEMT : 0;
  126. uart_port_unlock_irqrestore(port, flags);
  127. return ret;
  128. }
  129. static unsigned int rda_uart_get_mctrl(struct uart_port *port)
  130. {
  131. unsigned int mctrl = 0;
  132. u32 cmd_set, status;
  133. cmd_set = rda_uart_read(port, RDA_UART_CMD_SET);
  134. status = rda_uart_read(port, RDA_UART_STATUS);
  135. if (cmd_set & RDA_UART_RTS)
  136. mctrl |= TIOCM_RTS;
  137. if (!(status & RDA_UART_CTS))
  138. mctrl |= TIOCM_CTS;
  139. return mctrl;
  140. }
  141. static void rda_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
  142. {
  143. u32 val;
  144. if (mctrl & TIOCM_RTS) {
  145. val = rda_uart_read(port, RDA_UART_CMD_SET);
  146. rda_uart_write(port, (val | RDA_UART_RTS), RDA_UART_CMD_SET);
  147. } else {
  148. /* Clear RTS to stop to receive. */
  149. val = rda_uart_read(port, RDA_UART_CMD_CLR);
  150. rda_uart_write(port, (val | RDA_UART_RTS), RDA_UART_CMD_CLR);
  151. }
  152. val = rda_uart_read(port, RDA_UART_CTRL);
  153. if (mctrl & TIOCM_LOOP)
  154. val |= RDA_UART_LOOP_BACK_EN;
  155. else
  156. val &= ~RDA_UART_LOOP_BACK_EN;
  157. rda_uart_write(port, val, RDA_UART_CTRL);
  158. }
  159. static void rda_uart_stop_tx(struct uart_port *port)
  160. {
  161. u32 val;
  162. val = rda_uart_read(port, RDA_UART_IRQ_MASK);
  163. val &= ~RDA_UART_TX_DATA_NEEDED;
  164. rda_uart_write(port, val, RDA_UART_IRQ_MASK);
  165. val = rda_uart_read(port, RDA_UART_CMD_SET);
  166. val |= RDA_UART_TX_FIFO_RESET;
  167. rda_uart_write(port, val, RDA_UART_CMD_SET);
  168. }
  169. static void rda_uart_stop_rx(struct uart_port *port)
  170. {
  171. u32 val;
  172. val = rda_uart_read(port, RDA_UART_IRQ_MASK);
  173. val &= ~(RDA_UART_RX_DATA_AVAILABLE | RDA_UART_RX_TIMEOUT);
  174. rda_uart_write(port, val, RDA_UART_IRQ_MASK);
  175. /* Read Rx buffer before reset to avoid Rx timeout interrupt */
  176. val = rda_uart_read(port, RDA_UART_RXTX_BUFFER);
  177. val = rda_uart_read(port, RDA_UART_CMD_SET);
  178. val |= RDA_UART_RX_FIFO_RESET;
  179. rda_uart_write(port, val, RDA_UART_CMD_SET);
  180. }
  181. static void rda_uart_start_tx(struct uart_port *port)
  182. {
  183. u32 val;
  184. if (uart_tx_stopped(port)) {
  185. rda_uart_stop_tx(port);
  186. return;
  187. }
  188. val = rda_uart_read(port, RDA_UART_IRQ_MASK);
  189. val |= RDA_UART_TX_DATA_NEEDED;
  190. rda_uart_write(port, val, RDA_UART_IRQ_MASK);
  191. }
  192. static void rda_uart_change_baudrate(struct rda_uart_port *rda_port,
  193. unsigned long baud)
  194. {
  195. clk_set_rate(rda_port->clk, baud * 8);
  196. }
  197. static void rda_uart_set_termios(struct uart_port *port,
  198. struct ktermios *termios,
  199. const struct ktermios *old)
  200. {
  201. struct rda_uart_port *rda_port = to_rda_uart_port(port);
  202. unsigned long flags;
  203. unsigned int ctrl, cmd_set, cmd_clr, triggers;
  204. unsigned int baud;
  205. u32 irq_mask;
  206. uart_port_lock_irqsave(port, &flags);
  207. baud = uart_get_baud_rate(port, termios, old, 9600, port->uartclk / 4);
  208. rda_uart_change_baudrate(rda_port, baud);
  209. ctrl = rda_uart_read(port, RDA_UART_CTRL);
  210. cmd_set = rda_uart_read(port, RDA_UART_CMD_SET);
  211. cmd_clr = rda_uart_read(port, RDA_UART_CMD_CLR);
  212. switch (termios->c_cflag & CSIZE) {
  213. case CS5:
  214. case CS6:
  215. dev_warn(port->dev, "bit size not supported, using 7 bits\n");
  216. fallthrough;
  217. case CS7:
  218. ctrl &= ~RDA_UART_DBITS_8;
  219. termios->c_cflag &= ~CSIZE;
  220. termios->c_cflag |= CS7;
  221. break;
  222. default:
  223. ctrl |= RDA_UART_DBITS_8;
  224. break;
  225. }
  226. /* stop bits */
  227. if (termios->c_cflag & CSTOPB)
  228. ctrl |= RDA_UART_TX_SBITS_2;
  229. else
  230. ctrl &= ~RDA_UART_TX_SBITS_2;
  231. /* parity check */
  232. if (termios->c_cflag & PARENB) {
  233. ctrl |= RDA_UART_PARITY_EN;
  234. /* Mark or Space parity */
  235. if (termios->c_cflag & CMSPAR) {
  236. if (termios->c_cflag & PARODD)
  237. ctrl |= RDA_UART_PARITY_MARK;
  238. else
  239. ctrl |= RDA_UART_PARITY_SPACE;
  240. } else if (termios->c_cflag & PARODD) {
  241. ctrl |= RDA_UART_PARITY_ODD;
  242. } else {
  243. ctrl |= RDA_UART_PARITY_EVEN;
  244. }
  245. } else {
  246. ctrl &= ~RDA_UART_PARITY_EN;
  247. }
  248. /* Hardware handshake (RTS/CTS) */
  249. if (termios->c_cflag & CRTSCTS) {
  250. ctrl |= RDA_UART_FLOW_CNT_EN;
  251. cmd_set |= RDA_UART_RTS;
  252. } else {
  253. ctrl &= ~RDA_UART_FLOW_CNT_EN;
  254. cmd_clr |= RDA_UART_RTS;
  255. }
  256. ctrl |= RDA_UART_ENABLE;
  257. ctrl &= ~RDA_UART_DMA_EN;
  258. triggers = (RDA_UART_AFC_LEVEL(20) | RDA_UART_RX_TRIGGER(16));
  259. irq_mask = rda_uart_read(port, RDA_UART_IRQ_MASK);
  260. rda_uart_write(port, 0, RDA_UART_IRQ_MASK);
  261. rda_uart_write(port, triggers, RDA_UART_IRQ_TRIGGERS);
  262. rda_uart_write(port, ctrl, RDA_UART_CTRL);
  263. rda_uart_write(port, cmd_set, RDA_UART_CMD_SET);
  264. rda_uart_write(port, cmd_clr, RDA_UART_CMD_CLR);
  265. rda_uart_write(port, irq_mask, RDA_UART_IRQ_MASK);
  266. /* Don't rewrite B0 */
  267. if (tty_termios_baud_rate(termios))
  268. tty_termios_encode_baud_rate(termios, baud, baud);
  269. /* update the per-port timeout */
  270. uart_update_timeout(port, termios->c_cflag, baud);
  271. uart_port_unlock_irqrestore(port, flags);
  272. }
  273. static void rda_uart_send_chars(struct uart_port *port)
  274. {
  275. struct tty_port *tport = &port->state->port;
  276. unsigned char ch;
  277. u32 val;
  278. if (uart_tx_stopped(port))
  279. return;
  280. if (port->x_char) {
  281. while (!(rda_uart_read(port, RDA_UART_STATUS) &
  282. RDA_UART_TX_FIFO_MASK))
  283. cpu_relax();
  284. rda_uart_write(port, port->x_char, RDA_UART_RXTX_BUFFER);
  285. port->icount.tx++;
  286. port->x_char = 0;
  287. }
  288. while ((rda_uart_read(port, RDA_UART_STATUS) & RDA_UART_TX_FIFO_MASK) &&
  289. uart_fifo_get(port, &ch))
  290. rda_uart_write(port, ch, RDA_UART_RXTX_BUFFER);
  291. if (kfifo_len(&tport->xmit_fifo) < WAKEUP_CHARS)
  292. uart_write_wakeup(port);
  293. if (!kfifo_is_empty(&tport->xmit_fifo)) {
  294. /* Re-enable Tx FIFO interrupt */
  295. val = rda_uart_read(port, RDA_UART_IRQ_MASK);
  296. val |= RDA_UART_TX_DATA_NEEDED;
  297. rda_uart_write(port, val, RDA_UART_IRQ_MASK);
  298. }
  299. }
  300. static void rda_uart_receive_chars(struct uart_port *port)
  301. {
  302. u32 status, val;
  303. status = rda_uart_read(port, RDA_UART_STATUS);
  304. while ((status & RDA_UART_RX_FIFO_MASK)) {
  305. char flag = TTY_NORMAL;
  306. if (status & RDA_UART_RX_PARITY_ERR) {
  307. port->icount.parity++;
  308. flag = TTY_PARITY;
  309. }
  310. if (status & RDA_UART_RX_FRAMING_ERR) {
  311. port->icount.frame++;
  312. flag = TTY_FRAME;
  313. }
  314. if (status & RDA_UART_RX_OVERFLOW_ERR) {
  315. port->icount.overrun++;
  316. flag = TTY_OVERRUN;
  317. }
  318. val = rda_uart_read(port, RDA_UART_RXTX_BUFFER);
  319. val &= 0xff;
  320. port->icount.rx++;
  321. if (!uart_prepare_sysrq_char(port, val))
  322. tty_insert_flip_char(&port->state->port, val, flag);
  323. status = rda_uart_read(port, RDA_UART_STATUS);
  324. }
  325. tty_flip_buffer_push(&port->state->port);
  326. }
  327. static irqreturn_t rda_interrupt(int irq, void *dev_id)
  328. {
  329. struct uart_port *port = dev_id;
  330. u32 val, irq_mask;
  331. uart_port_lock(port);
  332. /* Clear IRQ cause */
  333. val = rda_uart_read(port, RDA_UART_IRQ_CAUSE);
  334. rda_uart_write(port, val, RDA_UART_IRQ_CAUSE);
  335. if (val & (RDA_UART_RX_DATA_AVAILABLE | RDA_UART_RX_TIMEOUT))
  336. rda_uart_receive_chars(port);
  337. if (val & (RDA_UART_TX_DATA_NEEDED)) {
  338. irq_mask = rda_uart_read(port, RDA_UART_IRQ_MASK);
  339. irq_mask &= ~RDA_UART_TX_DATA_NEEDED;
  340. rda_uart_write(port, irq_mask, RDA_UART_IRQ_MASK);
  341. rda_uart_send_chars(port);
  342. }
  343. uart_unlock_and_check_sysrq(port);
  344. return IRQ_HANDLED;
  345. }
  346. static int rda_uart_startup(struct uart_port *port)
  347. {
  348. unsigned long flags;
  349. int ret;
  350. u32 val;
  351. uart_port_lock_irqsave(port, &flags);
  352. rda_uart_write(port, 0, RDA_UART_IRQ_MASK);
  353. uart_port_unlock_irqrestore(port, flags);
  354. ret = request_irq(port->irq, rda_interrupt, IRQF_NO_SUSPEND,
  355. "rda-uart", port);
  356. if (ret)
  357. return ret;
  358. uart_port_lock_irqsave(port, &flags);
  359. val = rda_uart_read(port, RDA_UART_CTRL);
  360. val |= RDA_UART_ENABLE;
  361. rda_uart_write(port, val, RDA_UART_CTRL);
  362. /* enable rx interrupt */
  363. val = rda_uart_read(port, RDA_UART_IRQ_MASK);
  364. val |= (RDA_UART_RX_DATA_AVAILABLE | RDA_UART_RX_TIMEOUT);
  365. rda_uart_write(port, val, RDA_UART_IRQ_MASK);
  366. uart_port_unlock_irqrestore(port, flags);
  367. return 0;
  368. }
  369. static void rda_uart_shutdown(struct uart_port *port)
  370. {
  371. unsigned long flags;
  372. u32 val;
  373. uart_port_lock_irqsave(port, &flags);
  374. rda_uart_stop_tx(port);
  375. rda_uart_stop_rx(port);
  376. val = rda_uart_read(port, RDA_UART_CTRL);
  377. val &= ~RDA_UART_ENABLE;
  378. rda_uart_write(port, val, RDA_UART_CTRL);
  379. uart_port_unlock_irqrestore(port, flags);
  380. }
  381. static const char *rda_uart_type(struct uart_port *port)
  382. {
  383. return (port->type == PORT_RDA) ? "rda-uart" : NULL;
  384. }
  385. static int rda_uart_request_port(struct uart_port *port)
  386. {
  387. struct platform_device *pdev = to_platform_device(port->dev);
  388. struct resource *res;
  389. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  390. if (!res)
  391. return -ENXIO;
  392. if (!devm_request_mem_region(port->dev, port->mapbase,
  393. resource_size(res), dev_name(port->dev)))
  394. return -EBUSY;
  395. if (port->flags & UPF_IOREMAP) {
  396. port->membase = devm_ioremap(port->dev, port->mapbase,
  397. resource_size(res));
  398. if (!port->membase)
  399. return -EBUSY;
  400. }
  401. return 0;
  402. }
  403. static void rda_uart_config_port(struct uart_port *port, int flags)
  404. {
  405. unsigned long irq_flags;
  406. if (flags & UART_CONFIG_TYPE) {
  407. port->type = PORT_RDA;
  408. rda_uart_request_port(port);
  409. }
  410. uart_port_lock_irqsave(port, &irq_flags);
  411. /* Clear mask, so no surprise interrupts. */
  412. rda_uart_write(port, 0, RDA_UART_IRQ_MASK);
  413. /* Clear status register */
  414. rda_uart_write(port, 0, RDA_UART_STATUS);
  415. uart_port_unlock_irqrestore(port, irq_flags);
  416. }
  417. static void rda_uart_release_port(struct uart_port *port)
  418. {
  419. struct platform_device *pdev = to_platform_device(port->dev);
  420. struct resource *res;
  421. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  422. if (!res)
  423. return;
  424. if (port->flags & UPF_IOREMAP) {
  425. devm_release_mem_region(port->dev, port->mapbase,
  426. resource_size(res));
  427. devm_iounmap(port->dev, port->membase);
  428. port->membase = NULL;
  429. }
  430. }
  431. static int rda_uart_verify_port(struct uart_port *port,
  432. struct serial_struct *ser)
  433. {
  434. if (port->type != PORT_RDA)
  435. return -EINVAL;
  436. if (port->irq != ser->irq)
  437. return -EINVAL;
  438. return 0;
  439. }
  440. static const struct uart_ops rda_uart_ops = {
  441. .tx_empty = rda_uart_tx_empty,
  442. .get_mctrl = rda_uart_get_mctrl,
  443. .set_mctrl = rda_uart_set_mctrl,
  444. .start_tx = rda_uart_start_tx,
  445. .stop_tx = rda_uart_stop_tx,
  446. .stop_rx = rda_uart_stop_rx,
  447. .startup = rda_uart_startup,
  448. .shutdown = rda_uart_shutdown,
  449. .set_termios = rda_uart_set_termios,
  450. .type = rda_uart_type,
  451. .request_port = rda_uart_request_port,
  452. .release_port = rda_uart_release_port,
  453. .config_port = rda_uart_config_port,
  454. .verify_port = rda_uart_verify_port,
  455. };
  456. #ifdef CONFIG_SERIAL_RDA_CONSOLE
  457. static void rda_console_putchar(struct uart_port *port, unsigned char ch)
  458. {
  459. if (!port->membase)
  460. return;
  461. while (!(rda_uart_read(port, RDA_UART_STATUS) & RDA_UART_TX_FIFO_MASK))
  462. cpu_relax();
  463. rda_uart_write(port, ch, RDA_UART_RXTX_BUFFER);
  464. }
  465. static void rda_uart_port_write(struct uart_port *port, const char *s,
  466. u_int count)
  467. {
  468. u32 old_irq_mask;
  469. unsigned long flags;
  470. int locked = 1;
  471. if (oops_in_progress)
  472. locked = uart_port_trylock_irqsave(port, &flags);
  473. else
  474. uart_port_lock_irqsave(port, &flags);
  475. old_irq_mask = rda_uart_read(port, RDA_UART_IRQ_MASK);
  476. rda_uart_write(port, 0, RDA_UART_IRQ_MASK);
  477. uart_console_write(port, s, count, rda_console_putchar);
  478. /* wait until all contents have been sent out */
  479. while (!(rda_uart_read(port, RDA_UART_STATUS) & RDA_UART_TX_FIFO_MASK))
  480. cpu_relax();
  481. rda_uart_write(port, old_irq_mask, RDA_UART_IRQ_MASK);
  482. if (locked)
  483. uart_port_unlock_irqrestore(port, flags);
  484. }
  485. static void rda_uart_console_write(struct console *co, const char *s,
  486. u_int count)
  487. {
  488. struct rda_uart_port *rda_port;
  489. rda_port = rda_uart_ports[co->index];
  490. if (!rda_port)
  491. return;
  492. rda_uart_port_write(&rda_port->port, s, count);
  493. }
  494. static int rda_uart_console_setup(struct console *co, char *options)
  495. {
  496. struct rda_uart_port *rda_port;
  497. int baud = 921600;
  498. int bits = 8;
  499. int parity = 'n';
  500. int flow = 'n';
  501. if (co->index < 0 || co->index >= RDA_UART_PORT_NUM)
  502. return -EINVAL;
  503. rda_port = rda_uart_ports[co->index];
  504. if (!rda_port || !rda_port->port.membase)
  505. return -ENODEV;
  506. if (options)
  507. uart_parse_options(options, &baud, &parity, &bits, &flow);
  508. return uart_set_options(&rda_port->port, co, baud, parity, bits, flow);
  509. }
  510. static struct console rda_uart_console = {
  511. .name = RDA_UART_DEV_NAME,
  512. .write = rda_uart_console_write,
  513. .device = uart_console_device,
  514. .setup = rda_uart_console_setup,
  515. .flags = CON_PRINTBUFFER,
  516. .index = -1,
  517. .data = &rda_uart_driver,
  518. };
  519. static int __init rda_uart_console_init(void)
  520. {
  521. register_console(&rda_uart_console);
  522. return 0;
  523. }
  524. console_initcall(rda_uart_console_init);
  525. static void rda_uart_early_console_write(struct console *co,
  526. const char *s,
  527. u_int count)
  528. {
  529. struct earlycon_device *dev = co->data;
  530. rda_uart_port_write(&dev->port, s, count);
  531. }
  532. static int __init
  533. rda_uart_early_console_setup(struct earlycon_device *device, const char *opt)
  534. {
  535. if (!device->port.membase)
  536. return -ENODEV;
  537. device->con->write = rda_uart_early_console_write;
  538. return 0;
  539. }
  540. OF_EARLYCON_DECLARE(rda, "rda,8810pl-uart",
  541. rda_uart_early_console_setup);
  542. #define RDA_UART_CONSOLE (&rda_uart_console)
  543. #else
  544. #define RDA_UART_CONSOLE NULL
  545. #endif /* CONFIG_SERIAL_RDA_CONSOLE */
  546. static struct uart_driver rda_uart_driver = {
  547. .owner = THIS_MODULE,
  548. .driver_name = "rda-uart",
  549. .dev_name = RDA_UART_DEV_NAME,
  550. .nr = RDA_UART_PORT_NUM,
  551. .cons = RDA_UART_CONSOLE,
  552. };
  553. static const struct of_device_id rda_uart_dt_matches[] = {
  554. { .compatible = "rda,8810pl-uart" },
  555. { }
  556. };
  557. MODULE_DEVICE_TABLE(of, rda_uart_dt_matches);
  558. static int rda_uart_probe(struct platform_device *pdev)
  559. {
  560. struct resource *res_mem;
  561. struct rda_uart_port *rda_port;
  562. int ret, irq;
  563. if (pdev->dev.of_node)
  564. pdev->id = of_alias_get_id(pdev->dev.of_node, "serial");
  565. if (pdev->id < 0 || pdev->id >= RDA_UART_PORT_NUM) {
  566. dev_err(&pdev->dev, "id %d out of range\n", pdev->id);
  567. return -EINVAL;
  568. }
  569. res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  570. if (!res_mem) {
  571. dev_err(&pdev->dev, "could not get mem\n");
  572. return -ENODEV;
  573. }
  574. irq = platform_get_irq(pdev, 0);
  575. if (irq < 0)
  576. return irq;
  577. if (rda_uart_ports[pdev->id]) {
  578. dev_err(&pdev->dev, "port %d already allocated\n", pdev->id);
  579. return -EBUSY;
  580. }
  581. rda_port = devm_kzalloc(&pdev->dev, sizeof(*rda_port), GFP_KERNEL);
  582. if (!rda_port)
  583. return -ENOMEM;
  584. rda_port->clk = devm_clk_get(&pdev->dev, NULL);
  585. if (IS_ERR(rda_port->clk)) {
  586. dev_err(&pdev->dev, "could not get clk\n");
  587. return PTR_ERR(rda_port->clk);
  588. }
  589. rda_port->port.dev = &pdev->dev;
  590. rda_port->port.regshift = 0;
  591. rda_port->port.line = pdev->id;
  592. rda_port->port.type = PORT_RDA;
  593. rda_port->port.iotype = UPIO_MEM;
  594. rda_port->port.mapbase = res_mem->start;
  595. rda_port->port.irq = irq;
  596. rda_port->port.uartclk = clk_get_rate(rda_port->clk);
  597. if (rda_port->port.uartclk == 0) {
  598. dev_err(&pdev->dev, "clock rate is zero\n");
  599. return -EINVAL;
  600. }
  601. rda_port->port.flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP |
  602. UPF_LOW_LATENCY;
  603. rda_port->port.x_char = 0;
  604. rda_port->port.fifosize = RDA_UART_TX_FIFO_SIZE;
  605. rda_port->port.ops = &rda_uart_ops;
  606. rda_uart_ports[pdev->id] = rda_port;
  607. platform_set_drvdata(pdev, rda_port);
  608. ret = uart_add_one_port(&rda_uart_driver, &rda_port->port);
  609. if (ret)
  610. rda_uart_ports[pdev->id] = NULL;
  611. return ret;
  612. }
  613. static void rda_uart_remove(struct platform_device *pdev)
  614. {
  615. struct rda_uart_port *rda_port = platform_get_drvdata(pdev);
  616. uart_remove_one_port(&rda_uart_driver, &rda_port->port);
  617. rda_uart_ports[pdev->id] = NULL;
  618. }
  619. static struct platform_driver rda_uart_platform_driver = {
  620. .probe = rda_uart_probe,
  621. .remove = rda_uart_remove,
  622. .driver = {
  623. .name = "rda-uart",
  624. .of_match_table = rda_uart_dt_matches,
  625. },
  626. };
  627. static int __init rda_uart_init(void)
  628. {
  629. int ret;
  630. ret = uart_register_driver(&rda_uart_driver);
  631. if (ret)
  632. return ret;
  633. ret = platform_driver_register(&rda_uart_platform_driver);
  634. if (ret)
  635. uart_unregister_driver(&rda_uart_driver);
  636. return ret;
  637. }
  638. static void __exit rda_uart_exit(void)
  639. {
  640. platform_driver_unregister(&rda_uart_platform_driver);
  641. uart_unregister_driver(&rda_uart_driver);
  642. }
  643. module_init(rda_uart_init);
  644. module_exit(rda_uart_exit);
  645. MODULE_AUTHOR("Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>");
  646. MODULE_DESCRIPTION("RDA8810PL serial device driver");
  647. MODULE_LICENSE("GPL");