Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/mips/mti-malta/malta-platform.c
26450 views
1
/*
2
* This file is subject to the terms and conditions of the GNU General Public
3
* License. See the file "COPYING" in the main directory of this archive
4
* for more details.
5
*
6
* Copyright (C) 2006, 07 MIPS Technologies, Inc.
7
* written by Ralf Baechle ([email protected])
8
* written by Ralf Baechle <[email protected]>
9
*
10
* Copyright (C) 2008 Wind River Systems, Inc.
11
* updated by Tiejun Chen <[email protected]>
12
*
13
* 1. Probe driver for the Malta's UART ports:
14
*
15
* o 2 ports in the SMC SuperIO
16
* o 1 port in the CBUS UART, a discrete 16550 which normally is only used
17
* for bringups.
18
*
19
* We don't use 8250_platform.c on Malta as it would result in the CBUS
20
* UART becoming ttyS0.
21
*
22
* 2. Register RTC-CMOS platform device on Malta.
23
*/
24
#include <linux/init.h>
25
#include <linux/serial_8250.h>
26
#include <linux/irq.h>
27
#include <linux/platform_device.h>
28
#include <asm/mips-boards/maltaint.h>
29
30
#define SMC_PORT(base, int) \
31
{ \
32
.iobase = base, \
33
.irq = int, \
34
.uartclk = 1843200, \
35
.iotype = UPIO_PORT, \
36
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | \
37
UPF_MAGIC_MULTIPLIER, \
38
.regshift = 0, \
39
}
40
41
#define CBUS_UART_FLAGS (UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP)
42
43
static struct plat_serial8250_port uart8250_data[] = {
44
SMC_PORT(0x3F8, 4),
45
SMC_PORT(0x2F8, 3),
46
{
47
.mapbase = 0x1f000900, /* The CBUS UART */
48
.irq = MIPS_CPU_IRQ_BASE + MIPSCPU_INT_MB2,
49
.uartclk = 3686400, /* Twice the usual clk! */
50
.iotype = IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) ?
51
UPIO_MEM32BE : UPIO_MEM32,
52
.flags = CBUS_UART_FLAGS,
53
.regshift = 3,
54
},
55
{ },
56
};
57
58
static struct platform_device malta_uart8250_device = {
59
.name = "serial8250",
60
.id = PLAT8250_DEV_PLATFORM,
61
.dev = {
62
.platform_data = uart8250_data,
63
},
64
};
65
66
static struct platform_device *malta_devices[] __initdata = {
67
&malta_uart8250_device,
68
};
69
70
static int __init malta_add_devices(void)
71
{
72
return platform_add_devices(malta_devices, ARRAY_SIZE(malta_devices));
73
}
74
75
device_initcall(malta_add_devices);
76
77