Lines Matching refs:p

77 static inline int dw8250_modify_msr(struct uart_port *p, int offset, int value)  in dw8250_modify_msr()  argument
79 struct dw8250_data *d = p->private_data; in dw8250_modify_msr()
90 static void dw8250_force_idle(struct uart_port *p) in dw8250_force_idle() argument
92 struct uart_8250_port *up = up_to_u8250p(p); in dw8250_force_idle()
95 (void)p->serial_in(p, UART_RX); in dw8250_force_idle()
98 static void dw8250_serial_out(struct uart_port *p, int offset, int value) in dw8250_serial_out() argument
100 writeb(value, p->membase + (offset << p->regshift)); in dw8250_serial_out()
106 unsigned int lcr = p->serial_in(p, UART_LCR); in dw8250_serial_out()
109 dw8250_force_idle(p); in dw8250_serial_out()
110 writeb(value, p->membase + (UART_LCR << p->regshift)); in dw8250_serial_out()
119 static unsigned int dw8250_serial_in(struct uart_port *p, int offset) in dw8250_serial_in() argument
121 unsigned int value = readb(p->membase + (offset << p->regshift)); in dw8250_serial_in()
123 return dw8250_modify_msr(p, offset, value); in dw8250_serial_in()
127 static unsigned int dw8250_serial_inq(struct uart_port *p, int offset) in dw8250_serial_inq() argument
131 value = (u8)__raw_readq(p->membase + (offset << p->regshift)); in dw8250_serial_inq()
133 return dw8250_modify_msr(p, offset, value); in dw8250_serial_inq()
136 static void dw8250_serial_outq(struct uart_port *p, int offset, int value) in dw8250_serial_outq() argument
139 __raw_writeq(value, p->membase + (offset << p->regshift)); in dw8250_serial_outq()
141 __raw_readq(p->membase + (UART_LCR << p->regshift)); in dw8250_serial_outq()
147 unsigned int lcr = p->serial_in(p, UART_LCR); in dw8250_serial_outq()
150 dw8250_force_idle(p); in dw8250_serial_outq()
152 p->membase + (UART_LCR << p->regshift)); in dw8250_serial_outq()
162 static void dw8250_serial_out32(struct uart_port *p, int offset, int value) in dw8250_serial_out32() argument
164 writel(value, p->membase + (offset << p->regshift)); in dw8250_serial_out32()
170 unsigned int lcr = p->serial_in(p, UART_LCR); in dw8250_serial_out32()
173 dw8250_force_idle(p); in dw8250_serial_out32()
174 writel(value, p->membase + (UART_LCR << p->regshift)); in dw8250_serial_out32()
183 static unsigned int dw8250_serial_in32(struct uart_port *p, int offset) in dw8250_serial_in32() argument
185 unsigned int value = readl(p->membase + (offset << p->regshift)); in dw8250_serial_in32()
187 return dw8250_modify_msr(p, offset, value); in dw8250_serial_in32()
190 static int dw8250_handle_irq(struct uart_port *p) in dw8250_handle_irq() argument
192 struct dw8250_data *d = p->private_data; in dw8250_handle_irq()
193 unsigned int iir = p->serial_in(p, UART_IIR); in dw8250_handle_irq()
195 if (serial8250_handle_irq(p, iir)) { in dw8250_handle_irq()
199 (void)p->serial_in(p, d->usr_reg); in dw8250_handle_irq()
219 static void dw8250_set_termios(struct uart_port *p, struct ktermios *termios, in dw8250_set_termios() argument
223 struct dw8250_data *d = p->private_data; in dw8250_set_termios()
236 p->uartclk = rate; in dw8250_set_termios()
238 p->status &= ~UPSTAT_AUTOCTS; in dw8250_set_termios()
240 p->status |= UPSTAT_AUTOCTS; in dw8250_set_termios()
243 serial8250_do_set_termios(p, termios, old); in dw8250_set_termios()
264 static void dw8250_quirks(struct uart_port *p, struct dw8250_data *data) in dw8250_quirks() argument
266 if (p->dev->of_node) { in dw8250_quirks()
267 struct device_node *np = p->dev->of_node; in dw8250_quirks()
273 p->line = id; in dw8250_quirks()
276 p->serial_in = dw8250_serial_inq; in dw8250_quirks()
277 p->serial_out = dw8250_serial_outq; in dw8250_quirks()
278 p->flags = UPF_SKIP_TEST | UPF_SHARE_IRQ | UPF_FIXED_TYPE; in dw8250_quirks()
279 p->type = PORT_OCTEON; in dw8250_quirks()
284 } else if (has_acpi_companion(p->dev)) { in dw8250_quirks()
285 p->iotype = UPIO_MEM32; in dw8250_quirks()
286 p->regshift = 2; in dw8250_quirks()
287 p->serial_in = dw8250_serial_in32; in dw8250_quirks()
288 p->set_termios = dw8250_set_termios; in dw8250_quirks()
294 if (platform_get_resource_byname(to_platform_device(p->dev), in dw8250_quirks()
296 p->set_termios = dw8250_set_termios; in dw8250_quirks()
297 data->dma.rx_param = p->dev->parent; in dw8250_quirks()
298 data->dma.tx_param = p->dev->parent; in dw8250_quirks()
303 static void dw8250_setup_port(struct uart_port *p) in dw8250_setup_port() argument
305 struct uart_8250_port *up = up_to_u8250p(p); in dw8250_setup_port()
312 reg = readl(p->membase + DW_UART_UCV); in dw8250_setup_port()
316 dev_dbg(p->dev, "Designware UART version %c.%c%c\n", in dw8250_setup_port()
319 reg = readl(p->membase + DW_UART_CPR); in dw8250_setup_port()
325 p->type = PORT_16550A; in dw8250_setup_port()
326 p->flags |= UPF_FIXED_TYPE; in dw8250_setup_port()
327 p->fifosize = DW_UART_CPR_FIFO_SIZE(reg); in dw8250_setup_port()
340 struct uart_port *p = &uart.port; in dw8250_probe() local
356 spin_lock_init(&p->lock); in dw8250_probe()
357 p->mapbase = regs->start; in dw8250_probe()
358 p->irq = irq; in dw8250_probe()
359 p->handle_irq = dw8250_handle_irq; in dw8250_probe()
360 p->pm = dw8250_do_pm; in dw8250_probe()
361 p->type = PORT_8250; in dw8250_probe()
362 p->flags = UPF_SHARE_IRQ | UPF_FIXED_PORT; in dw8250_probe()
363 p->dev = &pdev->dev; in dw8250_probe()
364 p->iotype = UPIO_MEM; in dw8250_probe()
365 p->serial_in = dw8250_serial_in; in dw8250_probe()
366 p->serial_out = dw8250_serial_out; in dw8250_probe()
368 p->membase = devm_ioremap(&pdev->dev, regs->start, resource_size(regs)); in dw8250_probe()
369 if (!p->membase) in dw8250_probe()
378 p->private_data = data; in dw8250_probe()
380 data->uart_16550_compatible = device_property_read_bool(p->dev, in dw8250_probe()
383 err = device_property_read_u32(p->dev, "reg-shift", &val); in dw8250_probe()
385 p->regshift = val; in dw8250_probe()
387 err = device_property_read_u32(p->dev, "reg-io-width", &val); in dw8250_probe()
389 p->iotype = UPIO_MEM32; in dw8250_probe()
390 p->serial_in = dw8250_serial_in32; in dw8250_probe()
391 p->serial_out = dw8250_serial_out32; in dw8250_probe()
394 if (device_property_read_bool(p->dev, "dcd-override")) { in dw8250_probe()
400 if (device_property_read_bool(p->dev, "dsr-override")) { in dw8250_probe()
406 if (device_property_read_bool(p->dev, "cts-override")) { in dw8250_probe()
412 if (device_property_read_bool(p->dev, "ri-override")) { in dw8250_probe()
419 device_property_read_u32(p->dev, "clock-frequency", &p->uartclk); in dw8250_probe()
433 p->uartclk = clk_get_rate(data->clk); in dw8250_probe()
437 if (!p->uartclk) { in dw8250_probe()
463 dw8250_quirks(p, data); in dw8250_probe()
467 p->serial_out = NULL; in dw8250_probe()
468 p->handle_irq = NULL; in dw8250_probe()
472 dw8250_setup_port(p); in dw8250_probe()
475 if (p->fifosize) { in dw8250_probe()
476 data->dma.rxconf.src_maxburst = p->fifosize / 4; in dw8250_probe()
477 data->dma.txconf.dst_maxburst = p->fifosize / 4; in dw8250_probe()