forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.2 KiB
55 lines
1.2 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
/* |
|
* Smp support for CHRP machines. |
|
* |
|
* Written by Cort Dougan ([email protected]) borrowing a great |
|
* deal of code from the sparc and intel versions. |
|
* |
|
* Copyright (C) 1999 Cort Dougan <[email protected]> |
|
* |
|
*/ |
|
|
|
#include <linux/kernel.h> |
|
#include <linux/sched.h> |
|
#include <linux/smp.h> |
|
#include <linux/interrupt.h> |
|
#include <linux/kernel_stat.h> |
|
#include <linux/delay.h> |
|
#include <linux/spinlock.h> |
|
#include <linux/pgtable.h> |
|
|
|
#include <asm/ptrace.h> |
|
#include <linux/atomic.h> |
|
#include <asm/irq.h> |
|
#include <asm/page.h> |
|
#include <asm/sections.h> |
|
#include <asm/io.h> |
|
#include <asm/prom.h> |
|
#include <asm/smp.h> |
|
#include <asm/machdep.h> |
|
#include <asm/mpic.h> |
|
#include <asm/rtas.h> |
|
|
|
static int smp_chrp_kick_cpu(int nr) |
|
{ |
|
*(unsigned long *)KERNELBASE = nr; |
|
asm volatile("dcbf 0,%0"::"r"(KERNELBASE):"memory"); |
|
|
|
return 0; |
|
} |
|
|
|
static void smp_chrp_setup_cpu(int cpu_nr) |
|
{ |
|
mpic_setup_this_cpu(); |
|
} |
|
|
|
/* CHRP with openpic */ |
|
struct smp_ops_t chrp_smp_ops = { |
|
.cause_nmi_ipi = NULL, |
|
.message_pass = smp_mpic_message_pass, |
|
.probe = smp_mpic_probe, |
|
.kick_cpu = smp_chrp_kick_cpu, |
|
.setup_cpu = smp_chrp_setup_cpu, |
|
.give_timebase = rtas_give_timebase, |
|
.take_timebase = rtas_take_timebase, |
|
};
|
|
|