root/arch/sh/kernel/reboot.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. watchdog_trigger_immediate
  2. native_machine_restart
  3. native_machine_shutdown
  4. native_machine_power_off
  5. native_machine_halt
  6. machine_power_off
  7. machine_shutdown
  8. machine_restart
  9. machine_halt
  10. machine_crash_shutdown

   1 // SPDX-License-Identifier: GPL-2.0
   2 #include <linux/pm.h>
   3 #include <linux/kexec.h>
   4 #include <linux/kernel.h>
   5 #include <linux/reboot.h>
   6 #include <linux/module.h>
   7 #ifdef CONFIG_SUPERH32
   8 #include <asm/watchdog.h>
   9 #endif
  10 #include <asm/addrspace.h>
  11 #include <asm/reboot.h>
  12 #include <asm/tlbflush.h>
  13 #include <asm/traps.h>
  14 
  15 void (*pm_power_off)(void);
  16 EXPORT_SYMBOL(pm_power_off);
  17 
  18 #ifdef CONFIG_SUPERH32
  19 static void watchdog_trigger_immediate(void)
  20 {
  21         sh_wdt_write_cnt(0xFF);
  22         sh_wdt_write_csr(0xC2);
  23 }
  24 #endif
  25 
  26 static void native_machine_restart(char * __unused)
  27 {
  28         local_irq_disable();
  29 
  30         /* Destroy all of the TLBs in preparation for reset by MMU */
  31         __flush_tlb_global();
  32 
  33         /* Address error with SR.BL=1 first. */
  34         trigger_address_error();
  35 
  36 #ifdef CONFIG_SUPERH32
  37         /* If that fails or is unsupported, go for the watchdog next. */
  38         watchdog_trigger_immediate();
  39 #endif
  40 
  41         /*
  42          * Give up and sleep.
  43          */
  44         while (1)
  45                 cpu_sleep();
  46 }
  47 
  48 static void native_machine_shutdown(void)
  49 {
  50         smp_send_stop();
  51 }
  52 
  53 static void native_machine_power_off(void)
  54 {
  55         if (pm_power_off)
  56                 pm_power_off();
  57 }
  58 
  59 static void native_machine_halt(void)
  60 {
  61         /* stop other cpus */
  62         machine_shutdown();
  63 
  64         /* stop this cpu */
  65         stop_this_cpu(NULL);
  66 }
  67 
  68 struct machine_ops machine_ops = {
  69         .power_off      = native_machine_power_off,
  70         .shutdown       = native_machine_shutdown,
  71         .restart        = native_machine_restart,
  72         .halt           = native_machine_halt,
  73 #ifdef CONFIG_KEXEC
  74         .crash_shutdown = native_machine_crash_shutdown,
  75 #endif
  76 };
  77 
  78 void machine_power_off(void)
  79 {
  80         machine_ops.power_off();
  81 }
  82 
  83 void machine_shutdown(void)
  84 {
  85         machine_ops.shutdown();
  86 }
  87 
  88 void machine_restart(char *cmd)
  89 {
  90         machine_ops.restart(cmd);
  91 }
  92 
  93 void machine_halt(void)
  94 {
  95         machine_ops.halt();
  96 }
  97 
  98 #ifdef CONFIG_KEXEC
  99 void machine_crash_shutdown(struct pt_regs *regs)
 100 {
 101         machine_ops.crash_shutdown(regs);
 102 }
 103 #endif

/* [<][>][^][v][top][bottom][index][help] */