diff options
Diffstat (limited to 'arch/powerpc/sysdev/xive/native.c')
| -rw-r--r-- | arch/powerpc/sysdev/xive/native.c | 33 | 
1 files changed, 33 insertions, 0 deletions
diff --git a/arch/powerpc/sysdev/xive/native.c b/arch/powerpc/sysdev/xive/native.c index 2f26b74f6cfa..0ff6b739052c 100644 --- a/arch/powerpc/sysdev/xive/native.c +++ b/arch/powerpc/sysdev/xive/native.c @@ -111,6 +111,20 @@ int xive_native_configure_irq(u32 hw_irq, u32 target, u8 prio, u32 sw_irq)  }  EXPORT_SYMBOL_GPL(xive_native_configure_irq); +static int xive_native_get_irq_config(u32 hw_irq, u32 *target, u8 *prio, +				      u32 *sw_irq) +{ +	s64 rc; +	__be64 vp; +	__be32 lirq; + +	rc = opal_xive_get_irq_config(hw_irq, &vp, prio, &lirq); + +	*target = be64_to_cpu(vp); +	*sw_irq = be32_to_cpu(lirq); + +	return rc == 0 ? 0 : -ENXIO; +}  /* This can be called multiple time to change a queue configuration */  int xive_native_configure_queue(u32 vp_id, struct xive_q *q, u8 prio, @@ -231,6 +245,17 @@ static bool xive_native_match(struct device_node *node)  	return of_device_is_compatible(node, "ibm,opal-xive-vc");  } +static s64 opal_xive_allocate_irq(u32 chip_id) +{ +	s64 irq = opal_xive_allocate_irq_raw(chip_id); + +	/* +	 * Old versions of skiboot can incorrectly return 0xffffffff to +	 * indicate no space, fix it up here. +	 */ +	return irq == 0xffffffff ? OPAL_RESOURCE : irq; +} +  #ifdef CONFIG_SMP  static int xive_native_get_ipi(unsigned int cpu, struct xive_cpu *xc)  { @@ -442,6 +467,7 @@ EXPORT_SYMBOL_GPL(xive_native_sync_queue);  static const struct xive_ops xive_native_ops = {  	.populate_irq_data	= xive_native_populate_irq_data,  	.configure_irq		= xive_native_configure_irq, +	.get_irq_config		= xive_native_get_irq_config,  	.setup_queue		= xive_native_setup_queue,  	.cleanup_queue		= xive_native_cleanup_queue,  	.match			= xive_native_match, @@ -800,6 +826,13 @@ int xive_native_set_queue_state(u32 vp_id, u32 prio, u32 qtoggle, u32 qindex)  }  EXPORT_SYMBOL_GPL(xive_native_set_queue_state); +bool xive_native_has_queue_state_support(void) +{ +	return opal_check_token(OPAL_XIVE_GET_QUEUE_STATE) && +		opal_check_token(OPAL_XIVE_SET_QUEUE_STATE); +} +EXPORT_SYMBOL_GPL(xive_native_has_queue_state_support); +  int xive_native_get_vp_state(u32 vp_id, u64 *out_state)  {  	__be64 state;  |