//get the spi coord, grid size and torusicity void get_spi_coord() { //get the personality Personality_t pers; Kernel_GetPersonality(&pers,sizeof(pers)); //copy the coords spi_rank_coord[0]=pers.Network_Config.Acoord; spi_rank_coord[1]=pers.Network_Config.Bcoord; spi_rank_coord[2]=pers.Network_Config.Ccoord; spi_rank_coord[3]=pers.Network_Config.Dcoord; spi_rank_coord[4]=pers.Network_Config.Ecoord; //get torusicity for(int idir=0;idir<5;idir++) spi_dir_is_torus[idir]=ND_GET_TORUS(idir,pers.Network_Config.NetFlags); //get size spi_dir_size[0]=pers.Network_Config.Anodes; spi_dir_size[1]=pers.Network_Config.Bnodes; spi_dir_size[2]=pers.Network_Config.Cnodes; spi_dir_size[3]=pers.Network_Config.Dnodes; spi_dir_size[4]=pers.Network_Config.Enodes; }
void showNetConfig(Personality_t* p) { Personality_Networks_t* n = &(p->Network_Config); fw_uint64_t nf = n->NetFlags; fw_uint64_t nf2 = n->NetFlags2; printf("%s [%04lX] Network_Config -> %p\n", JTAG_LOC, offsetof(Personality_t,Network_Config), n); printf("%s [%04lX] BlockID : %08X\n", JTAG_LOC, offsetof(Personality_t,Network_Config) + offsetof(Personality_Networks_t,BlockID), n->BlockID); printf("%s [%04lX] NetFlags : %016llX\n", JTAG_LOC, offsetof(Personality_t,Network_Config) + offsetof(Personality_Networks_t,NetFlags), nf); printf("%s [****] I/O Node Link : %d\n", JTAG_LOC, ND_GET_ENABLE_ION_LINK(nf)); printf("%s [****] Loopback : (%lld,%lld,%lld,%lld,%lld,%lld) 0=None 1=Torus 2=SerDes 3=HSS\n", JTAG_LOC, ND_GET_LOOPBACK(0,nf),ND_GET_LOOPBACK(1,nf),ND_GET_LOOPBACK(2,nf), ND_GET_LOOPBACK(3,nf),ND_GET_LOOPBACK(4,nf),ND_GET_LOOPBACK(5,nf)); printf ("%s [****] Torus/Mesh : (%lld,%lld,%lld,%lld,%lld) (0=Mesh, 1=Torus)\n", JTAG_LOC, ND_GET_TORUS(0,nf), ND_GET_TORUS(1,nf), ND_GET_TORUS(2,nf), ND_GET_TORUS(3,nf), ND_GET_TORUS(4,nf) ); printf ("%s [****] RanHints : (%lld,%lld,%lld,%lld,%lld)\n", JTAG_LOC, ND_GET_TORUS_RAN_HINTS(0,nf), ND_GET_TORUS_RAN_HINTS(1,nf), ND_GET_TORUS_RAN_HINTS(2,nf), ND_GET_TORUS_RAN_HINTS(3,nf), ND_GET_TORUS_RAN_HINTS(4,nf) ); printf ("%s [****] Re/Inj Ration : %lld\n", JTAG_LOC, ND_GET_SE_ARB_RE_INJ_RATIO(nf) ); printf ("%s [****] DetOrderMasks : (%02llX,%02llX,%02llX,%02llX,%02llX)\n", JTAG_LOC, ND_GET_DET_ORDER_MASK(0,nf),ND_GET_DET_ORDER_MASK(1,nf),ND_GET_DET_ORDER_MASK(2,nf),ND_GET_DET_ORDER_MASK(3,nf),ND_GET_DET_ORDER_MASK(4,nf)); printf("%s [%04lX] NetFlags2 : %016llX\n", JTAG_LOC, offsetof(Personality_t,Network_Config) + offsetof(Personality_Networks_t,NetFlags2), nf2); static char* DIMENSIONS[] = { "A", "B", "C", "D", "E", "IO" }; static char* DIRECTIONS[] = { "-", "+" }; printf("%s [****] Torus Links Enabled : ", JTAG_LOC ); { unsigned dimension, direction; for ( dimension = 0; dimension < 5; dimension++ ) { for ( direction = 0; direction <= 1; direction++ ) { if ( ND_GET_LINK_ENABLE(dimension, direction, p->Network_Config.NetFlags2 ) ) { printf("%s%s ", DIMENSIONS[dimension], DIRECTIONS[direction]); } } } } printf("\n"); printf("%s [****] SerDes Links Enabled : ", JTAG_LOC ); { unsigned dimension, direction; for ( dimension = 0; dimension <= 5; dimension++ ) { for ( direction = 0; direction <= 1; direction++ ) { if ( SD_GET_LINK_ENABLE(dimension, direction, p->Network_Config.NetFlags2 ) ) { printf("%s%s ", DIMENSIONS[dimension], DIRECTIONS[direction]); } } } } printf("\n"); printf("%s [****] TIO : %d\n", JTAG_LOC, nf2 & SD_ENABLE_TIO ? 1 : 0 ); printf("%s [****] HalfSpeed : %d\n", JTAG_LOC, nf2 & SD_ENABLE_HALFSPEED ? 1 : 0 ); printf("%s [****] Use Port 6: %d\n", JTAG_LOC, nf2 & TI_USE_PORT6_FOR_IO ? 1 : 0 ); printf("%s [****] Use Port 7: %d\n", JTAG_LOC, nf2 & TI_USE_PORT7_FOR_IO ? 1 : 0 ); printf("%s [****] Swaps : (%lld,%lld,%lld,%lld,%lld)\n", JTAG_LOC, TI_GET_TORUS_DIM_REVERSED(0,nf2),TI_GET_TORUS_DIM_REVERSED(1,nf2), TI_GET_TORUS_DIM_REVERSED(2,nf2), TI_GET_TORUS_DIM_REVERSED(3,nf2), TI_GET_TORUS_DIM_REVERSED(4,nf2)); printf("%s [%04lX] Torus : (%d,%d,%d,%d,%d) / (%d,%d,%d,%d,%d)\n", JTAG_LOC, offsetof(Personality_t,Network_Config) + offsetof(Personality_Networks_t,Anodes), n->Acoord, n->Bcoord, n->Ccoord, n->Dcoord, n->Ecoord, n->Anodes, n->Bnodes, n->Cnodes, n->Dnodes, n->Enodes ); printf("%s [%04lX] PrimordialClassRoute\n", JTAG_LOC, offsetof(Personality_t, Network_Config) + offsetof(Personality_Networks_t,PrimordialClassRoute)); printf("%s [%04lX] GlintUpPortInputs : %04X\n", JTAG_LOC, (uint64_t)(&(n->PrimordialClassRoute.GlobIntUpPortInputs)) - (uint64_t)p, n->PrimordialClassRoute.GlobIntUpPortInputs ); printf("%s [%04lX] GlintUpPortOutputs : %04X\n", JTAG_LOC, (uint64_t)(&(n->PrimordialClassRoute.GlobIntUpPortOutputs)) - (uint64_t)p, n->PrimordialClassRoute.GlobIntUpPortOutputs ); printf("%s [%04lX] CollTypeUpPortInputs : %04X\n", JTAG_LOC, (uint64_t)(&(n->PrimordialClassRoute.CollectiveTypeAndUpPortInputs)) - (uint64_t)p, n->PrimordialClassRoute.CollectiveTypeAndUpPortInputs ); printf("%s [%04lX] CollTypeUpPortOutputs : %04X\n", JTAG_LOC, (uint64_t)(&(n->PrimordialClassRoute.CollectiveUpPortOutputs)) - (uint64_t)p, n->PrimordialClassRoute.CollectiveUpPortOutputs ); printf("%s [%04lX] ZoneRoutingMasks : ", JTAG_LOC, offsetof(Personality_t, Network_Config) + offsetof(Personality_Networks_t,ZoneRoutingMasks)); { unsigned zone; for ( zone = 0; zone < NUM_ND_ZONES; zone++ ) { printf(" %016X", n->ZoneRoutingMasks[zone]); } } printf("\n"); printf("%s [%04lX] MuFlags : %016llX\n", JTAG_LOC, offsetof(Personality_t,Network_Config) + offsetof(Personality_Networks_t,MuFlags), n->MuFlags); printf("%s [%04lX] CN Bridge : (%d,%d,%d,%d,%d)\n", JTAG_LOC, offsetof(Personality_t,Network_Config) + offsetof(Personality_Networks_t,cnBridge_A), n->cnBridge_A, n->cnBridge_B, n->cnBridge_C, n->cnBridge_D, n->cnBridge_E ); printf("%s [%04lX] latencyFromRoot : %d\n", JTAG_LOC, offsetof(Personality_t,Network_Config) + offsetof(Personality_Networks_t,latencyFromRoot), n->latencyFromRoot); }