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

reset.c (973B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Joshua Henderson <joshua.henderson@microchip.com>
      4 * Copyright (C) 2015 Microchip Technology Inc.  All rights reserved.
      5 */
      6#include <linux/init.h>
      7#include <linux/pm.h>
      8#include <asm/reboot.h>
      9#include <asm/mach-pic32/pic32.h>
     10
     11#define PIC32_RSWRST		0x10
     12
     13static void pic32_halt(void)
     14{
     15	while (1) {
     16		__asm__(".set push;\n"
     17			".set arch=r4000;\n"
     18			"wait;\n"
     19			".set pop;\n"
     20		);
     21	}
     22}
     23
     24static void pic32_machine_restart(char *command)
     25{
     26	void __iomem *reg =
     27		ioremap(PIC32_BASE_RESET + PIC32_RSWRST, sizeof(u32));
     28
     29	pic32_syskey_unlock();
     30
     31	/* magic write/read */
     32	__raw_writel(1, reg);
     33	(void)__raw_readl(reg);
     34
     35	pic32_halt();
     36}
     37
     38static void pic32_machine_halt(void)
     39{
     40	local_irq_disable();
     41
     42	pic32_halt();
     43}
     44
     45static int __init mips_reboot_setup(void)
     46{
     47	_machine_restart = pic32_machine_restart;
     48	_machine_halt = pic32_machine_halt;
     49	pm_power_off = pic32_machine_halt;
     50
     51	return 0;
     52}
     53
     54arch_initcall(mips_reboot_setup);