nb/amd/amdht: Fix XCS buffer count setup on AMD Family 15h CPUs
The existing code re-used the Family 10h XCS buffer setup on Family 15h CPUs, which set incorrect values leading to random system lockups. Use the Family 15h XCS buffer setup shown in the BKDG. Change-Id: Ie4bc8b3ea6b110bc507beda025de53d828118f55 Signed-off-by: Timothy Pearson <tpearson@raptorengineeringinc.com> Reviewed-on: https://review.coreboot.org/12070 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth <martinroth@google.com>
This commit is contained in:
parent
346fcb2894
commit
09830faa8d
|
@ -2,6 +2,7 @@
|
||||||
* This file is part of the coreboot project.
|
* This file is part of the coreboot project.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2007 Advanced Micro Devices, Inc.
|
* Copyright (C) 2007 Advanced Micro Devices, Inc.
|
||||||
|
* Copyright (C) 2015 Timothy Pearson <tpearson@raptorengineeringinc.com>, Raptor Engineering
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1387,6 +1388,75 @@ static uint32_t fam10NorthBridgeFreqMask(u8 node, cNorthBridge *nb)
|
||||||
return (fixEarlySampleFreqCapability(supported));
|
return (fixEarlySampleFreqCapability(supported));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***************************************************************************//**
|
||||||
|
*
|
||||||
|
* static u16
|
||||||
|
* fam15NorthBridgeFreqMask(u8 NodeID, cNorthBridge *nb)
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Return a mask that eliminates HT frequencies that cannot be used due to a slow
|
||||||
|
* northbridge frequency.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* @param[in] node = Result could (later) be for a specific node
|
||||||
|
* @param[in] *nb = this northbridge
|
||||||
|
* @return = Frequency mask
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
static uint32_t fam15NorthBridgeFreqMask(u8 node, cNorthBridge *nb)
|
||||||
|
{
|
||||||
|
u8 nbCOF;
|
||||||
|
uint32_t supported;
|
||||||
|
|
||||||
|
nbCOF = getMinNbCOF();
|
||||||
|
/*
|
||||||
|
* nbCOF is minimum northbridge speed in hundreds of MHz.
|
||||||
|
* HT can not go faster than the minimum speed of the northbridge.
|
||||||
|
*/
|
||||||
|
if ((nbCOF >= 6) && (nbCOF < 10))
|
||||||
|
{
|
||||||
|
/* Generation 1 HT link frequency */
|
||||||
|
/* Convert frequency to bit and all less significant bits,
|
||||||
|
* by setting next power of 2 and subtracting 1.
|
||||||
|
*/
|
||||||
|
supported = ((uint32_t)1 << ((nbCOF >> 1) + 2)) - 1;
|
||||||
|
}
|
||||||
|
else if ((nbCOF >= 10) && (nbCOF <= 32))
|
||||||
|
{
|
||||||
|
/* Generation 3 HT link frequency
|
||||||
|
* Assume error retry is enabled on all Gen 3 links
|
||||||
|
*/
|
||||||
|
nbCOF *= 2;
|
||||||
|
if (nbCOF > 32)
|
||||||
|
nbCOF = 32;
|
||||||
|
|
||||||
|
/* Convert frequency to bit and all less significant bits,
|
||||||
|
* by setting next power of 2 and subtracting 1.
|
||||||
|
*/
|
||||||
|
supported = ((uint32_t)1 << ((nbCOF >> 1) + 2)) - 1;
|
||||||
|
}
|
||||||
|
else if (nbCOF > 32)
|
||||||
|
{
|
||||||
|
supported = HT_FREQUENCY_LIMIT_3200M;
|
||||||
|
}
|
||||||
|
/* unlikely cases, but include as a defensive measure, also avoid trick above */
|
||||||
|
else if (nbCOF == 4)
|
||||||
|
{
|
||||||
|
supported = HT_FREQUENCY_LIMIT_400M;
|
||||||
|
}
|
||||||
|
else if (nbCOF == 2)
|
||||||
|
{
|
||||||
|
supported = HT_FREQUENCY_LIMIT_200M;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
STOP_HERE;
|
||||||
|
supported = HT_FREQUENCY_LIMIT_200M;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (fixEarlySampleFreqCapability(supported));
|
||||||
|
}
|
||||||
|
|
||||||
/***************************************************************************//**
|
/***************************************************************************//**
|
||||||
*
|
*
|
||||||
* static void
|
* static void
|
||||||
|
@ -2266,6 +2336,26 @@ static void fam10BufferOptimizations(u8 node, sMainData *pDat, cNorthBridge *nb)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***************************************************************************//**
|
||||||
|
*
|
||||||
|
* static void
|
||||||
|
* fam15BufferOptimizations(u8 node, sMainData *pDat, cNorthBridge *nb)
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Buffer tunings are inherently northbridge specific. Check for specific configs
|
||||||
|
* which require adjustments and apply any standard workarounds to this node.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* @param[in] node = the node to tune
|
||||||
|
* @param[in] *pDat = global state
|
||||||
|
* @param[in] nb = this northbridge
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
static void fam15BufferOptimizations(u8 node, sMainData *pDat, cNorthBridge *nb)
|
||||||
|
{
|
||||||
|
/* Buffer count setup on Family 15h is currently handled in cpuSetAMDPCI */
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* North Bridge 'constructor'.
|
* North Bridge 'constructor'.
|
||||||
*
|
*
|
||||||
|
@ -2324,11 +2414,11 @@ void newNorthBridge(u8 node, cNorthBridge *nb)
|
||||||
ht3SetCFGAddrMap,
|
ht3SetCFGAddrMap,
|
||||||
convertBitsToWidth,
|
convertBitsToWidth,
|
||||||
convertWidthToBits,
|
convertWidthToBits,
|
||||||
fam10NorthBridgeFreqMask,
|
fam15NorthBridgeFreqMask,
|
||||||
gatherLinkData,
|
gatherLinkData,
|
||||||
setLinkData,
|
setLinkData,
|
||||||
ht3WriteTrafficDistribution,
|
ht3WriteTrafficDistribution,
|
||||||
fam10BufferOptimizations,
|
fam15BufferOptimizations,
|
||||||
0x00000001,
|
0x00000001,
|
||||||
0x00000200,
|
0x00000200,
|
||||||
18,
|
18,
|
||||||
|
|
Loading…
Reference in New Issue