]>
Commit | Line | Data |
---|---|---|
1a59d1b8 | 1 | // SPDX-License-Identifier: GPL-2.0-or-later |
1da177e4 LT |
2 | |
3 | /* | |
4 | * IBM ASM Service Processor Device Driver | |
5 | * | |
1da177e4 LT |
6 | * Copyright (C) IBM Corporation, 2004 |
7 | * | |
d36b6910 | 8 | * Author: Max Asböck <amax@us.ibm.com> |
1da177e4 LT |
9 | */ |
10 | ||
11 | #include <linux/termios.h> | |
12 | #include <linux/tty.h> | |
13 | #include <linux/serial_core.h> | |
1da177e4 | 14 | #include <linux/serial_reg.h> |
66172d25 | 15 | #include <linux/serial_8250.h> |
1da177e4 LT |
16 | #include "ibmasm.h" |
17 | #include "lowlevel.h" | |
18 | ||
19 | ||
20 | void ibmasm_register_uart(struct service_processor *sp) | |
21 | { | |
ce7240e4 | 22 | struct uart_8250_port uart; |
1da177e4 LT |
23 | void __iomem *iomem_base; |
24 | ||
25 | iomem_base = sp->base_address + SCOUT_COM_B_BASE; | |
26 | ||
27 | /* read the uart scratch register to determine if the UART | |
28 | * is dedicated to the service processor or if the OS can use it | |
29 | */ | |
30 | if (0 == readl(iomem_base + UART_SCR)) { | |
31 | dev_info(sp->dev, "IBM SP UART not registered, owned by service processor\n"); | |
32 | sp->serial_line = -1; | |
33 | return; | |
34 | } | |
35 | ||
ce7240e4 AC |
36 | memset(&uart, 0, sizeof(uart)); |
37 | uart.port.irq = sp->irq; | |
38 | uart.port.uartclk = 3686400; | |
39 | uart.port.flags = UPF_SHARE_IRQ; | |
40 | uart.port.iotype = UPIO_MEM; | |
41 | uart.port.membase = iomem_base; | |
1da177e4 | 42 | |
ce7240e4 | 43 | sp->serial_line = serial8250_register_8250_port(&uart); |
1da177e4 LT |
44 | if (sp->serial_line < 0) { |
45 | dev_err(sp->dev, "Failed to register serial port\n"); | |
46 | return; | |
47 | } | |
48 | enable_uart_interrupts(sp->base_address); | |
49 | } | |
50 | ||
51 | void ibmasm_unregister_uart(struct service_processor *sp) | |
52 | { | |
53 | if (sp->serial_line < 0) | |
54 | return; | |
55 | ||
56 | disable_uart_interrupts(sp->base_address); | |
66172d25 | 57 | serial8250_unregister_port(sp->serial_line); |
1da177e4 | 58 | } |