vendorcode/amd/agesa/f15tn: Fix erratum #712
Implement the fix for the erratum #712. - Processor May Hang During Graphics Memory Controller Sequencing The processor may hang during a graphics memory controller (GMC) sleep state transitioning. The failure may be processor specific and may be sensitive to temperature. Potential Effect on System: System hang. Suggested Workaround: BIOS should set D18F2x408_dct[1:0] bit 31 = 1b. See Publication # 48931 Revision: 3.08 Change-Id: I4346fd4ef3cf554ffdaaad5ab6fc84e73532e885 Signed-off-by: Rudolf Marek <r.marek@assembler.cz> Reviewed-on: http://review.coreboot.org/6216 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth <gaumless@gmail.com> Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
This commit is contained in:
parent
533c119f5b
commit
c805e62f9d
|
@ -85,6 +85,13 @@ Erratum687Workaround (
|
||||||
IN AMD_CONFIG_PARAMS *StdHeader
|
IN AMD_CONFIG_PARAMS *StdHeader
|
||||||
);
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
STATIC
|
||||||
|
Erratum712Workaround (
|
||||||
|
IN UINT32 Data,
|
||||||
|
IN AMD_CONFIG_PARAMS *StdHeader
|
||||||
|
);
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------------------
|
||||||
* E X P O R T E D F U N C T I O N S
|
* E X P O R T E D F U N C T I O N S
|
||||||
*----------------------------------------------------------------------------------------
|
*----------------------------------------------------------------------------------------
|
||||||
|
@ -726,6 +733,18 @@ STATIC CONST FAM_SPECIFIC_WORKAROUND_TYPE_ENTRY_INITIALIZER ROMDATA F15TnPciWork
|
||||||
0x00000000, // data
|
0x00000000, // data
|
||||||
}}
|
}}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
FamSpecificWorkaround,
|
||||||
|
{
|
||||||
|
(AMD_FAMILY_15_TN | 0x0000000000000800ull) , // CpuFamily
|
||||||
|
AMD_F15_TN_ALL // CpuRevision
|
||||||
|
},
|
||||||
|
{AMD_PF_ALL}, // platformFeatures
|
||||||
|
{{
|
||||||
|
Erratum712Workaround, // function call
|
||||||
|
0x00000000, // data
|
||||||
|
}}
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -819,4 +838,37 @@ Erratum687Workaround (
|
||||||
LibAmdPciWrite (AccessWidth32, PciAddress, (VOID *)&DctCfgSel, StdHeader);
|
LibAmdPciWrite (AccessWidth32, PciAddress, (VOID *)&DctCfgSel, StdHeader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*---------------------------------------------------------------------------------------*/
|
||||||
|
/**
|
||||||
|
* Workaround for Erratum #712 for TN processors.
|
||||||
|
*
|
||||||
|
* AGESA should program D18F2x408_dct[1:0] bit 31 = 1b for all TN parts.
|
||||||
|
*
|
||||||
|
* @param[in] Data The table data value, for example to indicate which CPU and Platform types matched.
|
||||||
|
* @param[in] StdHeader Config handle for library and services.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
VOID
|
||||||
|
STATIC
|
||||||
|
Erratum712Workaround (
|
||||||
|
IN UINT32 Data,
|
||||||
|
IN AMD_CONFIG_PARAMS *StdHeader
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PCI_ADDR PciAddress;
|
||||||
|
GMC_TO_DCT_CTL_2_REGISTER GmcToDctCtrl2;
|
||||||
|
UINT32 DctSelCnt;
|
||||||
|
DCT_CFG_SEL_REGISTER DctCfgSel;
|
||||||
|
|
||||||
|
for (DctSelCnt = 0; DctSelCnt <= 1; DctSelCnt++) {
|
||||||
|
PciAddress.AddressValue = GMC_TO_DCT_CTL_2_PCI_ADDR;
|
||||||
|
LibAmdPciRead (AccessWidth32, PciAddress, (VOID *)&GmcToDctCtrl2, StdHeader);
|
||||||
|
GmcToDctCtrl2.DisHalfNclkPwrGate |= 1;
|
||||||
|
LibAmdPciWrite (AccessWidth32, PciAddress, (VOID *)&GmcToDctCtrl2, StdHeader);
|
||||||
|
|
||||||
|
PciAddress.AddressValue = DCT_CFG_SEL_REG_PCI_ADDR;
|
||||||
|
LibAmdPciRead (AccessWidth32, PciAddress, (VOID *)&DctCfgSel, StdHeader);
|
||||||
|
DctCfgSel.DctCfgSel = ~DctCfgSel.DctCfgSel;
|
||||||
|
LibAmdPciWrite (AccessWidth32, PciAddress, (VOID *)&DctCfgSel, StdHeader);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -243,7 +243,8 @@ typedef struct {
|
||||||
/// GMC to DCT Control 2 PCI Register
|
/// GMC to DCT Control 2 PCI Register
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT32 CpuElevPrioDis:1; ///< Cpu elevate priority disable
|
UINT32 CpuElevPrioDis:1; ///< Cpu elevate priority disable
|
||||||
UINT32 :31; ///< Reserved
|
UINT32 Reserved_30_1:30; ///<
|
||||||
|
UINT32 DisHalfNclkPwrGate:1; ///<
|
||||||
} GMC_TO_DCT_CTL_2_REGISTER;
|
} GMC_TO_DCT_CTL_2_REGISTER;
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue