diff options
| -rw-r--r-- | arch/ppc64/kernel/entry.S | 9 | ||||
| -rw-r--r-- | arch/ppc64/kernel/head.S | 10 | ||||
| -rw-r--r-- | arch/ppc64/kernel/idle.c | 8 | ||||
| -rw-r--r-- | arch/ppc64/kernel/process.c | 3 | ||||
| -rw-r--r-- | arch/ppc64/kernel/sysfs.c | 8 | ||||
| -rw-r--r-- | include/asm-ppc64/processor.h | 27 | ||||
| -rw-r--r-- | include/asm-ppc64/thread_info.h | 4 |
7 files changed, 33 insertions, 36 deletions
diff --git a/arch/ppc64/kernel/entry.S b/arch/ppc64/kernel/entry.S index d3604056e1a9..b61572eb2a71 100644 --- a/arch/ppc64/kernel/entry.S +++ b/arch/ppc64/kernel/entry.S | |||
| @@ -436,15 +436,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) | |||
| 436 | REST_8GPRS(14, r1) | 436 | REST_8GPRS(14, r1) |
| 437 | REST_10GPRS(22, r1) | 437 | REST_10GPRS(22, r1) |
| 438 | 438 | ||
| 439 | #ifdef CONFIG_PPC_ISERIES | ||
| 440 | clrrdi r7,r1,THREAD_SHIFT /* get current_thread_info() */ | ||
| 441 | ld r7,TI_FLAGS(r7) /* Get run light flag */ | ||
| 442 | mfspr r9,CTRLF | ||
| 443 | srdi r7,r7,TIF_RUN_LIGHT | ||
| 444 | insrdi r9,r7,1,63 /* Insert run light into CTRL */ | ||
| 445 | mtspr CTRLT,r9 | ||
| 446 | #endif | ||
| 447 | |||
| 448 | /* convert old thread to its task_struct for return value */ | 439 | /* convert old thread to its task_struct for return value */ |
| 449 | addi r3,r3,-THREAD | 440 | addi r3,r3,-THREAD |
| 450 | ld r7,_NIP(r1) /* Return to _switch caller in new task */ | 441 | ld r7,_NIP(r1) /* Return to _switch caller in new task */ |
diff --git a/arch/ppc64/kernel/head.S b/arch/ppc64/kernel/head.S index 92a744c31ab1..346dbf606b5d 100644 --- a/arch/ppc64/kernel/head.S +++ b/arch/ppc64/kernel/head.S | |||
| @@ -626,10 +626,10 @@ system_reset_iSeries: | |||
| 626 | lhz r24,PACAPACAINDEX(r13) /* Get processor # */ | 626 | lhz r24,PACAPACAINDEX(r13) /* Get processor # */ |
| 627 | cmpwi 0,r24,0 /* Are we processor 0? */ | 627 | cmpwi 0,r24,0 /* Are we processor 0? */ |
| 628 | beq .__start_initialization_iSeries /* Start up the first processor */ | 628 | beq .__start_initialization_iSeries /* Start up the first processor */ |
| 629 | mfspr r4,CTRLF | 629 | mfspr r4,SPRN_CTRLF |
| 630 | li r5,RUNLATCH /* Turn off the run light */ | 630 | li r5,CTRL_RUNLATCH /* Turn off the run light */ |
| 631 | andc r4,r4,r5 | 631 | andc r4,r4,r5 |
| 632 | mtspr CTRLT,r4 | 632 | mtspr SPRN_CTRLT,r4 |
| 633 | 633 | ||
| 634 | 1: | 634 | 1: |
| 635 | HMT_LOW | 635 | HMT_LOW |
| @@ -2082,9 +2082,9 @@ _GLOBAL(hmt_start_secondary) | |||
| 2082 | mfspr r4, HID0 | 2082 | mfspr r4, HID0 |
| 2083 | ori r4, r4, 0x1 | 2083 | ori r4, r4, 0x1 |
| 2084 | mtspr HID0, r4 | 2084 | mtspr HID0, r4 |
| 2085 | mfspr r4, CTRLF | 2085 | mfspr r4, SPRN_CTRLF |
| 2086 | oris r4, r4, 0x40 | 2086 | oris r4, r4, 0x40 |
| 2087 | mtspr CTRLT, r4 | 2087 | mtspr SPRN_CTRLT, r4 |
| 2088 | blr | 2088 | blr |
| 2089 | #endif | 2089 | #endif |
| 2090 | 2090 | ||
diff --git a/arch/ppc64/kernel/idle.c b/arch/ppc64/kernel/idle.c index 6abc621d3ba0..f24ce2b87200 100644 --- a/arch/ppc64/kernel/idle.c +++ b/arch/ppc64/kernel/idle.c | |||
| @@ -75,13 +75,9 @@ static int iSeries_idle(void) | |||
| 75 | { | 75 | { |
| 76 | struct paca_struct *lpaca; | 76 | struct paca_struct *lpaca; |
| 77 | long oldval; | 77 | long oldval; |
| 78 | unsigned long CTRL; | ||
| 79 | 78 | ||
| 80 | /* ensure iSeries run light will be out when idle */ | 79 | /* ensure iSeries run light will be out when idle */ |
| 81 | clear_thread_flag(TIF_RUN_LIGHT); | 80 | ppc64_runlatch_off(); |
| 82 | CTRL = mfspr(CTRLF); | ||
| 83 | CTRL &= ~RUNLATCH; | ||
| 84 | mtspr(CTRLT, CTRL); | ||
| 85 | 81 | ||
| 86 | lpaca = get_paca(); | 82 | lpaca = get_paca(); |
| 87 | 83 | ||
| @@ -111,7 +107,9 @@ static int iSeries_idle(void) | |||
| 111 | } | 107 | } |
| 112 | } | 108 | } |
| 113 | 109 | ||
| 110 | ppc64_runlatch_on(); | ||
| 114 | schedule(); | 111 | schedule(); |
| 112 | ppc64_runlatch_off(); | ||
| 115 | } | 113 | } |
| 116 | 114 | ||
| 117 | return 0; | 115 | return 0; |
diff --git a/arch/ppc64/kernel/process.c b/arch/ppc64/kernel/process.c index 8b0686122738..cdfecbeb331f 100644 --- a/arch/ppc64/kernel/process.c +++ b/arch/ppc64/kernel/process.c | |||
| @@ -378,9 +378,6 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp, | |||
| 378 | childregs->gpr[1] = sp + sizeof(struct pt_regs); | 378 | childregs->gpr[1] = sp + sizeof(struct pt_regs); |
| 379 | p->thread.regs = NULL; /* no user register state */ | 379 | p->thread.regs = NULL; /* no user register state */ |
| 380 | clear_ti_thread_flag(p->thread_info, TIF_32BIT); | 380 | clear_ti_thread_flag(p->thread_info, TIF_32BIT); |
| 381 | #ifdef CONFIG_PPC_ISERIES | ||
| 382 | set_ti_thread_flag(p->thread_info, TIF_RUN_LIGHT); | ||
| 383 | #endif | ||
| 384 | } else { | 381 | } else { |
| 385 | childregs->gpr[1] = usp; | 382 | childregs->gpr[1] = usp; |
| 386 | p->thread.regs = childregs; | 383 | p->thread.regs = childregs; |
diff --git a/arch/ppc64/kernel/sysfs.c b/arch/ppc64/kernel/sysfs.c index 0925694c3ce5..c8fa6569b2fd 100644 --- a/arch/ppc64/kernel/sysfs.c +++ b/arch/ppc64/kernel/sysfs.c | |||
| @@ -113,7 +113,6 @@ void ppc64_enable_pmcs(void) | |||
| 113 | #ifdef CONFIG_PPC_PSERIES | 113 | #ifdef CONFIG_PPC_PSERIES |
| 114 | unsigned long set, reset; | 114 | unsigned long set, reset; |
| 115 | int ret; | 115 | int ret; |
| 116 | unsigned int ctrl; | ||
| 117 | #endif /* CONFIG_PPC_PSERIES */ | 116 | #endif /* CONFIG_PPC_PSERIES */ |
| 118 | 117 | ||
| 119 | /* Only need to enable them once */ | 118 | /* Only need to enable them once */ |
| @@ -167,11 +166,8 @@ void ppc64_enable_pmcs(void) | |||
| 167 | * On SMT machines we have to set the run latch in the ctrl register | 166 | * On SMT machines we have to set the run latch in the ctrl register |
| 168 | * in order to make PMC6 spin. | 167 | * in order to make PMC6 spin. |
| 169 | */ | 168 | */ |
| 170 | if (cpu_has_feature(CPU_FTR_SMT)) { | 169 | if (cpu_has_feature(CPU_FTR_SMT)) |
| 171 | ctrl = mfspr(CTRLF); | 170 | ppc64_runlatch_on(); |
| 172 | ctrl |= RUNLATCH; | ||
| 173 | mtspr(CTRLT, ctrl); | ||
| 174 | } | ||
| 175 | #endif /* CONFIG_PPC_PSERIES */ | 171 | #endif /* CONFIG_PPC_PSERIES */ |
| 176 | } | 172 | } |
| 177 | 173 | ||
diff --git a/include/asm-ppc64/processor.h b/include/asm-ppc64/processor.h index 5ba6aa45e1e2..809c634ba1df 100644 --- a/include/asm-ppc64/processor.h +++ b/include/asm-ppc64/processor.h | |||
| @@ -164,6 +164,9 @@ | |||
| 164 | #define SPRN_USIA 0x3AB /* User Sampled Instruction Address Register */ | 164 | #define SPRN_USIA 0x3AB /* User Sampled Instruction Address Register */ |
| 165 | #define SPRN_XER 0x001 /* Fixed Point Exception Register */ | 165 | #define SPRN_XER 0x001 /* Fixed Point Exception Register */ |
| 166 | #define SPRN_VRSAVE 0x100 /* Vector save */ | 166 | #define SPRN_VRSAVE 0x100 /* Vector save */ |
| 167 | #define SPRN_CTRLF 0x088 | ||
| 168 | #define SPRN_CTRLT 0x098 | ||
| 169 | #define CTRL_RUNLATCH 0x1 | ||
| 167 | 170 | ||
| 168 | /* Performance monitor SPRs */ | 171 | /* Performance monitor SPRs */ |
| 169 | #define SPRN_SIAR 780 | 172 | #define SPRN_SIAR 780 |
| @@ -279,12 +282,6 @@ | |||
| 279 | #define XGLUE(a,b) a##b | 282 | #define XGLUE(a,b) a##b |
| 280 | #define GLUE(a,b) XGLUE(a,b) | 283 | #define GLUE(a,b) XGLUE(a,b) |
| 281 | 284 | ||
| 282 | /* iSeries CTRL register (for runlatch) */ | ||
| 283 | |||
| 284 | #define CTRLT 0x098 | ||
| 285 | #define CTRLF 0x088 | ||
| 286 | #define RUNLATCH 0x0001 | ||
| 287 | |||
| 288 | #ifdef __ASSEMBLY__ | 285 | #ifdef __ASSEMBLY__ |
| 289 | 286 | ||
| 290 | #define _GLOBAL(name) \ | 287 | #define _GLOBAL(name) \ |
| @@ -499,6 +496,24 @@ static inline void prefetchw(const void *x) | |||
| 499 | 496 | ||
| 500 | #define HAVE_ARCH_PICK_MMAP_LAYOUT | 497 | #define HAVE_ARCH_PICK_MMAP_LAYOUT |
| 501 | 498 | ||
| 499 | static inline void ppc64_runlatch_on(void) | ||
| 500 | { | ||
| 501 | unsigned long ctrl; | ||
| 502 | |||
| 503 | ctrl = mfspr(SPRN_CTRLF); | ||
| 504 | ctrl |= CTRL_RUNLATCH; | ||
| 505 | mtspr(SPRN_CTRLT, ctrl); | ||
| 506 | } | ||
| 507 | |||
| 508 | static inline void ppc64_runlatch_off(void) | ||
| 509 | { | ||
| 510 | unsigned long ctrl; | ||
| 511 | |||
| 512 | ctrl = mfspr(SPRN_CTRLF); | ||
| 513 | ctrl &= ~CTRL_RUNLATCH; | ||
| 514 | mtspr(SPRN_CTRLT, ctrl); | ||
| 515 | } | ||
| 516 | |||
| 502 | #endif /* __KERNEL__ */ | 517 | #endif /* __KERNEL__ */ |
| 503 | 518 | ||
| 504 | #endif /* __ASSEMBLY__ */ | 519 | #endif /* __ASSEMBLY__ */ |
diff --git a/include/asm-ppc64/thread_info.h b/include/asm-ppc64/thread_info.h index 037b5e06083c..48b7900e90ec 100644 --- a/include/asm-ppc64/thread_info.h +++ b/include/asm-ppc64/thread_info.h | |||
| @@ -96,7 +96,7 @@ static inline struct thread_info *current_thread_info(void) | |||
| 96 | #define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling | 96 | #define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling |
| 97 | TIF_NEED_RESCHED */ | 97 | TIF_NEED_RESCHED */ |
| 98 | #define TIF_32BIT 5 /* 32 bit binary */ | 98 | #define TIF_32BIT 5 /* 32 bit binary */ |
| 99 | #define TIF_RUN_LIGHT 6 /* iSeries run light */ | 99 | /* #define SPARE 6 */ |
| 100 | #define TIF_ABI_PENDING 7 /* 32/64 bit switch needed */ | 100 | #define TIF_ABI_PENDING 7 /* 32/64 bit switch needed */ |
| 101 | #define TIF_SYSCALL_AUDIT 8 /* syscall auditing active */ | 101 | #define TIF_SYSCALL_AUDIT 8 /* syscall auditing active */ |
| 102 | #define TIF_SINGLESTEP 9 /* singlestepping active */ | 102 | #define TIF_SINGLESTEP 9 /* singlestepping active */ |
| @@ -110,7 +110,7 @@ static inline struct thread_info *current_thread_info(void) | |||
| 110 | #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) | 110 | #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) |
| 111 | #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) | 111 | #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) |
| 112 | #define _TIF_32BIT (1<<TIF_32BIT) | 112 | #define _TIF_32BIT (1<<TIF_32BIT) |
| 113 | #define _TIF_RUN_LIGHT (1<<TIF_RUN_LIGHT) | 113 | /* #define _SPARE (1<<SPARE) */ |
| 114 | #define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING) | 114 | #define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING) |
| 115 | #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) | 115 | #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) |
| 116 | #define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP) | 116 | #define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP) |
