summaryrefslogtreecommitdiffstats
path: root/import
diff options
context:
space:
mode:
authorYue Du <daviddu@us.ibm.com>2016-02-24 23:27:38 -0600
committerSachin Gupta <sgupta2m@in.ibm.com>2016-08-16 11:56:49 -0400
commitd2a07458f4b1767cd3da511b9f3d657d3d65b6f5 (patch)
treec3800bd33bfa029b887c02750ac4ae3482412246 /import
parent0a6dc36fb0c2cff9841a52081a5121f7646bbf66 (diff)
downloadtalos-sbe-d2a07458f4b1767cd3da511b9f3d657d3d65b6f5.tar.gz
talos-sbe-d2a07458f4b1767cd3da511b9f3d657d3d65b6f5.zip
Combined Stop/PState Cme Image + unified interrupt handler
Change-Id: Ie954197008f1a35bd8336c9d921f55165ec52207 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/20857 Tested-by: Jenkins Server Reviewed-by: Gregory S. Still <stillgs@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/28285 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Diffstat (limited to 'import')
-rw-r--r--import/chips/p9/procedures/ppe/pk/std/std_common.h10
-rw-r--r--import/chips/p9/procedures/ppe/pk/std/std_irq.h27
2 files changed, 37 insertions, 0 deletions
diff --git a/import/chips/p9/procedures/ppe/pk/std/std_common.h b/import/chips/p9/procedures/ppe/pk/std/std_common.h
index 358be9f1..a1f52eda 100644
--- a/import/chips/p9/procedures/ppe/pk/std/std_common.h
+++ b/import/chips/p9/procedures/ppe/pk/std/std_common.h
@@ -54,9 +54,19 @@
///
/// r1, r2, r3, and r13 must not be modified. All other registers may be used.
///
+/// The pk_unified_irq_prty_mask_handler routine MUST return the task priority
+/// interrupt vector in d5.
+///
.macro hwmacro_get_ext_irq
+#ifdef UNIFIED_IRQ_HANDLER_CME
+ // Unified approach.
+ _liw r5, pk_unified_irq_prty_mask_handler
+ mtlr r5
+ blrl // On return, d5 contains task prty irq vec.
+#else
_lvdg d5, STD_LCL_EISTR #load the 64bit interrupt status into d5
+#endif
cntlzw r4, r5
cmpwible r4, 31, call_external_irq_handler #branch if irq is lt or eq to 31
diff --git a/import/chips/p9/procedures/ppe/pk/std/std_irq.h b/import/chips/p9/procedures/ppe/pk/std/std_irq.h
index fb71ae09..4af55745 100644
--- a/import/chips/p9/procedures/ppe/pk/std/std_irq.h
+++ b/import/chips/p9/procedures/ppe/pk/std/std_irq.h
@@ -59,6 +59,14 @@ pk_irq_enable(PkIrqId irq)
out64(STD_LCL_EIMR_CLR, STD_IRQ_MASK64(irq));
}
+/// Enable a vector of interrupts by clearing the mask bits.
+
+UNLESS__PPE42_IRQ_CORE_C__(extern)
+inline void
+pk_irq_vec_enable(uint64_t irq_vec_mask)
+{
+ out64(STD_LCL_EIMR_CLR, irq_vec_mask);
+}
/// Disable an interrupt by setting the mask bit.
@@ -69,6 +77,15 @@ pk_irq_disable(PkIrqId irq)
out64(STD_LCL_EIMR_OR, STD_IRQ_MASK64(irq));
}
+/// Disable a vector of interrupts by setting the mask bits.
+
+UNLESS__PPE42_IRQ_CORE_C__(extern)
+inline void
+pk_irq_vec_disable(uint64_t irq_vec_mask)
+{
+ out64(STD_LCL_EIMR_OR, irq_vec_mask);
+}
+
/// Clear interrupt status with an CLR mask. Only meaningful for
/// edge-triggered interrupts.
@@ -81,6 +98,16 @@ pk_irq_status_clear(PkIrqId irq)
}
+/// Clear a vector of interrupts status with an CLR mask. Only meaningful for
+/// edge-triggered interrupts.
+
+UNLESS__PPE42_IRQ_CORE_C__(extern)
+inline void
+pk_irq_vec_status_clear(uint64_t irq_vec_mask)
+{
+ out64(STD_LCL_EISR_CLR, irq_vec_mask);
+}
+
/// Get IRQ status as a 0 or non-0 integer
UNLESS__PPE42_IRQ_CORE_C__(extern)
OpenPOWER on IntegriCloud