summaryrefslogtreecommitdiffstats
path: root/pk/std/std_init.c
diff options
context:
space:
mode:
authorGlenn Miles <milesg@us.ibm.com>2015-02-27 13:33:34 -0600
committerGlenn R. Miles <milesg@us.ibm.com>2015-03-09 12:10:05 -0500
commitf08700ec353ff65467239241558fcdf1a87e377f (patch)
treee31a9c6655634e3c59f9a509c4ace8daeca09487 /pk/std/std_init.c
parent69207c6c1750b4051b9be1dd9bdd984dd7d3db3d (diff)
downloadtalos-sbe-f08700ec353ff65467239241558fcdf1a87e377f.tar.gz
talos-sbe-f08700ec353ff65467239241558fcdf1a87e377f.zip
Add external interrupt support for standard PPE's
Change-Id: I5ac49d4a9aace2dfbe3cdebf0dd7942c1e22da4e Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/16240 Reviewed-by: Glenn R. Miles <milesg@us.ibm.com> Tested-by: Glenn R. Miles <milesg@us.ibm.com>
Diffstat (limited to 'pk/std/std_init.c')
-rw-r--r--pk/std/std_init.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/pk/std/std_init.c b/pk/std/std_init.c
new file mode 100644
index 00000000..b0aae325
--- /dev/null
+++ b/pk/std/std_init.c
@@ -0,0 +1,50 @@
+//-----------------------------------------------------------------------------
+// *! (C) Copyright International Business Machines Corp. 2014
+// *! All Rights Reserved -- Property of IBM
+// *! *** IBM Confidential ***
+//-----------------------------------------------------------------------------
+
+/// \file std_init.c
+/// \brief PK initialization for a standard PPE.
+///
+/// The entry points in this routine are used during initialization. This
+/// code space can be deallocated and reassigned after application
+/// initialization if required.
+
+#include "pk.h"
+
+/// Standard PPE environment initial setup.
+///
+/// This is setup common to all standard PPE Macro applications. This setup takes place
+/// during boot, before main() is called.
+
+void
+__hwmacro_setup(void)
+{
+ //mask all interrupts
+ out64(STD_LCL_EIMR_OR, 0xffffffffffffffffull);
+
+ //Set all interrupts to active low, level sensitive by default
+ out64(STD_LCL_EIPR_CLR, 0xffffffffffffffffull);
+ out64(STD_LCL_EITR_CLR, 0xffffffffffffffffull);
+
+ //set up the configured type
+ out64(STD_LCL_EITR_OR, g_ext_irqs_type);
+
+ //set up the configured polarity
+ out64(STD_LCL_EIPR_OR, g_ext_irqs_polarity);
+
+ //clear the status of all active-high interrupts (has no affect on
+ //level sensitive interrupts)
+ out64(STD_LCL_EISR_CLR, g_ext_irqs_polarity);
+
+ //clear the status of all active-low interrupts (has no affect on
+ //level sensitive interrupts)
+ out64(STD_LCL_EISR_OR, ~g_ext_irqs_polarity);
+
+ //unmask the interrupts that are to be enabled by default
+ out64(STD_LCL_EIMR_CLR, g_ext_irqs_enable);
+
+ //wait for the last operation to complete
+ sync();
+}
OpenPOWER on IntegriCloud