• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/workqueue.h>
23 #include <linux/notifier.h>
24 #include <linux/slab.h>
25 #include <linux/acpi.h>
26 #include <linux/clk.h>
27 #include <linux/reset.h>
28 #include <linux/pm_runtime.h>
29 
30 #include <asm/byteorder.h>
31 
32 #include "8250_dwlib.h"
33 
34 /* Offsets for the DesignWare specific registers */
35 #define DW_UART_USR 0x1f /* UART Status Register */
36 #define DW_UART_RFL 0x21 /* UART Receive Fifo Level Register */
37 
38 /* DesignWare specific register fields */
39 #define DW_UART_MCR_SIRE BIT(6)
40 
41 struct dw8250_data {
42     struct dw8250_port_data data;
43 
44     u8 usr_reg;
45     int msr_mask_on;
46     int msr_mask_off;
47     struct clk *clk;
48     struct clk *pclk;
49     struct notifier_block clk_notifier;
50     struct work_struct clk_work;
51     struct reset_control *rst;
52 
53 #ifdef CONFIG_ARCH_ROCKCHIP
54     int irq;
55     int irq_wake;
56     int enable_wakeup;
57 #endif
58     unsigned int skip_autocfg : 1;
59     unsigned int uart_16550_compatible : 1;
60 };
61 
to_dw8250_data(struct dw8250_port_data * data)62 static inline struct dw8250_data *to_dw8250_data(struct dw8250_port_data *data)
63 {
64     return container_of(data, struct dw8250_data, data);
65 }
66 
clk_to_dw8250_data(struct notifier_block * nb)67 static inline struct dw8250_data *clk_to_dw8250_data(struct notifier_block *nb)
68 {
69     return container_of(nb, struct dw8250_data, clk_notifier);
70 }
71 
work_to_dw8250_data(struct work_struct * work)72 static inline struct dw8250_data *work_to_dw8250_data(struct work_struct *work)
73 {
74     return container_of(work, struct dw8250_data, clk_work);
75 }
76 
dw8250_modify_msr(struct uart_port * p,int offset,int value)77 static inline int dw8250_modify_msr(struct uart_port *p, int offset, int value)
78 {
79     struct dw8250_data *d = to_dw8250_data(p->private_data);
80 
81     /* Override any modem control signals if needed */
82     if (offset == UART_MSR) {
83         value |= d->msr_mask_on;
84         value &= ~d->msr_mask_off;
85     }
86 
87     return value;
88 }
89 
dw8250_force_idle(struct uart_port * p)90 static void dw8250_force_idle(struct uart_port *p)
91 {
92     struct uart_8250_port *up = up_to_u8250p(p);
93 
94     serial8250_clear_and_reinit_fifos(up);
95     (void)p->serial_in(p, UART_RX);
96 }
97 
dw8250_check_lcr(struct uart_port * p,int value)98 static void dw8250_check_lcr(struct uart_port *p, int value)
99 {
100     void __iomem *offset = p->membase + (UART_LCR << p->regshift);
101     int tries = 1000;
102 
103     /* Make sure LCR write wasn't ignored */
104     while (tries--) {
105         unsigned int lcr = p->serial_in(p, UART_LCR);
106         if ((value & ~UART_LCR_SPAR) == (lcr & ~UART_LCR_SPAR)) {
107             return;
108         }
109 
110         dw8250_force_idle(p);
111 
112 #ifdef CONFIG_64BIT
113         if (p->type == PORT_OCTEON) {
114             __raw_writeq(value & 0xff, offset);
115         } else
116 #endif
117             if (p->iotype == UPIO_MEM32) {
118             writel(value, offset);
119         } else if (p->iotype == UPIO_MEM32BE) {
120             iowrite32be(value, offset);
121         } else {
122             writeb(value, offset);
123         }
124     }
125     /*
126      * this deadlocks if port->lock is already held
127      * dev_err(p->dev, "Couldn't set LCR to %d\n", value);
128      */
129 }
130 
131 /* Returns once the transmitter is empty or we run out of retries */
dw8250_tx_wait_empty(struct uart_port * p)132 static void dw8250_tx_wait_empty(struct uart_port *p)
133 {
134     struct uart_8250_port *up = up_to_u8250p(p);
135     unsigned int tries = 20000;
136     unsigned int delay_threshold = tries - 1000;
137     unsigned int lsr;
138 
139     while (tries--) {
140         lsr = readb(p->membase + (UART_LSR << p->regshift));
141         up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;
142         if (lsr & UART_LSR_TEMT) {
143             break;
144         }
145 
146         /* The device is first given a chance to empty without delay,
147          * to avoid slowdowns at high bitrates. If after 1000 tries
148          * the buffer has still not emptied, allow more time for low-
149          * speed links. */
150         if (tries < delay_threshold) {
151             udelay(1);
152         }
153     }
154 }
155 
dw8250_serial_out38x(struct uart_port * p,int offset,int value)156 static void dw8250_serial_out38x(struct uart_port *p, int offset, int value)
157 {
158     struct dw8250_data *d = to_dw8250_data(p->private_data);
159 
160     /* Allow the TX to drain before we reconfigure */
161     if (offset == UART_LCR) {
162         dw8250_tx_wait_empty(p);
163     }
164 
165     writeb(value, p->membase + (offset << p->regshift));
166 
167     if (offset == UART_LCR && !d->uart_16550_compatible) {
168         dw8250_check_lcr(p, value);
169     }
170 }
171 
dw8250_serial_out(struct uart_port * p,int offset,int value)172 static void dw8250_serial_out(struct uart_port *p, int offset, int value)
173 {
174     struct dw8250_data *d = to_dw8250_data(p->private_data);
175 
176     writeb(value, p->membase + (offset << p->regshift));
177 
178     if (offset == UART_LCR && !d->uart_16550_compatible) {
179         dw8250_check_lcr(p, value);
180     }
181 }
182 
dw8250_serial_in(struct uart_port * p,int offset)183 static unsigned int dw8250_serial_in(struct uart_port *p, int offset)
184 {
185     unsigned int value = readb(p->membase + (offset << p->regshift));
186 
187     return dw8250_modify_msr(p, offset, value);
188 }
189 
190 #ifdef CONFIG_64BIT
dw8250_serial_inq(struct uart_port * p,int offset)191 static unsigned int dw8250_serial_inq(struct uart_port *p, int offset)
192 {
193     unsigned int value;
194 
195     value = (u8)__raw_readq(p->membase + (offset << p->regshift));
196 
197     return dw8250_modify_msr(p, offset, value);
198 }
199 
dw8250_serial_outq(struct uart_port * p,int offset,int value)200 static void dw8250_serial_outq(struct uart_port *p, int offset, int value)
201 {
202     struct dw8250_data *d = to_dw8250_data(p->private_data);
203 
204     value &= 0xff;
205     __raw_writeq(value, p->membase + (offset << p->regshift));
206     /* Read back to ensure register write ordering. */
207     __raw_readq(p->membase + (UART_LCR << p->regshift));
208 
209     if (offset == UART_LCR && !d->uart_16550_compatible) {
210         dw8250_check_lcr(p, value);
211     }
212 }
213 #endif /* CONFIG_64BIT */
214 
dw8250_serial_out32(struct uart_port * p,int offset,int value)215 static void dw8250_serial_out32(struct uart_port *p, int offset, int value)
216 {
217     struct dw8250_data *d = to_dw8250_data(p->private_data);
218 
219     writel(value, p->membase + (offset << p->regshift));
220 
221     if (offset == UART_LCR && !d->uart_16550_compatible) {
222         dw8250_check_lcr(p, value);
223     }
224 }
225 
dw8250_serial_in32(struct uart_port * p,int offset)226 static unsigned int dw8250_serial_in32(struct uart_port *p, int offset)
227 {
228     unsigned int value = readl(p->membase + (offset << p->regshift));
229 
230     return dw8250_modify_msr(p, offset, value);
231 }
232 
dw8250_serial_out32be(struct uart_port * p,int offset,int value)233 static void dw8250_serial_out32be(struct uart_port *p, int offset, int value)
234 {
235     struct dw8250_data *d = to_dw8250_data(p->private_data);
236 
237     iowrite32be(value, p->membase + (offset << p->regshift));
238 
239     if (offset == UART_LCR && !d->uart_16550_compatible) {
240         dw8250_check_lcr(p, value);
241     }
242 }
243 
dw8250_serial_in32be(struct uart_port * p,int offset)244 static unsigned int dw8250_serial_in32be(struct uart_port *p, int offset)
245 {
246     unsigned int value = ioread32be(p->membase + (offset << p->regshift));
247 
248     return dw8250_modify_msr(p, offset, value);
249 }
250 
dw8250_handle_irq(struct uart_port * p)251 static int dw8250_handle_irq(struct uart_port *p)
252 {
253     struct dw8250_data *d = to_dw8250_data(p->private_data);
254     unsigned int iir = p->serial_in(p, UART_IIR);
255     unsigned int status, usr, rfl;
256     unsigned long flags;
257 
258     /*
259      * There are ways to get Designware-based UARTs into a state where
260      * they are asserting UART_IIR_RX_TIMEOUT but there is no actual
261      * data available.  If we see such a case then we'll do a bogus
262      * read.  If we don't do this then the "RX TIMEOUT" interrupt will
263      * fire forever.
264      */
265     if ((iir & 0x3f) == UART_IIR_RX_TIMEOUT) {
266         spin_lock_irqsave(&p->lock, flags);
267         usr = p->serial_in(p, d->usr_reg);
268         status = p->serial_in(p, UART_LSR);
269         rfl = p->serial_in(p, DW_UART_RFL);
270         if (!(status & (UART_LSR_DR | UART_LSR_BI)) && !(usr & 0x1) && (rfl == 0)) {
271             (void)p->serial_in(p, UART_RX);
272         }
273 
274         spin_unlock_irqrestore(&p->lock, flags);
275     }
276 
277     if (serial8250_handle_irq(p, iir)) {
278         return 1;
279     }
280 
281     if ((iir & UART_IIR_BUSY) == UART_IIR_BUSY) {
282         /* Clear the USR */
283         (void)p->serial_in(p, d->usr_reg);
284 
285         return 1;
286     }
287 
288     return 0;
289 }
290 
dw8250_clk_work_cb(struct work_struct * work)291 static void dw8250_clk_work_cb(struct work_struct *work)
292 {
293     struct dw8250_data *d = work_to_dw8250_data(work);
294     struct uart_8250_port *up;
295     unsigned long rate;
296 
297     rate = clk_get_rate(d->clk);
298     if (rate <= 0) {
299         return;
300     }
301 
302     up = serial8250_get_port(d->data.line);
303 
304     serial8250_update_uartclk(&up->port, rate);
305 }
306 
dw8250_clk_notifier_cb(struct notifier_block * nb,unsigned long event,void * data)307 static int dw8250_clk_notifier_cb(struct notifier_block *nb, unsigned long event, void *data)
308 {
309     struct dw8250_data *d = clk_to_dw8250_data(nb);
310 
311     /*
312      * We have no choice but to defer the uartclk update due to two
313      * deadlocks. First one is caused by a recursive mutex lock which
314      * happens when clk_set_rate() is called from dw8250_set_termios().
315      * Second deadlock is more tricky and is caused by an inverted order of
316      * the clk and tty-port mutexes lock. It happens if clock rate change
317      * is requested asynchronously while set_termios() is executed between
318      * tty-port mutex lock and clk_set_rate() function invocation and
319      * vise-versa. Anyway if we didn't have the reference clock alteration
320      * in the dw8250_set_termios() method we wouldn't have needed this
321      * deferred event handling complication.
322      */
323     if (event == POST_RATE_CHANGE) {
324         queue_work(system_unbound_wq, &d->clk_work);
325         return NOTIFY_OK;
326     }
327 
328     return NOTIFY_DONE;
329 }
330 
dw8250_do_pm(struct uart_port * port,unsigned int state,unsigned int old)331 static void dw8250_do_pm(struct uart_port *port, unsigned int state, unsigned int old)
332 {
333     if (!state) {
334         pm_runtime_get_sync(port->dev);
335     }
336 
337     serial8250_do_pm(port, state, old);
338 
339     if (state) {
340         pm_runtime_put_sync_suspend(port->dev);
341     }
342 }
343 
dw8250_set_termios(struct uart_port * p,struct ktermios * termios,struct ktermios * old)344 static void dw8250_set_termios(struct uart_port *p, struct ktermios *termios, struct ktermios *old)
345 {
346 #ifndef CONFIG_ARCH_ROCKCHIP
347     unsigned long newrate = tty_termios_baud_rate(termios) * 16;
348 #endif
349     struct dw8250_data *d = to_dw8250_data(p->private_data);
350     long rate;
351 #ifdef CONFIG_ARCH_ROCKCHIP
352     unsigned int baud = tty_termios_baud_rate(termios);
353     unsigned int rate_temp, diff;
354 #endif
355     int ret;
356 
357     clk_disable_unprepare(d->clk);
358 #ifdef CONFIG_ARCH_ROCKCHIP
359     if (baud <= 0x1c200) {
360         rate = 0x16e3600;
361     } else if (baud == 0x38400) {
362         rate = baud * 0x20;
363     } else if (baud == 0x119400) {
364         rate = baud * 0x20;
365     } else {
366         rate = baud * 0x10;
367     }
368 
369     ret = clk_set_rate(d->clk, rate);
370     rate_temp = clk_get_rate(d->clk);
371     diff = rate / 0x32;
372     /*
373      * If rate_temp is not equal to rate, is means fractional frequency
374      * division is failed. Then use Integer frequency division, and
375      * the baud rate error must be under -+2%
376      */
377     if ((rate_temp < rate) && ((rate - rate_temp) > diff)) {
378         ret = clk_set_rate(d->clk, rate + diff);
379         rate_temp = clk_get_rate(d->clk);
380         if ((rate_temp < rate) && ((rate - rate_temp) > diff)) {
381             dev_info(p->dev, "set rate:%ld, but get rate:%d\n", rate, rate_temp);
382         } else if ((rate < rate_temp) && ((rate_temp - rate) > diff)) {
383             dev_info(p->dev, "set rate:%ld, but get rate:%d\n", rate, rate_temp);
384         }
385     }
386     if (!ret) {
387         p->uartclk = rate;
388     }
389 #else
390     rate = clk_round_rate(d->clk, newrate);
391     if (rate > 0) {
392         /*
393          * Premilinary set the uartclk to the new clock rate so the
394          * clock update event handler caused by the clk_set_rate()
395          * calling wouldn't actually update the UART divisor since
396          * we about to do this anyway.
397          */
398         swap(p->uartclk, rate);
399         ret = clk_set_rate(d->clk, newrate);
400         if (ret) {
401             swap(p->uartclk, rate);
402         }
403     }
404 #endif
405     clk_prepare_enable(d->clk);
406 
407     p->status &= ~UPSTAT_AUTOCTS;
408     if (termios->c_cflag & CRTSCTS) {
409         p->status |= UPSTAT_AUTOCTS;
410     }
411 
412     serial8250_do_set_termios(p, termios, old);
413 }
414 
dw8250_set_ldisc(struct uart_port * p,struct ktermios * termios)415 static void dw8250_set_ldisc(struct uart_port *p, struct ktermios *termios)
416 {
417     struct uart_8250_port *up = up_to_u8250p(p);
418     unsigned int mcr = p->serial_in(p, UART_MCR);
419 
420     if (up->capabilities & UART_CAP_IRDA) {
421         if (termios->c_line == N_IRDA) {
422             mcr |= DW_UART_MCR_SIRE;
423         } else {
424             mcr &= ~DW_UART_MCR_SIRE;
425         }
426 
427         p->serial_out(p, UART_MCR, mcr);
428     }
429     serial8250_do_set_ldisc(p, termios);
430 }
431 
432 /*
433  * dw8250_fallback_dma_filter will prevent the UART from getting just any free
434  * channel on platforms that have DMA engines, but don't have any channels
435  * assigned to the UART.
436  *
437  * REVISIT: This is a work around for limitation in the DMA Engine API. Once the
438  * core problem is fixed, this function is no longer needed.
439  */
dw8250_fallback_dma_filter(struct dma_chan * chan,void * param)440 static bool dw8250_fallback_dma_filter(struct dma_chan *chan, void *param)
441 {
442     return false;
443 }
444 
dw8250_idma_filter(struct dma_chan * chan,void * param)445 static bool dw8250_idma_filter(struct dma_chan *chan, void *param)
446 {
447     return param == chan->device->dev;
448 }
449 
dw8250_quirks(struct uart_port * p,struct dw8250_data * data)450 static void dw8250_quirks(struct uart_port *p, struct dw8250_data *data)
451 {
452     if (p->dev->of_node) {
453         struct device_node *np = p->dev->of_node;
454         int id;
455 
456         /* get index of serial line, if found in DT aliases */
457         id = of_alias_get_id(np, "serial");
458         if (id >= 0) {
459             p->line = id;
460         }
461 #ifdef CONFIG_64BIT
462         if (of_device_is_compatible(np, "cavium,octeon-3860-uart")) {
463             p->serial_in = dw8250_serial_inq;
464             p->serial_out = dw8250_serial_outq;
465             p->flags = UPF_SKIP_TEST | UPF_SHARE_IRQ | UPF_FIXED_TYPE;
466             p->type = PORT_OCTEON;
467             data->usr_reg = 0x27;
468             data->skip_autocfg = true;
469         }
470 #endif
471         if (of_device_is_big_endian(p->dev->of_node)) {
472             p->iotype = UPIO_MEM32BE;
473             p->serial_in = dw8250_serial_in32be;
474             p->serial_out = dw8250_serial_out32be;
475         }
476         if (of_device_is_compatible(np, "marvell,armada-38x-uart")) {
477             p->serial_out = dw8250_serial_out38x;
478         }
479     } else if (acpi_dev_present("APMC0D08", NULL, -1)) {
480         p->iotype = UPIO_MEM32;
481         p->regshift = 0x2;
482         p->serial_in = dw8250_serial_in32;
483         data->uart_16550_compatible = true;
484     }
485 
486     /* Platforms with iDMA 64-bit */
487     if (platform_get_resource_byname(to_platform_device(p->dev), IORESOURCE_MEM, "lpss_priv")) {
488         data->data.dma.rx_param = p->dev->parent;
489         data->data.dma.tx_param = p->dev->parent;
490         data->data.dma.fn = dw8250_idma_filter;
491     }
492 }
493 
dw8250_probe(struct platform_device * pdev)494 static int dw8250_probe(struct platform_device *pdev)
495 {
496     struct uart_8250_port uart = {}, *up = &uart;
497     struct resource *regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
498     struct uart_port *p = &up->port;
499     struct device *dev = &pdev->dev;
500     struct dw8250_data *data;
501     int irq;
502     int err;
503     u32 val;
504 
505     if (!regs) {
506         dev_err(dev, "no registers defined\n");
507         return -EINVAL;
508     }
509 
510     irq = platform_get_irq(pdev, 0);
511     if (irq < 0) {
512         return irq;
513     }
514 
515     spin_lock_init(&p->lock);
516     p->mapbase = regs->start;
517     p->irq = irq;
518     p->handle_irq = dw8250_handle_irq;
519     p->pm = dw8250_do_pm;
520     p->type = PORT_8250;
521     p->flags = UPF_SHARE_IRQ | UPF_FIXED_PORT;
522     p->dev = dev;
523     p->iotype = UPIO_MEM;
524     p->serial_in = dw8250_serial_in;
525     p->serial_out = dw8250_serial_out;
526     p->set_ldisc = dw8250_set_ldisc;
527     p->set_termios = dw8250_set_termios;
528 
529     p->membase = devm_ioremap(dev, regs->start, resource_size(regs));
530     if (!p->membase) {
531         return -ENOMEM;
532     }
533 
534     data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
535     if (!data) {
536         return -ENOMEM;
537     }
538 
539     data->data.dma.fn = dw8250_fallback_dma_filter;
540     data->usr_reg = DW_UART_USR;
541     p->private_data = &data->data;
542 #ifdef CONFIG_ARCH_ROCKCHIP
543     data->irq = irq;
544 #endif
545 
546     data->uart_16550_compatible = device_property_read_bool(dev, "snps,uart-16550-compatible");
547 
548     err = device_property_read_u32(dev, "reg-shift", &val);
549     if (!err) {
550         p->regshift = val;
551     }
552 
553     err = device_property_read_u32(dev, "reg-io-width", &val);
554     if (!err && val == 0x4) {
555         p->iotype = UPIO_MEM32;
556         p->serial_in = dw8250_serial_in32;
557         p->serial_out = dw8250_serial_out32;
558     }
559 
560     if (device_property_read_bool(dev, "dcd-override")) {
561         /* Always report DCD as active */
562         data->msr_mask_on |= UART_MSR_DCD;
563         data->msr_mask_off |= UART_MSR_DDCD;
564     }
565 
566     if (device_property_read_bool(dev, "dsr-override")) {
567         /* Always report DSR as active */
568         data->msr_mask_on |= UART_MSR_DSR;
569         data->msr_mask_off |= UART_MSR_DDSR;
570     }
571 
572     if (device_property_read_bool(dev, "cts-override")) {
573         /* Always report CTS as active */
574         data->msr_mask_on |= UART_MSR_CTS;
575         data->msr_mask_off |= UART_MSR_DCTS;
576     }
577 
578     if (device_property_read_bool(dev, "ri-override")) {
579         /* Always report Ring indicator as inactive */
580         data->msr_mask_off |= UART_MSR_RI;
581         data->msr_mask_off |= UART_MSR_TERI;
582     }
583 
584 #ifdef CONFIG_ARCH_ROCKCHIP
585     if (device_property_read_bool(p->dev, "wakeup-source")) {
586         data->enable_wakeup = 1;
587     } else {
588         data->enable_wakeup = 0;
589     }
590 #endif
591 
592     /* Always ask for fixed clock rate from a property. */
593     device_property_read_u32(dev, "clock-frequency", &p->uartclk);
594 
595     /* If there is separate baudclk, get the rate from it. */
596     data->clk = devm_clk_get_optional(dev, "baudclk");
597     if (data->clk == NULL) {
598         data->clk = devm_clk_get_optional(dev, NULL);
599     }
600     if (IS_ERR(data->clk)) {
601         return PTR_ERR(data->clk);
602     }
603 
604     INIT_WORK(&data->clk_work, dw8250_clk_work_cb);
605     data->clk_notifier.notifier_call = dw8250_clk_notifier_cb;
606 
607     err = clk_prepare_enable(data->clk);
608     if (err) {
609         dev_warn(dev, "could not enable optional baudclk: %d\n", err);
610     }
611 
612     if (data->clk) {
613         p->uartclk = clk_get_rate(data->clk);
614     }
615 
616     /* If no clock rate is defined, fail. */
617     if (!p->uartclk) {
618         dev_err(dev, "clock rate not defined\n");
619         err = -EINVAL;
620         goto err_clk;
621     }
622 
623     data->pclk = devm_clk_get_optional(dev, "apb_pclk");
624     if (IS_ERR(data->pclk)) {
625         err = PTR_ERR(data->pclk);
626         goto err_clk;
627     }
628 
629     err = clk_prepare_enable(data->pclk);
630     if (err) {
631         dev_err(dev, "could not enable apb_pclk\n");
632         goto err_clk;
633     }
634 
635     data->rst = devm_reset_control_get_optional_exclusive(dev, NULL);
636     if (IS_ERR(data->rst)) {
637         err = PTR_ERR(data->rst);
638         goto err_pclk;
639     }
640     reset_control_deassert(data->rst);
641 
642     dw8250_quirks(p, data);
643 
644     /* If the Busy Functionality is not implemented, don't handle it */
645     if (data->uart_16550_compatible) {
646         p->handle_irq = NULL;
647     }
648 
649     if (!data->skip_autocfg) {
650         dw8250_setup_port(p);
651     }
652 
653     /* If we have a valid fifosize, try hooking up DMA */
654     if (p->fifosize) {
655         data->data.dma.rxconf.src_maxburst = p->fifosize / 0x4;
656         data->data.dma.txconf.dst_maxburst = p->fifosize / 0x4;
657         up->dma = &data->data.dma;
658     }
659 
660     data->data.line = serial8250_register_8250_port(up);
661     if (data->data.line < 0) {
662         err = data->data.line;
663         goto err_reset;
664     }
665 
666     /*
667      * Some platforms may provide a reference clock shared between several
668      * devices. In this case any clock state change must be known to the
669      * UART port at least post factum.
670      */
671     if (data->clk) {
672         err = clk_notifier_register(data->clk, &data->clk_notifier);
673         if (err) {
674             dev_warn(p->dev, "Failed to set the clock notifier\n");
675         } else {
676             queue_work(system_unbound_wq, &data->clk_work);
677         }
678     }
679 #ifdef CONFIG_ARCH_ROCKCHIP
680     if (data->enable_wakeup) {
681         device_init_wakeup(&pdev->dev, true);
682     }
683 #endif
684     platform_set_drvdata(pdev, data);
685 
686     pm_runtime_set_active(dev);
687     pm_runtime_enable(dev);
688 
689     return 0;
690 
691 err_reset:
692     reset_control_assert(data->rst);
693 
694 err_pclk:
695     clk_disable_unprepare(data->pclk);
696 
697 err_clk:
698     clk_disable_unprepare(data->clk);
699 
700     return err;
701 }
702 
dw8250_remove(struct platform_device * pdev)703 static int dw8250_remove(struct platform_device *pdev)
704 {
705     struct dw8250_data *data = platform_get_drvdata(pdev);
706     struct device *dev = &pdev->dev;
707 
708     pm_runtime_get_sync(dev);
709 
710     if (data->clk) {
711         clk_notifier_unregister(data->clk, &data->clk_notifier);
712 
713         flush_work(&data->clk_work);
714     }
715 
716     serial8250_unregister_port(data->data.line);
717 
718     reset_control_assert(data->rst);
719 
720     clk_disable_unprepare(data->pclk);
721 
722     clk_disable_unprepare(data->clk);
723 
724     pm_runtime_disable(dev);
725     pm_runtime_put_noidle(dev);
726 #ifdef CONFIG_ARCH_ROCKCHIP
727     if (data->enable_wakeup) {
728         device_init_wakeup(&pdev->dev, false);
729     }
730 #endif
731 
732     return 0;
733 }
734 
735 #ifdef CONFIG_PM_SLEEP
dw8250_suspend(struct device * dev)736 static int dw8250_suspend(struct device *dev)
737 {
738     struct dw8250_data *data = dev_get_drvdata(dev);
739 
740     serial8250_suspend_port(data->data.line);
741 #ifdef CONFIG_ARCH_ROCKCHIP
742     if (device_may_wakeup(dev)) {
743         if (!enable_irq_wake(data->irq)) {
744             data->irq_wake = 1;
745         }
746         return 0;
747     }
748 #endif
749 
750     return 0;
751 }
752 
dw8250_resume(struct device * dev)753 static int dw8250_resume(struct device *dev)
754 {
755     struct dw8250_data *data = dev_get_drvdata(dev);
756 
757     serial8250_resume_port(data->data.line);
758 #ifdef CONFIG_ARCH_ROCKCHIP
759     if (device_may_wakeup(dev)) {
760         if (data->irq_wake) {
761             disable_irq_wake(data->irq);
762             data->irq_wake = 0;
763         }
764         return 0;
765     }
766 #endif
767 
768     return 0;
769 }
770 #endif /* CONFIG_PM_SLEEP */
771 
772 #ifdef CONFIG_PM
dw8250_runtime_suspend(struct device * dev)773 static int dw8250_runtime_suspend(struct device *dev)
774 {
775     struct dw8250_data *data = dev_get_drvdata(dev);
776 
777     clk_disable_unprepare(data->clk);
778 
779     clk_disable_unprepare(data->pclk);
780 
781     return 0;
782 }
783 
dw8250_runtime_resume(struct device * dev)784 static int dw8250_runtime_resume(struct device *dev)
785 {
786     struct dw8250_data *data = dev_get_drvdata(dev);
787 
788     clk_prepare_enable(data->pclk);
789 
790     clk_prepare_enable(data->clk);
791 
792     return 0;
793 }
794 #endif
795 
796 static const struct dev_pm_ops dw8250_pm_ops = {SET_SYSTEM_SLEEP_PM_OPS(
797     dw8250_suspend, dw8250_resume) SET_RUNTIME_PM_OPS(dw8250_runtime_suspend, dw8250_runtime_resume, NULL)};
798 
799 static const struct of_device_id dw8250_of_match[] = {{.compatible = "snps,dw-apb-uart"},
800                                                       {.compatible = "cavium,octeon-3860-uart"},
801                                                       {.compatible = "marvell,armada-38x-uart"},
802                                                       {.compatible = "renesas,rzn1-uart"},
803                                                       {}};
804 MODULE_DEVICE_TABLE(of, dw8250_of_match);
805 
806 static const struct acpi_device_id dw8250_acpi_match[] = {
807     {"INT33C4", 0},
808     {"INT33C5", 0},
809     {"INT3434", 0},
810     {"INT3435", 0},
811     {"80860F0A", 0},
812     {"8086228A", 0},
813     {"APMC0D08", 0},
814     {"AMD0020", 0},
815     {"AMDI0020", 0},
816     {"AMDI0022", 0},
817     {"BRCM2032", 0},
818     {"HISI0031", 0},
819     {},
820 };
821 MODULE_DEVICE_TABLE(acpi, dw8250_acpi_match);
822 
823 static struct platform_driver dw8250_platform_driver = {
824     .driver =
825         {
826             .name = "dw-apb-uart",
827             .pm = &dw8250_pm_ops,
828             .of_match_table = dw8250_of_match,
829             .acpi_match_table = dw8250_acpi_match,
830         },
831     .probe = dw8250_probe,
832     .remove = dw8250_remove,
833 };
834 
835 module_platform_driver(dw8250_platform_driver);
836 
837 MODULE_AUTHOR("Jamie Iles");
838 MODULE_LICENSE("GPL");
839 MODULE_DESCRIPTION("Synopsys DesignWare 8250 serial port driver");
840 MODULE_ALIAS("platform:dw-apb-uart");
841