summaryrefslogtreecommitdiffstats
path: root/src/occ
diff options
context:
space:
mode:
authorGuillermo J Silva <guilsilv@us.ibm.com>2015-05-11 10:42:15 -0500
committerGuillermo J. Silva <guilsilv@us.ibm.com>2015-05-13 09:28:51 -0500
commit892863de9e8aa5898e9fb515df850da47f43ad21 (patch)
treef5732f24ab8e2f31b558ed9beb07e3e2a94fc341 /src/occ
parent524c25822287e0a0f95a58529c5c9a4881185f07 (diff)
downloadtalos-occ-892863de9e8aa5898e9fb515df850da47f43ad21.tar.gz
talos-occ-892863de9e8aa5898e9fb515df850da47f43ad21.zip
Support for version 0x11 of frequency config packet
Change-Id: I987e06723fc4eaab385840821a43474c61592e55 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/17689 Tested-by: FSP CI Jenkins Reviewed-by: Fadi Kassem <fmkassem@us.ibm.com> Reviewed-by: Guillermo J. Silva <guilsilv@us.ibm.com> Tested-by: Guillermo J. Silva <guilsilv@us.ibm.com>
Diffstat (limited to 'src/occ')
-rwxr-xr-xsrc/occ/cmdh/cmdh_fsp_cmds_datacnfg.c42
1 files changed, 35 insertions, 7 deletions
diff --git a/src/occ/cmdh/cmdh_fsp_cmds_datacnfg.c b/src/occ/cmdh/cmdh_fsp_cmds_datacnfg.c
index 09bc805..abb1a60 100755
--- a/src/occ/cmdh/cmdh_fsp_cmds_datacnfg.c
+++ b/src/occ/cmdh/cmdh_fsp_cmds_datacnfg.c
@@ -47,9 +47,11 @@
#define FREQ_FORMAT_BYTES_PER_MODE 3
#define FREQ_FORMAT_BASE_DATA_SZ (sizeof(cmdh_store_mode_freqs_t) - sizeof(cmdh_fsp_cmd_header_t))
#define FREQ_FORMAT_10_NUM_FREQS 3
+#define FREQ_FORMAT_11_NUM_FREQS 4
#define DATA_FREQ_VERSION_0 0
#define DATA_FREQ_VERSION_10 0x10
+#define DATA_FREQ_VERSION_11 0x11
#define DATA_PCAP_VERSION_0 0
#define DATA_PCAP_VERSION_10 0x10
@@ -267,10 +269,13 @@ errlHndl_t data_store_freq_data(const cmdh_fsp_cmd_t * i_cmd_ptr,
// If the datapacket is bigger than what we can store, OR
// if the version doesn't equal what we expect, OR
// if the expected data length does not agree with the actual data length, OR
- // the format is 0x10 and we don't have room for the 3 2B frequencies
+ // the format is 0x10 and we don't have room for the 3 2B frequencies, OR
+ // the format is 0x11 and we don;t have room for the 4 2B frequencies.
if((l_data_length < FREQ_FORMAT_BASE_DATA_SZ) ||
- ((l_cmdp->version != DATA_FREQ_VERSION_0) && (l_cmdp->version != DATA_FREQ_VERSION_10)) ||
- ((DATA_FREQ_VERSION_10 == l_cmdp->version) && (l_mode_data_sz != (FREQ_FORMAT_10_NUM_FREQS * 2))))
+ ((l_cmdp->version != DATA_FREQ_VERSION_0) && (l_cmdp->version != DATA_FREQ_VERSION_10) &&
+ (l_cmdp->version != DATA_FREQ_VERSION_11)) ||
+ ((DATA_FREQ_VERSION_10 == l_cmdp->version) && (l_mode_data_sz != (FREQ_FORMAT_10_NUM_FREQS * 2))) ||
+ ((DATA_FREQ_VERSION_11 == l_cmdp->version) && (l_mode_data_sz != (FREQ_FORMAT_11_NUM_FREQS * 2))))
{
TRAC_ERR("Invalid Frequency Data packet: data_length[%u] version[%u] l_count[%u] l_mode_data_sz[%u]",
l_data_length, l_cmdp->version, l_count, l_mode_data_sz);
@@ -284,9 +289,8 @@ errlHndl_t data_store_freq_data(const cmdh_fsp_cmd_t * i_cmd_ptr,
break;
}
- if (DATA_FREQ_VERSION_0 == l_cmdp->version)
+ if(DATA_FREQ_VERSION_0 == l_cmdp->version)
{
-
// parse the packed 3-byte data entries and store them
// in the global data structure.
for(i = 0; i < l_mode_data_sz; i += FREQ_FORMAT_BYTES_PER_MODE)
@@ -365,11 +369,10 @@ errlHndl_t data_store_freq_data(const cmdh_fsp_cmd_t * i_cmd_ptr,
}
}
}
- else // Version 0x10 - OpenPower
+ else if(DATA_FREQ_VERSION_10 == l_cmdp->version) // Version 0x10 - OpenPower
{
// First Nominal Freq, then Max Freq, then Min Freq, which we'll
// store under the existing enums.
-
l_freq = (l_buf[0] << 8 | l_buf[1]);
l_table[OCC_MODE_NOMINAL] = l_freq;
@@ -390,6 +393,31 @@ errlHndl_t data_store_freq_data(const cmdh_fsp_cmd_t * i_cmd_ptr,
g_amec->sys.fmax = l_table[OCC_MODE_TURBO];
g_amec->sys.fmin = l_table[OCC_MODE_MIN_FREQUENCY];
}
+ else if(DATA_FREQ_VERSION_11 == l_cmdp->version) // Version 0x11 - OpenPower
+ {
+ // First Nominal Freq, then Max Freq, then Min Freq, which we'll
+ // store under the existing enums.
+
+ l_freq = (l_buf[0] << 8 | l_buf[1]);
+ l_table[OCC_MODE_NOMINAL] = l_freq;
+ TRAC_INFO("Nominal frequency = %d", l_freq);
+
+ l_freq = (l_buf[2] << 8 | l_buf[3]);
+ l_table[OCC_MODE_TURBO] = l_freq;
+ TRAC_INFO("Turbo frequency = %d", l_freq);
+
+ l_freq = (l_buf[4] << 8 | l_buf[5]);
+ l_table[OCC_MODE_PWRSAVE] = l_freq;
+ l_table[OCC_MODE_MIN_FREQUENCY] = l_freq;
+ TRAC_INFO("Minimum frequency = %d", l_freq);
+
+ l_freq = (l_buf[6] << 8 | l_buf[7]);
+ TRAC_INFO("UT frequency = %d", l_freq);
+
+ // Store the Fmax and Fmin for AMEC (OpenPower environment only)
+ g_amec->sys.fmax = l_table[OCC_MODE_TURBO];
+ g_amec->sys.fmin = l_table[OCC_MODE_MIN_FREQUENCY];
+ }
}while(0);
OpenPOWER on IntegriCloud