blob: 9d64516c8a9ede26eab86f0bb3bb65a94ad89e80 [file] [log] [blame]
/*********************************************************************
*
* (C) Copyright IBM Corp. 2007,2010
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, see <http://www.gnu.org/licenses>.
*
********************************************************************/
/**
* \file common/bgp_personality.h
*/
#ifndef _BGP_PERSONALITY_H_ /* Prevent multiple inclusion */
#define _BGP_PERSONALITY_H_
#include <common/namespace.h>
__BEGIN_DECLS
#include <common/bgp_chipversion.h>
#include <common/alignment.h>
#include <common/bgp_bitnumbers.h>
#include <bpcore/bgp_types.h>
/* */
/* I/O Node Linux currently hard-codes the personality address. */
/* */
#define _BGP_HARDCODED_PERSONALITY_SRAM_ADDRESS (0xFFFFF800)
#define _BGP_PERSONALITY_VERSION (0x0A)
#define _BGP_DEFAULT_FREQ (850) /* Match the current DD2 hardware */
#define _BGP_PERS_Unused_DEFAULT 0
#define _BGP_PERS_PROCESSCONFIG_DIAGS (0xFF000000) /* Diagnostic Mode: All Cores Enabled and Privileged in Process 0 */
#define _BGP_PERS_PROCESSCONFIG_SMP (0x0F000000) /* All Cores Enabled User-Space in Process 0 */
#define _BGP_PERS_PROCESSCONFIG_VNM (0x08040201) /* 4 Single-Core Processes (a.k.a. Virtual Nodes) */
#define _BGP_PERS_PROCESSCONFIG_2x2 (0x0C030000) /* 2 Processes of 2 Cores each in same DP unit */
#define _BGP_PERS_PROCESSCONFIG_DEFAULT (_BGP_PERS_PROCESSCONFIG_DIAGS)
#define _BGP_PERS_PROCESSCONFIG_PRIV_MSK (0xF0F0F0F0) /* Mask to isolate privileged core flags */
/* Personality.Kernel_Config.RASPolicy */
#define _BGP_PERS_RASPOLICY_VERBOSITY(x) _B2( 1,x) /* Verbosity as shown below */
#define _BGP_PERS_RASPOLICY_MINIMAL _BGP_PERS_RASPOLICY_VERBOSITY(0) /* Benchmarking Level of Capture and Reporting */
#define _BGP_PERS_RASPOLICY_NORMAL _BGP_PERS_RASPOLICY_VERBOSITY(1) /* Normal Production Level of Capture and Reporting */
#define _BGP_PERS_RASPOLICY_VERBOSE _BGP_PERS_RASPOLICY_VERBOSITY(2) /* Manufacturing Test and Diagnostics */
#define _BGP_PERS_RASPOLICY_EXTREME _BGP_PERS_RASPOLICY_VERBOSITY(3) /* Report Every Event Immediately - Thresholds set to 1 */
#define _BGP_PERS_RASPOLICY_FATALEXIT _BN( 2) /* Fatal is Fatal, so exit. */
#define _BGP_PERS_RASPOLICY_DEFAULT (_BGP_PERS_RASPOLICY_VERBOSE | _BGP_PERS_RASPOLICY_FATALEXIT)
#define _BGP_PERSONALITY_LEN_NFSDIR (32) /* 32bytes */
#define _BGP_PERSONALITY_LEN_SECKEY (32) /* 32bytes */
/* Personality.NodeConfig Driver Enables and Configurations */
#define _BGP_PERS_ENABLE_Simulation _BN( 0) /* Running on VHDL Simulation */
#define _BGP_PERS_ENABLE_LockBox _BN( 1)
#define _BGP_PERS_ENABLE_BIC _BN( 2)
#define _BGP_PERS_ENABLE_DDR _BN( 3) /* DDR Controllers (not Fusion DDR model) */
#define _BGP_PERS_ENABLE_LoopBack _BN( 4) /* LoopBack: Internal TS/TR or SerDes Loopback */
#define _BGP_PERS_ENABLE_GlobalInts _BN( 5)
#define _BGP_PERS_ENABLE_Collective _BN( 6) /* Enable Collective Network */
#define _BGP_PERS_ENABLE_Torus _BN( 7)
#define _BGP_PERS_ENABLE_TorusMeshX _BN( 8) /* Torus is a Mesh in the X-dimension */
#define _BGP_PERS_ENABLE_TorusMeshY _BN( 9) /* Torus is a Mesh in the Y-dimension */
#define _BGP_PERS_ENABLE_TorusMeshZ _BN(10) /* Torus is a Mesh in the Z-dimension */
#define _BGP_PERS_ENABLE_TreeA _BN(11) /* Enable Collective Network A-link */
#define _BGP_PERS_ENABLE_TreeB _BN(12) /* Enable Collective Network B-link */
#define _BGP_PERS_ENABLE_TreeC _BN(13) /* Enable Collective Network C-link */
#define _BGP_PERS_ENABLE_DMA _BN(14)
#define _BGP_PERS_ENABLE_SerDes _BN(15)
#define _BGP_PERS_ENABLE_UPC _BN(16)
#define _BGP_PERS_ENABLE_EnvMon _BN(17)
#define _BGP_PERS_ENABLE_Ethernet _BN(18)
#define _BGP_PERS_ENABLE_JTagLoader _BN(19) /* Converse with JTag Host to load kernel */
#define _BGP_PERS_ENABLE_MailBoxReceive _BGP_PERS_ENABLE_JTagLoader
#define _BGP_PERS_ENABLE_PowerSave _BN(20) /* Turn off unused devices (Eth on CN, TS on ION) */
#define _BGP_PERS_ENABLE_FPU _BN(21) /* Enable Double-Hummers (not supported in EventSim) */
#define _BGP_PERS_ENABLE_StandAlone _BN(22) /* Disable "CIOD" interface, Requires Collective! */
#define _BGP_PERS_ENABLE_TLBMisses _BN(23) /* TLB Misses vs Wasting Memory (see bgp_AppSetup.c) */
#define _BGP_PERS_ENABLE_Mambo _BN(24) /* Running under Mambo? Used by Linux */
#define _BGP_PERS_ENABLE_TreeBlast _BN(25) /* Enable Tree "Blast" mode */
#define _BGP_PERS_ENABLE_BlindStacks _BN(26) /* For "XB" Tests, Lock 16K Stacks in Blind Device */
#define _BGP_PERS_ENABLE_CNK_Malloc _BN(27) /* Enable Malloc Support in CNK. */
#define _BGP_PERS_ENABLE_Reproducibility _BN(28) /* Enable Cycle Reproducibility */
#define _BGP_PERS_ENABLE_HighThroughput _BN(29) /* Enable high throughput computing mode */
#define _BGP_PERS_ENABLE_DiagnosticsMode _BN(30) /* Enable diagnostics mode */
/* Configure L1+L2 into BG/L Mode (s/w managed L1 coherence, write-back) */
/* This overrides most L1, L2, and Snoop settings. Carefull!! */
#define _BGP_PERS_ENABLE_BGLMODE _BN(31) /* (not yet fully implemented) */
/* Default Setup for Simulation: Torus Meshes, DMA, SerDes, Ethernet, JTagLoader, PowerSave */
#define _BGP_PERS_NODECONFIG_DEFAULT (_BGP_PERS_ENABLE_Simulation |\
_BGP_PERS_ENABLE_LockBox |\
_BGP_PERS_ENABLE_BIC |\
_BGP_PERS_ENABLE_DDR |\
_BGP_PERS_ENABLE_LoopBack |\
_BGP_PERS_ENABLE_GlobalInts |\
_BGP_PERS_ENABLE_Collective |\
_BGP_PERS_ENABLE_Torus |\
_BGP_PERS_ENABLE_UPC |\
_BGP_PERS_ENABLE_EnvMon |\
_BGP_PERS_ENABLE_FPU |\
_BGP_PERS_ENABLE_TLBMisses |\
_BGP_PERS_ENABLE_StandAlone)
/* Default Setup for Hardware: */
/* Supports Stand-Alone CNA Applications. */
/* Bootloader-Extensions and XB's must turn-off JTagLoader */
#define _BGP_PERS_NODECONFIG_DEFAULT_FOR_HARDWARE (_BGP_PERS_ENABLE_JTagLoader |\
_BGP_PERS_ENABLE_LockBox |\
_BGP_PERS_ENABLE_BIC |\
_BGP_PERS_ENABLE_DDR |\
_BGP_PERS_ENABLE_GlobalInts |\
_BGP_PERS_ENABLE_Collective |\
_BGP_PERS_ENABLE_SerDes |\
_BGP_PERS_ENABLE_UPC |\
_BGP_PERS_ENABLE_EnvMon |\
_BGP_PERS_ENABLE_FPU |\
_BGP_PERS_ENABLE_TLBMisses |\
_BGP_PERS_ENABLE_StandAlone)
/* these fields are defined by the control system depending on compute/io node */
/* _BGP_PERS_ENABLE_Torus | */
/* _BGP_PERS_ENABLE_TorusMeshX | */
/* _BGP_PERS_ENABLE_TorusMeshY | */
/* _BGP_PERS_ENABLE_TorusMeshZ | */
/* Personality.L1Config: Controls and Settings for L1 Cache */
#define _BGP_PERS_L1CONFIG_L1I _BN( 0) /* L1 Enabled for Instructions */
#define _BGP_PERS_L1CONFIG_L1D _BN( 1) /* L1 Enabled for Data */
#define _BGP_PERS_L1CONFIG_L1SWOA _BN( 2) /* L1 Store WithOut Allocate */
#define _BGP_PERS_L1CONFIG_L1Recovery _BN( 3) /* L1 Full Recovery Mode */
#define _BGP_PERS_L1CONFIG_L1WriteThru _BN( 4) /* L1 Write-Thru (not svc_host changeable (yet?)) */
#define _BGP_PERS_L1CONFIG_DO_L1ITrans _BN( 5) /* Enable L1 Instructions Transient? */
#define _BGP_PERS_L1CONFIG_DO_L1DTrans _BN( 6) /* Enable L1 Data Transient? */
/* unused 9bits: 7..15 */
#define _BGP_PERS_L1CONFIG_L1ITrans(x) _B8(23,x) /* L1 Transient for Instructions in Groups of 16 Lines */
#define _BGP_PERS_L1CONFIG_L1DTrans(x) _B8(31,x) /* L1 Transient for Data in Groups of 16 Lines */
#define _BGP_PERS_L1CONFIG_DEFAULT (_BGP_PERS_L1CONFIG_L1I |\
_BGP_PERS_L1CONFIG_L1D |\
_BGP_PERS_L1CONFIG_L1SWOA |\
_BGP_PERS_L1CONFIG_L1Recovery |\
_BGP_PERS_L1CONFIG_L1WriteThru)
typedef union T_BGP_Pers_L1Cfg
{
uint32_t l1cfg;
struct {
unsigned l1i : 1;
unsigned l1d : 1;
unsigned l1swoa : 1;
unsigned l1recovery : 1;
unsigned l1writethru : 1;
unsigned do_l1itrans : 1;
unsigned do_l1dtrans : 1;
unsigned l1rsvd : 9;
unsigned l1itrans : 8;
unsigned l1dtrans : 8;
};
}
_BGP_Pers_L1Cfg;
/* Personality.L2Config: Controls and Settings for L2 and Snoop */
#define _BGP_PERS_L2CONFIG_L2I _BN( 0) /* L2 Instruction Caching Enabled */
#define _BGP_PERS_L2CONFIG_L2D _BN( 1) /* L2 Data Caching Enabled */
#define _BGP_PERS_L2CONFIG_L2PF _BN( 2) /* L2 Automatic Prefetching Enabled */
#define _BGP_PERS_L2CONFIG_L2PFO _BN( 3) /* L2 Optimistic Prefetching Enabled */
#define _BGP_PERS_L2CONFIG_L2PFA _BN( 4) /* L2 Aggressive Prefetching Enabled (fewer deeper streams) */
#define _BGP_PERS_L2CONFIG_L2PFS _BN( 5) /* L2 Aggressive Many-Stream Prefetching Enabled (deeper only when available buffers) */
#define _BGP_PERS_L2CONFIG_Snoop _BN( 6) /* Just NULL Snoop Filter */
#define _BGP_PERS_L2CONFIG_SnoopCache _BN( 7) /* Snoop Caches */
#define _BGP_PERS_L2CONFIG_SnoopStream _BN( 8) /* Snoop Stream Registers (Disable for BG/P Rit 1.0 due to PPC450 errata) */
#define _BGP_PERS_L2CONFIG_SnoopRange _BN( 9) /* Snoop Range Filter when possible */
#define _BGP_PERS_L2CONFIG_BUG824LUMPY _BN(10) /* BPC_BUGS 824: Fix with Lumpy Performance */
#define _BGP_PERS_L2CONFIG_BUG824SMOOTH _BN(11) /* BPC_BUGS 824: Fix with Smooth Performance, but -12% Memory */
#define _BGP_PERS_L2CONFIG_NONCOHERENT_STACKS _BN(12) /* Special for Snoop diagnostics. See bgp_vmm.c */
/* additional bits may be used for Snoop setting tweaks */
/* Default L2 Configuration: */
/* L2 Enabled with Multi-Stream Aggressive Prefetching */
/* Snoop Enabled with all filters except Range */
#define _BGP_PERS_L2CONFIG_DEFAULT (_BGP_PERS_L2CONFIG_L2I |\
_BGP_PERS_L2CONFIG_L2D |\
_BGP_PERS_L2CONFIG_L2PF |\
_BGP_PERS_L2CONFIG_L2PFO |\
_BGP_PERS_L2CONFIG_L2PFS |\
_BGP_PERS_L2CONFIG_Snoop |\
_BGP_PERS_L2CONFIG_SnoopCache |\
_BGP_PERS_L2CONFIG_SnoopStream)
/* Personality.L3Config: Controls and Settings for L3 */
/* Note: Most bits match _BGP_L3x_CTRL DCRs. */
/* See arch/include/bpcore/bgl_l3_dcr.h */
#define _BGP_PERS_L3CONFIG_L3I _BN( 0) /* L3 Enabled for Instructions */
#define _BGP_PERS_L3CONFIG_L3D _BN( 1) /* L3 Enabled for Data */
#define _BGP_PERS_L3CONFIG_L3PFI _BN( 2) /* Inhibit L3 Prefetch from DDR */
#define _BGP_PERS_L3CONFIG_DO_Scratch _BN( 3) /* Set up Scratch? */
#define _BGP_PERS_L3CONFIG_DO_PFD0 _BN( 4) /* Adjust PFD0? */
#define _BGP_PERS_L3CONFIG_DO_PFD1 _BN( 5) /* Adjust PFD1? */
#define _BGP_PERS_L3CONFIG_DO_PFDMA _BN( 6) /* Adjust PFDMA? */
#define _BGP_PERS_L3CONFIG_DO_PFQD _BN( 7) /* Adjust PFQD? */
/* 8..15 unused/available */
#define _BGP_PERS_L3CONFIG_Scratch(x) _B4(19,x) /* Scratch 8ths: 0..8 */
#define _BGP_PERS_L3CONFIG_PFD0(x) _B3(22,x) /* Prefetch Depth for DP0 */
#define _BGP_PERS_L3CONFIG_PFD1(x) _B3(25,x) /* Prefetch Depth for DP1 */
#define _BGP_PERS_L3CONFIG_PFDMA(x) _B3(28,x) /* Prefetch Depth for DMA */
#define _BGP_PERS_L3CONFIG_PFQD(x) _B3(31,x) /* Prefetch Queue Depth */
/* General L3 Configuration */
typedef union T_BGP_Pers_L3Cfg
{
uint32_t l3cfg;
struct {
unsigned l3i : 1;
unsigned l3d : 1;
unsigned l3pfi : 1;
unsigned do_scratch : 1;
unsigned do_pfd0 : 1;
unsigned do_pfd1 : 1;
unsigned do_pfdma : 1;
unsigned do_pfqd : 1;
unsigned rsvd : 8;
unsigned scratch : 4;
unsigned pfd0 : 3;
unsigned pfd1 : 3;
unsigned pfdma : 3;
unsigned pfqd : 3;
};
}
_BGP_Pers_L3Cfg;
/* Default L3 Configuration: */
/* L3 Enabled for Instructions and Data */
/* No Prefetch Depth overrides, No Scratch, No Scrambling. */
#define _BGP_PERS_L3CONFIG_DEFAULT (_BGP_PERS_L3CONFIG_L3I |\
_BGP_PERS_L3CONFIG_L3D |\
_BGP_PERS_L3CONFIG_DO_PFDMA |\
_BGP_PERS_L3CONFIG_PFDMA(4))
/* L3 Cache and Bank Selection, and prefetching tweaks (Recommended for Power-Users) */
#define _BGP_PERS_L3SELECT_DO_CacheSel _BN( 0) /* Adjust Cache Select setting? */
#define _BGP_PERS_L3SELECT_DO_BankSel _BN( 1) /* Adjust Bank Select setting? */
#define _BGP_PERS_L3SELECT_Scramble _BN( 2) /* L3 Scramble */
#define _BGP_PERS_L3SELECT_PFby2 _BN( 3) /* Prefetch by 2 if set, else by 1 (default) if clear. */
#define _BGP_PERS_L3SELECT_CacheSel(x) _B5( 8,x) /* PhysAddr Bit for L3 Selection (0..26) */
#define _BGP_PERS_L3SELECT_BankSel(x) _B5(13,x) /* PhysAddr Bit for L3 Bank Selection (0..26) Must be > CacheSel. */
typedef union T_BGP_Pers_L3Select
{
uint32_t l3select;
struct {
unsigned do_CacheSel : 1;
unsigned do_BankSel : 1;
unsigned l3Scramble : 1;
unsigned l3_PF_by2 : 1; /* default is PreFetch by 1. */
unsigned CacheSel : 5; /* Physical Address Bit for L3 Selection (0..26) */
unsigned BankSel : 5; /* 0..26 Must be strictly greater than CacheSel. */
unsigned rsvd : 18;
};
}
_BGP_Pers_L3Select;
/* Default L3 Selection Configuration: Disable overrides, but set h/w default values. */
#define _BGP_PERS_L3SELECT_DEFAULT (_BGP_PERS_L3SELECT_CacheSel(21) |\
_BGP_PERS_L3SELECT_BankSel(26))
/* Tracing Masks and default trace configuration */
/* See also arch/include/cnk/Trace.h */
#define _BGP_TRACE_CONFIG _BN( 0) /* Display Encoded personality config on startup */
#define _BGP_TRACE_ENTRY _BN( 1) /* Function enter and exit */
#define _BGP_TRACE_INTS _BN( 2) /* Standard Interrupt Dispatch */
#define _BGP_TRACE_CINTS _BN( 3) /* Critical Interrupt Dispatch */
#define _BGP_TRACE_MCHK _BN( 4) /* Machine Check Dispatch */
#define _BGP_TRACE_SYSCALL _BN( 5) /* System Calls */
#define _BGP_TRACE_VMM _BN( 6) /* Virtual Memory Manager */
#define _BGP_TRACE_DEBUG _BN( 7) /* Debug Events (app crashes etc) */
#define _BGP_TRACE_TORUS _BN( 8) /* Torus Init */
#define _BGP_TRACE_TREE _BN( 9) /* Tree Init */
#define _BGP_TRACE_GLOBINT _BN(10) /* Global Interrupts */
#define _BGP_TRACE_DMA _BN(11) /* DMA Setup */
#define _BGP_TRACE_SERDES _BN(12) /* SerDes Init */
#define _BGP_TRACE_TESTINT _BN(13) /* Test Interface, ECID, Config */
#define _BGP_TRACE_ETHTX _BN(14) /* Ethernet Transmit */
#define _BGP_TRACE_ETHRX _BN(15) /* Ethernet Receive */
#define _BGP_TRACE_POWER _BN(16) /* Power Control */
#define _BGP_TRACE_PROCESS _BN(17) /* Process/Thread Mapping */
#define _BGP_TRACE_EXIT_SUM _BN(18) /* Report Per-Core Interrupt and Error Summary on exit() */
#define _BGP_TRACE_SCHED _BN(19) /* Report Scheduler Information */
#define _BGP_TRACE_RAS _BN(20) /* Report RAS Events (in addition to sending to Host) */
#define _BGP_TRACE_ECID _BN(21) /* Report UCI and ECID on boot */
#define _BGP_TRACE_FUTEX _BN(22) /* Trace Futex operations */
#define _BGP_TRACE_MemAlloc _BN(23) /* Trace MMAP and Shared Memory operations */
#define _BGP_TRACE_CONTROL _BN(24) /* Trace control messages exchanged with I/O node */
#define _BGP_TRACE_MSGS _BN(25) /* Trace messages and packets sent on virtual channel 0 */
#define _BGP_TRACE_DEBUGGER _BN(26) /* Trace debugger messages exchanged with I/O node */
#define _BGP_TRACE_WARNINGS _BN(30) /* Trace Warnings */
#define _BGP_TRACE_VERBOSE _BN(31) /* Verbose Tracing Modifier */
/* Enable tracking of Regression Suite coverage and report UCI+ECID on boot */
#define _BGP_PERS_TRACE_DEFAULT 0
/* (_BGP_TRACE_CONFIG | _BGP_TRACE_ECID) */
typedef struct _BGP_Personality_Kernel_t
{
uint32_t UniversalComponentIdentifier; /* see include/common/bgp_ras.h */
uint32_t FreqMHz; /* Clock_X1 Frequency in MegaHertz (eg 1000) */
uint32_t RASPolicy; /* Verbosity level, and other RAS Reporting Controls */
/* Process Config: */
/* Each byte represents a process (1 to 4 processes supported) */
/* No core can be assigned to more than 1 process. */
/* Cores assigned to no process are disabled. */
/* Cores with in a process share the same address space. */
/* Separate processes have distinct address spaces. */
/* Within each process (0 to 4 cores assigned to a process): */
/* Lower nibble is bitmask of which core belongs to that process. */
/* Upper nibble is bitmask whether that thread is privileged or user. */
/* Processes with zero cores do not exist. */
/* E.g., for Diagnostics, we sometimes use 0xFF000000, which means */
/* that all 4 cores run privileged in process 0. */
uint32_t ProcessConfig;
uint32_t TraceConfig; /* Kernel Tracing Enables */
uint32_t NodeConfig; /* Kernel Driver Enables */
uint32_t L1Config; /* L1 Config and setup controls */
uint32_t L2Config; /* L2 and Snoop Config and setup controls */
uint32_t L3Config; /* L3 Config and setup controls */
uint32_t L3Select; /* L3 Cache and Bank Selection controls */
uint32_t SharedMemMB; /* Memory to Reserve for Sharing among Processes */
uint32_t ClockStop0; /* Upper 11Bits of ClockStop, enabled if Non-zero */
uint32_t ClockStop1; /* Lower 32Bits of ClockStop, enabled if Non-zero */
}
_BGP_Personality_Kernel_t;
/* Defaults for DDR Config */
#define _BGP_PERS_DDR_PBX0_DEFAULT (0x411D1512) /* PBX DCRs setting (in IBM bit numbering) */
#define _BGP_PERS_DDR_PBX1_DEFAULT (0x40000000) /* PBX DCRs setting (in IBM bit numbering) */
#define _BGP_PERS_DDR_MemConfig0_DEFAULT (0x81fc4080) /* MemConfig */
#define _BGP_PERS_DDR_MemConfig1_DEFAULT (0x0C0ff800) /* MemConfig */
#define _BGP_PERS_DDR_ParmCtl0_DEFAULT (0x3216c008) /* Parm Control */
#define _BGP_PERS_DDR_ParmCtl1_DEFAULT (0x4168c323) /* Parm Control */
#define _BGP_PERS_DDR_MiscCtl0_DEFAULT (0) /* Misc. Control */
#define _BGP_PERS_DDR_MiscCtl1_DEFAULT (0) /* Misc. Control */
#define _BGP_PERS_DDR_CmdBufMode0_DEFAULT (0x00400fdf) /* Command Buffer Mode */
#define _BGP_PERS_DDR_CmdBufMode1_DEFAULT (0xffc80600) /* Command Buffer Mode */
#define _BGP_PERS_DDR_RefrInterval0_DEFAULT (0xD1000002) /* Refresh Interval */
#define _BGP_PERS_DDR_RefrInterval1_DEFAULT (0x04000000) /* Refresh Interval */
#define _BGP_PERS_DDR_ODTCtl0_DEFAULT (0) /* ODT Control */
#define _BGP_PERS_DDR_ODTCtl1_DEFAULT (0) /* ODT Control */
#define _BGP_PERS_DDR_TimingTweaks_DEFAULT (0) /* DRAM timing tweaks to use */
#define _BGP_PERS_DDR_DataStrobeCalib1_DEFAULT (0xa514c805) /* Data Strobe Calibration */
#define _BGP_PERS_DDR_DQSCtl_DEFAULT (0x00000168) /* DQS Control */
#define _BGP_PERS_DDR_Throttle_DEFAULT (0) /* DDR Throttle */
#define _BGP_PERS_DDR_CAS_DEFAULT (4) /* CAS Latency (3, 4, or 5) */
#define _BGP_PERS_DDR_DDRSizeMB_DEFAULT (2048) /* Total DDR size in MegaBytes (512MB - 16384MB). */
#define _BGP_PERS_DDR_Chips_DEFAULT (0x01) /* Type of DDR chips: 512GBx8 */
#define _BGP_PERS_DDRFLAGS_ENABLE_Scrub _BN(0) /* Enable DDR Slow Scrub when 1 */
/* DDRFLAGS default: Enable Slow Scrub. */
#define _BGP_PERS_DDRFLAGS_DEFAULT (_BGP_PERS_DDRFLAGS_ENABLE_Scrub)
#define _BGP_PERS_SRBS0_DEFAULT (0xFFFFFFFF)
#define _BGP_PERS_SRBS1_DEFAULT (0xFFFFFFFF)
typedef struct _BGP_Personality_DDR_t
{
uint32_t DDRFlags; /* Misc. Flags and Settings */
uint32_t SRBS0; /* Controller 0 SRBS/CK Settings */
uint32_t SRBS1; /* Controller 1 SRBS/CK Settings */
uint32_t PBX0; /* PBX DCRs setting (in IBM bit numbering) */
uint32_t PBX1; /* PBX DCRs setting (in IBM bit numbering) */
uint32_t MemConfig0; /* MemConfig */
uint32_t MemConfig1; /* MemConfig */
uint32_t ParmCtl0; /* Parm Control */
uint32_t ParmCtl1; /* Parm Control */
uint32_t MiscCtl0; /* Misc. Control */
uint32_t MiscCtl1; /* Misc. Control */
uint32_t CmdBufMode0; /* Command Buffer Mode */
uint32_t CmdBufMode1; /* Command Buffer Mode */
uint32_t RefrInterval0; /* Refresh Interval */
uint32_t RefrInterval1; /* Refresh Interval */
uint32_t ODTCtl0; /* ODT Control */
uint32_t ODTCtl1; /* ODT Control */
uint8_t TimingTweaks; /* DRAM timing tweak type */
uint8_t Unused0;
uint8_t Unused1;
uint8_t Unused2;
uint32_t DataStrobeCalib1; /* Data Strobe Calibration */
uint32_t DQSCtl; /* DQS Control */
uint32_t Throttle; /* DDR Throttle */
uint16_t DDRSizeMB; /* Total DDR size in MegaBytes (512MB - 16384MB). */
uint8_t Chips; /* Type of DDR chips */
uint8_t CAS; /* CAS Latency (3, 4, or 5) */
}
_BGP_Personality_DDR_t;
typedef struct _BGP_Personality_Networks_t
{
uint32_t BlockID; /* a.k.a. PartitionID */
uint8_t Xnodes,
Ynodes,
Znodes,
Xcoord,
Ycoord,
Zcoord;
/* PSet Support */
uint16_t PSetNum;
uint32_t PSetSize;
uint32_t RankInPSet;
uint32_t IOnodes;
uint32_t Rank; /* Rank in Block (or Partition) */
uint32_t IOnodeRank; /* Rank (and therefore P2P Addr) of my I/O Node */
uint16_t TreeRoutes[ 16 ];
}
_BGP_Personality_Networks_t;
typedef struct _BGP_IP_Addr_t
{
/* IPv6 Addresses are 16 bytes, where the */
/* lower 4 (indices 12-15) can be used for IPv4 address. */
uint8_t octet[ 16 ];
}
_BGP_IP_Addr_t;
typedef struct _BGP_Personality_Ethernet_t
{
uint16_t MTU; /* Initial emac MTU size */
uint8_t EmacID[6]; /* MAC address for emac */
_BGP_IP_Addr_t IPAddress; /* IPv6/IPv4 address of this node */
_BGP_IP_Addr_t IPNetmask; /* IPv6/IPv4 netmask */
_BGP_IP_Addr_t IPBroadcast; /* IPv6/IPv4 broadcast address */
_BGP_IP_Addr_t IPGateway; /* IPv6/IPv4 initial gateway (zero if none) */
_BGP_IP_Addr_t NFSServer; /* IPv6/IPv4 NFS system software server address */
_BGP_IP_Addr_t serviceNode; /* IPv6/IPv4 address of service node */
/* NFS mount info */
char NFSExportDir[_BGP_PERSONALITY_LEN_NFSDIR];
char NFSMountDir[ _BGP_PERSONALITY_LEN_NFSDIR];
/* Security Key for Service Node authentication */
uint8_t SecurityKey[ _BGP_PERSONALITY_LEN_SECKEY ];
}
_BGP_Personality_Ethernet_t;
#define BGP_PERS_BLKCFG_IPOverCollective _BN(31)
#define BGP_PERS_BLKCFG_IPOverTorus _BN(30)
#define BGP_PERS_BLKCFG_IPOverCollectiveVC _BN(29)
#define BGP_PERS_BLKCFG_CIOModeSel(x) _B2(28,x)
#define BGP_PERS_BLKCFG_bgsysFSSel(x) _B3(26,x)
#define BGP_PERS_BLKCFG_CIOMode_Full 0
#define BGP_PERS_BLKCFG_CIOMode_MuxOnly 1
#define BGP_PERS_BLKCFG_CIOMode_None 2
#define BGP_PERS_BLKCFG_bgsys_NFSv3 0
#define BGP_PERS_BLKCFG_bgsys_NFSv4 1
#define BGP_PERS_BLKCFG_DEFAULT (BGP_PERS_BLKCFG_CIOModeSel(BGP_PERS_BLKCFG_CIOMode_Full) | \
BGP_PERS_BLKCFG_bgsysFSSel(BGP_PERS_BLKCFG_bgsys_NFSv3))
typedef struct T_BGP_Personality_t
{
uint16_t CRC;
uint8_t Version;
uint8_t PersonalitySizeWords;
_BGP_Personality_Kernel_t Kernel_Config;
_BGP_Personality_DDR_t DDR_Config;
_BGP_Personality_Networks_t Network_Config;
_BGP_Personality_Ethernet_t Ethernet_Config;
uint8_t Block_Config;
uint8_t padd[7]; /* Pad size to multiple of 16 bytes (== width of DEVBUS_DATA tdr) */
/* to simplify jtag operations. See issue #140. */
}
_BGP_Personality_t;
#define Network_Config_treeInfo0 DDR_Config.ODTCtl0
#define Network_Config_treeInfo1 DDR_Config.ODTCtl1
#define Network_Config_treeInfo2 DDR_Config.CmdBufMode0
/* _BGP_PersonalityTreeInfo provides information about one of the tree
* ports (A,B or C) on this node. It is a 32-bit value.
* See accessor methods below which interpret these fields with this layout:
*
* .-.-.--.--.--.------------------------.
* |V|R|LT|CW|DP| destP2Paddr |
* `-'-'--'--'--'------------------------'
* 1 1 2 2 2 24 <- bits in field
*
* V Valid bit. Use is deprecated. Was used for forward compatibility
* R Wire is redundant
* LT Link type (2 bit). 0->no wire, 1->compute node, 2->I/O node, 3->reserved
* CW CommWorld wire interpret (2 bit): 0->unused wire, 1->child, 2->parent
* DP Destination Port on other end of wire (2 bit) 0,1,2 -> A,B,C
* destP2Paddr (24 bit) Tree address of node on other end of the wire
*/
#define _BGP_PERS_TREEINFO_VALID 0x80000000
#define _BGP_PERS_TREEINFO_REDUNDANT 0x40000000
#define _BGP_PERS_TREEINFO_LINKTYPE_MASK 0x30000000
#define _BGP_PERS_TREEINFO_LINKTYPE_SHIFT 28
#define _BGP_PERS_TREEINFO_COMMWORLD_MASK 0x0c000000
#define _BGP_PERS_TREEINFO_COMMWORLD_SHIFT 26
#define _BGP_PERS_TREEINFO_DESTPORT_MASK 0x03000000
#define _BGP_PERS_TREEINFO_DESTPORT_SHIFT 24
#define _BGP_PERS_TREEINFO_DESTP2P_MASK 0x00ffffff
#define _BGP_PERS_TREEINFO_LINKTYPE_NOWIRE 0
#define _BGP_PERS_TREEINFO_LINKTYPE_COMPUTE 1
#define _BGP_PERS_TREEINFO_LINKTYPE_IO 2
#define _BGP_PERS_TREEINFO_COMMWORLD_UNUSED 0 /* unused wire */
#define _BGP_PERS_TREEINFO_COMMWORLD_CHILD 1
#define _BGP_PERS_TREEINFO_COMMWORLD_PARENT 2
#define _BGP_PERS_TREE_PORT_0 0
#define _BGP_PERS_TREE_PORT_1 1
#define _BGP_PERS_TREE_PORT_2 2
/* This struct is the layout on big endian architectures (ppc) */
typedef struct {
unsigned valid:1; /* 1 -> this info is valid */
unsigned redundant:1; /* 1 -> redundant wire */
unsigned linkType:2; /* 0 -> no wire, 1 -> compute node, 2 -> I/O */
unsigned commWorld:2; /* 1 -> child port, 2 -> parent port on comm_world tree */
unsigned destPort:2; /* dest port 0,1,2 -> A,B,C */
unsigned destP2Paddr:24; /* destination tree addr on this port */
} _BGP_PersonalityTreeInfo_t;
/* Define a static initializer for default configuration. (DEFAULTS FOR SIMULATION) */
/* This is used in bootloader:bgp_Personality.c and svc_host:svc_main.c */
#define _BGP_PERSONALITY_DEFAULT_STATIC_INITIALIZER { \
0, /* CRC */ \
_BGP_PERSONALITY_VERSION, /* Version */ \
(sizeof(_BGP_Personality_t)/sizeof(uint32_t)), /* PersonalitySizeWords */ \
{ /* _BGP_Personality_Kernel_t: */ \
0, /* MachineLocation */ \
_BGP_DEFAULT_FREQ, /* FreqMHz */ \
_BGP_PERS_RASPOLICY_DEFAULT, /* RASPolicy */ \
_BGP_PERS_PROCESSCONFIG_DEFAULT, /* ProcessConfig */ \
_BGP_PERS_TRACE_DEFAULT, /* TraceConfig */ \
_BGP_PERS_NODECONFIG_DEFAULT, /* NodeConfig */ \
_BGP_PERS_L1CONFIG_DEFAULT, /* L1Config */ \
_BGP_PERS_L2CONFIG_DEFAULT, /* L2Config */ \
_BGP_PERS_L3CONFIG_DEFAULT, /* L3Config */ \
_BGP_PERS_L3SELECT_DEFAULT, /* L3Select */ \
0, /* SharedMemMB */ \
0, /* ClockStop0 */ \
0 /* ClockStop1 */ \
}, \
{ /* _BGP_Personality_DDR_t: */ \
_BGP_PERS_DDRFLAGS_DEFAULT, /* DDRFlags */ \
_BGP_PERS_SRBS0_DEFAULT, /* SRBS0 */ \
_BGP_PERS_SRBS1_DEFAULT, /* SRBS1 */ \
_BGP_PERS_DDR_PBX0_DEFAULT, /* PBX0 */ \
_BGP_PERS_DDR_PBX1_DEFAULT, /* PBX1 */ \
_BGP_PERS_DDR_MemConfig0_DEFAULT, /* MemConfig0 */ \
_BGP_PERS_DDR_MemConfig1_DEFAULT, /* MemConfig1 */ \
_BGP_PERS_DDR_ParmCtl0_DEFAULT, /* ParmCtl0 */ \
_BGP_PERS_DDR_ParmCtl1_DEFAULT, /* ParmCtl1 */ \
_BGP_PERS_DDR_MiscCtl0_DEFAULT, /* MiscCtl0 */ \
_BGP_PERS_DDR_MiscCtl1_DEFAULT, /* MiscCtl1 */ \
_BGP_PERS_DDR_CmdBufMode0_DEFAULT, /* CmdBufMode0 */ \
_BGP_PERS_DDR_CmdBufMode1_DEFAULT, /* CmdBufMode1 */ \
_BGP_PERS_DDR_RefrInterval0_DEFAULT, /* RefrInterval0 */ \
_BGP_PERS_DDR_RefrInterval1_DEFAULT, /* RefrInterval1 */ \
_BGP_PERS_DDR_ODTCtl0_DEFAULT, /* ODTCtl0 */ \
_BGP_PERS_DDR_ODTCtl1_DEFAULT, /* ODTCtl1 */ \
_BGP_PERS_DDR_TimingTweaks_DEFAULT, /* TimingTweaks */ \
_BGP_PERS_Unused_DEFAULT, /* Unused0 */ \
_BGP_PERS_Unused_DEFAULT, /* Unused1 */ \
_BGP_PERS_Unused_DEFAULT, /* Unused2 */ \
_BGP_PERS_DDR_DataStrobeCalib1_DEFAULT, /* DataStrobeCalib1 */ \
_BGP_PERS_DDR_DQSCtl_DEFAULT, /* DQSCtl */ \
_BGP_PERS_DDR_Throttle_DEFAULT, /* Throttle */ \
_BGP_PERS_DDR_DDRSizeMB_DEFAULT, /* DDRSizeMB */ \
_BGP_PERS_DDR_Chips_DEFAULT, /* Chips */ \
_BGP_PERS_DDR_CAS_DEFAULT /* CAS */ \
}, \
{ /* _BGP_Personality_Networks_t: */ \
0, /* BlockID */ \
1, 1, 1, /* Xnodes, Ynodes, Znodes */ \
0, 0, 0, /* Xcoord, Ycoord, Zcoord */ \
0, /* PSetNum */ \
0, /* PSetSize */ \
0, /* RankInPSet */ \
0, /* IOnodes */ \
0, /* Rank */ \
0, /* IOnodeRank */ \
{ 0, } /* TreeRoutes[ 16 ] */ \
}, \
{ /* _BGP_Personality_Ethernet_t: */ \
1536, /* mtu */ \
{ 0, }, /* EmacID[6] */ \
{ { 0x00,0x00,0x00,0x00, /* IPAddress */ \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00 \
} }, \
{ { 0x00,0x00,0x00,0x00, /* IPNetmask */ \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00, \
0xFF,0xFF,0xFF,0x70 \
} }, \
{ { 0x00,0x00,0x00,0x00, /* IPBroadcast */ \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00 \
} }, \
{ { 0x00,0x00,0x00,0x00, /* IPGateway */ \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00 \
} }, \
{ { 0x00,0x00,0x00,0x00, /* NFSServer */ \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00 \
} }, \
{ { 0x00,0x00,0x00,0x00, /* serviceNode */ \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00 \
} }, \
"", /* NFSExportDir[32] */ \
"", /* NFSMountDir[32] */ \
{ 0x00, } /* SecurityKey[32] */ \
}, \
0, /* Block_Config */ \
{ 0, } /* padd[7] */ \
}
/* Define a static initializer for default configuration. (DEFAULTS FOR HARDWARE) */
/* This is used in bootloader:bgp_Personality.c and svc_host:svc_main.c */
#define _BGP_PERSONALITY_DEFAULT_STATIC_INITIALIZER_FOR_HARDWARE { \
0, /* CRC */ \
_BGP_PERSONALITY_VERSION, /* Version */ \
(sizeof(_BGP_Personality_t)/sizeof(uint32_t)), /* PersonalitySizeWords */ \
{ /* _BGP_Personality_Kernel_t: */ \
0, /* MachineLocation */ \
_BGP_DEFAULT_FREQ, /* FreqMHz */ \
_BGP_PERS_RASPOLICY_DEFAULT, /* RASPolicy */ \
_BGP_PERS_PROCESSCONFIG_SMP, /* ProcessConfig */ \
_BGP_PERS_TRACE_DEFAULT, /* TraceConfig */ \
_BGP_PERS_NODECONFIG_DEFAULT_FOR_HARDWARE, /* NodeConfig */ \
_BGP_PERS_L1CONFIG_DEFAULT, /* L1Config */ \
_BGP_PERS_L2CONFIG_DEFAULT, /* L2Config */ \
_BGP_PERS_L3CONFIG_DEFAULT, /* L3Config */ \
_BGP_PERS_L3SELECT_DEFAULT, /* L3Select */ \
0, /* SharedMemMB */ \
0, /* ClockStop0 */ \
0 /* ClockStop1 */ \
}, \
{ /* _BGP_Personality_DDR_t: */ \
_BGP_PERS_DDRFLAGS_DEFAULT, /* DDRFlags */ \
_BGP_PERS_SRBS0_DEFAULT, /* SRBS0 */ \
_BGP_PERS_SRBS1_DEFAULT, /* SRBS1 */ \
_BGP_PERS_DDR_PBX0_DEFAULT, /* PBX0 */ \
_BGP_PERS_DDR_PBX1_DEFAULT, /* PBX1 */ \
_BGP_PERS_DDR_MemConfig0_DEFAULT, /* MemConfig0 */ \
_BGP_PERS_DDR_MemConfig1_DEFAULT, /* MemConfig1 */ \
_BGP_PERS_DDR_ParmCtl0_DEFAULT, /* ParmCtl0 */ \
_BGP_PERS_DDR_ParmCtl1_DEFAULT, /* ParmCtl1 */ \
_BGP_PERS_DDR_MiscCtl0_DEFAULT, /* MiscCtl0 */ \
_BGP_PERS_DDR_MiscCtl1_DEFAULT, /* MiscCtl1 */ \
_BGP_PERS_DDR_CmdBufMode0_DEFAULT, /* CmdBufMode0 */ \
_BGP_PERS_DDR_CmdBufMode1_DEFAULT, /* CmdBufMode1 */ \
_BGP_PERS_DDR_RefrInterval0_DEFAULT, /* RefrInterval0 */ \
_BGP_PERS_DDR_RefrInterval1_DEFAULT, /* RefrInterval1 */ \
_BGP_PERS_DDR_ODTCtl0_DEFAULT, /* ODTCtl0 */ \
_BGP_PERS_DDR_ODTCtl1_DEFAULT, /* ODTCtl1 */ \
_BGP_PERS_DDR_TimingTweaks_DEFAULT, /* TimingTweaks */ \
_BGP_PERS_Unused_DEFAULT, /* Unused0 */ \
_BGP_PERS_Unused_DEFAULT, /* Unused1 */ \
_BGP_PERS_Unused_DEFAULT, /* Unused2 */ \
_BGP_PERS_DDR_DataStrobeCalib1_DEFAULT, /* DataStrobeCalib1 */ \
_BGP_PERS_DDR_DQSCtl_DEFAULT, /* DQSCtl */ \
_BGP_PERS_DDR_Throttle_DEFAULT, /* Throttle */ \
_BGP_PERS_DDR_DDRSizeMB_DEFAULT, /* DDRSizeMB */ \
_BGP_PERS_DDR_Chips_DEFAULT, /* Chips */ \
_BGP_PERS_DDR_CAS_DEFAULT /* CAS */ \
}, \
{ /* _BGP_Personality_Networks_t: */ \
0, /* BlockID */ \
1, 1, 1, /* Xnodes, Ynodes, Znodes */ \
0, 0, 0, /* Xcoord, Ycoord, Zcoord */ \
0, /* PSetNum */ \
0, /* PSetSize */ \
0, /* RankInPSet */ \
0, /* IOnodes */ \
0, /* Rank */ \
0, /* IOnodeRank */ \
{ 0, } /* TreeRoutes[ 16 ] */ \
}, \
{ /* _BGP_Personality_Ethernet_t: */ \
1536, /* mtu */ \
{ 0, }, /* EmacID[6] */ \
{ { 0x00,0x00,0x00,0x00, /* IPAddress */ \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00 \
} }, \
{ { 0x00,0x00,0x00,0x00, /* IPNetmask */ \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00, \
0xFF,0xFF,0xFF,0x70 \
} }, \
{ { 0x00,0x00,0x00,0x00, /* IPBroadcast */ \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00 \
} }, \
{ { 0x00,0x00,0x00,0x00, /* IPGateway */ \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00 \
} }, \
{ { 0x00,0x00,0x00,0x00, /* NFSServer */ \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00 \
} }, \
{ { 0x00,0x00,0x00,0x00, /* serviceNode */ \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00, \
0x00,0x00,0x00,0x00 \
} }, \
"", /* NFSExportDir[32] */ \
"", /* NFSMountDir[32] */ \
{ 0x00, } /* SecurityKey[32] */ \
}, \
0, /* Block_Config */ \
{ 0, } /* padd[7] */ \
}
__END_DECLS
#endif /* Add nothing below this line. */