VOID MemNBeforeDQSTrainingHy ( IN OUT MEM_NB_BLOCK *NBPtr ) { UINT8 Dct; UINT8 ChipSel; UINT32 TestAddrRJ16; UINT32 RealAddr; MemTBeginTraining (NBPtr->TechPtr); for (Dct = 0; Dct < NBPtr->DctCount; Dct++) { MemNSwitchDCTNb (NBPtr, Dct); if (NBPtr->DCTPtr->Timings.DctMemSize != 0) { for (ChipSel = 0; ChipSel < MAX_CS_PER_CHANNEL; ChipSel += 2) { if (MemNGetMCTSysAddrNb (NBPtr, ChipSel, &TestAddrRJ16)) { RealAddr = MemUSetUpperFSbase (TestAddrRJ16, NBPtr->MemPtr); MemUDummyCLRead (RealAddr); MemNSetBitFieldNb (NBPtr, BFErr350, 0x8000); MemUWait10ns (60, NBPtr->MemPtr); // Wait 300ns MemNSetBitFieldNb (NBPtr, BFErr350, 0x0000); MemUWait10ns (400, NBPtr->MemPtr); // Wait 2us MemUProcIOClFlush (TestAddrRJ16, 1, NBPtr->MemPtr); break; } } } if (NBPtr->IsSupported[CheckEccDLLPwrDnConfig]) { if (!NBPtr->MCTPtr->Status[SbEccDimms]) { MemNSetBitFieldNb (NBPtr, BFEccDLLPwrDnConf, 0x0010); } if (NBPtr->DCTPtr->Timings.Dimmx4Present == 0) { MemNSetBitFieldNb (NBPtr, BFEccDLLConf, 0x0080); } } } MemTEndTraining (NBPtr->TechPtr); MemNSetBitFieldNb (NBPtr, BFDisDatMsk, 1); }
VOID MemNBeforeDQSTrainingON ( IN OUT MEM_NB_BLOCK *NBPtr ) { MemTBeginTraining (NBPtr->TechPtr); MemNSetBitFieldNb (NBPtr, BFDisAutoRefresh, 1); MemNSetBitFieldNb (NBPtr, BFZqcsInterval, 0); MemNSetBitFieldNb (NBPtr, BFRxMaxDurDllNoLock, 0); MemNSetBitFieldNb (NBPtr, BFTxMaxDurDllNoLock, 0); MemNSetBitFieldNb (NBPtr, BFEnRxPadStandby, 0); MemNSetBitFieldNb (NBPtr, BFPrefCpuDis, 1); MemNSetBitFieldNb (NBPtr, BFDctWrLimit, 0x1F); MemNSetBitFieldNb (NBPtr, BFEnCpuSerRdBehindNpIoWr, 1); MemNSetBitFieldNb (NBPtr, BFDbeGskMemClkAlignMode, 0); MemNSetBitFieldNb (NBPtr, BFMaxLatency, 0x12); MemNSetBitFieldNb (NBPtr, BFTraceModeEn, 0); // Enable cut through mode for NB P0 MemNSetBitFieldNb (NBPtr, BFDisCutThroughMode, 0); MemTEndTraining (NBPtr->TechPtr); }