msm_serial.c 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218
  1. /*
  2. * drivers/serial/msm_serial.c - driver for msm7k serial device and console
  3. *
  4. * Copyright (C) 2007 Google, Inc.
  5. * Copyright (c) 2009-2013, The Linux Foundation. All rights reserved.
  6. * Author: Robert Love <rlove@google.com>
  7. *
  8. * This software is licensed under the terms of the GNU General Public
  9. * License version 2, as published by the Free Software Foundation, and
  10. * may be copied, distributed, and modified under those terms.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. */
  17. #if defined(CONFIG_SERIAL_MSM_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
  18. # define SUPPORT_SYSRQ
  19. #endif
  20. #include <linux/hrtimer.h>
  21. #include <linux/module.h>
  22. #include <linux/io.h>
  23. #include <linux/ioport.h>
  24. #include <linux/irq.h>
  25. #include <linux/init.h>
  26. #include <linux/delay.h>
  27. #include <linux/console.h>
  28. #include <linux/tty.h>
  29. #include <linux/tty_flip.h>
  30. #include <linux/serial_core.h>
  31. #include <linux/serial.h>
  32. #include <linux/nmi.h>
  33. #include <linux/clk.h>
  34. #include <linux/platform_device.h>
  35. #include <linux/pm_runtime.h>
  36. #include <mach/msm_serial_pdata.h>
  37. #include "msm_serial.h"
  38. #ifdef CONFIG_SERIAL_MSM_CLOCK_CONTROL
  39. enum msm_clk_states_e {
  40. MSM_CLK_PORT_OFF, /* uart port not in use */
  41. MSM_CLK_OFF, /* clock enabled */
  42. MSM_CLK_REQUEST_OFF, /* disable after TX flushed */
  43. MSM_CLK_ON, /* clock disabled */
  44. };
  45. #endif
  46. #ifdef CONFIG_SERIAL_MSM_RX_WAKEUP
  47. /* optional low power wakeup, typically on a GPIO RX irq */
  48. struct msm_wakeup {
  49. int irq; /* < 0 indicates low power wakeup disabled */
  50. unsigned char ignore; /* bool */
  51. /* bool: inject char into rx tty on wakeup */
  52. unsigned char inject_rx;
  53. char rx_to_inject;
  54. };
  55. #endif
  56. struct msm_port {
  57. struct uart_port uart;
  58. char name[16];
  59. struct clk *clk;
  60. unsigned int imr;
  61. #ifdef CONFIG_SERIAL_MSM_CLOCK_CONTROL
  62. enum msm_clk_states_e clk_state;
  63. struct hrtimer clk_off_timer;
  64. ktime_t clk_off_delay;
  65. #endif
  66. #ifdef CONFIG_SERIAL_MSM_RX_WAKEUP
  67. struct msm_wakeup wakeup;
  68. #endif
  69. int uim;
  70. };
  71. #define UART_TO_MSM(uart_port) ((struct msm_port *) uart_port)
  72. #define is_console(port) ((port)->cons && \
  73. (port)->cons->index == (port)->line)
  74. static inline void msm_write(struct uart_port *port, unsigned int val,
  75. unsigned int off)
  76. {
  77. __raw_writel(val, port->membase + off);
  78. }
  79. static inline unsigned int msm_read(struct uart_port *port, unsigned int off)
  80. {
  81. return __raw_readl(port->membase + off);
  82. }
  83. #ifdef CONFIG_SERIAL_MSM_RX_WAKEUP
  84. static inline unsigned int use_low_power_wakeup(struct msm_port *msm_port)
  85. {
  86. return (msm_port->wakeup.irq >= 0);
  87. }
  88. #endif
  89. static void msm_stop_tx(struct uart_port *port)
  90. {
  91. struct msm_port *msm_port = UART_TO_MSM(port);
  92. msm_port->imr &= ~UART_IMR_TXLEV;
  93. msm_write(port, msm_port->imr, UART_IMR);
  94. }
  95. static void msm_start_tx(struct uart_port *port)
  96. {
  97. struct msm_port *msm_port = UART_TO_MSM(port);
  98. msm_port->imr |= UART_IMR_TXLEV;
  99. msm_write(port, msm_port->imr, UART_IMR);
  100. }
  101. static void msm_stop_rx(struct uart_port *port)
  102. {
  103. struct msm_port *msm_port = UART_TO_MSM(port);
  104. msm_port->imr &= ~(UART_IMR_RXLEV | UART_IMR_RXSTALE);
  105. msm_write(port, msm_port->imr, UART_IMR);
  106. }
  107. static void msm_enable_ms(struct uart_port *port)
  108. {
  109. struct msm_port *msm_port = UART_TO_MSM(port);
  110. msm_port->imr |= UART_IMR_DELTA_CTS;
  111. msm_write(port, msm_port->imr, UART_IMR);
  112. }
  113. #ifdef CONFIG_SERIAL_MSM_CLOCK_CONTROL
  114. /* turn clock off if TX buffer is empty, otherwise reschedule */
  115. static enum hrtimer_restart msm_serial_clock_off(struct hrtimer *timer) {
  116. struct msm_port *msm_port = container_of(timer, struct msm_port,
  117. clk_off_timer);
  118. struct uart_port *port = &msm_port->uart;
  119. struct circ_buf *xmit = &port->state->xmit;
  120. unsigned long flags;
  121. int ret = HRTIMER_NORESTART;
  122. spin_lock_irqsave(&port->lock, flags);
  123. if (msm_port->clk_state == MSM_CLK_REQUEST_OFF) {
  124. if (uart_circ_empty(xmit)) {
  125. struct msm_port *msm_port = UART_TO_MSM(port);
  126. clk_disable(msm_port->clk);
  127. msm_port->clk_state = MSM_CLK_OFF;
  128. #ifdef CONFIG_SERIAL_MSM_RX_WAKEUP
  129. if (use_low_power_wakeup(msm_port)) {
  130. msm_port->wakeup.ignore = 1;
  131. enable_irq(msm_port->wakeup.irq);
  132. }
  133. #endif
  134. } else {
  135. hrtimer_forward_now(timer, msm_port->clk_off_delay);
  136. ret = HRTIMER_RESTART;
  137. }
  138. }
  139. spin_unlock_irqrestore(&port->lock, flags);
  140. return HRTIMER_NORESTART;
  141. }
  142. /* request to turn off uart clock once pending TX is flushed */
  143. void msm_serial_clock_request_off(struct uart_port *port) {
  144. unsigned long flags;
  145. struct msm_port *msm_port = UART_TO_MSM(port);
  146. spin_lock_irqsave(&port->lock, flags);
  147. if (msm_port->clk_state == MSM_CLK_ON) {
  148. msm_port->clk_state = MSM_CLK_REQUEST_OFF;
  149. /* turn off TX later. unfortunately not all msm uart's have a
  150. * TXDONE available, and TXLEV does not wait until completely
  151. * flushed, so a timer is our only option
  152. */
  153. hrtimer_start(&msm_port->clk_off_timer,
  154. msm_port->clk_off_delay, HRTIMER_MODE_REL);
  155. }
  156. spin_unlock_irqrestore(&port->lock, flags);
  157. }
  158. /* request to immediately turn on uart clock.
  159. * ignored if there is a pending off request, unless force = 1.
  160. */
  161. void msm_serial_clock_on(struct uart_port *port, int force) {
  162. unsigned long flags;
  163. struct msm_port *msm_port = UART_TO_MSM(port);
  164. spin_lock_irqsave(&port->lock, flags);
  165. switch (msm_port->clk_state) {
  166. case MSM_CLK_OFF:
  167. clk_enable(msm_port->clk);
  168. #ifdef CONFIG_SERIAL_MSM_RX_WAKEUP
  169. if (use_low_power_wakeup(msm_port))
  170. disable_irq(msm_port->wakeup.irq);
  171. #endif
  172. force = 1;
  173. case MSM_CLK_REQUEST_OFF:
  174. if (force) {
  175. hrtimer_try_to_cancel(&msm_port->clk_off_timer);
  176. msm_port->clk_state = MSM_CLK_ON;
  177. }
  178. break;
  179. case MSM_CLK_ON: break;
  180. case MSM_CLK_PORT_OFF: break;
  181. }
  182. spin_unlock_irqrestore(&port->lock, flags);
  183. }
  184. #endif
  185. #ifdef CONFIG_SERIAL_MSM_RX_WAKEUP
  186. static irqreturn_t msm_rx_irq(int irq, void *dev_id)
  187. {
  188. unsigned long flags;
  189. struct uart_port *port = dev_id;
  190. struct msm_port *msm_port = UART_TO_MSM(port);
  191. int inject_wakeup = 0;
  192. spin_lock_irqsave(&port->lock, flags);
  193. if (msm_port->clk_state == MSM_CLK_OFF) {
  194. /* ignore the first irq - it is a pending irq that occured
  195. * before enable_irq() */
  196. if (msm_port->wakeup.ignore)
  197. msm_port->wakeup.ignore = 0;
  198. else
  199. inject_wakeup = 1;
  200. }
  201. msm_serial_clock_on(port, 0);
  202. /* we missed an rx while asleep - it must be a wakeup indicator
  203. */
  204. if (inject_wakeup) {
  205. struct tty_struct *tty = port->state->port.tty;
  206. tty_insert_flip_char(tty, WAKE_UP_IND, TTY_NORMAL);
  207. tty_flip_buffer_push(tty);
  208. }
  209. spin_unlock_irqrestore(&port->lock, flags);
  210. return IRQ_HANDLED;
  211. }
  212. #endif
  213. static void handle_rx(struct uart_port *port)
  214. {
  215. struct tty_struct *tty = port->state->port.tty;
  216. unsigned int sr;
  217. /*
  218. * Handle overrun. My understanding of the hardware is that overrun
  219. * is not tied to the RX buffer, so we handle the case out of band.
  220. */
  221. if ((msm_read(port, UART_SR) & UART_SR_OVERRUN)) {
  222. port->icount.overrun++;
  223. tty_insert_flip_char(tty, 0, TTY_OVERRUN);
  224. msm_write(port, UART_CR_CMD_RESET_ERR, UART_CR);
  225. }
  226. /* and now the main RX loop */
  227. while ((sr = msm_read(port, UART_SR)) & UART_SR_RX_READY) {
  228. unsigned int c;
  229. char flag = TTY_NORMAL;
  230. c = msm_read(port, UART_RF);
  231. if (sr & UART_SR_RX_BREAK) {
  232. port->icount.brk++;
  233. if (uart_handle_break(port))
  234. continue;
  235. } else if (sr & UART_SR_PAR_FRAME_ERR) {
  236. port->icount.frame++;
  237. } else {
  238. port->icount.rx++;
  239. }
  240. /* Mask conditions we're ignorning. */
  241. sr &= port->read_status_mask;
  242. if (sr & UART_SR_RX_BREAK) {
  243. flag = TTY_BREAK;
  244. } else if (sr & UART_SR_PAR_FRAME_ERR) {
  245. flag = TTY_FRAME;
  246. }
  247. if (!uart_handle_sysrq_char(port, c))
  248. tty_insert_flip_char(tty, c, flag);
  249. }
  250. tty_flip_buffer_push(tty);
  251. }
  252. static void handle_tx(struct uart_port *port)
  253. {
  254. struct circ_buf *xmit = &port->state->xmit;
  255. struct msm_port *msm_port = UART_TO_MSM(port);
  256. int sent_tx;
  257. if (port->x_char) {
  258. msm_write(port, port->x_char, UART_TF);
  259. port->icount.tx++;
  260. port->x_char = 0;
  261. }
  262. while (msm_read(port, UART_SR) & UART_SR_TX_READY) {
  263. if (uart_circ_empty(xmit)) {
  264. /* disable tx interrupts */
  265. msm_port->imr &= ~UART_IMR_TXLEV;
  266. msm_write(port, msm_port->imr, UART_IMR);
  267. break;
  268. }
  269. msm_write(port, xmit->buf[xmit->tail], UART_TF);
  270. xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
  271. port->icount.tx++;
  272. sent_tx = 1;
  273. }
  274. #ifdef CONFIG_SERIAL_MSM_CLOCK_CONTROL
  275. if (sent_tx && msm_port->clk_state == MSM_CLK_REQUEST_OFF)
  276. /* new TX - restart the timer */
  277. if (hrtimer_try_to_cancel(&msm_port->clk_off_timer) == 1)
  278. hrtimer_start(&msm_port->clk_off_timer,
  279. msm_port->clk_off_delay, HRTIMER_MODE_REL);
  280. #endif
  281. if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
  282. uart_write_wakeup(port);
  283. }
  284. static void handle_delta_cts(struct uart_port *port)
  285. {
  286. msm_write(port, UART_CR_CMD_RESET_CTS, UART_CR);
  287. port->icount.cts++;
  288. wake_up_interruptible(&port->state->port.delta_msr_wait);
  289. }
  290. static irqreturn_t msm_irq(int irq, void *dev_id)
  291. {
  292. unsigned long flags;
  293. struct uart_port *port = dev_id;
  294. struct msm_port *msm_port = UART_TO_MSM(port);
  295. unsigned int misr;
  296. spin_lock_irqsave(&port->lock, flags);
  297. misr = msm_read(port, UART_MISR);
  298. msm_write(port, 0, UART_IMR); /* disable interrupt */
  299. if (misr & (UART_IMR_RXLEV | UART_IMR_RXSTALE))
  300. handle_rx(port);
  301. if (misr & UART_IMR_TXLEV)
  302. handle_tx(port);
  303. if (misr & UART_IMR_DELTA_CTS)
  304. handle_delta_cts(port);
  305. msm_write(port, msm_port->imr, UART_IMR); /* restore interrupt */
  306. spin_unlock_irqrestore(&port->lock, flags);
  307. return IRQ_HANDLED;
  308. }
  309. static unsigned int msm_tx_empty(struct uart_port *port)
  310. {
  311. unsigned int ret;
  312. ret = (msm_read(port, UART_SR) & UART_SR_TX_EMPTY) ? TIOCSER_TEMT : 0;
  313. return ret;
  314. }
  315. static unsigned int msm_get_mctrl(struct uart_port *port)
  316. {
  317. return TIOCM_CAR | TIOCM_CTS | TIOCM_DSR | TIOCM_RTS;
  318. }
  319. static void msm_set_mctrl(struct uart_port *port, unsigned int mctrl)
  320. {
  321. unsigned int mr;
  322. mr = msm_read(port, UART_MR1);
  323. if (!(mctrl & TIOCM_RTS)) {
  324. mr &= ~UART_MR1_RX_RDY_CTL;
  325. msm_write(port, mr, UART_MR1);
  326. msm_write(port, UART_CR_CMD_RESET_RFR, UART_CR);
  327. } else {
  328. mr |= UART_MR1_RX_RDY_CTL;
  329. msm_write(port, mr, UART_MR1);
  330. }
  331. }
  332. static void msm_break_ctl(struct uart_port *port, int break_ctl)
  333. {
  334. if (break_ctl)
  335. msm_write(port, UART_CR_CMD_START_BREAK, UART_CR);
  336. else
  337. msm_write(port, UART_CR_CMD_STOP_BREAK, UART_CR);
  338. }
  339. static void msm_set_baud_rate(struct uart_port *port, unsigned int baud)
  340. {
  341. unsigned int baud_code, rxstale, watermark;
  342. switch (baud) {
  343. case 300:
  344. baud_code = UART_CSR_300;
  345. rxstale = 1;
  346. break;
  347. case 600:
  348. baud_code = UART_CSR_600;
  349. rxstale = 1;
  350. break;
  351. case 1200:
  352. baud_code = UART_CSR_1200;
  353. rxstale = 1;
  354. break;
  355. case 2400:
  356. baud_code = UART_CSR_2400;
  357. rxstale = 1;
  358. break;
  359. case 4800:
  360. baud_code = UART_CSR_4800;
  361. rxstale = 1;
  362. break;
  363. case 9600:
  364. baud_code = UART_CSR_9600;
  365. rxstale = 2;
  366. break;
  367. case 14400:
  368. baud_code = UART_CSR_14400;
  369. rxstale = 3;
  370. break;
  371. case 19200:
  372. baud_code = UART_CSR_19200;
  373. rxstale = 4;
  374. break;
  375. case 28800:
  376. baud_code = UART_CSR_28800;
  377. rxstale = 6;
  378. break;
  379. case 38400:
  380. baud_code = UART_CSR_38400;
  381. rxstale = 8;
  382. break;
  383. case 57600:
  384. baud_code = UART_CSR_57600;
  385. rxstale = 16;
  386. break;
  387. case 115200:
  388. default:
  389. baud_code = UART_CSR_115200;
  390. rxstale = 31;
  391. break;
  392. }
  393. msm_write(port, baud_code, UART_CSR);
  394. /* RX stale watermark */
  395. watermark = UART_IPR_STALE_LSB & rxstale;
  396. watermark |= UART_IPR_RXSTALE_LAST;
  397. watermark |= UART_IPR_STALE_TIMEOUT_MSB & (rxstale << 2);
  398. msm_write(port, watermark, UART_IPR);
  399. /* set RX watermark */
  400. watermark = (port->fifosize * 3) / 4;
  401. msm_write(port, watermark, UART_RFWR);
  402. /* set TX watermark */
  403. msm_write(port, 10, UART_TFWR);
  404. }
  405. static void msm_reset(struct uart_port *port)
  406. {
  407. /* reset everything */
  408. msm_write(port, UART_CR_CMD_RESET_RX, UART_CR);
  409. msm_write(port, UART_CR_CMD_RESET_TX, UART_CR);
  410. msm_write(port, UART_CR_CMD_RESET_ERR, UART_CR);
  411. msm_write(port, UART_CR_CMD_RESET_BREAK_INT, UART_CR);
  412. msm_write(port, UART_CR_CMD_RESET_CTS, UART_CR);
  413. msm_write(port, UART_CR_CMD_SET_RFR, UART_CR);
  414. }
  415. static void msm_init_clock(struct uart_port *port)
  416. {
  417. int ret;
  418. struct msm_port *msm_port = UART_TO_MSM(port);
  419. ret = clk_prepare_enable(msm_port->clk);
  420. if (ret) {
  421. pr_err("%s(): Can't enable uartclk. ret:%d\n", __func__, ret);
  422. return;
  423. }
  424. #ifdef CONFIG_SERIAL_MSM_CLOCK_CONTROL
  425. msm_port->clk_state = MSM_CLK_ON;
  426. #endif
  427. if (msm_port->uim) {
  428. msm_write(port,
  429. UART_SIM_CFG_STOP_BIT_LEN_N(2) |
  430. UART_SIM_CFG_SIM_CLK_ON |
  431. UART_SIM_CFG_SIM_CLK_STOP_HIGH |
  432. UART_SIM_CFG_MASK_RX |
  433. UART_SIM_CFG_SIM_SEL,
  434. UART_SIM_CFG);
  435. /* (TCXO * 16) / (5 * 372) = TCXO * 16 / 1860 */
  436. msm_write(port, 0x08, UART_MREG);
  437. msm_write(port, 0x19, UART_NREG);
  438. msm_write(port, 0xe8, UART_DREG);
  439. msm_write(port, 0x0e, UART_MNDREG);
  440. } else if (port->uartclk == 19200000) {
  441. /* clock is TCXO (19.2MHz) */
  442. msm_write(port, 0x06, UART_MREG);
  443. msm_write(port, 0xF1, UART_NREG);
  444. msm_write(port, 0x0F, UART_DREG);
  445. msm_write(port, 0x1A, UART_MNDREG);
  446. } else {
  447. /* clock must be TCXO/4 */
  448. msm_write(port, 0x18, UART_MREG);
  449. msm_write(port, 0xF6, UART_NREG);
  450. msm_write(port, 0x0F, UART_DREG);
  451. msm_write(port, 0x0A, UART_MNDREG);
  452. }
  453. }
  454. static void msm_deinit_clock(struct uart_port *port)
  455. {
  456. struct msm_port *msm_port = UART_TO_MSM(port);
  457. #ifdef CONFIG_SERIAL_MSM_CLOCK_CONTROL
  458. if (msm_port->clk_state != MSM_CLK_OFF)
  459. clk_disable(msm_port->clk);
  460. msm_port->clk_state = MSM_CLK_PORT_OFF;
  461. #else
  462. clk_disable_unprepare(msm_port->clk);
  463. #endif
  464. }
  465. static int msm_startup(struct uart_port *port)
  466. {
  467. struct msm_port *msm_port = UART_TO_MSM(port);
  468. unsigned int data, rfr_level;
  469. int ret;
  470. snprintf(msm_port->name, sizeof(msm_port->name),
  471. "msm_serial%d", port->line);
  472. ret = request_irq(port->irq, msm_irq, IRQF_TRIGGER_HIGH,
  473. msm_port->name, port);
  474. if (unlikely(ret))
  475. return ret;
  476. #ifndef CONFIG_PM_RUNTIME
  477. msm_init_clock(port);
  478. #endif
  479. pm_runtime_get_sync(port->dev);
  480. if (likely(port->fifosize > 12))
  481. rfr_level = port->fifosize - 12;
  482. else
  483. rfr_level = port->fifosize;
  484. /* set automatic RFR level */
  485. data = msm_read(port, UART_MR1);
  486. data &= ~UART_MR1_AUTO_RFR_LEVEL1;
  487. data &= ~UART_MR1_AUTO_RFR_LEVEL0;
  488. data |= UART_MR1_AUTO_RFR_LEVEL1 & (rfr_level << 2);
  489. data |= UART_MR1_AUTO_RFR_LEVEL0 & rfr_level;
  490. msm_write(port, data, UART_MR1);
  491. /* make sure that RXSTALE count is non-zero */
  492. data = msm_read(port, UART_IPR);
  493. if (unlikely(!data)) {
  494. data |= UART_IPR_RXSTALE_LAST;
  495. data |= UART_IPR_STALE_LSB;
  496. msm_write(port, data, UART_IPR);
  497. }
  498. msm_reset(port);
  499. msm_write(port, 0x05, UART_CR); /* enable TX & RX */
  500. /* turn on RX and CTS interrupts */
  501. msm_port->imr = UART_IMR_RXLEV | UART_IMR_RXSTALE |
  502. UART_IMR_CURRENT_CTS;
  503. msm_write(port, msm_port->imr, UART_IMR);
  504. #ifdef CONFIG_SERIAL_MSM_RX_WAKEUP
  505. if (use_low_power_wakeup(msm_port)) {
  506. ret = irq_set_irq_wake(msm_port->wakeup.irq, 1);
  507. if (unlikely(ret))
  508. return ret;
  509. ret = request_irq(msm_port->wakeup.irq, msm_rx_irq,
  510. IRQF_TRIGGER_FALLING,
  511. "msm_serial_wakeup", msm_port);
  512. if (unlikely(ret))
  513. return ret;
  514. disable_irq(msm_port->wakeup.irq);
  515. }
  516. #endif
  517. return 0;
  518. }
  519. static void msm_shutdown(struct uart_port *port)
  520. {
  521. struct msm_port *msm_port = UART_TO_MSM(port);
  522. if (msm_port->uim)
  523. msm_write(port,
  524. UART_SIM_CFG_SIM_CLK_STOP_HIGH,
  525. UART_SIM_CFG);
  526. msm_port->imr = 0;
  527. msm_write(port, 0, UART_IMR); /* disable interrupts */
  528. free_irq(port->irq, port);
  529. #ifdef CONFIG_SERIAL_MSM_RX_WAKEUP
  530. if (use_low_power_wakeup(msm_port)) {
  531. irq_set_irq_wake(msm_port->wakeup.irq, 0);
  532. free_irq(msm_port->wakeup.irq, msm_port);
  533. }
  534. #endif
  535. #ifndef CONFIG_PM_RUNTIME
  536. msm_deinit_clock(port);
  537. #endif
  538. pm_runtime_put_sync(port->dev);
  539. }
  540. static void msm_set_termios(struct uart_port *port, struct ktermios *termios,
  541. struct ktermios *old)
  542. {
  543. unsigned long flags;
  544. unsigned int baud, mr;
  545. if (!termios->c_cflag)
  546. return;
  547. spin_lock_irqsave(&port->lock, flags);
  548. /* calculate and set baud rate */
  549. baud = uart_get_baud_rate(port, termios, old, 300, 115200);
  550. msm_set_baud_rate(port, baud);
  551. /* calculate parity */
  552. mr = msm_read(port, UART_MR2);
  553. mr &= ~UART_MR2_PARITY_MODE;
  554. if (termios->c_cflag & PARENB) {
  555. if (termios->c_cflag & PARODD)
  556. mr |= UART_MR2_PARITY_MODE_ODD;
  557. else if (termios->c_cflag & CMSPAR)
  558. mr |= UART_MR2_PARITY_MODE_SPACE;
  559. else
  560. mr |= UART_MR2_PARITY_MODE_EVEN;
  561. }
  562. /* calculate bits per char */
  563. mr &= ~UART_MR2_BITS_PER_CHAR;
  564. switch (termios->c_cflag & CSIZE) {
  565. case CS5:
  566. mr |= UART_MR2_BITS_PER_CHAR_5;
  567. break;
  568. case CS6:
  569. mr |= UART_MR2_BITS_PER_CHAR_6;
  570. break;
  571. case CS7:
  572. mr |= UART_MR2_BITS_PER_CHAR_7;
  573. break;
  574. case CS8:
  575. default:
  576. mr |= UART_MR2_BITS_PER_CHAR_8;
  577. break;
  578. }
  579. /* calculate stop bits */
  580. mr &= ~(UART_MR2_STOP_BIT_LEN_ONE | UART_MR2_STOP_BIT_LEN_TWO);
  581. if (termios->c_cflag & CSTOPB)
  582. mr |= UART_MR2_STOP_BIT_LEN_TWO;
  583. else
  584. mr |= UART_MR2_STOP_BIT_LEN_ONE;
  585. /* set parity, bits per char, and stop bit */
  586. msm_write(port, mr, UART_MR2);
  587. /* calculate and set hardware flow control */
  588. mr = msm_read(port, UART_MR1);
  589. mr &= ~(UART_MR1_CTS_CTL | UART_MR1_RX_RDY_CTL);
  590. if (termios->c_cflag & CRTSCTS) {
  591. mr |= UART_MR1_CTS_CTL;
  592. mr |= UART_MR1_RX_RDY_CTL;
  593. }
  594. msm_write(port, mr, UART_MR1);
  595. /* Configure status bits to ignore based on termio flags. */
  596. port->read_status_mask = 0;
  597. if (termios->c_iflag & INPCK)
  598. port->read_status_mask |= UART_SR_PAR_FRAME_ERR;
  599. if (termios->c_iflag & (BRKINT | PARMRK))
  600. port->read_status_mask |= UART_SR_RX_BREAK;
  601. uart_update_timeout(port, termios->c_cflag, baud);
  602. spin_unlock_irqrestore(&port->lock, flags);
  603. }
  604. static const char *msm_type(struct uart_port *port)
  605. {
  606. return "MSM";
  607. }
  608. static void msm_release_port(struct uart_port *port)
  609. {
  610. struct platform_device *pdev = to_platform_device(port->dev);
  611. struct resource *resource;
  612. resource_size_t size;
  613. resource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  614. if (unlikely(!resource))
  615. return;
  616. size = resource->end - resource->start + 1;
  617. release_mem_region(port->mapbase, size);
  618. iounmap(port->membase);
  619. port->membase = NULL;
  620. }
  621. static int msm_request_port(struct uart_port *port)
  622. {
  623. struct platform_device *pdev = to_platform_device(port->dev);
  624. struct resource *resource;
  625. resource_size_t size;
  626. resource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  627. if (unlikely(!resource))
  628. return -ENXIO;
  629. size = resource->end - resource->start + 1;
  630. if (unlikely(!request_mem_region(port->mapbase, size, "msm_serial")))
  631. return -EBUSY;
  632. port->membase = ioremap(port->mapbase, size);
  633. if (!port->membase) {
  634. release_mem_region(port->mapbase, size);
  635. return -EBUSY;
  636. }
  637. return 0;
  638. }
  639. static void msm_config_port(struct uart_port *port, int flags)
  640. {
  641. if (flags & UART_CONFIG_TYPE) {
  642. port->type = PORT_MSM;
  643. msm_request_port(port);
  644. }
  645. }
  646. static int msm_verify_port(struct uart_port *port, struct serial_struct *ser)
  647. {
  648. if (unlikely(ser->type != PORT_UNKNOWN && ser->type != PORT_MSM))
  649. return -EINVAL;
  650. if (unlikely(port->irq != ser->irq))
  651. return -EINVAL;
  652. return 0;
  653. }
  654. static void msm_power(struct uart_port *port, unsigned int state,
  655. unsigned int oldstate)
  656. {
  657. int ret;
  658. struct msm_port *msm_port = UART_TO_MSM(port);
  659. switch (state) {
  660. case 0:
  661. ret = clk_prepare_enable(msm_port->clk);
  662. if (ret)
  663. pr_err("msm_serial: %s(): Can't enable uartclk.\n",
  664. __func__);
  665. break;
  666. case 3:
  667. clk_disable_unprepare(msm_port->clk);
  668. break;
  669. default:
  670. pr_err("msm_serial: %s(): Unknown PM state %d\n",
  671. __func__, state);
  672. }
  673. }
  674. static struct uart_ops msm_uart_pops = {
  675. .tx_empty = msm_tx_empty,
  676. .set_mctrl = msm_set_mctrl,
  677. .get_mctrl = msm_get_mctrl,
  678. .stop_tx = msm_stop_tx,
  679. .start_tx = msm_start_tx,
  680. .stop_rx = msm_stop_rx,
  681. .enable_ms = msm_enable_ms,
  682. .break_ctl = msm_break_ctl,
  683. .startup = msm_startup,
  684. .shutdown = msm_shutdown,
  685. .set_termios = msm_set_termios,
  686. .type = msm_type,
  687. .release_port = msm_release_port,
  688. .request_port = msm_request_port,
  689. .config_port = msm_config_port,
  690. .verify_port = msm_verify_port,
  691. .pm = msm_power,
  692. };
  693. static struct msm_port msm_uart_ports[] = {
  694. {
  695. .uart = {
  696. .iotype = UPIO_MEM,
  697. .ops = &msm_uart_pops,
  698. .flags = UPF_BOOT_AUTOCONF,
  699. .fifosize = 512,
  700. .line = 0,
  701. },
  702. },
  703. {
  704. .uart = {
  705. .iotype = UPIO_MEM,
  706. .ops = &msm_uart_pops,
  707. .flags = UPF_BOOT_AUTOCONF,
  708. .fifosize = 512,
  709. .line = 1,
  710. },
  711. },
  712. {
  713. .uart = {
  714. .iotype = UPIO_MEM,
  715. .ops = &msm_uart_pops,
  716. .flags = UPF_BOOT_AUTOCONF,
  717. .fifosize = 64,
  718. .line = 2,
  719. },
  720. },
  721. };
  722. #define UART_NR 256
  723. static inline struct uart_port * get_port_from_line(unsigned int line)
  724. {
  725. return &msm_uart_ports[line].uart;
  726. }
  727. #ifdef CONFIG_SERIAL_MSM_CONSOLE
  728. /*
  729. * Wait for transmitter & holding register to empty
  730. * Derived from wait_for_xmitr in 8250 serial driver by Russell King
  731. */
  732. static inline void wait_for_xmitr(struct uart_port *port, int bits)
  733. {
  734. unsigned int status, mr, tmout = 10000;
  735. /* Wait up to 10ms for the character(s) to be sent. */
  736. do {
  737. status = msm_read(port, UART_SR);
  738. if (--tmout == 0)
  739. break;
  740. udelay(1);
  741. } while ((status & bits) != bits);
  742. mr = msm_read(port, UART_MR1);
  743. /* Wait up to 1s for flow control if necessary */
  744. if (mr & UART_MR1_CTS_CTL) {
  745. unsigned int tmout;
  746. for (tmout = 1000000; tmout; tmout--) {
  747. unsigned int isr = msm_read(port, UART_ISR);
  748. /* CTS input is active lo */
  749. if (!(isr & UART_IMR_CURRENT_CTS))
  750. break;
  751. udelay(1);
  752. touch_nmi_watchdog();
  753. }
  754. }
  755. }
  756. static void msm_console_putchar(struct uart_port *port, int c)
  757. {
  758. /* This call can incur significant delay if CTS flowcontrol is enabled
  759. * on port and no serial cable is attached.
  760. */
  761. wait_for_xmitr(port, UART_SR_TX_READY);
  762. msm_write(port, c, UART_TF);
  763. }
  764. static void msm_console_write(struct console *co, const char *s,
  765. unsigned int count)
  766. {
  767. struct uart_port *port;
  768. struct msm_port *msm_port;
  769. int locked;
  770. BUG_ON(co->index < 0 || co->index >= UART_NR);
  771. port = get_port_from_line(co->index);
  772. msm_port = UART_TO_MSM(port);
  773. /* not pretty, but we can end up here via various convoluted paths */
  774. if (port->sysrq || oops_in_progress)
  775. locked = spin_trylock(&port->lock);
  776. else {
  777. locked = 1;
  778. spin_lock(&port->lock);
  779. }
  780. uart_console_write(port, s, count, msm_console_putchar);
  781. if (locked)
  782. spin_unlock(&port->lock);
  783. }
  784. static int __init msm_console_setup(struct console *co, char *options)
  785. {
  786. struct uart_port *port;
  787. int baud = 0, flow, bits, parity;
  788. if (unlikely(co->index >= UART_NR || co->index < 0))
  789. return -ENXIO;
  790. port = get_port_from_line(co->index);
  791. if (unlikely(!port->membase))
  792. return -ENXIO;
  793. port->cons = co;
  794. pm_runtime_get_noresume(port->dev);
  795. #ifndef CONFIG_PM_RUNTIME
  796. msm_init_clock(port);
  797. #endif
  798. pm_runtime_resume(port->dev);
  799. if (options)
  800. uart_parse_options(options, &baud, &parity, &bits, &flow);
  801. bits = 8;
  802. parity = 'n';
  803. flow = 'n';
  804. msm_write(port, UART_MR2_BITS_PER_CHAR_8 | UART_MR2_STOP_BIT_LEN_ONE,
  805. UART_MR2); /* 8N1 */
  806. if (baud < 300 || baud > 115200)
  807. baud = 115200;
  808. msm_set_baud_rate(port, baud);
  809. msm_reset(port);
  810. printk(KERN_INFO "msm_serial: console setup on port #%d\n", port->line);
  811. return uart_set_options(port, co, baud, parity, bits, flow);
  812. }
  813. static struct uart_driver msm_uart_driver;
  814. static struct console msm_console = {
  815. .name = "ttyMSM",
  816. .write = msm_console_write,
  817. .device = uart_console_device,
  818. .setup = msm_console_setup,
  819. .flags = CON_PRINTBUFFER,
  820. .index = -1,
  821. .data = &msm_uart_driver,
  822. };
  823. #define MSM_CONSOLE &msm_console
  824. #else
  825. #define MSM_CONSOLE NULL
  826. #endif
  827. static struct uart_driver msm_uart_driver = {
  828. .owner = THIS_MODULE,
  829. .driver_name = "msm_serial",
  830. .dev_name = "ttyMSM",
  831. .nr = UART_NR,
  832. .cons = MSM_CONSOLE,
  833. };
  834. static int __init msm_serial_probe(struct platform_device *pdev)
  835. {
  836. struct msm_port *msm_port;
  837. struct resource *resource;
  838. struct uart_port *port;
  839. int irq;
  840. struct msm_serial_platform_data *pdata = pdev->dev.platform_data;
  841. if (unlikely(pdev->id < 0 || pdev->id >= UART_NR))
  842. return -ENXIO;
  843. printk(KERN_INFO "msm_serial: detected port #%d\n", pdev->id);
  844. port = get_port_from_line(pdev->id);
  845. port->dev = &pdev->dev;
  846. msm_port = UART_TO_MSM(port);
  847. msm_port->clk = clk_get(&pdev->dev, "core_clk");
  848. if (unlikely(IS_ERR(msm_port->clk)))
  849. return PTR_ERR(msm_port->clk);
  850. port->uartclk = clk_get_rate(msm_port->clk);
  851. if (!port->uartclk)
  852. port->uartclk = 19200000;
  853. resource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  854. if (unlikely(!resource))
  855. return -ENXIO;
  856. port->mapbase = resource->start;
  857. irq = platform_get_irq(pdev, 0);
  858. if (unlikely(irq < 0))
  859. return -ENXIO;
  860. port->irq = irq;
  861. platform_set_drvdata(pdev, port);
  862. #ifdef CONFIG_SERIAL_MSM_RX_WAKEUP
  863. if (pdata == NULL)
  864. msm_port->wakeup.irq = -1;
  865. else {
  866. msm_port->wakeup.irq = pdata->wakeup_irq;
  867. msm_port->wakeup.ignore = 1;
  868. msm_port->wakeup.inject_rx = pdata->inject_rx_on_wakeup;
  869. msm_port->wakeup.rx_to_inject = pdata->rx_to_inject;
  870. if (unlikely(msm_port->wakeup.irq <= 0))
  871. return -EINVAL;
  872. }
  873. #endif
  874. #ifdef CONFIG_SERIAL_MSM_CLOCK_CONTROL
  875. msm_port->clk_state = MSM_CLK_PORT_OFF;
  876. hrtimer_init(&msm_port->clk_off_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
  877. msm_port->clk_off_timer.function = msm_serial_clock_off;
  878. msm_port->clk_off_delay = ktime_set(0, 1000000); /* 1 ms */
  879. #endif
  880. pm_runtime_enable(port->dev);
  881. if (pdata != NULL && pdata->userid && pdata->userid <= UART_NR)
  882. port->line = pdata->userid;
  883. return uart_add_one_port(&msm_uart_driver, port);
  884. }
  885. static int __init msm_uim_probe(struct platform_device *pdev)
  886. {
  887. struct msm_port *msm_port;
  888. struct resource *resource;
  889. struct uart_port *port;
  890. int irq;
  891. if (unlikely(pdev->id < 0 || pdev->id >= UART_NR))
  892. return -ENXIO;
  893. pr_info("msm_uim: detected port #%d\n", pdev->id);
  894. port = get_port_from_line(pdev->id);
  895. port->dev = &pdev->dev;
  896. msm_port = UART_TO_MSM(port);
  897. msm_port->uim = true;
  898. resource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  899. if (unlikely(!resource))
  900. return -ENXIO;
  901. port->mapbase = resource->start;
  902. irq = platform_get_irq(pdev, 0);
  903. if (unlikely(irq < 0))
  904. return -ENXIO;
  905. port->irq = irq;
  906. platform_set_drvdata(pdev, port);
  907. return uart_add_one_port(&msm_uart_driver, port);
  908. }
  909. static int __devexit msm_serial_remove(struct platform_device *pdev)
  910. {
  911. struct msm_port *msm_port = platform_get_drvdata(pdev);
  912. pm_runtime_put_sync(&pdev->dev);
  913. pm_runtime_disable(&pdev->dev);
  914. clk_put(msm_port->clk);
  915. return 0;
  916. }
  917. #ifdef CONFIG_PM
  918. static int msm_serial_suspend(struct device *dev)
  919. {
  920. struct uart_port *port;
  921. struct platform_device *pdev = to_platform_device(dev);
  922. port = get_port_from_line(pdev->id);
  923. if (port) {
  924. uart_suspend_port(&msm_uart_driver, port);
  925. if (is_console(port))
  926. msm_deinit_clock(port);
  927. }
  928. return 0;
  929. }
  930. static int msm_serial_resume(struct device *dev)
  931. {
  932. struct uart_port *port;
  933. struct platform_device *pdev = to_platform_device(dev);
  934. port = get_port_from_line(pdev->id);
  935. if (port) {
  936. if (is_console(port))
  937. msm_init_clock(port);
  938. uart_resume_port(&msm_uart_driver, port);
  939. }
  940. return 0;
  941. }
  942. #else
  943. #define msm_serial_suspend NULL
  944. #define msm_serial_resume NULL
  945. #endif
  946. static int msm_serial_runtime_suspend(struct device *dev)
  947. {
  948. struct platform_device *pdev = to_platform_device(dev);
  949. struct uart_port *port;
  950. port = get_port_from_line(pdev->id);
  951. dev_dbg(dev, "pm_runtime: suspending\n");
  952. msm_deinit_clock(port);
  953. return 0;
  954. }
  955. static int msm_serial_runtime_resume(struct device *dev)
  956. {
  957. struct platform_device *pdev = to_platform_device(dev);
  958. struct uart_port *port;
  959. port = get_port_from_line(pdev->id);
  960. dev_dbg(dev, "pm_runtime: resuming\n");
  961. msm_init_clock(port);
  962. return 0;
  963. }
  964. static struct dev_pm_ops msm_serial_dev_pm_ops = {
  965. .suspend = msm_serial_suspend,
  966. .resume = msm_serial_resume,
  967. .runtime_suspend = msm_serial_runtime_suspend,
  968. .runtime_resume = msm_serial_runtime_resume,
  969. };
  970. static struct platform_driver msm_platform_driver = {
  971. .remove = msm_serial_remove,
  972. .driver = {
  973. .name = "msm_serial",
  974. .owner = THIS_MODULE,
  975. .pm = &msm_serial_dev_pm_ops,
  976. },
  977. };
  978. static struct platform_driver msm_platform_uim_driver = {
  979. .remove = msm_serial_remove,
  980. .driver = {
  981. .name = "msm_uim",
  982. .owner = THIS_MODULE,
  983. },
  984. };
  985. static int __init msm_serial_init(void)
  986. {
  987. int ret;
  988. ret = uart_register_driver(&msm_uart_driver);
  989. if (unlikely(ret))
  990. return ret;
  991. ret = platform_driver_probe(&msm_platform_driver, msm_serial_probe);
  992. if (unlikely(ret))
  993. uart_unregister_driver(&msm_uart_driver);
  994. platform_driver_probe(&msm_platform_uim_driver, msm_uim_probe);
  995. printk(KERN_INFO "msm_serial: driver initialized\n");
  996. return ret;
  997. }
  998. static void __exit msm_serial_exit(void)
  999. {
  1000. #ifdef CONFIG_SERIAL_MSM_CONSOLE
  1001. unregister_console(&msm_console);
  1002. #endif
  1003. platform_driver_unregister(&msm_platform_driver);
  1004. uart_unregister_driver(&msm_uart_driver);
  1005. }
  1006. module_init(msm_serial_init);
  1007. module_exit(msm_serial_exit);
  1008. MODULE_AUTHOR("Robert Love <rlove@google.com>");
  1009. MODULE_DESCRIPTION("Driver for msm7x serial device");
  1010. MODULE_LICENSE("GPL v2");