cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

reboot.c (1714B)


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