aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/sysdev/xive/native.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/sysdev/xive/native.c')
-rw-r--r--arch/powerpc/sysdev/xive/native.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/arch/powerpc/sysdev/xive/native.c b/arch/powerpc/sysdev/xive/native.c
index ebc244b08d67..d22aeb0b69e1 100644
--- a/arch/powerpc/sysdev/xive/native.c
+++ b/arch/powerpc/sysdev/xive/native.c
@@ -42,6 +42,7 @@ static u32 xive_provision_chip_count;
42static u32 xive_queue_shift; 42static u32 xive_queue_shift;
43static u32 xive_pool_vps = XIVE_INVALID_VP; 43static u32 xive_pool_vps = XIVE_INVALID_VP;
44static struct kmem_cache *xive_provision_cache; 44static struct kmem_cache *xive_provision_cache;
45static bool xive_has_single_esc;
45 46
46int xive_native_populate_irq_data(u32 hw_irq, struct xive_irq_data *data) 47int xive_native_populate_irq_data(u32 hw_irq, struct xive_irq_data *data)
47{ 48{
@@ -571,6 +572,10 @@ bool __init xive_native_init(void)
571 break; 572 break;
572 } 573 }
573 574
575 /* Do we support single escalation */
576 if (of_get_property(np, "single-escalation-support", NULL) != NULL)
577 xive_has_single_esc = true;
578
574 /* Configure Thread Management areas for KVM */ 579 /* Configure Thread Management areas for KVM */
575 for_each_possible_cpu(cpu) 580 for_each_possible_cpu(cpu)
576 kvmppc_set_xive_tima(cpu, r.start, tima); 581 kvmppc_set_xive_tima(cpu, r.start, tima);
@@ -667,12 +672,15 @@ void xive_native_free_vp_block(u32 vp_base)
667} 672}
668EXPORT_SYMBOL_GPL(xive_native_free_vp_block); 673EXPORT_SYMBOL_GPL(xive_native_free_vp_block);
669 674
670int xive_native_enable_vp(u32 vp_id) 675int xive_native_enable_vp(u32 vp_id, bool single_escalation)
671{ 676{
672 s64 rc; 677 s64 rc;
678 u64 flags = OPAL_XIVE_VP_ENABLED;
673 679
680 if (single_escalation)
681 flags |= OPAL_XIVE_VP_SINGLE_ESCALATION;
674 for (;;) { 682 for (;;) {
675 rc = opal_xive_set_vp_info(vp_id, OPAL_XIVE_VP_ENABLED, 0); 683 rc = opal_xive_set_vp_info(vp_id, flags, 0);
676 if (rc != OPAL_BUSY) 684 if (rc != OPAL_BUSY)
677 break; 685 break;
678 msleep(1); 686 msleep(1);
@@ -710,3 +718,9 @@ int xive_native_get_vp_info(u32 vp_id, u32 *out_cam_id, u32 *out_chip_id)
710 return 0; 718 return 0;
711} 719}
712EXPORT_SYMBOL_GPL(xive_native_get_vp_info); 720EXPORT_SYMBOL_GPL(xive_native_get_vp_info);
721
722bool xive_native_has_single_escalation(void)
723{
724 return xive_has_single_esc;
725}
726EXPORT_SYMBOL_GPL(xive_native_has_single_escalation);