aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/kernel/rtas.c21
-rw-r--r--arch/powerpc/platforms/pseries/setup.c2
-rw-r--r--arch/powerpc/platforms/pseries/xics.c6
3 files changed, 24 insertions, 5 deletions
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
index 14353b8789dd..bfd66d3a035c 100644
--- a/arch/powerpc/kernel/rtas.c
+++ b/arch/powerpc/kernel/rtas.c
@@ -571,6 +571,27 @@ int rtas_set_indicator(int indicator, int index, int new_value)
571} 571}
572EXPORT_SYMBOL(rtas_set_indicator); 572EXPORT_SYMBOL(rtas_set_indicator);
573 573
574/*
575 * Ignoring RTAS extended delay
576 */
577int rtas_set_indicator_fast(int indicator, int index, int new_value)
578{
579 int rc;
580 int token = rtas_token("set-indicator");
581
582 if (token == RTAS_UNKNOWN_SERVICE)
583 return -ENOENT;
584
585 rc = rtas_call(token, 3, 1, NULL, indicator, index, new_value);
586
587 WARN_ON(rc == -2 || (rc >= 9900 && rc <= 9905));
588
589 if (rc < 0)
590 return rtas_error_rc(rc);
591
592 return rc;
593}
594
574void rtas_restart(char *cmd) 595void rtas_restart(char *cmd)
575{ 596{
576 if (rtas_flash_term_hook) 597 if (rtas_flash_term_hook)
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index 6ebeecfd6bcb..1587efc51057 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -213,8 +213,6 @@ static void pseries_lpar_enable_pmcs(void)
213{ 213{
214 unsigned long set, reset; 214 unsigned long set, reset;
215 215
216 power4_enable_pmcs();
217
218 set = 1UL << 63; 216 set = 1UL << 63;
219 reset = 0; 217 reset = 0;
220 plpar_hcall_norets(H_PERFMON, set, reset); 218 plpar_hcall_norets(H_PERFMON, set, reset);
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
index c88ec63129f3..253972e5479f 100644
--- a/arch/powerpc/platforms/pseries/xics.c
+++ b/arch/powerpc/platforms/pseries/xics.c
@@ -447,7 +447,7 @@ void xics_setup_cpu(void)
447 * 447 *
448 * XXX: undo of teardown on kexec needs this too, as may hotplug 448 * XXX: undo of teardown on kexec needs this too, as may hotplug
449 */ 449 */
450 rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE, 450 rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE,
451 (1UL << interrupt_server_size) - 1 - default_distrib_server, 1); 451 (1UL << interrupt_server_size) - 1 - default_distrib_server, 1);
452} 452}
453 453
@@ -776,7 +776,7 @@ void xics_teardown_cpu(int secondary)
776 * so leave the master cpu in the group. 776 * so leave the master cpu in the group.
777 */ 777 */
778 if (secondary) 778 if (secondary)
779 rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE, 779 rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE,
780 (1UL << interrupt_server_size) - 1 - 780 (1UL << interrupt_server_size) - 1 -
781 default_distrib_server, 0); 781 default_distrib_server, 0);
782} 782}
@@ -793,7 +793,7 @@ void xics_migrate_irqs_away(void)
793 xics_set_cpu_priority(cpu, 0); 793 xics_set_cpu_priority(cpu, 0);
794 794
795 /* remove ourselves from the global interrupt queue */ 795 /* remove ourselves from the global interrupt queue */
796 status = rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE, 796 status = rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE,
797 (1UL << interrupt_server_size) - 1 - default_distrib_server, 0); 797 (1UL << interrupt_server_size) - 1 - default_distrib_server, 0);
798 WARN_ON(status < 0); 798 WARN_ON(status < 0);
799 799