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>
14 #include <asm/busctl-regs.h>
17 * initialise the on-silicon processor peripherals
19 asmlinkage
void __init
processor_init(void)
23 /* set up the exception table first */
24 for (loop
= 0x000; loop
< 0x400; loop
+= 8)
25 __set_intr_stub(loop
, __common_exception
);
27 __set_intr_stub(EXCEP_ITLBMISS
, itlb_miss
);
28 __set_intr_stub(EXCEP_DTLBMISS
, dtlb_miss
);
29 __set_intr_stub(EXCEP_IAERROR
, itlb_aerror
);
30 __set_intr_stub(EXCEP_DAERROR
, dtlb_aerror
);
31 __set_intr_stub(EXCEP_BUSERROR
, raw_bus_error
);
32 __set_intr_stub(EXCEP_DOUBLE_FAULT
, double_fault
);
33 __set_intr_stub(EXCEP_FPU_DISABLED
, fpu_disabled
);
34 __set_intr_stub(EXCEP_SYSCALL0
, system_call
);
36 __set_intr_stub(EXCEP_NMI
, nmi_handler
);
37 __set_intr_stub(EXCEP_WDT
, nmi_handler
);
38 __set_intr_stub(EXCEP_IRQ_LEVEL0
, irq_handler
);
39 __set_intr_stub(EXCEP_IRQ_LEVEL1
, irq_handler
);
40 __set_intr_stub(EXCEP_IRQ_LEVEL2
, irq_handler
);
41 __set_intr_stub(EXCEP_IRQ_LEVEL3
, irq_handler
);
42 __set_intr_stub(EXCEP_IRQ_LEVEL4
, irq_handler
);
43 __set_intr_stub(EXCEP_IRQ_LEVEL5
, irq_handler
);
44 __set_intr_stub(EXCEP_IRQ_LEVEL6
, irq_handler
);
46 IVAR0
= EXCEP_IRQ_LEVEL0
;
47 IVAR1
= EXCEP_IRQ_LEVEL1
;
48 IVAR2
= EXCEP_IRQ_LEVEL2
;
49 IVAR3
= EXCEP_IRQ_LEVEL3
;
50 IVAR4
= EXCEP_IRQ_LEVEL4
;
51 IVAR5
= EXCEP_IRQ_LEVEL5
;
52 IVAR6
= EXCEP_IRQ_LEVEL6
;
54 mn10300_dcache_flush_inv();
57 /* disable all interrupts and set to priority 6 (lowest) */
58 for (loop
= 0; loop
< NR_IRQS
; loop
++)
59 GxICR(loop
) = GxICR_LEVEL_6
| GxICR_DETECT
;
61 /* clear the timers */
81 * determine the memory size and base from the memory controller regs
83 void __init
get_mem_info(unsigned long *mem_base
, unsigned long *mem_size
)
85 unsigned long base
, size
;
91 if (base
& SDBASE_CE
) {
92 size
= (base
& SDBASE_CBAM
) << SDBASE_CBAM_SHIFT
;
96 printk(KERN_INFO
"SDRAM[0]: %luMb @%08lx\n", size
>> 20, base
);
102 if (base
& SDBASE_CE
) {
103 size
= (base
& SDBASE_CBAM
) << SDBASE_CBAM_SHIFT
;
107 printk(KERN_INFO
"SDRAM[1]: %luMb @%08lx\n", size
>> 20, base
);