sparc32,sun4m: irq, smp files cleanup
- drop filename in file header - drop unused includes - add description of sun4m interrupts (from davem) - add KERN_* to printk - fix spaces => tabs - add spaces after reserved words - drop all externs, they are now in header files This is partly based on a patch from: David Miller <davem@davemloft.net> Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
e787098cfe
commit
aba20a8295
@ -1,59 +1,22 @@
|
||||
/* sun4m_smp.c: Sparc SUN4M SMP support.
|
||||
/*
|
||||
* sun4m SMP support.
|
||||
*
|
||||
* Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
|
||||
*/
|
||||
|
||||
#include <asm/head.h>
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/threads.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/kernel_stat.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/swap.h>
|
||||
#include <linux/profile.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/cpu.h>
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/tlbflush.h>
|
||||
#include <asm/irq_regs.h>
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/pgalloc.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/oplib.h>
|
||||
#include <asm/cpudata.h>
|
||||
|
||||
#include "irq.h"
|
||||
#include "kernel.h"
|
||||
|
||||
#define IRQ_CROSS_CALL 15
|
||||
|
||||
extern ctxd_t *srmmu_ctx_table_phys;
|
||||
|
||||
extern volatile unsigned long cpu_callin_map[NR_CPUS];
|
||||
extern unsigned char boot_cpu_id;
|
||||
|
||||
extern cpumask_t smp_commenced_mask;
|
||||
|
||||
extern int __smp4m_processor_id(void);
|
||||
|
||||
/*#define SMP_DEBUG*/
|
||||
|
||||
#ifdef SMP_DEBUG
|
||||
#define SMP_PRINTK(x) printk x
|
||||
#else
|
||||
#define SMP_PRINTK(x)
|
||||
#endif
|
||||
|
||||
static inline unsigned long
|
||||
swap_ulong(volatile unsigned long *ptr, unsigned long val)
|
||||
{
|
||||
@ -64,7 +27,6 @@ swap_ulong(volatile unsigned long *ptr, unsigned long val)
|
||||
}
|
||||
|
||||
static void smp_setup_percpu_timer(void);
|
||||
extern void cpu_probe(void);
|
||||
|
||||
void __cpuinit smp4m_callin(void)
|
||||
{
|
||||
@ -96,7 +58,7 @@ void __cpuinit smp4m_callin(void)
|
||||
/* XXX: What's up with all the flushes? */
|
||||
local_flush_cache_all();
|
||||
local_flush_tlb_all();
|
||||
|
||||
|
||||
cpu_probe();
|
||||
|
||||
/* Fix idle thread fields. */
|
||||
@ -119,9 +81,6 @@ void __cpuinit smp4m_callin(void)
|
||||
/*
|
||||
* Cycle through the processors asking the PROM to start each one.
|
||||
*/
|
||||
|
||||
extern struct linux_prom_registers smp_penguin_ctable;
|
||||
|
||||
void __init smp4m_boot_cpus(void)
|
||||
{
|
||||
smp_setup_percpu_timer();
|
||||
@ -130,7 +89,6 @@ void __init smp4m_boot_cpus(void)
|
||||
|
||||
int __cpuinit smp4m_boot_one_cpu(int i)
|
||||
{
|
||||
extern unsigned long sun4m_cpu_startup;
|
||||
unsigned long *entry = &sun4m_cpu_startup;
|
||||
struct task_struct *p;
|
||||
int timeout;
|
||||
@ -142,7 +100,7 @@ int __cpuinit smp4m_boot_one_cpu(int i)
|
||||
p = fork_idle(i);
|
||||
current_set[i] = task_thread_info(p);
|
||||
/* See trampoline.S for details... */
|
||||
entry += ((i-1) * 3);
|
||||
entry += ((i - 1) * 3);
|
||||
|
||||
/*
|
||||
* Initialize the contexts table
|
||||
@ -154,20 +112,19 @@ int __cpuinit smp4m_boot_one_cpu(int i)
|
||||
smp_penguin_ctable.reg_size = 0;
|
||||
|
||||
/* whirrr, whirrr, whirrrrrrrrr... */
|
||||
printk("Starting CPU %d at %p\n", i, entry);
|
||||
printk(KERN_INFO "Starting CPU %d at %p\n", i, entry);
|
||||
local_flush_cache_all();
|
||||
prom_startcpu(cpu_node,
|
||||
&smp_penguin_ctable, 0, (char *)entry);
|
||||
prom_startcpu(cpu_node, &smp_penguin_ctable, 0, (char *)entry);
|
||||
|
||||
/* wheee... it's going... */
|
||||
for(timeout = 0; timeout < 10000; timeout++) {
|
||||
if(cpu_callin_map[i])
|
||||
for (timeout = 0; timeout < 10000; timeout++) {
|
||||
if (cpu_callin_map[i])
|
||||
break;
|
||||
udelay(200);
|
||||
}
|
||||
|
||||
if (!(cpu_callin_map[i])) {
|
||||
printk("Processor %d is stuck.\n", i);
|
||||
printk(KERN_ERR "Processor %d is stuck.\n", i);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
@ -202,6 +159,7 @@ void __init smp4m_smp_done(void)
|
||||
void smp4m_irq_rotate(int cpu)
|
||||
{
|
||||
int next = cpu_data(cpu).next;
|
||||
|
||||
if (next != cpu)
|
||||
set_irq_udt(next);
|
||||
}
|
||||
@ -243,7 +201,7 @@ static void smp4m_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1,
|
||||
|
||||
cpu_clear(smp_processor_id(), mask);
|
||||
cpus_and(mask, cpu_online_map, mask);
|
||||
for(i = 0; i < ncpus; i++) {
|
||||
for (i = 0; i < ncpus; i++) {
|
||||
if (cpu_isset(i, mask)) {
|
||||
ccall_info.processors_in[i] = 0;
|
||||
ccall_info.processors_out[i] = 0;
|
||||
@ -262,19 +220,18 @@ static void smp4m_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1,
|
||||
do {
|
||||
if (!cpu_isset(i, mask))
|
||||
continue;
|
||||
while(!ccall_info.processors_in[i])
|
||||
while (!ccall_info.processors_in[i])
|
||||
barrier();
|
||||
} while(++i < ncpus);
|
||||
} while (++i < ncpus);
|
||||
|
||||
i = 0;
|
||||
do {
|
||||
if (!cpu_isset(i, mask))
|
||||
continue;
|
||||
while(!ccall_info.processors_out[i])
|
||||
while (!ccall_info.processors_out[i])
|
||||
barrier();
|
||||
} while(++i < ncpus);
|
||||
} while (++i < ncpus);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&cross_call_lock, flags);
|
||||
}
|
||||
|
||||
@ -289,8 +246,6 @@ void smp4m_cross_call_irq(void)
|
||||
ccall_info.processors_out[i] = 1;
|
||||
}
|
||||
|
||||
extern void sun4m_clear_profile_irq(int cpu);
|
||||
|
||||
void smp4m_percpu_timer_interrupt(struct pt_regs *regs)
|
||||
{
|
||||
struct pt_regs *old_regs;
|
||||
@ -302,7 +257,7 @@ void smp4m_percpu_timer_interrupt(struct pt_regs *regs)
|
||||
|
||||
profile_tick(CPU_PROFILING);
|
||||
|
||||
if(!--prof_counter(cpu)) {
|
||||
if (!--prof_counter(cpu)) {
|
||||
int user = user_mode(regs);
|
||||
|
||||
irq_enter();
|
||||
@ -314,8 +269,6 @@ void smp4m_percpu_timer_interrupt(struct pt_regs *regs)
|
||||
set_irq_regs(old_regs);
|
||||
}
|
||||
|
||||
extern unsigned int lvl14_resolution;
|
||||
|
||||
static void __cpuinit smp_setup_percpu_timer(void)
|
||||
{
|
||||
int cpu = smp_processor_id();
|
||||
@ -323,7 +276,7 @@ static void __cpuinit smp_setup_percpu_timer(void)
|
||||
prof_counter(cpu) = prof_multiplier(cpu) = 1;
|
||||
load_profile_irq(cpu, lvl14_resolution);
|
||||
|
||||
if(cpu == boot_cpu_id)
|
||||
if (cpu == boot_cpu_id)
|
||||
enable_pil_irq(14);
|
||||
}
|
||||
|
||||
@ -331,9 +284,9 @@ static void __init smp4m_blackbox_id(unsigned *addr)
|
||||
{
|
||||
int rd = *addr & 0x3e000000;
|
||||
int rs1 = rd >> 11;
|
||||
|
||||
|
||||
addr[0] = 0x81580000 | rd; /* rd %tbr, reg */
|
||||
addr[1] = 0x8130200c | rd | rs1; /* srl reg, 0xc, reg */
|
||||
addr[1] = 0x8130200c | rd | rs1; /* srl reg, 0xc, reg */
|
||||
addr[2] = 0x80082003 | rd | rs1; /* and reg, 3, reg */
|
||||
}
|
||||
|
||||
@ -341,9 +294,9 @@ static void __init smp4m_blackbox_current(unsigned *addr)
|
||||
{
|
||||
int rd = *addr & 0x3e000000;
|
||||
int rs1 = rd >> 11;
|
||||
|
||||
|
||||
addr[0] = 0x81580000 | rd; /* rd %tbr, reg */
|
||||
addr[2] = 0x8130200a | rd | rs1; /* srl reg, 0xa, reg */
|
||||
addr[2] = 0x8130200a | rd | rs1; /* srl reg, 0xa, reg */
|
||||
addr[4] = 0x8008200c | rd | rs1; /* and reg, 0xc, reg */
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user