diff options
author | Glenn Miles <milesg@us.ibm.com> | 2015-02-27 13:33:34 -0600 |
---|---|---|
committer | Glenn R. Miles <milesg@us.ibm.com> | 2015-03-09 12:10:05 -0500 |
commit | f08700ec353ff65467239241558fcdf1a87e377f (patch) | |
tree | e31a9c6655634e3c59f9a509c4ace8daeca09487 /pk/std/std_init.c | |
parent | 69207c6c1750b4051b9be1dd9bdd984dd7d3db3d (diff) | |
download | talos-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.c | 50 |
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(); +} |