8250_dw.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Synopsys DesignWare 8250 driver.
  4. *
  5. * Copyright 2011 Picochip, Jamie Iles.
  6. * Copyright 2013 Intel Corporation
  7. *
  8. * The Synopsys DesignWare 8250 has an extra feature whereby it detects if the
  9. * LCR is written whilst busy. If it is, then a busy detect interrupt is
  10. * raised, the LCR needs to be rewritten and the uart status register read.
  11. */
  12. #include <linux/delay.h>
  13. #include <linux/device.h>
  14. #include <linux/io.h>
  15. #include <linux/module.h>
  16. #include <linux/serial_8250.h>
  17. #include <linux/serial_reg.h>
  18. #include <linux/of.h>
  19. #include <linux/of_irq.h>
  20. #include <linux/of_platform.h>
  21. #include <linux/platform_device.h>
  22. #include <linux/slab.h>
  23. #include <linux/acpi.h>
  24. #include <linux/clk.h>
  25. #include <linux/reset.h>
  26. #include <linux/pm_runtime.h>
  27. #include <asm/byteorder.h>
  28. #include "8250.h"
  29. /* Offsets for the DesignWare specific registers */
  30. #define DW_UART_USR 0x1f /* UART Status Register */
  31. #define DW_UART_DLF 0xc0 /* Divisor Latch Fraction Register */
  32. #define DW_UART_CPR 0xf4 /* Component Parameter Register */
  33. #define DW_UART_UCV 0xf8 /* UART Component Version */
  34. /* Component Parameter Register bits */
  35. #define DW_UART_CPR_ABP_DATA_WIDTH (3 << 0)
  36. #define DW_UART_CPR_AFCE_MODE (1 << 4)
  37. #define DW_UART_CPR_THRE_MODE (1 << 5)
  38. #define DW_UART_CPR_SIR_MODE (1 << 6)
  39. #define DW_UART_CPR_SIR_LP_MODE (1 << 7)
  40. #define DW_UART_CPR_ADDITIONAL_FEATURES (1 << 8)
  41. #define DW_UART_CPR_FIFO_ACCESS (1 << 9)
  42. #define DW_UART_CPR_FIFO_STAT (1 << 10)
  43. #define DW_UART_CPR_SHADOW (1 << 11)
  44. #define DW_UART_CPR_ENCODED_PARMS (1 << 12)
  45. #define DW_UART_CPR_DMA_EXTRA (1 << 13)
  46. #define DW_UART_CPR_FIFO_MODE (0xff << 16)
  47. /* Helper for fifo size calculation */
  48. #define DW_UART_CPR_FIFO_SIZE(a) (((a >> 16) & 0xff) * 16)
  49. /* DesignWare specific register fields */
  50. #define DW_UART_MCR_SIRE BIT(6)
  51. struct dw8250_data {
  52. u8 usr_reg;
  53. u8 dlf_size;
  54. int line;
  55. int msr_mask_on;
  56. int msr_mask_off;
  57. struct clk *clk;
  58. struct clk *pclk;
  59. struct reset_control *rst;
  60. struct uart_8250_dma dma;
  61. unsigned int skip_autocfg:1;
  62. unsigned int uart_16550_compatible:1;
  63. };
  64. static inline u32 dw8250_readl_ext(struct uart_port *p, int offset)
  65. {
  66. if (p->iotype == UPIO_MEM32BE)
  67. return ioread32be(p->membase + offset);
  68. return readl(p->membase + offset);
  69. }
  70. static inline void dw8250_writel_ext(struct uart_port *p, int offset, u32 reg)
  71. {
  72. if (p->iotype == UPIO_MEM32BE)
  73. iowrite32be(reg, p->membase + offset);
  74. else
  75. writel(reg, p->membase + offset);
  76. }
  77. static inline int dw8250_modify_msr(struct uart_port *p, int offset, int value)
  78. {
  79. struct dw8250_data *d = p->private_data;
  80. /* Override any modem control signals if needed */
  81. if (offset == UART_MSR) {
  82. value |= d->msr_mask_on;
  83. value &= ~d->msr_mask_off;
  84. }
  85. return value;
  86. }
  87. static void dw8250_force_idle(struct uart_port *p)
  88. {
  89. struct uart_8250_port *up = up_to_u8250p(p);
  90. serial8250_clear_and_reinit_fifos(up);
  91. (void)p->serial_in(p, UART_RX);
  92. }
  93. static void dw8250_check_lcr(struct uart_port *p, int value)
  94. {
  95. void __iomem *offset = p->membase + (UART_LCR << p->regshift);
  96. int tries = 1000;
  97. /* Make sure LCR write wasn't ignored */
  98. while (tries--) {
  99. unsigned int lcr = p->serial_in(p, UART_LCR);
  100. if ((value & ~UART_LCR_SPAR) == (lcr & ~UART_LCR_SPAR))
  101. return;
  102. dw8250_force_idle(p);
  103. #ifdef CONFIG_64BIT
  104. if (p->type == PORT_OCTEON)
  105. __raw_writeq(value & 0xff, offset);
  106. else
  107. #endif
  108. if (p->iotype == UPIO_MEM32)
  109. writel(value, offset);
  110. else if (p->iotype == UPIO_MEM32BE)
  111. iowrite32be(value, offset);
  112. else
  113. writeb(value, offset);
  114. }
  115. /*
  116. * FIXME: this deadlocks if port->lock is already held
  117. * dev_err(p->dev, "Couldn't set LCR to %d\n", value);
  118. */
  119. }
  120. /* Returns once the transmitter is empty or we run out of retries */
  121. static void dw8250_tx_wait_empty(struct uart_port *p)
  122. {
  123. unsigned int tries = 20000;
  124. unsigned int delay_threshold = tries - 1000;
  125. unsigned int lsr;
  126. while (tries--) {
  127. lsr = readb (p->membase + (UART_LSR << p->regshift));
  128. if (lsr & UART_LSR_TEMT)
  129. break;
  130. /* The device is first given a chance to empty without delay,
  131. * to avoid slowdowns at high bitrates. If after 1000 tries
  132. * the buffer has still not emptied, allow more time for low-
  133. * speed links. */
  134. if (tries < delay_threshold)
  135. udelay (1);
  136. }
  137. }
  138. static void dw8250_serial_out38x(struct uart_port *p, int offset, int value)
  139. {
  140. struct dw8250_data *d = p->private_data;
  141. /* Allow the TX to drain before we reconfigure */
  142. if (offset == UART_LCR)
  143. dw8250_tx_wait_empty(p);
  144. writeb(value, p->membase + (offset << p->regshift));
  145. if (offset == UART_LCR && !d->uart_16550_compatible)
  146. dw8250_check_lcr(p, value);
  147. }
  148. static void dw8250_serial_out(struct uart_port *p, int offset, int value)
  149. {
  150. struct dw8250_data *d = p->private_data;
  151. writeb(value, p->membase + (offset << p->regshift));
  152. if (offset == UART_LCR && !d->uart_16550_compatible)
  153. dw8250_check_lcr(p, value);
  154. }
  155. static unsigned int dw8250_serial_in(struct uart_port *p, int offset)
  156. {
  157. unsigned int value = readb(p->membase + (offset << p->regshift));
  158. return dw8250_modify_msr(p, offset, value);
  159. }
  160. #ifdef CONFIG_64BIT
  161. static unsigned int dw8250_serial_inq(struct uart_port *p, int offset)
  162. {
  163. unsigned int value;
  164. value = (u8)__raw_readq(p->membase + (offset << p->regshift));
  165. return dw8250_modify_msr(p, offset, value);
  166. }
  167. static void dw8250_serial_outq(struct uart_port *p, int offset, int value)
  168. {
  169. struct dw8250_data *d = p->private_data;
  170. value &= 0xff;
  171. __raw_writeq(value, p->membase + (offset << p->regshift));
  172. /* Read back to ensure register write ordering. */
  173. __raw_readq(p->membase + (UART_LCR << p->regshift));
  174. if (offset == UART_LCR && !d->uart_16550_compatible)
  175. dw8250_check_lcr(p, value);
  176. }
  177. #endif /* CONFIG_64BIT */
  178. static void dw8250_serial_out32(struct uart_port *p, int offset, int value)
  179. {
  180. struct dw8250_data *d = p->private_data;
  181. writel(value, p->membase + (offset << p->regshift));
  182. if (offset == UART_LCR && !d->uart_16550_compatible)
  183. dw8250_check_lcr(p, value);
  184. }
  185. static unsigned int dw8250_serial_in32(struct uart_port *p, int offset)
  186. {
  187. unsigned int value = readl(p->membase + (offset << p->regshift));
  188. return dw8250_modify_msr(p, offset, value);
  189. }
  190. static void dw8250_serial_out32be(struct uart_port *p, int offset, int value)
  191. {
  192. struct dw8250_data *d = p->private_data;
  193. iowrite32be(value, p->membase + (offset << p->regshift));
  194. if (offset == UART_LCR && !d->uart_16550_compatible)
  195. dw8250_check_lcr(p, value);
  196. }
  197. static unsigned int dw8250_serial_in32be(struct uart_port *p, int offset)
  198. {
  199. unsigned int value = ioread32be(p->membase + (offset << p->regshift));
  200. return dw8250_modify_msr(p, offset, value);
  201. }
  202. static int dw8250_handle_irq(struct uart_port *p)
  203. {
  204. struct uart_8250_port *up = up_to_u8250p(p);
  205. struct dw8250_data *d = p->private_data;
  206. unsigned int iir = p->serial_in(p, UART_IIR);
  207. unsigned int status;
  208. unsigned long flags;
  209. /*
  210. * There are ways to get Designware-based UARTs into a state where
  211. * they are asserting UART_IIR_RX_TIMEOUT but there is no actual
  212. * data available. If we see such a case then we'll do a bogus
  213. * read. If we don't do this then the "RX TIMEOUT" interrupt will
  214. * fire forever.
  215. *
  216. * This problem has only been observed so far when not in DMA mode
  217. * so we limit the workaround only to non-DMA mode.
  218. */
  219. if (!up->dma && ((iir & 0x3f) == UART_IIR_RX_TIMEOUT)) {
  220. spin_lock_irqsave(&p->lock, flags);
  221. status = p->serial_in(p, UART_LSR);
  222. if (!(status & (UART_LSR_DR | UART_LSR_BI)))
  223. (void) p->serial_in(p, UART_RX);
  224. spin_unlock_irqrestore(&p->lock, flags);
  225. }
  226. if (serial8250_handle_irq(p, iir))
  227. return 1;
  228. if ((iir & UART_IIR_BUSY) == UART_IIR_BUSY) {
  229. /* Clear the USR */
  230. (void)p->serial_in(p, d->usr_reg);
  231. return 1;
  232. }
  233. return 0;
  234. }
  235. static void
  236. dw8250_do_pm(struct uart_port *port, unsigned int state, unsigned int old)
  237. {
  238. if (!state)
  239. pm_runtime_get_sync(port->dev);
  240. serial8250_do_pm(port, state, old);
  241. if (state)
  242. pm_runtime_put_sync_suspend(port->dev);
  243. }
  244. static void dw8250_set_termios(struct uart_port *p, struct ktermios *termios,
  245. struct ktermios *old)
  246. {
  247. unsigned int baud = tty_termios_baud_rate(termios);
  248. struct dw8250_data *d = p->private_data;
  249. long rate;
  250. int ret;
  251. if (IS_ERR(d->clk))
  252. goto out;
  253. clk_disable_unprepare(d->clk);
  254. rate = clk_round_rate(d->clk, baud * 16);
  255. if (rate < 0)
  256. ret = rate;
  257. else if (rate == 0)
  258. ret = -ENOENT;
  259. else
  260. ret = clk_set_rate(d->clk, rate);
  261. clk_prepare_enable(d->clk);
  262. if (!ret)
  263. p->uartclk = rate;
  264. out:
  265. p->status &= ~UPSTAT_AUTOCTS;
  266. if (termios->c_cflag & CRTSCTS)
  267. p->status |= UPSTAT_AUTOCTS;
  268. serial8250_do_set_termios(p, termios, old);
  269. }
  270. static void dw8250_set_ldisc(struct uart_port *p, struct ktermios *termios)
  271. {
  272. struct uart_8250_port *up = up_to_u8250p(p);
  273. unsigned int mcr = p->serial_in(p, UART_MCR);
  274. if (up->capabilities & UART_CAP_IRDA) {
  275. if (termios->c_line == N_IRDA)
  276. mcr |= DW_UART_MCR_SIRE;
  277. else
  278. mcr &= ~DW_UART_MCR_SIRE;
  279. p->serial_out(p, UART_MCR, mcr);
  280. }
  281. serial8250_do_set_ldisc(p, termios);
  282. }
  283. /*
  284. * dw8250_fallback_dma_filter will prevent the UART from getting just any free
  285. * channel on platforms that have DMA engines, but don't have any channels
  286. * assigned to the UART.
  287. *
  288. * REVISIT: This is a work around for limitation in the DMA Engine API. Once the
  289. * core problem is fixed, this function is no longer needed.
  290. */
  291. static bool dw8250_fallback_dma_filter(struct dma_chan *chan, void *param)
  292. {
  293. return false;
  294. }
  295. static bool dw8250_idma_filter(struct dma_chan *chan, void *param)
  296. {
  297. return param == chan->device->dev;
  298. }
  299. /*
  300. * divisor = div(I) + div(F)
  301. * "I" means integer, "F" means fractional
  302. * quot = div(I) = clk / (16 * baud)
  303. * frac = div(F) * 2^dlf_size
  304. *
  305. * let rem = clk % (16 * baud)
  306. * we have: div(F) * (16 * baud) = rem
  307. * so frac = 2^dlf_size * rem / (16 * baud) = (rem << dlf_size) / (16 * baud)
  308. */
  309. static unsigned int dw8250_get_divisor(struct uart_port *p,
  310. unsigned int baud,
  311. unsigned int *frac)
  312. {
  313. unsigned int quot, rem, base_baud = baud * 16;
  314. struct dw8250_data *d = p->private_data;
  315. quot = p->uartclk / base_baud;
  316. rem = p->uartclk % base_baud;
  317. *frac = DIV_ROUND_CLOSEST(rem << d->dlf_size, base_baud);
  318. return quot;
  319. }
  320. static void dw8250_set_divisor(struct uart_port *p, unsigned int baud,
  321. unsigned int quot, unsigned int quot_frac)
  322. {
  323. dw8250_writel_ext(p, DW_UART_DLF, quot_frac);
  324. serial8250_do_set_divisor(p, baud, quot, quot_frac);
  325. }
  326. static void dw8250_quirks(struct uart_port *p, struct dw8250_data *data)
  327. {
  328. if (p->dev->of_node) {
  329. struct device_node *np = p->dev->of_node;
  330. int id;
  331. /* get index of serial line, if found in DT aliases */
  332. id = of_alias_get_id(np, "serial");
  333. if (id >= 0)
  334. p->line = id;
  335. #ifdef CONFIG_64BIT
  336. if (of_device_is_compatible(np, "cavium,octeon-3860-uart")) {
  337. p->serial_in = dw8250_serial_inq;
  338. p->serial_out = dw8250_serial_outq;
  339. p->flags = UPF_SKIP_TEST | UPF_SHARE_IRQ | UPF_FIXED_TYPE;
  340. p->type = PORT_OCTEON;
  341. data->usr_reg = 0x27;
  342. data->skip_autocfg = true;
  343. }
  344. #endif
  345. if (of_device_is_big_endian(p->dev->of_node)) {
  346. p->iotype = UPIO_MEM32BE;
  347. p->serial_in = dw8250_serial_in32be;
  348. p->serial_out = dw8250_serial_out32be;
  349. }
  350. if (of_device_is_compatible(np, "marvell,armada-38x-uart"))
  351. p->serial_out = dw8250_serial_out38x;
  352. } else if (acpi_dev_present("APMC0D08", NULL, -1)) {
  353. p->iotype = UPIO_MEM32;
  354. p->regshift = 2;
  355. p->serial_in = dw8250_serial_in32;
  356. data->uart_16550_compatible = true;
  357. }
  358. /* Platforms with iDMA 64-bit */
  359. if (platform_get_resource_byname(to_platform_device(p->dev),
  360. IORESOURCE_MEM, "lpss_priv")) {
  361. data->dma.rx_param = p->dev->parent;
  362. data->dma.tx_param = p->dev->parent;
  363. data->dma.fn = dw8250_idma_filter;
  364. }
  365. }
  366. static void dw8250_setup_port(struct uart_port *p)
  367. {
  368. struct uart_8250_port *up = up_to_u8250p(p);
  369. u32 reg;
  370. /*
  371. * If the Component Version Register returns zero, we know that
  372. * ADDITIONAL_FEATURES are not enabled. No need to go any further.
  373. */
  374. reg = dw8250_readl_ext(p, DW_UART_UCV);
  375. if (!reg)
  376. return;
  377. dev_dbg(p->dev, "Designware UART version %c.%c%c\n",
  378. (reg >> 24) & 0xff, (reg >> 16) & 0xff, (reg >> 8) & 0xff);
  379. dw8250_writel_ext(p, DW_UART_DLF, ~0U);
  380. reg = dw8250_readl_ext(p, DW_UART_DLF);
  381. dw8250_writel_ext(p, DW_UART_DLF, 0);
  382. if (reg) {
  383. struct dw8250_data *d = p->private_data;
  384. d->dlf_size = fls(reg);
  385. p->get_divisor = dw8250_get_divisor;
  386. p->set_divisor = dw8250_set_divisor;
  387. }
  388. reg = dw8250_readl_ext(p, DW_UART_CPR);
  389. if (!reg)
  390. return;
  391. /* Select the type based on fifo */
  392. if (reg & DW_UART_CPR_FIFO_MODE) {
  393. p->type = PORT_16550A;
  394. p->flags |= UPF_FIXED_TYPE;
  395. p->fifosize = DW_UART_CPR_FIFO_SIZE(reg);
  396. up->capabilities = UART_CAP_FIFO;
  397. }
  398. if (reg & DW_UART_CPR_AFCE_MODE)
  399. up->capabilities |= UART_CAP_AFE;
  400. if (reg & DW_UART_CPR_SIR_MODE)
  401. up->capabilities |= UART_CAP_IRDA;
  402. }
  403. static int dw8250_probe(struct platform_device *pdev)
  404. {
  405. struct uart_8250_port uart = {};
  406. struct resource *regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  407. int irq = platform_get_irq(pdev, 0);
  408. struct uart_port *p = &uart.port;
  409. struct device *dev = &pdev->dev;
  410. struct dw8250_data *data;
  411. int err;
  412. u32 val;
  413. if (!regs) {
  414. dev_err(dev, "no registers defined\n");
  415. return -EINVAL;
  416. }
  417. if (irq < 0) {
  418. if (irq != -EPROBE_DEFER)
  419. dev_err(dev, "cannot get irq\n");
  420. return irq;
  421. }
  422. spin_lock_init(&p->lock);
  423. p->mapbase = regs->start;
  424. p->irq = irq;
  425. p->handle_irq = dw8250_handle_irq;
  426. p->pm = dw8250_do_pm;
  427. p->type = PORT_8250;
  428. p->flags = UPF_SHARE_IRQ | UPF_FIXED_PORT;
  429. p->dev = dev;
  430. p->iotype = UPIO_MEM;
  431. p->serial_in = dw8250_serial_in;
  432. p->serial_out = dw8250_serial_out;
  433. p->set_ldisc = dw8250_set_ldisc;
  434. p->set_termios = dw8250_set_termios;
  435. p->membase = devm_ioremap(dev, regs->start, resource_size(regs));
  436. if (!p->membase)
  437. return -ENOMEM;
  438. data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
  439. if (!data)
  440. return -ENOMEM;
  441. data->dma.fn = dw8250_fallback_dma_filter;
  442. data->usr_reg = DW_UART_USR;
  443. p->private_data = data;
  444. data->uart_16550_compatible = device_property_read_bool(dev,
  445. "snps,uart-16550-compatible");
  446. err = device_property_read_u32(dev, "reg-shift", &val);
  447. if (!err)
  448. p->regshift = val;
  449. err = device_property_read_u32(dev, "reg-io-width", &val);
  450. if (!err && val == 4) {
  451. p->iotype = UPIO_MEM32;
  452. p->serial_in = dw8250_serial_in32;
  453. p->serial_out = dw8250_serial_out32;
  454. }
  455. if (device_property_read_bool(dev, "dcd-override")) {
  456. /* Always report DCD as active */
  457. data->msr_mask_on |= UART_MSR_DCD;
  458. data->msr_mask_off |= UART_MSR_DDCD;
  459. }
  460. if (device_property_read_bool(dev, "dsr-override")) {
  461. /* Always report DSR as active */
  462. data->msr_mask_on |= UART_MSR_DSR;
  463. data->msr_mask_off |= UART_MSR_DDSR;
  464. }
  465. if (device_property_read_bool(dev, "cts-override")) {
  466. /* Always report CTS as active */
  467. data->msr_mask_on |= UART_MSR_CTS;
  468. data->msr_mask_off |= UART_MSR_DCTS;
  469. }
  470. if (device_property_read_bool(dev, "ri-override")) {
  471. /* Always report Ring indicator as inactive */
  472. data->msr_mask_off |= UART_MSR_RI;
  473. data->msr_mask_off |= UART_MSR_TERI;
  474. }
  475. /* Always ask for fixed clock rate from a property. */
  476. device_property_read_u32(dev, "clock-frequency", &p->uartclk);
  477. /* If there is separate baudclk, get the rate from it. */
  478. data->clk = devm_clk_get(dev, "baudclk");
  479. if (IS_ERR(data->clk) && PTR_ERR(data->clk) != -EPROBE_DEFER)
  480. data->clk = devm_clk_get(dev, NULL);
  481. if (IS_ERR(data->clk) && PTR_ERR(data->clk) == -EPROBE_DEFER)
  482. return -EPROBE_DEFER;
  483. if (!IS_ERR_OR_NULL(data->clk)) {
  484. err = clk_prepare_enable(data->clk);
  485. if (err)
  486. dev_warn(dev, "could not enable optional baudclk: %d\n",
  487. err);
  488. else
  489. p->uartclk = clk_get_rate(data->clk);
  490. }
  491. /* If no clock rate is defined, fail. */
  492. if (!p->uartclk) {
  493. dev_err(dev, "clock rate not defined\n");
  494. err = -EINVAL;
  495. goto err_clk;
  496. }
  497. data->pclk = devm_clk_get(dev, "apb_pclk");
  498. if (IS_ERR(data->pclk) && PTR_ERR(data->pclk) == -EPROBE_DEFER) {
  499. err = -EPROBE_DEFER;
  500. goto err_clk;
  501. }
  502. if (!IS_ERR(data->pclk)) {
  503. err = clk_prepare_enable(data->pclk);
  504. if (err) {
  505. dev_err(dev, "could not enable apb_pclk\n");
  506. goto err_clk;
  507. }
  508. }
  509. data->rst = devm_reset_control_get_optional_exclusive(dev, NULL);
  510. if (IS_ERR(data->rst)) {
  511. err = PTR_ERR(data->rst);
  512. goto err_pclk;
  513. }
  514. reset_control_deassert(data->rst);
  515. dw8250_quirks(p, data);
  516. /* If the Busy Functionality is not implemented, don't handle it */
  517. if (data->uart_16550_compatible)
  518. p->handle_irq = NULL;
  519. if (!data->skip_autocfg)
  520. dw8250_setup_port(p);
  521. /* If we have a valid fifosize, try hooking up DMA */
  522. if (p->fifosize) {
  523. data->dma.rxconf.src_maxburst = p->fifosize / 4;
  524. data->dma.txconf.dst_maxburst = p->fifosize / 4;
  525. uart.dma = &data->dma;
  526. }
  527. data->line = serial8250_register_8250_port(&uart);
  528. if (data->line < 0) {
  529. err = data->line;
  530. goto err_reset;
  531. }
  532. platform_set_drvdata(pdev, data);
  533. pm_runtime_set_active(dev);
  534. pm_runtime_enable(dev);
  535. return 0;
  536. err_reset:
  537. reset_control_assert(data->rst);
  538. err_pclk:
  539. if (!IS_ERR(data->pclk))
  540. clk_disable_unprepare(data->pclk);
  541. err_clk:
  542. if (!IS_ERR(data->clk))
  543. clk_disable_unprepare(data->clk);
  544. return err;
  545. }
  546. static int dw8250_remove(struct platform_device *pdev)
  547. {
  548. struct dw8250_data *data = platform_get_drvdata(pdev);
  549. pm_runtime_get_sync(&pdev->dev);
  550. serial8250_unregister_port(data->line);
  551. reset_control_assert(data->rst);
  552. if (!IS_ERR(data->pclk))
  553. clk_disable_unprepare(data->pclk);
  554. if (!IS_ERR(data->clk))
  555. clk_disable_unprepare(data->clk);
  556. pm_runtime_disable(&pdev->dev);
  557. pm_runtime_put_noidle(&pdev->dev);
  558. return 0;
  559. }
  560. #ifdef CONFIG_PM_SLEEP
  561. static int dw8250_suspend(struct device *dev)
  562. {
  563. struct dw8250_data *data = dev_get_drvdata(dev);
  564. serial8250_suspend_port(data->line);
  565. return 0;
  566. }
  567. static int dw8250_resume(struct device *dev)
  568. {
  569. struct dw8250_data *data = dev_get_drvdata(dev);
  570. serial8250_resume_port(data->line);
  571. return 0;
  572. }
  573. #endif /* CONFIG_PM_SLEEP */
  574. #ifdef CONFIG_PM
  575. static int dw8250_runtime_suspend(struct device *dev)
  576. {
  577. struct dw8250_data *data = dev_get_drvdata(dev);
  578. if (!IS_ERR(data->clk))
  579. clk_disable_unprepare(data->clk);
  580. if (!IS_ERR(data->pclk))
  581. clk_disable_unprepare(data->pclk);
  582. return 0;
  583. }
  584. static int dw8250_runtime_resume(struct device *dev)
  585. {
  586. struct dw8250_data *data = dev_get_drvdata(dev);
  587. if (!IS_ERR(data->pclk))
  588. clk_prepare_enable(data->pclk);
  589. if (!IS_ERR(data->clk))
  590. clk_prepare_enable(data->clk);
  591. return 0;
  592. }
  593. #endif
  594. static const struct dev_pm_ops dw8250_pm_ops = {
  595. SET_SYSTEM_SLEEP_PM_OPS(dw8250_suspend, dw8250_resume)
  596. SET_RUNTIME_PM_OPS(dw8250_runtime_suspend, dw8250_runtime_resume, NULL)
  597. };
  598. static const struct of_device_id dw8250_of_match[] = {
  599. { .compatible = "snps,dw-apb-uart" },
  600. { .compatible = "cavium,octeon-3860-uart" },
  601. { .compatible = "marvell,armada-38x-uart" },
  602. { .compatible = "renesas,rzn1-uart" },
  603. { /* Sentinel */ }
  604. };
  605. MODULE_DEVICE_TABLE(of, dw8250_of_match);
  606. static const struct acpi_device_id dw8250_acpi_match[] = {
  607. { "INT33C4", 0 },
  608. { "INT33C5", 0 },
  609. { "INT3434", 0 },
  610. { "INT3435", 0 },
  611. { "80860F0A", 0 },
  612. { "8086228A", 0 },
  613. { "APMC0D08", 0},
  614. { "AMD0020", 0 },
  615. { "AMDI0020", 0 },
  616. { "BRCM2032", 0 },
  617. { "HISI0031", 0 },
  618. { },
  619. };
  620. MODULE_DEVICE_TABLE(acpi, dw8250_acpi_match);
  621. static struct platform_driver dw8250_platform_driver = {
  622. .driver = {
  623. .name = "dw-apb-uart",
  624. .pm = &dw8250_pm_ops,
  625. .of_match_table = dw8250_of_match,
  626. .acpi_match_table = ACPI_PTR(dw8250_acpi_match),
  627. },
  628. .probe = dw8250_probe,
  629. .remove = dw8250_remove,
  630. };
  631. module_platform_driver(dw8250_platform_driver);
  632. MODULE_AUTHOR("Jamie Iles");
  633. MODULE_LICENSE("GPL");
  634. MODULE_DESCRIPTION("Synopsys DesignWare 8250 serial port driver");
  635. MODULE_ALIAS("platform:dw-apb-uart");