]>
Commit | Line | Data |
---|---|---|
588ef769 DW |
1 | /* |
2 | * IOP Coprocessor-6 access handler | |
3 | * Copyright (c) 2006, Intel Corporation. | |
4 | * | |
5 | * This program is free software; you can redistribute it and/or modify it | |
6 | * under the terms and conditions of the GNU General Public License, | |
7 | * version 2, as published by the Free Software Foundation. | |
8 | * | |
9 | * This program is distributed in the hope it will be useful, but WITHOUT | |
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
12 | * more details. | |
13 | * | |
14 | * You should have received a copy of the GNU General Public License along with | |
15 | * this program; if not, write to the Free Software Foundation, Inc., 59 Temple | |
16 | * Place - Suite 330, Boston, MA 02111-1307 USA. | |
17 | * | |
18 | */ | |
19 | #include <linux/init.h> | |
20 | #include <asm/traps.h> | |
082763a8 | 21 | #include <asm/ptrace.h> |
588ef769 DW |
22 | |
23 | static int cp6_trap(struct pt_regs *regs, unsigned int instr) | |
24 | { | |
25 | u32 temp; | |
26 | ||
27 | /* enable cp6 access */ | |
28 | asm volatile ( | |
29 | "mrc p15, 0, %0, c15, c1, 0\n\t" | |
30 | "orr %0, %0, #(1 << 6)\n\t" | |
31 | "mcr p15, 0, %0, c15, c1, 0\n\t" | |
32 | : "=r"(temp)); | |
33 | ||
34 | return 0; | |
35 | } | |
36 | ||
37 | /* permit kernel space cp6 access | |
38 | * deny user space cp6 access | |
39 | */ | |
40 | static struct undef_hook cp6_hook = { | |
41 | .instr_mask = 0x0f000ff0, | |
42 | .instr_val = 0x0e000610, | |
43 | .cpsr_mask = MODE_MASK, | |
44 | .cpsr_val = SVC_MODE, | |
45 | .fn = cp6_trap, | |
46 | }; | |
47 | ||
48 | void __init iop_init_cp6_handler(void) | |
49 | { | |
50 | register_undef_hook(&cp6_hook); | |
51 | } |