summaryrefslogtreecommitdiffstats
path: root/src/lib/gpe_control.pS
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/gpe_control.pS')
-rwxr-xr-xsrc/lib/gpe_control.pS160
1 files changed, 0 insertions, 160 deletions
diff --git a/src/lib/gpe_control.pS b/src/lib/gpe_control.pS
deleted file mode 100755
index 3f3c790..0000000
--- a/src/lib/gpe_control.pS
+++ /dev/null
@@ -1,160 +0,0 @@
-// $Id: gpe_control.pS,v 1.1.1.1 2013/12/11 20:49:20 bcbrock Exp $
-// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/lib/gpe_control.pS,v $
-//-----------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2013
-// *! All Rights Reserved -- Property of IBM
-// *! *** IBM Confidential ***
-//-----------------------------------------------------------------------------
-
-/// \file gpe_control.S
-/// \brief GPE procedures for control
-
- .nolist
-
-#include "ssx.h"
-#include "pgas.h"
-#include "gpe.h"
-#include "gpe_control.h"
-
- .list
-
- .oci
- .text.pore
-
-/// \fn gpe_set_pstates(GpeSetPstatesParms *parms)
-/// \brief Set core chiplet Pstate registers
-///
-/// This routine loops through an array of PcbsPstateRegs structures
-/// holding the register images to be actuated. A pointer to the array is
-/// provided as the \a registers parameter. For every core chiplet
-/// appearing in the \a cfg parameter, those registers marked in the \a select
-/// parameter are updated.
-///
-/// When the PMBR is being updated, an option is provided to
-/// set PCBS_PCBSPM_MODE_REG[enable_pmax_sync_interrupt] around the
-/// update of PMBR. This will cause a SYNC interrupt from each
-/// core. This mode currently does not set up the sync protocol in the PMC -
-/// the caller must do that.
-///
-/// Note that actuating the PMCR and PMICR using this method requires that the
-/// PCB Slave bit PMGP0_REG.pm_spr_override_en is set.
-#ifdef DOXYGEN_ONLY
-void gpe_set_pstates(GpeSetPstatesParms *parms);
-#endif
-/// \cond
-
- // Register usage:
- //
- // A1 : Holds the (constant) pointer to the paramaters
- // A0 : Holds the (varying) pointer to the next register block
- // D1 : Holds the (varying) ChipConfig mask
- // D0 : Scratch
- // P0 : Holds the (varying) chiplet id
-
- .global gpe_set_pstates
-
-gpe_set_pstates:
-
- // Set up registers. The chiplet part of the ChipConfig is left
- // justified in D1, which will be rotated on each loop.
-
- mr A1, ETR
- ld D0, GPESETPSTATESPARMS_REGS, A1
- mr A0, D0
- ld D0, GPESETPSTATESPARMS_CONFIG, A1
- mr D1, D0
- left_justify_core_config D1
- lpcs P0, 0x10000000 # Load P0 with core chiplet 0 address
- ls CTR, PGP_NCORES
- bra start_loop
-
-set_pstates_loop:
- // If the chiplet is not configured, simply continue
-
- andi D0, D1, 0x8000000000000000
- braz D0, set_pstates_continue
-
- // Test/actuate each register in order
-
- ldandi D0, GPESETPSTATESPARMS_SELECT, A1, GPE_SET_PSTATES_PMBR
- braz D0, pmicr
-
- // PMBR.
-
- // If SYNCing, the register write is wrapped by a read-modify-write of
- // the PCBS_PCBSPM_MODE_REG which enables the PMAX Sync
- // acknowledge. Note that the original PCBSPM mode reg is saved and
- // restored.
-pmbr:
- ldandi D0, GPESETPSTATESPARMS_SELECT, A1, GPE_SET_PSTATES_SYNC
- braz D0, nosync
-
-sync:
- ld D0, PCBS_PCBSPM_MODE_REG, P0
- la A1, gsp_pcbs_pcbspm_mode_reg
- std D0, 0, A1
- ori D0, D0, PCBS_PCBSPM_MODE_REG_ENABLE_PMC_PMAX_SYNC_NOTIFICATION
- std D0, PCBS_PCBSPM_MODE_REG, P0
-
- ld D0, PCBSPSTATEREGS_PMBR, A0
- std D0, PCBS_POWER_MANAGEMENT_BOUNDS_REG, P0
-
- ld D0, 0, A1
- std D0, PCBS_PCBSPM_MODE_REG, P0
- // restore A1
- mr A1, ETR
- bra pmicr
-
-nosync:
- ld D0, PCBSPSTATEREGS_PMBR, A0
- std D0, PCBS_POWER_MANAGEMENT_BOUNDS_REG, P0
-
- // PMICR
-pmicr:
- ldandi D0, GPESETPSTATESPARMS_SELECT, A1, GPE_SET_PSTATES_PMICR
- braz D0, pmcr
- ld D0, PCBSPSTATEREGS_PMICR, A0
- std D0, PCBS_POWER_MANAGEMENT_IDLE_CONTROL_REG, P0
-
- // PMCR
-pmcr:
- ldandi D0, GPESETPSTATESPARMS_SELECT, A1, GPE_SET_PSTATES_PMCR
- braz D0, set_pstates_continue
- ld D0, PCBSPSTATEREGS_PMCR, A0
- std D0, PCBS_POWER_MANAGEMENT_CONTROL_REG, P0
-
-set_pstates_continue:
-
- // Increment the chiplet index and data pointer, then loop or halt.
-
- adds P0, P0, 1
- adds A0, A0, SIZEOF_PCBSPSTATEREGS
- rotldi D1, D1, 1
-start_loop:
- loop set_pstates_loop
-
- halt
-
- .epilogue gpe_set_pstates
-
-/// \endcond
-
-/// Data storage for procedures.
-/// Placing data in the .rodata section to prevent the 405 from stomping them.
- .section .rodata
- .balign 8
-/// data for gpe_set_pstates
-
-
-
-
-
-
-
-
-
-/// \cond
-
-gsp_pcbs_pcbspm_mode_reg:
- .quad 0
-/// \endcond
OpenPOWER on IntegriCloud