northbridge/amd/amdfam10: Properly indicate node and channel in SMBIOS tables

Change-Id: Ie7278745358daf0c78cdb9c579db5291a1a2a0cb
Signed-off-by: Timothy Pearson <tpearson@raptorengineeringinc.com>
Reviewed-on: http://review.coreboot.org/12004
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
Timothy Pearson 2015-06-25 15:28:23 -05:00 committed by Jonathan A. Kollasch
parent 92bcaa2226
commit 0e545c66a3
5 changed files with 40 additions and 6 deletions

View File

@ -1203,7 +1203,12 @@ static int amdfam10_get_smbios_data17(int* count, int handle, int parent_handle,
t->attributes = 0;
t->attributes |= ranks & 0xf; /* rank number is stored in the lowest 4 bits of the attributes field */
t->form_factor = MEMORY_FORMFACTOR_DIMM;
snprintf(string_buffer, sizeof (string_buffer), "NODE %d DIMM_%s%d", node, (slot & 0x1)?"B":"A", (slot >> 1) + 1);
if (mem_info->dct_stat[node].Dual_Node_Package) {
snprintf(string_buffer, sizeof (string_buffer), "NODE %d DIMM_%s%d", node >> 1,
(mem_info->dct_stat[node].Internal_Node_ID)?((slot & 0x1)?"D":"C"):((slot & 0x1)?"B":"A"), (slot >> 1) + 1);
} else {
snprintf(string_buffer, sizeof (string_buffer), "NODE %d DIMM_%s%d", node, (slot & 0x1)?"B":"A", (slot >> 1) + 1);
}
t->device_locator = smbios_add_string(t->eos, string_buffer);
if (IS_ENABLED(CONFIG_DIMM_DDR2))
t->memory_type = MEMORY_TYPE_DDR2;

View File

@ -232,6 +232,18 @@ restartinit:
pDCTstat->dev_nbmisc = PA_NBMISC(Node);
pDCTstat->NodeSysBase = node_sys_base;
if (mctGet_NVbits(NV_PACK_TYPE) == PT_GR) {
uint32_t dword;
pDCTstat->Dual_Node_Package = 1;
/* Get the internal node number */
dword = Get_NB32(pDCTstat->dev_nbmisc, 0xe8);
dword = (dword >> 30) & 0x3;
pDCTstat->Internal_Node_ID = dword;
} else {
pDCTstat->Dual_Node_Package = 0;
}
print_tx("mctAutoInitMCT_D: mct_init Node ", Node);
mct_init(pMCTstat, pDCTstat);
mctNodeIDDebugPort_D();

View File

@ -287,8 +287,11 @@ struct MCTStatStruc {
struct DCTStatStruc { /* A per Node structure*/
/* DCTStatStruct_F - start */
u8 Node_ID; /* Node ID of current controller*/
u8 ErrCode; /* Current error condition of Node
u8 Node_ID; /* Node ID of current controller*/
uint8_t Internal_Node_ID; /* Internal Node ID of the current controller */
uint8_t Dual_Node_Package; /* 1=Dual node package (G34) */
uint8_t stopDCT; /* Set if the DCT will be stopped */
u8 ErrCode; /* Current error condition of Node
0= no error
1= Variance Error, DCT is running but not in an optimal configuration.
2= Stop Error, DCT is NOT running

View File

@ -1396,6 +1396,18 @@ restartinit:
pDCTstat->dev_nbctl = PA_NBCTL(Node);
pDCTstat->NodeSysBase = node_sys_base;
if (mctGet_NVbits(NV_PACK_TYPE) == PT_GR) {
uint32_t dword;
pDCTstat->Dual_Node_Package = 1;
/* Get the internal node number */
dword = Get_NB32(pDCTstat->dev_nbmisc, 0xe8);
dword = (dword >> 30) & 0x3;
pDCTstat->Internal_Node_ID = dword;
} else {
pDCTstat->Dual_Node_Package = 0;
}
printk(BIOS_DEBUG, "%s: mct_init Node %d\n", __func__, Node);
mct_init(pMCTstat, pDCTstat);
mctNodeIDDebugPort_D();

View File

@ -331,9 +331,11 @@ struct amd_spd_node_data {
struct DCTStatStruc { /* A per Node structure*/
/* DCTStatStruct_F - start */
u8 Node_ID; /* Node ID of current controller */
uint8_t stopDCT; /* Set if the DCT will be stopped */
u8 ErrCode; /* Current error condition of Node
u8 Node_ID; /* Node ID of current controller */
uint8_t Internal_Node_ID; /* Internal Node ID of the current controller */
uint8_t Dual_Node_Package; /* 1=Dual node package (G34) */
uint8_t stopDCT; /* Set if the DCT will be stopped */
u8 ErrCode; /* Current error condition of Node
0= no error
1= Variance Error, DCT is running but not in an optimal configuration.
2= Stop Error, DCT is NOT running