diff options
Diffstat (limited to 'src/lib/gpe_pba.h')
-rw-r--r-- | src/lib/gpe_pba.h | 116 |
1 files changed, 0 insertions, 116 deletions
diff --git a/src/lib/gpe_pba.h b/src/lib/gpe_pba.h deleted file mode 100644 index 5f8ea2c..0000000 --- a/src/lib/gpe_pba.h +++ /dev/null @@ -1,116 +0,0 @@ -#ifndef __GPE_PBA_H__ -#define __GPE_PBA_H__ - -// $Id: gpe_pba.h,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_pba.h,v $ -//----------------------------------------------------------------------------- -// *! (C) Copyright International Business Machines Corp. 2013 -// *! All Rights Reserved -- Property of IBM -// *! *** IBM Confidential *** -//----------------------------------------------------------------------------- - -/// \file gpe_pba.h -/// \brief PBA subroutines for PORE-GPE procedures - -// Error/Panic codes - -#define GPE_INVALID_OBJECT 0x00473001 -#define GPE_INVALID_ARGUMENT 0x00473002 - - -#ifndef __ASSEMBLER__ - -/// Encapsulated PBA setup for GPE programs -/// -/// All GPE programs that access mainstore via PBA utilize a common parameter -/// structure that encapsulates the required setup. This is required due to -/// the unusual architecture of the PBA which interprets OCI addresses and the -/// associated PowerBus transaction type based on which OCI \e master issued -/// the OCI transaction, not based on the OCI \a address (or PowerBus -/// address). The final complication is that each OCI master is assigned a -/// unique PBA "slave port", so any reprogramming must be done on the PBA -/// registers associated with the particular port assigned to the particular -/// PORE engine. -/// -/// In product code the PBA slave port assignment for the PORE-GPE engines -/// will be fixed; however this structure assumes the most general case and -/// allows for an arbitraray and dynamic assignment, and even allows mainstore -/// programs to run on the PORE-SLW. However the procedure that creates this -/// structure (gpe_pba_parms_create()) must know which engine/port will run -/// the program in order to set up the parameters. -/// -/// The PBA software interface is not friendly for dynamic programming of the -/// PBA slave setup, especially from the PORE. The slave setup is modifed by a -/// read-modify-write under mask. gpa_pba_parms_create() does not allow -/// specification of which read buffers, prefetch modes or write timeouts to -/// use as these have global implications. Only the values that affect the -/// particular mode can be programmed there (but of course can be later -/// overridden if required). -/// -/// Note that there is an assumption that PORE engines have exclusive access -/// to their PBA ports. All GPE procedures that access the PowerBus follow a -/// protocol that makes no assumptions about how the PBA is set up - they set -/// up the PBA for their own use, then leave it to subsequent procedures to -/// re-setup the PBA as necessary for subsequent use. Also note that only one -/// GPE thread can be designated to run programs that access the PBA, -/// as they share an OCI master ID, and hence a PBA slave port. -/// -/// Another - perhaps obvious - complication has to do with PBA slave reset. A -/// PORE engine executing from main memory can not modify the PBA slave read -/// parameter setup, as this would corrupt the instruction stream. Currently -/// GPE procedures that need to modify the PBA read parameter setup execute -/// from SRAM, and the SLW executing from main memeory never changes its read -/// setup. -/// -/// This structure is read-only to the GPE routines that access it. - -typedef struct { - - /// The 32-bit OCI address of the PBA_SLVCTLn register to set up - uint64_t slvctl_address; - - /// An image of the relevant parts of the PBA_SLVCTLn register in effect - /// for this procedure - pba_slvctln_t slvctl; - - /// The mask in effect for this update of the PBA_SLVCTL - pba_slvctln_t mask; - - /// The value to write to the PBA_SLVRST register to reset the slave - pba_slvrst_t slvrst; - - /// The bit to AND-poll to check for slave reset in progress - pba_slvrst_t slvrst_in_progress; - - /// The slave id (0 - 3) - uint64_t slave_id; - -} GpePbaParms; - -int -gpe_pba_parms_create(GpePbaParms *parms, - int slave, - int write_ttype, - int write_tsize, - int read_ttype); - -#endif /* __ASSEMBLER__ */ - -// Parameter offset for GpePbaParms - -#define GPEPBAPARMS_SLVCTL_ADDRESS 0x00 -#define GPEPBAPARMS_SLVCTL 0x08 -#define GPEPBAPARMS_MASK 0x10 -#define GPEPBAPARMS_SLVRST 0x18 -#define GPEPBAPARMS_SLVRST_IN_PROGRESS 0x20 -#define GPEPBAPARMS_SLAVE_ID 0x28 - -#define SIZEOF_GPEPBAPARMS 0x30 - - -// Flags for gpe_pba_parms_setup() - -#define GPE_PBA_PARMS_READ_INVALIDATE 0x01 -#define GPE_PBA_PARMS_DISABLE_WRITE_GATHER 0x02 - -#endif /* __GPE_H__ */ |