aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/83xx/mpc834x_mds.c
diff options
context:
space:
mode:
authorKumar Gala <galak@kernel.crashing.org>2007-02-08 02:11:00 -0500
committerKumar Gala <galak@kernel.crashing.org>2007-02-09 12:39:46 -0500
commit49baa91d6863df480fa05eb57524a274f77fa886 (patch)
treea553de5b401466c6a61188565002f8ca4acff3e2 /arch/powerpc/platforms/83xx/mpc834x_mds.c
parent135637aa781a0480ba4ef2d3ad18fae408ace874 (diff)
[POWERPC] 83xx: Updated and renamed MPC834x SYS to MPC834x MDS
The MPC834x SYS board has always been called the MPC834x MDS since its public release. Removed all references to SYS and replaced with MDS. Additionally renamed the .dts to match the defconfig (mpc834x_mds*). Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/platforms/83xx/mpc834x_mds.c')
-rw-r--r--arch/powerpc/platforms/83xx/mpc834x_mds.c213
1 files changed, 213 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/83xx/mpc834x_mds.c b/arch/powerpc/platforms/83xx/mpc834x_mds.c
new file mode 100644
index 000000000000..d2736da76c46
--- /dev/null
+++ b/arch/powerpc/platforms/83xx/mpc834x_mds.c
@@ -0,0 +1,213 @@
1/*
2 * arch/powerpc/platforms/83xx/mpc834x_mds.c
3 *
4 * MPC834x MDS board specific routines
5 *
6 * Maintainer: Kumar Gala <galak@kernel.crashing.org>
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/stddef.h>
15#include <linux/kernel.h>
16#include <linux/init.h>
17#include <linux/errno.h>
18#include <linux/reboot.h>
19#include <linux/pci.h>
20#include <linux/kdev_t.h>
21#include <linux/major.h>
22#include <linux/console.h>
23#include <linux/delay.h>
24#include <linux/seq_file.h>
25#include <linux/root_dev.h>
26
27#include <asm/system.h>
28#include <asm/atomic.h>
29#include <asm/time.h>
30#include <asm/io.h>
31#include <asm/machdep.h>
32#include <asm/ipic.h>
33#include <asm/bootinfo.h>
34#include <asm/irq.h>
35#include <asm/prom.h>
36#include <asm/udbg.h>
37#include <sysdev/fsl_soc.h>
38
39#include "mpc83xx.h"
40
41#ifndef CONFIG_PCI
42unsigned long isa_io_base = 0;
43unsigned long isa_mem_base = 0;
44#endif
45
46#define BCSR5_INT_USB 0x02
47/* Note: This is only for PB, not for PB+PIB
48 * On PB only port0 is connected using ULPI */
49static int mpc834x_usb_cfg(void)
50{
51 unsigned long sccr, sicrl;
52 void __iomem *immap;
53 void __iomem *bcsr_regs = NULL;
54 u8 bcsr5;
55 struct device_node *np = NULL;
56 int port0_is_dr = 0;
57
58 if ((np = of_find_compatible_node(np, "usb", "fsl-usb2-dr")) != NULL)
59 port0_is_dr = 1;
60 if ((np = of_find_compatible_node(np, "usb", "fsl-usb2-mph")) != NULL){
61 if (port0_is_dr) {
62 printk(KERN_WARNING
63 "There is only one USB port on PB board! \n");
64 return -1;
65 } else if (!port0_is_dr)
66 /* No usb port enabled */
67 return -1;
68 }
69
70 immap = ioremap(get_immrbase(), 0x1000);
71 if (!immap)
72 return -1;
73
74 /* Configure clock */
75 sccr = in_be32(immap + MPC83XX_SCCR_OFFS);
76 if (port0_is_dr)
77 sccr |= MPC83XX_SCCR_USB_DRCM_11; /* 1:3 */
78 else
79 sccr |= MPC83XX_SCCR_USB_MPHCM_11; /* 1:3 */
80 out_be32(immap + MPC83XX_SCCR_OFFS, sccr);
81
82 /* Configure Pin */
83 sicrl = in_be32(immap + MPC83XX_SICRL_OFFS);
84 /* set port0 only */
85 if (port0_is_dr)
86 sicrl |= MPC83XX_SICRL_USB0;
87 else
88 sicrl &= ~(MPC83XX_SICRL_USB0);
89 out_be32(immap + MPC83XX_SICRL_OFFS, sicrl);
90
91 iounmap(immap);
92
93 /* Map BCSR area */
94 np = of_find_node_by_name(NULL, "bcsr");
95 if (np != 0) {
96 struct resource res;
97
98 of_address_to_resource(np, 0, &res);
99 bcsr_regs = ioremap(res.start, res.end - res.start + 1);
100 of_node_put(np);
101 }
102 if (!bcsr_regs)
103 return -1;
104
105 /*
106 * if MDS board is plug into PIB board,
107 * force to use the PHY on MDS board
108 */
109 bcsr5 = in_8(bcsr_regs + 5);
110 if (!(bcsr5 & BCSR5_INT_USB))
111 out_8(bcsr_regs + 5, (bcsr5 | BCSR5_INT_USB));
112 iounmap(bcsr_regs);
113 return 0;
114}
115
116/* ************************************************************************
117 *
118 * Setup the architecture
119 *
120 */
121static void __init mpc834x_mds_setup_arch(void)
122{
123 struct device_node *np;
124
125 if (ppc_md.progress)
126 ppc_md.progress("mpc834x_mds_setup_arch()", 0);
127
128 np = of_find_node_by_type(NULL, "cpu");
129 if (np != 0) {
130 const unsigned int *fp =
131 get_property(np, "clock-frequency", NULL);
132 if (fp != 0)
133 loops_per_jiffy = *fp / HZ;
134 else
135 loops_per_jiffy = 50000000 / HZ;
136 of_node_put(np);
137 }
138
139#ifdef CONFIG_PCI
140 for (np = NULL; (np = of_find_node_by_type(np, "pci")) != NULL;)
141 add_bridge(np);
142
143 ppc_md.pci_exclude_device = mpc83xx_exclude_device;
144#endif
145
146 mpc834x_usb_cfg();
147
148#ifdef CONFIG_ROOT_NFS
149 ROOT_DEV = Root_NFS;
150#else
151 ROOT_DEV = Root_HDA1;
152#endif
153}
154
155static void __init mpc834x_mds_init_IRQ(void)
156{
157 struct device_node *np;
158
159 np = of_find_node_by_type(NULL, "ipic");
160 if (!np)
161 return;
162
163 ipic_init(np, 0);
164
165 /* Initialize the default interrupt mapping priorities,
166 * in case the boot rom changed something on us.
167 */
168 ipic_set_default_priority();
169}
170
171#if defined(CONFIG_I2C_MPC) && defined(CONFIG_SENSORS_DS1374)
172extern ulong ds1374_get_rtc_time(void);
173extern int ds1374_set_rtc_time(ulong);
174
175static int __init mpc834x_rtc_hookup(void)
176{
177 struct timespec tv;
178
179 ppc_md.get_rtc_time = ds1374_get_rtc_time;
180 ppc_md.set_rtc_time = ds1374_set_rtc_time;
181
182 tv.tv_nsec = 0;
183 tv.tv_sec = (ppc_md.get_rtc_time) ();
184 do_settimeofday(&tv);
185
186 return 0;
187}
188
189late_initcall(mpc834x_rtc_hookup);
190#endif
191
192/*
193 * Called very early, MMU is off, device-tree isn't unflattened
194 */
195static int __init mpc834x_mds_probe(void)
196{
197 /* We always match for now, eventually we should look at the flat
198 dev tree to ensure this is the board we are suppose to run on
199 */
200 return 1;
201}
202
203define_machine(mpc834x_mds) {
204 .name = "MPC834x MDS",
205 .probe = mpc834x_mds_probe,
206 .setup_arch = mpc834x_mds_setup_arch,
207 .init_IRQ = mpc834x_mds_init_IRQ,
208 .get_irq = ipic_get_irq,
209 .restart = mpc83xx_restart,
210 .time_init = mpc83xx_time_init,
211 .calibrate_decr = generic_calibrate_decr,
212 .progress = udbg_progress,
213};