linux/arch/mips/wrppmc/reset.c
<<
>>
Prefs
   1/*
   2 * This file is subject to the terms and conditions of the GNU General Public
   3 * License.  See the file "COPYING" in the main directory of this archive
   4 * for more details.
   5 *
   6 * Copyright (C) 1997 Ralf Baechle
   7 */
   8#include <linux/irqflags.h>
   9#include <linux/kernel.h>
  10
  11#include <asm/cacheflush.h>
  12#include <asm/mipsregs.h>
  13#include <asm/processor.h>
  14
  15void wrppmc_machine_restart(char *command)
  16{
  17        /*
  18         * Ouch, we're still alive ... This time we take the silver bullet ...
  19         * ... and find that we leave the hardware in a state in which the
  20         * kernel in the flush locks up somewhen during of after the PCI
  21         * detection stuff.
  22         */
  23        local_irq_disable();
  24        set_c0_status(ST0_BEV | ST0_ERL);
  25        change_c0_config(CONF_CM_CMASK, CONF_CM_UNCACHED);
  26        flush_cache_all();
  27        write_c0_wired(0);
  28        __asm__ __volatile__("jr\t%0"::"r"(0xbfc00000));
  29}
  30
  31void wrppmc_machine_halt(void)
  32{
  33        local_irq_disable();
  34
  35        printk(KERN_NOTICE "You can safely turn off the power\n");
  36        while (1) {
  37                if (cpu_wait)
  38                        cpu_wait();
  39        }
  40}
  41