/** * Support routine for F15OrPmNbAfterResetOnCore to transition to the high NB P-state. * * This function implements steps 7, 8, 9, and 10 as needed. * * @param[in] PciAddress Segment, bus, device number of the node to transition. * @param[in] StdHeader Config handle for library and services. * */ VOID STATIC TransitionToNbHigh ( IN PCI_ADDR PciAddress, IN AMD_CONFIG_PARAMS *StdHeader ) { UINT32 NbPsCtrl; // 7/9. Set D18F5x170[SwNbPstateLoDis] = 1. PciAddress.Address.Function = FUNC_5; PciAddress.Address.Register = NB_PSTATE_CTRL; LibAmdPciRead (AccessWidth32, PciAddress, &NbPsCtrl, StdHeader); ((NB_PSTATE_CTRL_REGISTER *) &NbPsCtrl)->SwNbPstateLoDis = 1; LibAmdPciWrite (AccessWidth32, PciAddress, &NbPsCtrl, StdHeader); // 8/10. Wait for D18F5x174[CurNbPstate] = D18F5x170[NbPstateHi] and D18F5x174[CurNbFid, // CurNbDid] = [NbFid, NbDid] from D18F5x1[6C:60] indexed by D18F5x170[NbPstateHi]. WaitForNbTransitionToComplete (PciAddress, ((NB_PSTATE_CTRL_REGISTER *) &NbPsCtrl)->NbPstateHi, StdHeader); }
/** * Support routine for F15KvPmNbAfterResetOnCore to transition to the high NB P-state. * * This function implements steps 9, 10, 11, and 12 as needed. * * @param[in] PciAddress Segment, bus, device number of the node to transition. * @param[in] StdHeader Config handle for library and services. * */ VOID STATIC TransitionToNbHigh ( IN PCI_ADDR PciAddress, IN AMD_CONFIG_PARAMS *StdHeader ) { NB_PSTATE_CTRL_REGISTER NbPsCtrl; IDS_HDT_CONSOLE (CPU_TRACE, " TransitionToNbHigh\n"); // 9/10. Set D18F5x170[SwNbPstateLoDis] = 1. PciAddress.AddressValue = NB_PSTATE_CTRL_PCI_ADDR; LibAmdPciRead (AccessWidth32, PciAddress, &NbPsCtrl, StdHeader); NbPsCtrl.SwNbPstateLoDis = 1; LibAmdPciWrite (AccessWidth32, PciAddress, &NbPsCtrl, StdHeader); // 11/12. Wait for D18F5x174[CurNbPstate] = D18F5x170[NbPstateHi] and D18F5x174[CurNbFid, // CurNbDid] = [NbFid, NbDid] from D18F5x1[6C:60] indexed by D18F5x170[NbPstateHi]. WaitForNbTransitionToComplete (PciAddress, NbPsCtrl.NbPstateHi, StdHeader); }
/** * Support routine for F15OrPmNbAfterResetOnCore to transition to the low NB P-state. * * This function implements steps 5, 6, 11, and 12 as needed. * * @param[in] PciAddress Segment, bus, device number of the node to transition. * @param[in] StdHeader Config handle for library and services. * */ VOID STATIC TransitionToNbLow ( IN PCI_ADDR PciAddress, IN AMD_CONFIG_PARAMS *StdHeader ) { UINT32 NbPsCtrl; // 5/11. Write 0 to D18F5x170[SwNbPstateLoDis, NbPstateDisOnP0, NbPstateThreshold]. PciAddress.Address.Function = FUNC_5; PciAddress.Address.Register = NB_PSTATE_CTRL; LibAmdPciRead (AccessWidth32, PciAddress, &NbPsCtrl, StdHeader); ((NB_PSTATE_CTRL_REGISTER *) &NbPsCtrl)->SwNbPstateLoDis = 0; ((NB_PSTATE_CTRL_REGISTER *) &NbPsCtrl)->NbPstateDisOnP0 = 0; ((NB_PSTATE_CTRL_REGISTER *) &NbPsCtrl)->NbPstateThreshold = 0; LibAmdPciWrite (AccessWidth32, PciAddress, &NbPsCtrl, StdHeader); // 6/12. Wait for D18F5x174[CurNbPstate] = D18F5x170[NbPstateLo] and D18F5x174[CurNbFid, // CurNbDid] = [NbFid, NbDid] from D18F5x1[6C:60] indexed by D18F5x170[NbPstateLo]. WaitForNbTransitionToComplete (PciAddress, ((NB_PSTATE_CTRL_REGISTER *) &NbPsCtrl)->NbPstateLo, StdHeader); }
/** * Support routine for F15KvPmNbAfterResetOnCore to transition to the low NB P-state. * * This function implements steps 7, 8, 13, and 14 as needed. * * @param[in] PciAddress Segment, bus, device number of the node to transition. * @param[in] StdHeader Config handle for library and services. * */ VOID STATIC TransitionToNbLow ( IN PCI_ADDR PciAddress, IN AMD_CONFIG_PARAMS *StdHeader ) { NB_PSTATE_CTRL_REGISTER NbPsCtrl; IDS_HDT_CONSOLE (CPU_TRACE, " TransitionToNbLow\n"); // 7/13. Write 0 to D18F5x170[SwNbPstateLoDis, NbPstateDisOnP0, NbPstateThreshold]. PciAddress.AddressValue = NB_PSTATE_CTRL_PCI_ADDR; LibAmdPciRead (AccessWidth32, PciAddress, &NbPsCtrl, StdHeader); NbPsCtrl.SwNbPstateLoDis = 0; NbPsCtrl.NbPstateDisOnP0 = 0; NbPsCtrl.NbPstateThreshold = 0; LibAmdPciWrite (AccessWidth32, PciAddress, &NbPsCtrl, StdHeader); // 8/14. Wait for D18F5x174[CurNbPstate] = D18F5x170[NbPstateLo] and D18F5x174[CurNbFid, // CurNbDid] = [NbFid, NbDid] from D18F5x1[6C:60] indexed by D18F5x170[NbPstateLo]. WaitForNbTransitionToComplete (PciAddress, NbPsCtrl.NbPstateLo, StdHeader); }