Pull percpu-dtc into release branch
[linux-2.6] / arch / sh / kernel / cpu / sh2 / setup-sh7619.c
1 /*
2  * SH7619 Setup
3  *
4  *  Copyright (C) 2006  Yoshinori Sato
5  *
6  * This file is subject to the terms and conditions of the GNU General Public
7  * License.  See the file "COPYING" in the main directory of this archive
8  * for more details.
9  */
10 #include <linux/platform_device.h>
11 #include <linux/init.h>
12 #include <linux/serial.h>
13 #include <asm/sci.h>
14
15 static struct plat_sci_port sci_platform_data[] = {
16         {
17                 .mapbase        = 0xf8400000,
18                 .flags          = UPF_BOOT_AUTOCONF,
19                 .type           = PORT_SCIF,
20                 .irqs           =  { 88, 89, 91, 90},
21         }, {
22                 .mapbase        = 0xf8410000,
23                 .flags          = UPF_BOOT_AUTOCONF,
24                 .type           = PORT_SCIF,
25                 .irqs           =  { 92, 93, 95, 94},
26         }, {
27                 .mapbase        = 0xf8420000,
28                 .flags          = UPF_BOOT_AUTOCONF,
29                 .type           = PORT_SCIF,
30                 .irqs           =  { 96, 97, 99, 98},
31         }, {
32                 .flags = 0,
33         }
34 };
35
36 static struct platform_device sci_device = {
37         .name           = "sh-sci",
38         .id             = -1,
39         .dev            = {
40                 .platform_data  = sci_platform_data,
41         },
42 };
43
44 static struct platform_device *sh7619_devices[] __initdata = {
45         &sci_device,
46 };
47
48 static int __init sh7619_devices_setup(void)
49 {
50         return platform_add_devices(sh7619_devices,
51                                     ARRAY_SIZE(sh7619_devices));
52 }
53 __initcall(sh7619_devices_setup);
54
55 static struct ipr_data sh7619_ipr_map[] = {
56         { 86, 0,  4, 2 },       /* CMI0 */
57         { 88, 1, 12, 3 },       /* SCIF0_ERI */
58         { 89, 1, 12, 3 },       /* SCIF0_RXI */
59         { 90, 1, 12, 3 },       /* SCIF0_BRI */
60         { 91, 1, 12, 3 },       /* SCIF0_TXI */
61         { 92, 1,  8, 3 },       /* SCIF1_ERI */
62         { 93, 1,  8, 3 },       /* SCIF1_RXI */
63         { 94, 1,  8, 3 },       /* SCIF1_BRI */
64         { 95, 1,  8, 3 },       /* SCIF1_TXI */
65         { 96, 1,  4, 3 },       /* SCIF2_ERI */
66         { 97, 1,  4, 3 },       /* SCIF2_RXI */
67         { 98, 1,  4, 3 },       /* SCIF2_BRI */
68         { 99, 1,  4, 3 },       /* SCIF2_TXI */
69 };
70
71 static unsigned int ipr_offsets[] = {
72         0xf8080000,     /* IPRC */
73         0xf8080002,     /* IPRD */
74         0xf8080004,     /* IPRE */
75         0xf8080006,     /* IPRF */
76         0xf8080008,     /* IPRG */
77 };
78
79 /* given the IPR index return the address of the IPR register */
80 unsigned int map_ipridx_to_addr(int idx)
81 {
82         if (unlikely(idx >= ARRAY_SIZE(ipr_offsets)))
83                 return 0;
84         return ipr_offsets[idx];
85 }
86
87 void __init init_IRQ_ipr(void)
88 {
89         make_ipr_irq(sh7619_ipr_map, ARRAY_SIZE(sh7619_ipr_map));
90 }