[PATCH] powerpc: mpc85xx_ads.c include file cleanup
[linux-2.6.git] / arch / powerpc / platforms / 85xx / mpc85xx_ads.c
1 /*
2  * MPC85xx setup and early boot code plus other random bits.
3  *
4  * Maintained by Kumar Gala (see MAINTAINERS for contact information)
5  *
6  * Copyright 2005 Freescale Semiconductor Inc.
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/config.h>
15 #include <linux/stddef.h>
16 #include <linux/kernel.h>
17 #include <linux/pci.h>
18 #include <linux/kdev_t.h>
19 #include <linux/delay.h>
20 #include <linux/seq_file.h>
21 #include <linux/root_dev.h>
22
23 #include <asm/system.h>
24 #include <asm/time.h>
25 #include <asm/machdep.h>
26 #include <asm/pci-bridge.h>
27 #include <asm/mpc85xx.h>
28 #include <asm/prom.h>
29 #include <asm/mpic.h>
30 #include <mm/mmu_decl.h>
31 #include <asm/udbg.h>
32
33 #include <sysdev/fsl_soc.h>
34 #include "mpc85xx.h"
35
36 #ifndef CONFIG_PCI
37 unsigned long isa_io_base = 0;
38 unsigned long isa_mem_base = 0;
39 #endif
40
41
42 /*
43  * Internal interrupts are all Level Sensitive, and Positive Polarity
44  *
45  * Note:  Likely, this table and the following function should be
46  *        obtained and derived from the OF Device Tree.
47  */
48 static u_char mpc85xx_ads_openpic_initsenses[] __initdata = {
49         MPC85XX_INTERNAL_IRQ_SENSES,
50         0x0,                                            /* External  0: */
51 #if defined(CONFIG_PCI)
52         (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE),      /* Ext 1: PCI slot 0 */
53         (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE),      /* Ext 2: PCI slot 1 */
54         (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE),      /* Ext 3: PCI slot 2 */
55         (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE),      /* Ext 4: PCI slot 3 */
56 #else
57         0x0,                            /* External  1: */
58         0x0,                            /* External  2: */
59         0x0,                            /* External  3: */
60         0x0,                            /* External  4: */
61 #endif
62         (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE),      /* External 5: PHY */
63         0x0,                            /* External  6: */
64         (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE),      /* External 7: PHY */
65         0x0,                            /* External  8: */
66         0x0,                            /* External  9: */
67         0x0,                            /* External 10: */
68         0x0,                            /* External 11: */
69 };
70
71
72 void __init mpc85xx_ads_pic_init(void)
73 {
74         struct mpic *mpic1;
75         phys_addr_t OpenPIC_PAddr;
76
77         /* Determine the Physical Address of the OpenPIC regs */
78         OpenPIC_PAddr = get_immrbase() + MPC85xx_OPENPIC_OFFSET;
79
80         mpic1 = mpic_alloc(OpenPIC_PAddr,
81                         MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN,
82                         4, MPC85xx_OPENPIC_IRQ_OFFSET, 0, 250,
83                         mpc85xx_ads_openpic_initsenses,
84                         sizeof(mpc85xx_ads_openpic_initsenses), " OpenPIC  ");
85         BUG_ON(mpic1 == NULL);
86         mpic_assign_isu(mpic1, 0, OpenPIC_PAddr + 0x10200);
87         mpic_assign_isu(mpic1, 1, OpenPIC_PAddr + 0x10280);
88         mpic_assign_isu(mpic1, 2, OpenPIC_PAddr + 0x10300);
89         mpic_assign_isu(mpic1, 3, OpenPIC_PAddr + 0x10380);
90         mpic_assign_isu(mpic1, 4, OpenPIC_PAddr + 0x10400);
91         mpic_assign_isu(mpic1, 5, OpenPIC_PAddr + 0x10480);
92         mpic_assign_isu(mpic1, 6, OpenPIC_PAddr + 0x10500);
93         mpic_assign_isu(mpic1, 7, OpenPIC_PAddr + 0x10580);
94
95         /* dummy mappings to get to 48 */
96         mpic_assign_isu(mpic1, 8, OpenPIC_PAddr + 0x10600);
97         mpic_assign_isu(mpic1, 9, OpenPIC_PAddr + 0x10680);
98         mpic_assign_isu(mpic1, 10, OpenPIC_PAddr + 0x10700);
99         mpic_assign_isu(mpic1, 11, OpenPIC_PAddr + 0x10780);
100
101         /* External ints */
102         mpic_assign_isu(mpic1, 12, OpenPIC_PAddr + 0x10000);
103         mpic_assign_isu(mpic1, 13, OpenPIC_PAddr + 0x10080);
104         mpic_assign_isu(mpic1, 14, OpenPIC_PAddr + 0x10100);
105         mpic_init(mpic1);
106 }
107
108
109 /*
110  * Setup the architecture
111  */
112 static void __init
113 mpc85xx_ads_setup_arch(void)
114 {
115         struct device_node *cpu;
116
117         if (ppc_md.progress)
118                 ppc_md.progress("mpc85xx_ads_setup_arch()", 0);
119
120         cpu = of_find_node_by_type(NULL, "cpu");
121         if (cpu != 0) {
122                 unsigned int *fp;
123
124                 fp = (int *)get_property(cpu, "clock-frequency", NULL);
125                 if (fp != 0)
126                         loops_per_jiffy = *fp / HZ;
127                 else
128                         loops_per_jiffy = 50000000 / HZ;
129                 of_node_put(cpu);
130         }
131
132 #ifdef  CONFIG_ROOT_NFS
133         ROOT_DEV = Root_NFS;
134 #else
135         ROOT_DEV = Root_HDA1;
136 #endif
137 }
138
139
140 void
141 mpc85xx_ads_show_cpuinfo(struct seq_file *m)
142 {
143         uint pvid, svid, phid1;
144         uint memsize = total_memory;
145
146         pvid = mfspr(SPRN_PVR);
147         svid = mfspr(SPRN_SVR);
148
149         seq_printf(m, "Vendor\t\t: Freescale Semiconductor\n");
150         seq_printf(m, "Machine\t\t: mpc85xx\n");
151         seq_printf(m, "PVR\t\t: 0x%x\n", pvid);
152         seq_printf(m, "SVR\t\t: 0x%x\n", svid);
153
154         /* Display cpu Pll setting */
155         phid1 = mfspr(SPRN_HID1);
156         seq_printf(m, "PLL setting\t: 0x%x\n", ((phid1 >> 24) & 0x3f));
157
158         /* Display the amount of memory */
159         seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024));
160 }
161
162
163 void __init
164 platform_init(void)
165 {
166         ppc_md.setup_arch = mpc85xx_ads_setup_arch;
167         ppc_md.show_cpuinfo = mpc85xx_ads_show_cpuinfo;
168
169         ppc_md.init_IRQ = mpc85xx_ads_pic_init;
170         ppc_md.get_irq = mpic_get_irq;
171
172         ppc_md.restart = mpc85xx_restart;
173         ppc_md.power_off = NULL;
174         ppc_md.halt = NULL;
175
176         ppc_md.time_init = NULL;
177         ppc_md.set_rtc_time = NULL;
178         ppc_md.get_rtc_time = NULL;
179         ppc_md.calibrate_decr = generic_calibrate_decr;
180
181         ppc_md.progress = udbg_progress;
182
183         if (ppc_md.progress)
184                 ppc_md.progress("mpc85xx_ads platform_init(): exit", 0);
185 }
186
187