diff options
Diffstat (limited to 'arch/xtensa/kernel/process.c')
| -rw-r--r-- | arch/xtensa/kernel/process.c | 37 |
1 files changed, 3 insertions, 34 deletions
diff --git a/arch/xtensa/kernel/process.c b/arch/xtensa/kernel/process.c index a7c4178c2a8..3785f3481d7 100644 --- a/arch/xtensa/kernel/process.c +++ b/arch/xtensa/kernel/process.c | |||
| @@ -1,4 +1,3 @@ | |||
| 1 | // TODO verify coprocessor handling | ||
| 2 | /* | 1 | /* |
| 3 | * arch/xtensa/kernel/process.c | 2 | * arch/xtensa/kernel/process.c |
| 4 | * | 3 | * |
| @@ -43,7 +42,7 @@ | |||
| 43 | #include <asm/irq.h> | 42 | #include <asm/irq.h> |
| 44 | #include <asm/atomic.h> | 43 | #include <asm/atomic.h> |
| 45 | #include <asm/asm-offsets.h> | 44 | #include <asm/asm-offsets.h> |
| 46 | #include <asm/coprocessor.h> | 45 | #include <asm/regs.h> |
| 47 | 46 | ||
| 48 | extern void ret_from_fork(void); | 47 | extern void ret_from_fork(void); |
| 49 | 48 | ||
| @@ -67,25 +66,6 @@ void (*pm_power_off)(void) = NULL; | |||
| 67 | EXPORT_SYMBOL(pm_power_off); | 66 | EXPORT_SYMBOL(pm_power_off); |
| 68 | 67 | ||
| 69 | 68 | ||
| 70 | #if XCHAL_CP_NUM > 0 | ||
| 71 | |||
| 72 | /* | ||
| 73 | * Coprocessor ownership. | ||
| 74 | */ | ||
| 75 | |||
| 76 | coprocessor_info_t coprocessor_info[] = { | ||
| 77 | { 0, XTENSA_CPE_CP0_OFFSET }, | ||
| 78 | { 0, XTENSA_CPE_CP1_OFFSET }, | ||
| 79 | { 0, XTENSA_CPE_CP2_OFFSET }, | ||
| 80 | { 0, XTENSA_CPE_CP3_OFFSET }, | ||
| 81 | { 0, XTENSA_CPE_CP4_OFFSET }, | ||
| 82 | { 0, XTENSA_CPE_CP5_OFFSET }, | ||
| 83 | { 0, XTENSA_CPE_CP6_OFFSET }, | ||
| 84 | { 0, XTENSA_CPE_CP7_OFFSET }, | ||
| 85 | }; | ||
| 86 | |||
| 87 | #endif | ||
| 88 | |||
| 89 | /* | 69 | /* |
| 90 | * Powermanagement idle function, if any is provided by the platform. | 70 | * Powermanagement idle function, if any is provided by the platform. |
| 91 | */ | 71 | */ |
| @@ -110,12 +90,10 @@ void cpu_idle(void) | |||
| 110 | 90 | ||
| 111 | void exit_thread(void) | 91 | void exit_thread(void) |
| 112 | { | 92 | { |
| 113 | release_coprocessors(current); /* Empty macro if no CPs are defined */ | ||
| 114 | } | 93 | } |
| 115 | 94 | ||
| 116 | void flush_thread(void) | 95 | void flush_thread(void) |
| 117 | { | 96 | { |
| 118 | release_coprocessors(current); /* Empty macro if no CPs are defined */ | ||
| 119 | } | 97 | } |
| 120 | 98 | ||
| 121 | /* | 99 | /* |
| @@ -275,7 +253,7 @@ void do_copy_regs (xtensa_gregset_t *elfregs, struct pt_regs *regs, | |||
| 275 | */ | 253 | */ |
| 276 | 254 | ||
| 277 | elfregs->pc = regs->pc; | 255 | elfregs->pc = regs->pc; |
| 278 | elfregs->ps = (regs->ps & ~XCHAL_PS_EXCM_MASK); | 256 | elfregs->ps = (regs->ps & ~(1 << PS_EXCM_BIT)); |
| 279 | elfregs->exccause = regs->exccause; | 257 | elfregs->exccause = regs->exccause; |
| 280 | elfregs->excvaddr = regs->excvaddr; | 258 | elfregs->excvaddr = regs->excvaddr; |
| 281 | elfregs->windowbase = regs->windowbase; | 259 | elfregs->windowbase = regs->windowbase; |
| @@ -325,7 +303,7 @@ void do_restore_regs (xtensa_gregset_t *elfregs, struct pt_regs *regs, | |||
| 325 | */ | 303 | */ |
| 326 | 304 | ||
| 327 | regs->pc = elfregs->pc; | 305 | regs->pc = elfregs->pc; |
| 328 | regs->ps = (elfregs->ps | XCHAL_PS_EXCM_MASK); | 306 | regs->ps = (elfregs->ps | (1 << PS_EXCM_BIT)); |
| 329 | regs->exccause = elfregs->exccause; | 307 | regs->exccause = elfregs->exccause; |
| 330 | regs->excvaddr = elfregs->excvaddr; | 308 | regs->excvaddr = elfregs->excvaddr; |
| 331 | regs->windowbase = elfregs->windowbase; | 309 | regs->windowbase = elfregs->windowbase; |
| @@ -459,16 +437,7 @@ int do_restore_fpregs (elf_fpregset_t *fpregs, struct pt_regs *regs, | |||
| 459 | int | 437 | int |
| 460 | dump_task_fpu(struct pt_regs *regs, struct task_struct *task, elf_fpregset_t *r) | 438 | dump_task_fpu(struct pt_regs *regs, struct task_struct *task, elf_fpregset_t *r) |
| 461 | { | 439 | { |
| 462 | /* see asm/coprocessor.h for this magic number 16 */ | ||
| 463 | #if XTENSA_CP_EXTRA_SIZE > 16 | ||
| 464 | do_save_fpregs (r, regs, task); | ||
| 465 | |||
| 466 | /* For now, bit 16 means some extra state may be present: */ | ||
| 467 | // FIXME!! need to track to return more accurate mask | ||
| 468 | return 0x10000 | XCHAL_CP_MASK; | ||
| 469 | #else | ||
| 470 | return 0; /* no coprocessors active on this processor */ | 440 | return 0; /* no coprocessors active on this processor */ |
| 471 | #endif | ||
| 472 | } | 441 | } |
| 473 | 442 | ||
| 474 | /* | 443 | /* |
