mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 14:51:00 +07:00
3b20eb2372
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms and conditions of the gnu general public license version 2 as published by the free software foundation this program is distributed in the hope it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 59 temple place suite 330 boston ma 02111 1307 usa extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 33 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Reviewed-by: Alexios Zavras <alexios.zavras@intel.com> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190530000435.254582722@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
39 lines
797 B
C
39 lines
797 B
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* IOP Coprocessor-6 access handler
|
|
* Copyright (c) 2006, Intel Corporation.
|
|
*/
|
|
#include <linux/init.h>
|
|
#include <asm/traps.h>
|
|
#include <asm/ptrace.h>
|
|
|
|
static int cp6_trap(struct pt_regs *regs, unsigned int instr)
|
|
{
|
|
u32 temp;
|
|
|
|
/* enable cp6 access */
|
|
asm volatile (
|
|
"mrc p15, 0, %0, c15, c1, 0\n\t"
|
|
"orr %0, %0, #(1 << 6)\n\t"
|
|
"mcr p15, 0, %0, c15, c1, 0\n\t"
|
|
: "=r"(temp));
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* permit kernel space cp6 access
|
|
* deny user space cp6 access
|
|
*/
|
|
static struct undef_hook cp6_hook = {
|
|
.instr_mask = 0x0f000ff0,
|
|
.instr_val = 0x0e000610,
|
|
.cpsr_mask = MODE_MASK,
|
|
.cpsr_val = SVC_MODE,
|
|
.fn = cp6_trap,
|
|
};
|
|
|
|
void __init iop_init_cp6_handler(void)
|
|
{
|
|
register_undef_hook(&cp6_hook);
|
|
}
|