Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/powerpc/platforms/85xx/mpc85xx_rdb.c
10820 views
1
/*
2
* MPC85xx RDB Board Setup
3
*
4
* Copyright 2009 Freescale Semiconductor Inc.
5
*
6
* This program is free software; you can redistribute it and/or modify it
7
* under the terms of the GNU General Public License as published by the
8
* Free Software Foundation; either version 2 of the License, or (at your
9
* option) any later version.
10
*/
11
12
#include <linux/stddef.h>
13
#include <linux/kernel.h>
14
#include <linux/pci.h>
15
#include <linux/kdev_t.h>
16
#include <linux/delay.h>
17
#include <linux/seq_file.h>
18
#include <linux/interrupt.h>
19
#include <linux/of_platform.h>
20
21
#include <asm/system.h>
22
#include <asm/time.h>
23
#include <asm/machdep.h>
24
#include <asm/pci-bridge.h>
25
#include <mm/mmu_decl.h>
26
#include <asm/prom.h>
27
#include <asm/udbg.h>
28
#include <asm/mpic.h>
29
30
#include <sysdev/fsl_soc.h>
31
#include <sysdev/fsl_pci.h>
32
33
#undef DEBUG
34
35
#ifdef DEBUG
36
#define DBG(fmt, args...) printk(KERN_ERR "%s: " fmt, __func__, ## args)
37
#else
38
#define DBG(fmt, args...)
39
#endif
40
41
42
void __init mpc85xx_rdb_pic_init(void)
43
{
44
struct mpic *mpic;
45
struct resource r;
46
struct device_node *np;
47
unsigned long root = of_get_flat_dt_root();
48
49
np = of_find_node_by_type(NULL, "open-pic");
50
if (np == NULL) {
51
printk(KERN_ERR "Could not find open-pic node\n");
52
return;
53
}
54
55
if (of_address_to_resource(np, 0, &r)) {
56
printk(KERN_ERR "Failed to map mpic register space\n");
57
of_node_put(np);
58
return;
59
}
60
61
if (of_flat_dt_is_compatible(root, "fsl,85XXRDB-CAMP")) {
62
mpic = mpic_alloc(np, r.start,
63
MPIC_PRIMARY |
64
MPIC_BIG_ENDIAN | MPIC_BROKEN_FRR_NIRQS,
65
0, 256, " OpenPIC ");
66
} else {
67
mpic = mpic_alloc(np, r.start,
68
MPIC_PRIMARY | MPIC_WANTS_RESET |
69
MPIC_BIG_ENDIAN | MPIC_BROKEN_FRR_NIRQS |
70
MPIC_SINGLE_DEST_CPU,
71
0, 256, " OpenPIC ");
72
}
73
74
BUG_ON(mpic == NULL);
75
of_node_put(np);
76
77
mpic_init(mpic);
78
79
}
80
81
/*
82
* Setup the architecture
83
*/
84
#ifdef CONFIG_SMP
85
extern void __init mpc85xx_smp_init(void);
86
#endif
87
static void __init mpc85xx_rdb_setup_arch(void)
88
{
89
#ifdef CONFIG_PCI
90
struct device_node *np;
91
#endif
92
93
if (ppc_md.progress)
94
ppc_md.progress("mpc85xx_rdb_setup_arch()", 0);
95
96
#ifdef CONFIG_PCI
97
for_each_node_by_type(np, "pci") {
98
if (of_device_is_compatible(np, "fsl,mpc8548-pcie"))
99
fsl_add_bridge(np, 0);
100
}
101
102
#endif
103
104
#ifdef CONFIG_SMP
105
mpc85xx_smp_init();
106
#endif
107
108
printk(KERN_INFO "MPC85xx RDB board from Freescale Semiconductor\n");
109
}
110
111
static struct of_device_id __initdata mpc85xxrdb_ids[] = {
112
{ .type = "soc", },
113
{ .compatible = "soc", },
114
{ .compatible = "simple-bus", },
115
{ .compatible = "gianfar", },
116
{},
117
};
118
119
static int __init mpc85xxrdb_publish_devices(void)
120
{
121
return of_platform_bus_probe(NULL, mpc85xxrdb_ids, NULL);
122
}
123
machine_device_initcall(p2020_rdb, mpc85xxrdb_publish_devices);
124
machine_device_initcall(p1020_rdb, mpc85xxrdb_publish_devices);
125
126
/*
127
* Called very early, device-tree isn't unflattened
128
*/
129
static int __init p2020_rdb_probe(void)
130
{
131
unsigned long root = of_get_flat_dt_root();
132
133
if (of_flat_dt_is_compatible(root, "fsl,P2020RDB"))
134
return 1;
135
return 0;
136
}
137
138
static int __init p1020_rdb_probe(void)
139
{
140
unsigned long root = of_get_flat_dt_root();
141
142
if (of_flat_dt_is_compatible(root, "fsl,P1020RDB"))
143
return 1;
144
return 0;
145
}
146
147
define_machine(p2020_rdb) {
148
.name = "P2020 RDB",
149
.probe = p2020_rdb_probe,
150
.setup_arch = mpc85xx_rdb_setup_arch,
151
.init_IRQ = mpc85xx_rdb_pic_init,
152
#ifdef CONFIG_PCI
153
.pcibios_fixup_bus = fsl_pcibios_fixup_bus,
154
#endif
155
.get_irq = mpic_get_irq,
156
.restart = fsl_rstcr_restart,
157
.calibrate_decr = generic_calibrate_decr,
158
.progress = udbg_progress,
159
};
160
161
define_machine(p1020_rdb) {
162
.name = "P1020 RDB",
163
.probe = p1020_rdb_probe,
164
.setup_arch = mpc85xx_rdb_setup_arch,
165
.init_IRQ = mpc85xx_rdb_pic_init,
166
#ifdef CONFIG_PCI
167
.pcibios_fixup_bus = fsl_pcibios_fixup_bus,
168
#endif
169
.get_irq = mpic_get_irq,
170
.restart = fsl_rstcr_restart,
171
.calibrate_decr = generic_calibrate_decr,
172
.progress = udbg_progress,
173
};
174
175