diff options
Diffstat (limited to 'arch/mips/mipssim')
-rw-r--r-- | arch/mips/mipssim/sim_int.c | 2 | ||||
-rw-r--r-- | arch/mips/mipssim/sim_mem.c | 4 | ||||
-rw-r--r-- | arch/mips/mipssim/sim_setup.c | 2 | ||||
-rw-r--r-- | arch/mips/mipssim/sim_time.c | 76 |
4 files changed, 5 insertions, 79 deletions
diff --git a/arch/mips/mipssim/sim_int.c b/arch/mips/mipssim/sim_int.c index 5cbc3509ab52..46067ad542dc 100644 --- a/arch/mips/mipssim/sim_int.c +++ b/arch/mips/mipssim/sim_int.c | |||
@@ -25,7 +25,7 @@ | |||
25 | 25 | ||
26 | static inline int clz(unsigned long x) | 26 | static inline int clz(unsigned long x) |
27 | { | 27 | { |
28 | __asm__ ( | 28 | __asm__( |
29 | " .set push \n" | 29 | " .set push \n" |
30 | " .set mips32 \n" | 30 | " .set mips32 \n" |
31 | " clz %0, %1 \n" | 31 | " clz %0, %1 \n" |
diff --git a/arch/mips/mipssim/sim_mem.c b/arch/mips/mipssim/sim_mem.c index 2312483eb838..953d836a7713 100644 --- a/arch/mips/mipssim/sim_mem.c +++ b/arch/mips/mipssim/sim_mem.c | |||
@@ -69,7 +69,7 @@ struct prom_pmemblock * __init prom_getmdesc(void) | |||
69 | return &mdesc[0]; | 69 | return &mdesc[0]; |
70 | } | 70 | } |
71 | 71 | ||
72 | static int __init prom_memtype_classify (unsigned int type) | 72 | static int __init prom_memtype_classify(unsigned int type) |
73 | { | 73 | { |
74 | switch (type) { | 74 | switch (type) { |
75 | case simmem_free: | 75 | case simmem_free: |
@@ -90,7 +90,7 @@ void __init prom_meminit(void) | |||
90 | long type; | 90 | long type; |
91 | unsigned long base, size; | 91 | unsigned long base, size; |
92 | 92 | ||
93 | type = prom_memtype_classify (p->type); | 93 | type = prom_memtype_classify(p->type); |
94 | base = p->base; | 94 | base = p->base; |
95 | size = p->size; | 95 | size = p->size; |
96 | 96 | ||
diff --git a/arch/mips/mipssim/sim_setup.c b/arch/mips/mipssim/sim_setup.c index d012719c4d24..452c129d02c1 100644 --- a/arch/mips/mipssim/sim_setup.c +++ b/arch/mips/mipssim/sim_setup.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <asm/mips-boards/simint.h> | 36 | #include <asm/mips-boards/simint.h> |
37 | 37 | ||
38 | 38 | ||
39 | extern void sim_time_init(void); | ||
40 | static void __init serial_init(void); | 39 | static void __init serial_init(void); |
41 | unsigned int _isbonito = 0; | 40 | unsigned int _isbonito = 0; |
42 | 41 | ||
@@ -54,7 +53,6 @@ void __init plat_mem_setup(void) | |||
54 | 53 | ||
55 | serial_init(); | 54 | serial_init(); |
56 | 55 | ||
57 | board_time_init = sim_time_init; | ||
58 | pr_info("Linux started...\n"); | 56 | pr_info("Linux started...\n"); |
59 | 57 | ||
60 | #ifdef CONFIG_MIPS_MT_SMP | 58 | #ifdef CONFIG_MIPS_MT_SMP |
diff --git a/arch/mips/mipssim/sim_time.c b/arch/mips/mipssim/sim_time.c index a0f5a5dca1b2..e7fa0d1078a3 100644 --- a/arch/mips/mipssim/sim_time.c +++ b/arch/mips/mipssim/sim_time.c | |||
@@ -23,77 +23,6 @@ | |||
23 | 23 | ||
24 | unsigned long cpu_khz; | 24 | unsigned long cpu_khz; |
25 | 25 | ||
26 | irqreturn_t sim_timer_interrupt(int irq, void *dev_id) | ||
27 | { | ||
28 | #ifdef CONFIG_SMP | ||
29 | int cpu = smp_processor_id(); | ||
30 | |||
31 | /* | ||
32 | * CPU 0 handles the global timer interrupt job | ||
33 | * resets count/compare registers to trigger next timer int. | ||
34 | */ | ||
35 | #ifndef CONFIG_MIPS_MT_SMTC | ||
36 | if (cpu == 0) { | ||
37 | timer_interrupt(irq, dev_id); | ||
38 | } else { | ||
39 | /* Everyone else needs to reset the timer int here as | ||
40 | ll_local_timer_interrupt doesn't */ | ||
41 | /* | ||
42 | * FIXME: need to cope with counter underflow. | ||
43 | * More support needs to be added to kernel/time for | ||
44 | * counter/timer interrupts on multiple CPU's | ||
45 | */ | ||
46 | write_c0_compare (read_c0_count() + ( mips_hpt_frequency/HZ)); | ||
47 | } | ||
48 | #else /* SMTC */ | ||
49 | /* | ||
50 | * In SMTC system, one Count/Compare set exists per VPE. | ||
51 | * Which TC within a VPE gets the interrupt is essentially | ||
52 | * random - we only know that it shouldn't be one with | ||
53 | * IXMT set. Whichever TC gets the interrupt needs to | ||
54 | * send special interprocessor interrupts to the other | ||
55 | * TCs to make sure that they schedule, etc. | ||
56 | * | ||
57 | * That code is specific to the SMTC kernel, not to | ||
58 | * the simulation platform, so it's invoked from | ||
59 | * the general MIPS timer_interrupt routine. | ||
60 | * | ||
61 | * We have a problem in that the interrupt vector code | ||
62 | * had to turn off the timer IM bit to avoid redundant | ||
63 | * entries, but we may never get to mips_cpu_irq_end | ||
64 | * to turn it back on again if the scheduler gets | ||
65 | * involved. So we clear the pending timer here, | ||
66 | * and re-enable the mask... | ||
67 | */ | ||
68 | |||
69 | int vpflags = dvpe(); | ||
70 | write_c0_compare (read_c0_count() - 1); | ||
71 | clear_c0_cause(0x100 << cp0_compare_irq); | ||
72 | set_c0_status(0x100 << cp0_compare_irq); | ||
73 | irq_enable_hazard(); | ||
74 | evpe(vpflags); | ||
75 | |||
76 | if (cpu_data[cpu].vpe_id == 0) | ||
77 | timer_interrupt(irq, dev_id); | ||
78 | else | ||
79 | write_c0_compare (read_c0_count() + ( mips_hpt_frequency/HZ)); | ||
80 | smtc_timer_broadcast(cpu_data[cpu].vpe_id); | ||
81 | |||
82 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
83 | |||
84 | /* | ||
85 | * every CPU should do profiling and process accounting | ||
86 | */ | ||
87 | local_timer_interrupt (irq, dev_id); | ||
88 | |||
89 | return IRQ_HANDLED; | ||
90 | #else | ||
91 | return timer_interrupt (irq, dev_id); | ||
92 | #endif | ||
93 | } | ||
94 | |||
95 | |||
96 | |||
97 | /* | 26 | /* |
98 | * Estimate CPU frequency. Sets mips_hpt_frequency as a side-effect | 27 | * Estimate CPU frequency. Sets mips_hpt_frequency as a side-effect |
99 | */ | 28 | */ |
@@ -146,7 +75,7 @@ static unsigned int __init estimate_cpu_frequency(void) | |||
146 | return count; | 75 | return count; |
147 | } | 76 | } |
148 | 77 | ||
149 | void __init sim_time_init(void) | 78 | void __init plat_time_init(void) |
150 | { | 79 | { |
151 | unsigned int est_freq, flags; | 80 | unsigned int est_freq, flags; |
152 | 81 | ||
@@ -155,7 +84,7 @@ void __init sim_time_init(void) | |||
155 | /* Set Data mode - binary. */ | 84 | /* Set Data mode - binary. */ |
156 | CMOS_WRITE(CMOS_READ(RTC_CONTROL) | RTC_DM_BINARY, RTC_CONTROL); | 85 | CMOS_WRITE(CMOS_READ(RTC_CONTROL) | RTC_DM_BINARY, RTC_CONTROL); |
157 | 86 | ||
158 | est_freq = estimate_cpu_frequency (); | 87 | est_freq = estimate_cpu_frequency(); |
159 | 88 | ||
160 | printk(KERN_INFO "CPU frequency %d.%02d MHz\n", est_freq / 1000000, | 89 | printk(KERN_INFO "CPU frequency %d.%02d MHz\n", est_freq / 1000000, |
161 | (est_freq % 1000000) * 100 / 1000000); | 90 | (est_freq % 1000000) * 100 / 1000000); |
@@ -185,7 +114,6 @@ void __init plat_timer_setup(struct irqaction *irq) | |||
185 | } | 114 | } |
186 | 115 | ||
187 | /* we are using the cpu counter for timer interrupts */ | 116 | /* we are using the cpu counter for timer interrupts */ |
188 | irq->handler = sim_timer_interrupt; | ||
189 | setup_irq(mips_cpu_timer_irq, irq); | 117 | setup_irq(mips_cpu_timer_irq, irq); |
190 | 118 | ||
191 | #ifdef CONFIG_SMP | 119 | #ifdef CONFIG_SMP |