summaryrefslogtreecommitdiffstats
path: root/src/occ_405/cmdh
diff options
context:
space:
mode:
Diffstat (limited to 'src/occ_405/cmdh')
-rwxr-xr-xsrc/occ_405/cmdh/cmdh_fsp.c4
-rwxr-xr-xsrc/occ_405/cmdh/cmdh_fsp_cmds.c77
-rwxr-xr-xsrc/occ_405/cmdh/cmdh_fsp_cmds.h37
-rwxr-xr-xsrc/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.c175
-rwxr-xr-xsrc/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.h48
5 files changed, 83 insertions, 258 deletions
diff --git a/src/occ_405/cmdh/cmdh_fsp.c b/src/occ_405/cmdh/cmdh_fsp.c
index 76b777f..2944f61 100755
--- a/src/occ_405/cmdh/cmdh_fsp.c
+++ b/src/occ_405/cmdh/cmdh_fsp.c
@@ -1304,10 +1304,6 @@ errlHndl_t cmdh_processTmgtRequest (const cmdh_fsp_cmd_t * i_cmd_ptr,
l_err = cmdh_reset_prep(i_cmd_ptr,i_rsp_ptr);
break;
- case CMDH_GET_COOLING_REQUEST:
- l_err = cmdh_get_cooling_request(i_cmd_ptr,i_rsp_ptr);
- break;
-
case CMDH_MFG_TEST_CMD:
cmdh_mnfg_test_parse(i_cmd_ptr,i_rsp_ptr);
break;
diff --git a/src/occ_405/cmdh/cmdh_fsp_cmds.c b/src/occ_405/cmdh/cmdh_fsp_cmds.c
index 03dae96..e34b86c 100755
--- a/src/occ_405/cmdh/cmdh_fsp_cmds.c
+++ b/src/occ_405/cmdh/cmdh_fsp_cmds.c
@@ -47,7 +47,6 @@
#include "sensor_query_list.h"
#include "chom.h"
#include "amec_master_smh.h"
-#include "thrm_thread.h"
#include <proc_data.h>
// This table contains tunable parameter information that can be exposed to
@@ -87,8 +86,6 @@ uint8_t G_mst_tunable_parameter_overwrite = 0;
//Reverse association of channel to function.
uint8_t G_apss_ch_to_function[MAX_APSS_ADC_CHANNELS] = {0};
-extern thrm_fru_data_t G_thrm_fru_data[DATA_FRU_MAX];
-
// Function Specification
//
// Name: cmdh_tmgt_poll
@@ -115,7 +112,6 @@ errlHndl_t cmdh_tmgt_poll (const cmdh_fsp_cmd_t * i_cmd_ptr,
l_poll_rsp->status.word = SMGR_validate_get_valid_states();
l_poll_rsp->ext_status.word = 0;
- l_poll_rsp->ext_status.cooling_request = THRM_thread_get_cooling_request();
l_poll_rsp->occ_pres_mask = G_sysConfigData.is_occ_present;
l_poll_rsp->config_data = DATA_request_cnfgdata();
@@ -1585,79 +1581,6 @@ errlHndl_t cmdh_tmgt_get_field_debug_data(const cmdh_fsp_cmd_t * i_cmd_ptr,
// Function Specification
//
-// Name: cmdh_get_cooling_request
-//
-// Description: TODO Add description
-//
-// End Function Specification
-errlHndl_t cmdh_get_cooling_request(const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr)
-{
- errlHndl_t l_errlHndl = NULL;
- cmdh_get_cooling_resp_t *l_resp_ptr = (cmdh_get_cooling_resp_t*) o_rsp_ptr;
- ERRL_RC l_rc = ERRL_RC_SUCCESS;
- uint16_t l_rsp_data_length = 0;
- uint16_t l_max_increment = 0;
- uint8_t l_fru_winner = DATA_FRU_MAX;
- uint8_t i = 0;
- uint8_t j = 0;
-
- do
- {
- // Command Length Check - make sure we at least have a version number
- if( CMDH_DATALEN_FIELD_UINT16(i_cmd_ptr) < CMDH_GET_COOLING_MIN_DATALEN)
- {
- l_rc = ERRL_RC_INVALID_CMD_LEN;
- break;
- }
-
- // Version Number Check
- if(i_cmd_ptr->data[0] != CMDH_GET_COOLING_VERSION)
- {
- l_rc = ERRL_RC_INVALID_DATA;
- break;
- }
-
- // Loop through all Zones
- for (i=0; i<THRM_MAX_NUM_ZONES; i++)
- {
- // For each Zone, determine which FRU is requesting the maximum
- // increment value
- l_max_increment = 0;
- l_fru_winner = DATA_FRU_MAX;
- for (j=0; j<DATA_FRU_MAX; j++)
- {
- if (G_thrm_fru_data[j].FanIncZone[i] > l_max_increment)
- {
- l_max_increment = G_thrm_fru_data[j].FanIncZone[i];
- l_fru_winner = j;
- }
- }
- l_resp_ptr->zone_data[i].increment_value = l_max_increment;
- l_resp_ptr->zone_data[i].comp_type = l_fru_winner;
- l_resp_ptr->zone_data[i].reason = 0x00; // Always hardcoded to 0x00
- }
-
- // Populate the response data header
- l_rsp_data_length = (sizeof(cmdh_get_cooling_resp_t) - CMDH_DBUG_FSP_RESP_LEN);
- l_resp_ptr->data_length[0] = ((uint8_t *)&l_rsp_data_length)[0];
- l_resp_ptr->data_length[1] = ((uint8_t *)&l_rsp_data_length)[1];
- l_resp_ptr->rc = l_rc;
-
- }while(0);
-
- if(ERRL_RC_SUCCESS != l_rc)
- {
- // Build Error Response packet
- cmdh_build_errl_rsp(i_cmd_ptr, o_rsp_ptr, l_rc, &l_errlHndl);
- }
-
- return l_errlHndl;
-}
-
-
-// Function Specification
-//
// Name: cmdh_set_user_pcap
//
// Description: Implements the Set Use Power Cap command.
diff --git a/src/occ_405/cmdh/cmdh_fsp_cmds.h b/src/occ_405/cmdh/cmdh_fsp_cmds.h
index f31b210..cb3593b 100755
--- a/src/occ_405/cmdh/cmdh_fsp_cmds.h
+++ b/src/occ_405/cmdh/cmdh_fsp_cmds.h
@@ -38,7 +38,6 @@
//#include "pstates.h"
#include "cmdh_fsp_cmds_datacnfg.h"
#include "sensor.h"
-#include "thrm_thread.h"
#include "apss.h"
// Enum of the various commands that TMGT may send to OCC
@@ -57,7 +56,6 @@ typedef enum
CMDH_READ_STATUS_REG = 0x31,
CMDH_GET_THROTTLE_VALUE = 0x32,
CMDH_GET_CPU_TEMPS = 0x33,
- CMDH_GET_COOLING_REQUEST = 0x34,
CMDH_GET_SNAPSHOT_BUFFER = 0x35,
CMDH_DEBUGPT = 0x40,
CMDH_AME_PASS_THROUGH = 0x41,
@@ -125,7 +123,7 @@ typedef struct __attribute__ ((packed)) cmdh_poll_resp_v0
uint8_t _reserved_3 : 1;
uint8_t sync_request : 1; // In TMGT to TPMF interface spec, but not needed yet
uint8_t _reserved_1 : 1;
- uint8_t cooling_request : 1; // 1:new fan speed, 0:no new fan speed
+ uint8_t _reserved_0 : 1;
};
uint8_t word;
} ext_status;
@@ -385,36 +383,6 @@ typedef struct __attribute__ ((packed)) cmdh_reset_prep
}cmdh_reset_prep_t;
//---------------------------------------------------------
-// Get Cooling Request
-//---------------------------------------------------------
-
-// Minimum Data Length for Get Cooling Request Command
-#define CMDH_GET_COOLING_MIN_DATALEN 1
-
-// Version 0
-#define CMDH_GET_COOLING_VERSION 0
-
-typedef struct cmdh_get_cooling_data
-{
- // Maximum increment value for this zone
- uint16_t increment_value;
- // Component type that is driving the increment for this zone
- uint8_t comp_type;
- // Currently not used, hardcode to 0x00 (see TMGT-OCC Interface Spec v2.0)
- uint8_t reason;
-}cmdh_get_cooling_data_t;
-
-// Used by OCC to respond to "GET_COOLING_REQUEST" cmd
-typedef struct __attribute__ ((packed))
-{
- struct cmdh_fsp_rsp_header;
- // Zone data array
- cmdh_get_cooling_data_t zone_data[THRM_MAX_NUM_ZONES];
- // Checksum
- uint8_t checksum[2];
-}cmdh_get_cooling_resp_t;
-
-//---------------------------------------------------------
// Debug Command
//---------------------------------------------------------
@@ -643,9 +611,6 @@ errlHndl_t cmdh_reset_prep(const cmdh_fsp_cmd_t * i_cmd_ptr,
errlHndl_t cmdh_tmgt_get_field_debug_data(const cmdh_fsp_cmd_t * i_cmd_ptr,
cmdh_fsp_rsp_t * i_rsp_ptr);
-errlHndl_t cmdh_get_cooling_request(const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr);
-
errlHndl_t cmdh_set_user_pcap(const cmdh_fsp_cmd_t * i_cmd_ptr,
cmdh_fsp_rsp_t * o_rsp_ptr);
diff --git a/src/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.c b/src/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.c
index b492a41..2abebc0 100755
--- a/src/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.c
+++ b/src/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.c
@@ -59,10 +59,8 @@
#define DATA_APSS_VERSION20 0x20
-#define DATA_THRM_THRES_VERSION_1 1
-#define DATA_THRM_THRES_VERSION_10 0x10
-#define THRM_THRES_BASE_DATA_SZ_1 4
-#define THRM_THRES_BASE_DATA_SZ_10 3
+#define DATA_THRM_THRES_VERSION_20 0x20
+#define THRM_THRES_BASE_DATA_SZ_20 5
#define DATA_IPS_VERSION 0
@@ -1345,12 +1343,11 @@ errlHndl_t data_store_thrm_thresholds(const cmdh_fsp_cmd_t * i_cmd_ptr,
cmdh_fsp_rsp_t * o_rsp_ptr)
{
errlHndl_t l_err = NULL;
- cmdh_thrm_thresholds_t* l_cmd_ptr = (cmdh_thrm_thresholds_t*)i_cmd_ptr;
uint16_t i = 0;
uint16_t l_data_length = 0;
uint16_t l_exp_data_length = 0;
uint8_t l_frutype = 0;
- cmdh_thrm_thresholds_v10_t* l_cmd2_ptr = (cmdh_thrm_thresholds_v10_t*)i_cmd_ptr;
+ cmdh_thrm_thresholds_v20_t* l_cmd_ptr = (cmdh_thrm_thresholds_v20_t*)i_cmd_ptr;
uint8_t l_num_data_sets = 0;
bool l_invalid_input = TRUE; //Assume bad input
bool l_vrm_frutype = FALSE;
@@ -1362,27 +1359,17 @@ errlHndl_t data_store_thrm_thresholds(const cmdh_fsp_cmd_t * i_cmd_ptr,
// Sanity checks on input data, break if:
// * data packet is smaller than the base size, OR
// * the version doesn't match what we expect, OR
- // * the actual data length does not match the expected data length.
- if(l_cmd_ptr->version == DATA_THRM_THRES_VERSION_1)
+ // * the actual data length does not match the expected data length, OR
+ // * the core and quad weights are both zero.
+ if(l_cmd_ptr->version == DATA_THRM_THRES_VERSION_20)
{
l_num_data_sets = l_cmd_ptr->num_data_sets;
- l_exp_data_length = THRM_THRES_BASE_DATA_SZ_1 +
- (l_num_data_sets * sizeof(cmdh_thrm_thresholds_set_t));
+ l_exp_data_length = THRM_THRES_BASE_DATA_SZ_20 +
+ (l_num_data_sets * sizeof(cmdh_thrm_thresholds_set_v20_t));
if((l_exp_data_length == l_data_length) &&
- (l_data_length >= THRM_THRES_BASE_DATA_SZ_1))
- {
- l_invalid_input = FALSE;
- }
- }
- else if(l_cmd_ptr->version == DATA_THRM_THRES_VERSION_10)
- {
- l_num_data_sets = l_cmd2_ptr->num_data_sets;
- l_exp_data_length = THRM_THRES_BASE_DATA_SZ_10 +
- (l_num_data_sets * sizeof(cmdh_thrm_thresholds_set_v10_t));
-
- if((l_exp_data_length == l_data_length) &&
- (l_data_length >= THRM_THRES_BASE_DATA_SZ_10))
+ (l_data_length >= THRM_THRES_BASE_DATA_SZ_20) &&
+ (l_cmd_ptr->proc_core_weight || l_cmd_ptr->proc_quad_weight))
{
l_invalid_input = FALSE;
}
@@ -1398,109 +1385,70 @@ errlHndl_t data_store_thrm_thresholds(const cmdh_fsp_cmd_t * i_cmd_ptr,
break;
}
- if(l_cmd_ptr->version == DATA_THRM_THRES_VERSION_1)
+ // Store the base data
+ G_data_cnfg->thrm_thresh.version = l_cmd_ptr->version;
+ G_data_cnfg->thrm_thresh.proc_core_weight = l_cmd_ptr->proc_core_weight;
+ G_data_cnfg->thrm_thresh.proc_quad_weight = l_cmd_ptr->proc_quad_weight;
+ G_data_cnfg->thrm_thresh.num_data_sets = l_cmd_ptr->num_data_sets;
+
+ // Store the FRU related data
+ for(i=0; i<l_cmd_ptr->num_data_sets; i++)
{
- // Store the base data
- G_data_cnfg->thrm_thresh.version = l_cmd_ptr->version;
- G_data_cnfg->thrm_thresh.fan_control_loop_time = l_cmd_ptr->fan_control_loop_time;
- G_data_cnfg->thrm_thresh.num_data_sets = l_cmd_ptr->num_data_sets;
+ // Get the FRU type
+ l_frutype = l_cmd_ptr->data[i].fru_type;
- // Store the FRU related data
- for(i=0; i<l_cmd_ptr->num_data_sets; i++)
+ if((l_frutype >= 0) && (l_frutype < DATA_FRU_MAX))
{
- // Get the FRU type
- l_frutype = l_cmd_ptr->data[i].fru_type;
-
- if((l_frutype >= 0) && (l_frutype < DATA_FRU_MAX))
+ // Copy FRU data
+ G_data_cnfg->thrm_thresh.data[l_frutype].fru_type = l_frutype;
+ G_data_cnfg->thrm_thresh.data[l_frutype].dvfs = l_cmd_ptr->data[i].dvfs;
+ G_data_cnfg->thrm_thresh.data[l_frutype].error = l_cmd_ptr->data[i].error;
+ G_data_cnfg->thrm_thresh.data[l_frutype].pm_dvfs = l_cmd_ptr->data[i].pm_dvfs;
+ G_data_cnfg->thrm_thresh.data[l_frutype].pm_error = l_cmd_ptr->data[i].pm_error;
+ G_data_cnfg->thrm_thresh.data[l_frutype].max_read_timeout =
+ l_cmd_ptr->data[i].max_read_timeout;
+
+ // Set a local flag if we get data for VRM FRU type
+ if(l_frutype == DATA_FRU_VRM)
{
- // Copy FRU data
- memcpy((void *)&G_data_cnfg->thrm_thresh.data[l_frutype],
- (void *)&l_cmd_ptr->data[i],
- sizeof(cmdh_thrm_thresholds_set_t));
+ l_vrm_frutype = TRUE;
+ }
// Useful trace for debugging
- //CMDH_TRAC_INFO("data_store_thrm_thresholds: FRU_type[0x%.2X] T_control[%u] DVFS[%u]",
+ //CMDH_TRAC_INFO("data_store_thrm_thresholds: FRU_type[0x%.2X] T_control[%u] DVFS[%u] Error[%u]",
// G_data_cnfg->thrm_thresh.data[l_frutype].fru_type,
// G_data_cnfg->thrm_thresh.data[l_frutype].t_control,
- // G_data_cnfg->thrm_thresh.data[l_frutype].dvfs);
- }
- else
- {
- // We got an invalid FRU type
- CMDH_TRAC_ERR("data_store_thrm_thresholds: Received an invalid FRU type[0x%.2X] max_FRU_number[0x%.2X]",
- l_frutype,
- DATA_FRU_MAX);
- cmdh_build_errl_rsp(i_cmd_ptr, o_rsp_ptr, ERRL_RC_INVALID_DATA, &l_err);
- break;
- }
- }
- }
- else if(l_cmd_ptr->version == DATA_THRM_THRES_VERSION_10)
- {
- // Store the base data
- G_data_cnfg->thrm_thresh.version = l_cmd2_ptr->version;
- G_data_cnfg->thrm_thresh.fan_control_loop_time = 0; //Indicates not to run fan control loop
- G_data_cnfg->thrm_thresh.num_data_sets = l_cmd2_ptr->num_data_sets;
-
- // Store the FRU related data
- for(i=0; i<l_cmd2_ptr->num_data_sets; i++)
- {
- // Get the FRU type
- l_frutype = l_cmd2_ptr->data[i].fru_type;
-
- if((l_frutype >= 0) && (l_frutype < DATA_FRU_MAX))
- {
- // Copy FRU data
- G_data_cnfg->thrm_thresh.data[l_frutype].fru_type = l_frutype;
- G_data_cnfg->thrm_thresh.data[l_frutype].dvfs = l_cmd2_ptr->data[i].dvfs;
- G_data_cnfg->thrm_thresh.data[l_frutype].error = l_cmd2_ptr->data[i].error;
- G_data_cnfg->thrm_thresh.data[l_frutype].pm_dvfs = l_cmd2_ptr->data[i].dvfs;
- G_data_cnfg->thrm_thresh.data[l_frutype].pm_error = l_cmd2_ptr->data[i].error;
- G_data_cnfg->thrm_thresh.data[l_frutype].max_read_timeout = l_cmd2_ptr->data[i].max_read_timeout;
-
- // Set a local flag if we get data for VRM FRU type
- if(l_frutype == DATA_FRU_VRM)
- {
- l_vrm_frutype = TRUE;
- }
-
- // Useful trace for debugging
- //CMDH_TRAC_INFO("data_store_thrm_thresholds: FRU_type[0x%.2X] T_control[%u] DVFS[%u] Error[%u]",
- // G_data_cnfg->thrm_thresh.data[l_frutype].fru_type,
- // G_data_cnfg->thrm_thresh.data[l_frutype].t_control,
- // G_data_cnfg->thrm_thresh.data[l_frutype].dvfs,
- // G_data_cnfg->thrm_thresh.data[l_frutype].error);
- }
- else
- {
- // We got an invalid FRU type
- CMDH_TRAC_ERR("data_store_thrm_thresholds: Received an invalid FRU type[0x%.2X] max_FRU_number[0x%.2X]",
- l_frutype,
- DATA_FRU_MAX);
- cmdh_build_errl_rsp(i_cmd_ptr, o_rsp_ptr, ERRL_RC_INVALID_DATA, &l_err);
- break;
- }
- }
-
- // Did we get data for VRM FRU type?
- if(l_vrm_frutype)
- {
- // Then, set a global variable so that OCC attempts to talk to
- // the VRMs
- G_vrm_present = 1;
+ // G_data_cnfg->thrm_thresh.data[l_frutype].dvfs,
+ // G_data_cnfg->thrm_thresh.data[l_frutype].error);
}
else
{
- // No VRM data was received, so do not attempt to talk to the VRMs.
- // Also, make the error count very high so that the health
- // monitor doesn't complain about VRHOT being asserted.
- G_vrm_present = 0;
- G_data_cnfg->thrm_thresh.data[DATA_FRU_VRM].error_count = 0xFF;
-
- CMDH_TRAC_IMP("data_store_thrm_thresholds: No VRM data was received! OCC won't attempt to talk to VRMs.");
+ // We got an invalid FRU type
+ CMDH_TRAC_ERR("data_store_thrm_thresholds: Received an invalid FRU type[0x%.2X] max_FRU_number[0x%.2X]",
+ l_frutype,
+ DATA_FRU_MAX);
+ cmdh_build_errl_rsp(i_cmd_ptr, o_rsp_ptr, ERRL_RC_INVALID_DATA, &l_err);
+ break;
}
}
+ // Did we get data for VRM FRU type?
+ if(l_vrm_frutype)
+ {
+ // Then, set a global variable so that OCC attempts to talk to
+ // the VRMs
+ G_vrm_present = 1;
+ }
+ else
+ {
+ // No VRM data was received, so do not attempt to talk to the VRMs.
+ // Also, make the error count very high so that the health
+ // monitor doesn't complain about VRHOT being asserted.
+ G_vrm_present = 0;
+ G_data_cnfg->thrm_thresh.data[DATA_FRU_VRM].error_count = 0xFF;
+ CMDH_TRAC_IMP("data_store_thrm_thresholds: No VRM data was received! OCC won't attempt to talk to VRMs.");
+ }
+
} while(0);
if(!l_err)
@@ -1508,9 +1456,6 @@ errlHndl_t data_store_thrm_thresholds(const cmdh_fsp_cmd_t * i_cmd_ptr,
// If there were no errors, indicate that we got this data
G_data_cnfg->data_mask |= DATA_MASK_THRM_THRESHOLDS;
CMDH_TRAC_IMP("data_store_thrm_thresholds: Got valid Thermal Control Threshold data packet");
-
- // Notify thermal thread to update its local copy of the thermal thresholds
- THRM_thread_update_thresholds();
}
return l_err;
diff --git a/src/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.h b/src/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.h
index 661eeb1..06b3ef4 100755
--- a/src/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.h
+++ b/src/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.h
@@ -222,29 +222,12 @@ extern cmdh_ips_config_data_t G_ips_config_data;
typedef struct __attribute__ ((packed))
{
uint8_t fru_type;
- uint8_t t_control;
uint8_t dvfs;
uint8_t error;
- uint8_t pm_t_control;
uint8_t pm_dvfs;
uint8_t pm_error;
- uint8_t acoustic_t_control;
- uint8_t acoustic_dvfs;
- uint8_t acoustic_error;
- uint8_t warning;
- uint8_t warning_reset;
uint8_t error_count;
- uint8_t sample_time;
- uint8_t sample_error_count;
uint8_t max_read_timeout;
- uint16_t t_inc_zone1;
- uint16_t t_inc_zone2;
- uint16_t t_inc_zone3;
- uint16_t t_inc_zone4;
- uint16_t t_inc_zone5;
- uint16_t t_inc_zone6;
- uint16_t t_inc_zone7;
- uint16_t t_inc_zone8;
}cmdh_thrm_thresholds_set_t;
// Used by TMGT to send OCC thermal control thresholds
@@ -253,27 +236,40 @@ typedef struct __attribute__ ((packed))
struct cmdh_fsp_cmd_header;
uint8_t format;
uint8_t version;
- uint8_t fan_control_loop_time;
+
+ // Weight factor for core DTS used to calculate a core temp
+ uint8_t proc_core_weight;
+ uint8_t proc_quad_weight;
+
uint8_t num_data_sets;
cmdh_thrm_thresholds_set_t data[DATA_FRU_MAX];
}cmdh_thrm_thresholds_t;
+
typedef struct __attribute__ ((packed))
{
- uint8_t fru_type;
- uint8_t dvfs;
- uint8_t error;
+ uint8_t fru_type; // 0: proc, 1: centaur, 2: dimm, 3: vrm
+// dvfs/pm_dvfs and error/pm_error fields define the temperature trigger
+// points for DVFS/Throttling and error/FRU callouts, respectively.
+// a 0xFF entry indicates that the coresponding temperature trigger
+// point is undefined.
+ uint8_t dvfs; // OS Controlled sys/PowerVM nominal
+ uint8_t error; // OS Controlled sys/PowerVM nominal
+ uint8_t pm_dvfs; // powerVM sys
+ uint8_t pm_error; // powerVM sys
uint8_t max_read_timeout;
-}cmdh_thrm_thresholds_set_v10_t;
+}cmdh_thrm_thresholds_set_v20_t;
typedef struct __attribute__ ((packed))
{
struct cmdh_fsp_cmd_header;
uint8_t format;
uint8_t version;
+ uint8_t proc_core_weight;
+ uint8_t proc_quad_weight;
uint8_t num_data_sets;
- cmdh_thrm_thresholds_set_v10_t data[DATA_FRU_MAX];
-}cmdh_thrm_thresholds_v10_t;
+ cmdh_thrm_thresholds_set_v20_t data[DATA_FRU_MAX];
+}cmdh_thrm_thresholds_v20_t;
// Header data for mem cfg packet
@@ -357,8 +353,8 @@ typedef struct __attribute__ ((packed))
// Used to mark present the config data TMGT has sent us.
typedef struct data_cnfg
{
- uint32_t data_mask;
- cmdh_thrm_thresholds_t thrm_thresh;
+ uint32_t data_mask;
+ cmdh_thrm_thresholds_t thrm_thresh;
} data_cnfg_t;
// Used by TMGT to send OCC the Vdd and Vcs uplift values
OpenPOWER on IntegriCloud