1/*
2 * MPC8xx Device descriptions
3 *
4 * Maintainer: Kumar Gala <galak@kernel.crashing.org>
5 *
6 * Copyright 2005 MontaVista Software, Inc. by Vitaly Bordug<vbordug@ru.mvista.com>
7 *
8 * This program is free software; you can redistribute  it and/or modify it
9 * under  the terms of  the GNU General  Public License as published by the
10 * Free Software Foundation;  either version 2 of the  License, or (at your
11 * option) any later version.
12 */
13
14#include <linux/init.h>
15#include <linux/module.h>
16#include <linux/device.h>
17#include <linux/serial_8250.h>
18#include <linux/mii.h>
19#include <asm/commproc.h>
20#include <asm/mpc8xx.h>
21#include <asm/irq.h>
22#include <asm/ppc_sys.h>
23
24/* We use offsets for IORESOURCE_MEM to do not set dependencies at compile time.
25 * They will get fixed up by mach_mpc8xx_fixup
26 */
27
28struct platform_device ppc_sys_platform_devices[] = {
29	[MPC8xx_CPM_FEC1] =	{
30		.name = "fsl-cpm-fec",
31		.id	= 1,
32		.num_resources = 2,
33		.resource = (struct resource[])	{
34			{
35				.name 	= "regs",
36				.start	= 0xe00,
37				.end	= 0xe88,
38				.flags	= IORESOURCE_MEM,
39			},
40			{
41				.name	= "interrupt",
42				.start	= MPC8xx_INT_FEC1,
43				.end	= MPC8xx_INT_FEC1,
44				.flags	= IORESOURCE_IRQ,
45			},
46		},
47	},
48	[MPC8xx_CPM_FEC2] =	{
49		.name = "fsl-cpm-fec",
50		.id	= 2,
51		.num_resources = 2,
52		.resource = (struct resource[])	{
53			{
54				.name	= "regs",
55				.start	= 0x1e00,
56				.end	= 0x1e88,
57				.flags	= IORESOURCE_MEM,
58			},
59			{
60				.name	= "interrupt",
61				.start	= MPC8xx_INT_FEC2,
62				.end	= MPC8xx_INT_FEC2,
63				.flags	= IORESOURCE_IRQ,
64			},
65		},
66	},
67	[MPC8xx_CPM_SCC1] = {
68		.name = "fsl-cpm-scc",
69		.id	= 1,
70		.num_resources = 3,
71		.resource = (struct resource[]) {
72			{
73				.name	= "regs",
74				.start	= 0xa00,
75				.end	= 0xa18,
76				.flags	= IORESOURCE_MEM,
77			},
78			{
79				.name 	= "pram",
80				.start 	= 0x3c00,
81				.end 	= 0x3c7f,
82				.flags 	= IORESOURCE_MEM,
83			},
84			{
85				.name	= "interrupt",
86				.start	= MPC8xx_INT_SCC1,
87				.end	= MPC8xx_INT_SCC1,
88				.flags	= IORESOURCE_IRQ,
89			},
90		},
91	},
92	[MPC8xx_CPM_SCC2] = {
93		.name = "fsl-cpm-scc",
94		.id	= 2,
95		.num_resources	= 3,
96		.resource = (struct resource[]) {
97			{
98				.name	= "regs",
99				.start	= 0xa20,
100				.end	= 0xa38,
101				.flags	= IORESOURCE_MEM,
102			},
103			{
104				.name 	= "pram",
105				.start 	= 0x3d00,
106				.end 	= 0x3d7f,
107				.flags 	= IORESOURCE_MEM,
108			},
109
110			{
111				.name	= "interrupt",
112				.start	= MPC8xx_INT_SCC2,
113				.end	= MPC8xx_INT_SCC2,
114				.flags	= IORESOURCE_IRQ,
115			},
116		},
117	},
118	[MPC8xx_CPM_SCC3] = {
119		.name = "fsl-cpm-scc",
120		.id	= 3,
121		.num_resources	= 3,
122		.resource = (struct resource[]) {
123			{
124				.name	= "regs",
125				.start	= 0xa40,
126				.end	= 0xa58,
127				.flags	= IORESOURCE_MEM,
128			},
129			{
130				.name 	= "pram",
131				.start 	= 0x3e00,
132				.end 	= 0x3e7f,
133				.flags 	= IORESOURCE_MEM,
134			},
135
136			{
137				.name	= "interrupt",
138				.start	= MPC8xx_INT_SCC3,
139				.end	= MPC8xx_INT_SCC3,
140				.flags	= IORESOURCE_IRQ,
141			},
142		},
143	},
144	[MPC8xx_CPM_SCC4] = {
145		.name = "fsl-cpm-scc",
146		.id	= 4,
147		.num_resources	= 3,
148		.resource = (struct resource[]) {
149			{
150				.name	= "regs",
151				.start	= 0xa60,
152				.end	= 0xa78,
153				.flags	= IORESOURCE_MEM,
154			},
155			{
156				.name 	= "pram",
157				.start 	= 0x3f00,
158				.end 	= 0x3f7f,
159				.flags 	= IORESOURCE_MEM,
160			},
161
162			{
163				.name	= "interrupt",
164				.start	= MPC8xx_INT_SCC4,
165				.end	= MPC8xx_INT_SCC4,
166				.flags	= IORESOURCE_IRQ,
167			},
168		},
169	},
170	[MPC8xx_CPM_SMC1] = {
171		.name = "fsl-cpm-smc",
172		.id	= 1,
173		.num_resources	= 3,
174		.resource = (struct resource[]) {
175			{
176				.name	= "regs",
177				.start	= 0xa80,
178				.end	= 0xa8f,
179				.flags	= IORESOURCE_MEM,
180			},
181			{
182				.name	= "pram",
183				.start	= 0x3e80,
184				.end	= 0x3ebf,
185				.flags	= IORESOURCE_MEM,
186			},
187			{
188				.name	= "interrupt",
189				.start	= MPC8xx_INT_SMC1,
190				.end	= MPC8xx_INT_SMC1,
191				.flags	= IORESOURCE_IRQ,
192			},
193		},
194	},
195	[MPC8xx_CPM_SMC2] = {
196		.name = "fsl-cpm-smc",
197		.id	= 2,
198		.num_resources	= 3,
199		.resource = (struct resource[]) {
200			{
201				.name	= "regs",
202				.start	= 0xa90,
203				.end	= 0xa9f,
204				.flags	= IORESOURCE_MEM,
205			},
206			{
207 				.name	= "pram",
208 				.start	= 0x3f80,
209 				.end	= 0x3fbf,
210 				.flags	= IORESOURCE_MEM,
211
212			},
213			{
214				.name	= "interrupt",
215				.start	= MPC8xx_INT_SMC2,
216				.end	= MPC8xx_INT_SMC2,
217				.flags	= IORESOURCE_IRQ,
218			},
219		},
220	},
221
222        [MPC8xx_MDIO_FEC] = {
223                .name = "fsl-cpm-fec-mdio",
224                .id = 0,
225                .num_resources = 0,
226
227        },
228
229};
230
231static int __init mach_mpc8xx_fixup(struct platform_device *pdev)
232{
233	ppc_sys_fixup_mem_resource (pdev, IMAP_ADDR);
234	return 0;
235}
236
237static int __init mach_mpc8xx_init(void)
238{
239	ppc_sys_device_fixup = mach_mpc8xx_fixup;
240	return 0;
241}
242
243postcore_initcall(mach_mpc8xx_init);
244