1 /* MN103E010 Processor initialisation
3 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public Licence
8 * as published by the Free Software Foundation; either version
9 * 2 of the Licence, or (at your option) any later version.
11 #include <linux/kernel.h>
12 #include <linux/irq.h>
13 #include <asm/cacheflush.h>
17 #include <asm/busctl-regs.h>
20 * initialise the on-silicon processor peripherals
22 asmlinkage
void __init
processor_init(void)
26 /* set up the exception table first */
27 for (loop
= 0x000; loop
< 0x400; loop
+= 8)
28 __set_intr_stub(loop
, __common_exception
);
30 __set_intr_stub(EXCEP_ITLBMISS
, itlb_miss
);
31 __set_intr_stub(EXCEP_DTLBMISS
, dtlb_miss
);
32 __set_intr_stub(EXCEP_IAERROR
, itlb_aerror
);
33 __set_intr_stub(EXCEP_DAERROR
, dtlb_aerror
);
34 __set_intr_stub(EXCEP_BUSERROR
, raw_bus_error
);
35 __set_intr_stub(EXCEP_DOUBLE_FAULT
, double_fault
);
36 __set_intr_stub(EXCEP_FPU_DISABLED
, fpu_disabled
);
37 __set_intr_stub(EXCEP_SYSCALL0
, system_call
);
39 __set_intr_stub(EXCEP_NMI
, nmi_handler
);
40 __set_intr_stub(EXCEP_WDT
, nmi_handler
);
41 __set_intr_stub(EXCEP_IRQ_LEVEL0
, irq_handler
);
42 __set_intr_stub(EXCEP_IRQ_LEVEL1
, irq_handler
);
43 __set_intr_stub(EXCEP_IRQ_LEVEL2
, irq_handler
);
44 __set_intr_stub(EXCEP_IRQ_LEVEL3
, irq_handler
);
45 __set_intr_stub(EXCEP_IRQ_LEVEL4
, irq_handler
);
46 __set_intr_stub(EXCEP_IRQ_LEVEL5
, irq_handler
);
47 __set_intr_stub(EXCEP_IRQ_LEVEL6
, irq_handler
);
49 IVAR0
= EXCEP_IRQ_LEVEL0
;
50 IVAR1
= EXCEP_IRQ_LEVEL1
;
51 IVAR2
= EXCEP_IRQ_LEVEL2
;
52 IVAR3
= EXCEP_IRQ_LEVEL3
;
53 IVAR4
= EXCEP_IRQ_LEVEL4
;
54 IVAR5
= EXCEP_IRQ_LEVEL5
;
55 IVAR6
= EXCEP_IRQ_LEVEL6
;
57 mn10300_dcache_flush_inv();
60 /* disable all interrupts and set to priority 6 (lowest) */
61 for (loop
= 0; loop
< NR_IRQS
; loop
++)
62 GxICR(loop
) = GxICR_LEVEL_6
| GxICR_DETECT
;
64 /* clear the timers */
84 * determine the memory size and base from the memory controller regs
86 void __init
get_mem_info(unsigned long *mem_base
, unsigned long *mem_size
)
88 unsigned long base
, size
;
94 if (base
& SDBASE_CE
) {
95 size
= (base
& SDBASE_CBAM
) << SDBASE_CBAM_SHIFT
;
99 printk(KERN_INFO
"SDRAM[0]: %luMb @%08lx\n", size
>> 20, base
);
105 if (base
& SDBASE_CE
) {
106 size
= (base
& SDBASE_CBAM
) << SDBASE_CBAM_SHIFT
;
110 printk(KERN_INFO
"SDRAM[1]: %luMb @%08lx\n", size
>> 20, base
);