summaryrefslogtreecommitdiffstats
path: root/src/occ_405/cmdh/cmdh_fsp_cmds.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/occ_405/cmdh/cmdh_fsp_cmds.c')
-rwxr-xr-xsrc/occ_405/cmdh/cmdh_fsp_cmds.c901
1 files changed, 0 insertions, 901 deletions
diff --git a/src/occ_405/cmdh/cmdh_fsp_cmds.c b/src/occ_405/cmdh/cmdh_fsp_cmds.c
index d61874d..d98beae 100755
--- a/src/occ_405/cmdh/cmdh_fsp_cmds.c
+++ b/src/occ_405/cmdh/cmdh_fsp_cmds.c
@@ -32,7 +32,6 @@
#include "occ_common.h"
#include "state.h"
#include "cmdh_fsp_cmds.h"
-#include "cmdh_dbug_cmd.h"
#include "proc_pstate.h"
#include "centaur_data.h"
#include <amec_data.h>
@@ -42,7 +41,6 @@
#include "amec_sys.h"
#include "sensor.h"
#include "sensor_query_list.h"
-#include "chom.h"
#include "amec_master_smh.h"
#include <proc_data.h>
#include "homer.h"
@@ -60,8 +58,6 @@ extern bool G_reset_prep;
extern uint16_t G_amester_max_data_length;
extern uint8_t G_occ_interrupt_type;
-#include <gpe_export.h>
-extern gpe_shared_data_t G_shared_gpe_data;
extern opal_proc_voting_reason_t G_amec_opal_proc_throt_reason;
// This table contains tunable parameter information that can be exposed to
@@ -103,10 +99,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};
-uint16_t G_allow_trace_flags = 0x0000;
-uint32_t G_internal_flags = 0x00000000;
-extern uint64_t G_inject_dimm;
-
ERRL_RC cmdh_poll_v20 (cmdh_fsp_rsp_t * i_rsp_ptr);
@@ -1021,899 +1013,6 @@ errlHndl_t cmdh_clear_elog (const cmdh_fsp_cmd_t * i_cmd_ptr,
// Function Specification
//
-// Name: cmdh_dbug_get_trace
-//
-// Description: Process get trace command
-//
-// End Function Specification
-void cmdh_dbug_get_trace (const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr)
-{
- UINT l_rc = 0;
- UINT l_trace_buffer_size = CMDH_FSP_RSP_SIZE-CMDH_DBUG_FSP_RESP_LEN-8; // tmgt reserved 8 bytes
- UINT16 l_trace_size = 0;
- cmdh_dbug_get_trace_query_t *l_get_trace_query_ptr = (cmdh_dbug_get_trace_query_t*) i_cmd_ptr;
- cmdh_dbug_get_trace_resp_t *l_get_trace_resp_ptr = (cmdh_dbug_get_trace_resp_t*) o_rsp_ptr;
-
- if (memcmp((char *)l_get_trace_query_ptr->comp, "GP", 2) == 0)
- {
- // Return a GPE0/GPE1 trace buffer
- if (l_get_trace_query_ptr->comp[2] == '0')
- {
- if (G_shared_gpe_data.gpe0_tb_ptr != 0)
- {
- l_trace_size = G_shared_gpe_data.gpe0_tb_sz;
- memcpy(l_get_trace_resp_ptr->data, (uint8_t*)G_shared_gpe_data.gpe0_tb_ptr, (size_t)l_trace_size);
- }
- }
- else if (l_get_trace_query_ptr->comp[2] == '1')
- {
- if (G_shared_gpe_data.gpe0_tb_ptr != 0)
- {
- l_trace_size = G_shared_gpe_data.gpe1_tb_sz;
- memcpy(l_get_trace_resp_ptr->data, (uint8_t*)G_shared_gpe_data.gpe1_tb_ptr, (size_t)l_trace_size);
- }
- }
- else l_rc = 255;
- }
- else
- {
- // Return a 405 trace buffer
- const trace_descriptor_array_t* l_trace_ptr = TRAC_get_td((char *)l_get_trace_query_ptr->comp);
- l_rc = TRAC_get_buffer_partial(l_trace_ptr, l_get_trace_resp_ptr->data,&l_trace_buffer_size);
- l_trace_size = l_trace_buffer_size;
- }
- if(l_rc==0)
- {
- G_rsp_status = ERRL_RC_SUCCESS;
- o_rsp_ptr->data_length[0] = CONVERT_UINT16_UINT8_HIGH(l_trace_size);
- o_rsp_ptr->data_length[1] = CONVERT_UINT16_UINT8_LOW(l_trace_size);
- }
- else
- {
- G_rsp_status = ERRL_RC_INTERNAL_FAIL;
- o_rsp_ptr->data_length[0] = 0;
- o_rsp_ptr->data_length[1] = 0;
- }
-}
-
-// Function Specification
-//
-// Name: cmdh_dbug_get_ame_sensor
-//
-// Description: Process get sensor data command
-//
-// End Function Specification
-void cmdh_dbug_get_ame_sensor (const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr)
-{
- int l_rc = ERRL_RC_SUCCESS;
- uint16_t l_type = 0;
- uint16_t l_location = 0;
- uint16_t i = 0;
- uint16_t l_resp_data_length = 0;
- uint16_t l_num_of_sensors = CMDH_DBUG_MAX_NUM_SENSORS;
- cmdh_dbug_get_sensor_query_t *l_cmd_ptr = (cmdh_dbug_get_sensor_query_t*) i_cmd_ptr;
- cmdh_dbug_get_sensor_resp_t *l_resp_ptr = (cmdh_dbug_get_sensor_resp_t*) o_rsp_ptr;
- sensorQueryList_t l_sensor_list[CMDH_DBUG_MAX_NUM_SENSORS];
- sensor_t *l_sensor_ptr = NULL;
- errlHndl_t l_err = NULL;
-
- do
- {
- // Do sanity check on the function inputs
- if ((NULL == i_cmd_ptr) || (NULL == o_rsp_ptr))
- {
- l_rc = ERRL_RC_INTERNAL_FAIL;
- break;
- }
-
- // Capture user inputs
- l_type = l_cmd_ptr->type;
- l_location = l_cmd_ptr->location;
- TRAC_INFO("dbug_get_ame_sensor: Type[0x%04x] Location[0x%04x]",
- l_type,
- l_location);
-
- // Initialize the arguments to query sensor list
- querySensorListArg_t l_qsl_arg = {
- 0, // i_startGsid - start with sensor 0x0000
- 0, // i_present
- l_type, // i_type - passed by the caller
- l_location, // i_loc - passed by the caller
- &l_num_of_sensors, // io_numOfSensors
- l_sensor_list, // o_sensors
- NULL // o_sensorInfoPtr
- };
-
- // Get the sensors
- l_err = querySensorList(&l_qsl_arg);
-
- if (NULL != l_err)
- {
- // Query failure, this should not happen
- TRAC_ERR("dbug_get_ame_sensor: Failed to query sensors. Error status is: 0x%x",
- l_err->iv_reasonCode);
-
- // Commit error log
- commitErrl(&l_err);
- l_rc = ERRL_RC_INTERNAL_FAIL;
- break;
- }
- else
- {
- TRAC_INFO("dbug_get_ame_sensor: Numbers of sensors found[%u]",
- l_num_of_sensors);
-
- if (l_num_of_sensors > CMDH_DBUG_MAX_NUM_SENSORS)
- {
- // Got too many sensors back, need to truncate the list
- TRAC_INFO("dbug_get_ame_sensor: Got too many sensors back[%u]. Truncating number of sensors to %u",
- l_num_of_sensors,
- CMDH_DBUG_MAX_NUM_SENSORS);
-
- l_num_of_sensors = CMDH_DBUG_MAX_NUM_SENSORS;
- }
-
- // Populate the response data packet
- l_resp_ptr->num_sensors = l_num_of_sensors;
- for (i=0; i<l_num_of_sensors; i++)
- {
- l_resp_ptr->sensor[i].gsid = l_sensor_list[i].gsid;
- l_resp_ptr->sensor[i].sample = l_sensor_list[i].sample;
- strcpy(l_resp_ptr->sensor[i].name, l_sensor_list[i].name);
-
- // Capture the min and max value for this sensor
- l_sensor_ptr = getSensorByGsid(l_sensor_list[i].gsid);
- if (l_sensor_ptr == NULL)
- {
- TRAC_INFO("dbug_get_ame_sensor: Didn't find sensor with gsid[0x%.4X]. Min/Max values won't be accurate.",
- l_sensor_list[i].gsid);
-
- // Didn't find this sensor, just continue
- continue;
- }
- l_resp_ptr->sensor[i].sample_min = l_sensor_ptr->sample_min;
- l_resp_ptr->sensor[i].sample_max = l_sensor_ptr->sample_max;
- l_resp_ptr->sensor[i].ipmi_sid = l_sensor_ptr->ipmi_sid;
- }
- }
-
- }while(0);
-
- // Populate the response data header
- l_resp_data_length = sizeof(cmdh_dbug_get_sensor_resp_t) -
- CMDH_DBUG_FSP_RESP_LEN;
- G_rsp_status = l_rc;
- o_rsp_ptr->data_length[0] = ((uint8_t *)&l_resp_data_length)[0];
- o_rsp_ptr->data_length[1] = ((uint8_t *)&l_resp_data_length)[1];
-} // end cmdh_dbug_get_ame_sensor()
-
-
-// Function Specification
-//
-// Name: cmdh_dbug_peek
-//
-// Description: Process peek debug command
-//
-// End Function Specification
-void cmdh_dbug_peek (const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr)
-{
- cmdh_dbug_peek_t * l_cmd_ptr = (cmdh_dbug_peek_t*) i_cmd_ptr;
- uint32_t l_len = l_cmd_ptr->size;
- uint8_t l_type = l_cmd_ptr->type;
- uint32_t l_addr = l_cmd_ptr->oci_address;
-
-#if PPC405_MMU_SUPPORT
- static Ppc405MmuMap L_mmuMapHomer;
- static Ppc405MmuMap L_mmuMapCommon;
-#endif
-
- switch(l_type)
- {
- case 0x01: // OCI Direct Read
- // Make sure we don't overflow our response buffer
- l_len = (l_len > CMDH_FSP_RSP_DATA_SIZE ) ? CMDH_FSP_RSP_DATA_SIZE : l_len;
-
- // Read the data
- memcpy( (void *) &o_rsp_ptr->data[0],
- (void *) l_addr,
- (size_t) l_len );
- break;
-
- case 0x02: // DMA Read
- // Make sure we don't overflow our response buffer
- l_len = (l_len > CMDH_FSP_RSP_DATA_SIZE ) ? CMDH_FSP_RSP_DATA_SIZE : l_len;
-
- // didn't do anything, respond with zero bytes
- l_len = 0;
- break;
-
- case 0x03: // Invalidate Cache
- //dcache_invalidate( (void *) l_addr, l_len );
- l_len = 0;
- break;
-
- case 0x04: // Flush Cache
- dcache_flush( (void *) l_addr, l_len );
- l_len = 0;
- break;
-#if PPC405_MMU_SUPPORT
- case 0x05: // MMU Map Mainstore
- // Map mainstore to oci space so that we can peek at it
-
- // HOMER Image
- ppc405_mmu_map(HOMER_BASE_ADDRESS, // Mainstore address (BAR0, offset 0)
- HOMER_BASE_ADDRESS, // OCI address 0x0 (BAR0)
- HOMER_SPACE_SIZE, // Size
- 0, // TLB hi flags
- 0, // TLB lo flags
- &L_mmuMapHomer); // map pointer
-
- // COMMON Image = Communal OCC Memory Map On Node
- ppc405_mmu_map(COMMON_BASE_ADDRESS, // Mainstore address (BAR2, offset 0)
- COMMON_BASE_ADDRESS, // OCI address 0xA0000000
- COMMON_SPACE_SIZE, // Size
- 0, // TLB hi flags
- 0, // TLB lo flags
- &L_mmuMapCommon); // map pointer
- l_len = 0;
- break;
- case 0x06: // MMU UnMap Mainstore
- // HOMER Image
- ppc405_mmu_unmap(&L_mmuMapHomer);
-
- // COMMON Image = Communal OCC Memory Map On Node
- ppc405_mmu_unmap(&L_mmuMapCommon);
-
- l_len = 0;
- break;
-#endif
- default:
- // Didn't do anything, respond with zero bytes
- l_len = 0;
- break;
- }
-
- G_rsp_status = ERRL_RC_SUCCESS;
- o_rsp_ptr->data_length[0] = CONVERT_UINT16_UINT8_HIGH(l_len);
- o_rsp_ptr->data_length[1] = CONVERT_UINT16_UINT8_LOW(l_len);
-}
-
-
-// Function Specification
-//
-// Name: cmdh_dbug_get_apss_data
-//
-// Description: Process APSS data request
-//
-// End Function Specification
-void cmdh_dbug_get_apss_data (const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr)
-{
- uint8_t l_rc = ERRL_RC_SUCCESS;
- uint16_t i = 0;
- uint16_t l_resp_data_length = 0;
- cmdh_dbug_apss_data_resp_t *l_resp_ptr = (cmdh_dbug_apss_data_resp_t*) o_rsp_ptr;
-
- do
- {
- // Do sanity check on the function inputs
- if ((NULL == i_cmd_ptr) || (NULL == o_rsp_ptr))
- {
- l_rc = ERRL_RC_INTERNAL_FAIL;
- break;
- }
-
- //Get the data for each channel individually and write it to
- for (i = 0; i < MAX_APSS_ADC_CHANNELS; i++)
- {
- l_resp_ptr->ApssCh[i].gain = G_sysConfigData.apss_cal[i].gain;
- l_resp_ptr->ApssCh[i].offset = G_sysConfigData.apss_cal[i].offset;
- l_resp_ptr->ApssCh[i].raw = G_dcom_slv_inbox_rx.adc[i];
- l_resp_ptr->ApssCh[i].calculated = AMECSENSOR_PTR(PWRAPSSCH0 + i)->sample;
- l_resp_ptr->ApssCh[i].func = G_apss_ch_to_function[i];
- l_resp_ptr->ApssCh[i].ipmi_sid = AMECSENSOR_PTR(PWRAPSSCH0 + i)->ipmi_sid;
-
- TRAC_IMP("DBG__APSS Ch[%02d]: Raw[0x%04x], Offset[0x%08x], Gain[0x%08x],",
- i, l_resp_ptr->ApssCh[i].raw, l_resp_ptr->ApssCh[i].offset, l_resp_ptr->ApssCh[i].gain);
- TRAC_IMP(" Pwr[0x%04x], FuncID[0x%02x], IPMI_sensorID[0x%X]",
- l_resp_ptr->ApssCh[i].calculated, l_resp_ptr->ApssCh[i].func, l_resp_ptr->ApssCh[i].ipmi_sid);
- }
-
- }while(0);
-
- // Populate the response data header
- l_resp_data_length = sizeof(cmdh_dbug_apss_data_resp_t) - CMDH_DBUG_FSP_RESP_LEN;
- G_rsp_status = l_rc;
- o_rsp_ptr->data_length[0] = ((uint8_t *)&l_resp_data_length)[0];
- o_rsp_ptr->data_length[1] = ((uint8_t *)&l_resp_data_length)[1];
-}
-
-
-// Function Specification
-//
-// Name: cmdh_dbug_dump_ame_sensor
-//
-// Description: Returns all fields (static and dynamic) for one sensor
-//
-// End Function Specification
-void cmdh_dbug_dump_ame_sensor(const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr)
-{
- const cmdh_dbug_dump_ame_sensor_cmd_t * l_cmd_ptr = (cmdh_dbug_dump_ame_sensor_cmd_t*) i_cmd_ptr;
- cmdh_dbug_dump_ame_sensor_rsp_t * l_rsp_ptr = (cmdh_dbug_dump_ame_sensor_rsp_t*) o_rsp_ptr;
- uint8_t l_rc = ERRL_RC_SUCCESS; // Assume succeeds
- uint16_t l_resp_data_length = 0;
-
- // Make sure command and response pointer are valid
- if ((l_cmd_ptr == NULL) || (l_rsp_ptr == NULL))
- {
- l_rc = ERRL_RC_INTERNAL_FAIL;
- }
- else
- {
- // Make sure sensor gsid is valid
- uint16_t l_gsid = l_cmd_ptr->gsid;
- if (l_gsid >= G_amec_sensor_count)
- {
- l_rc = ERRL_RC_INVALID_DATA;
- }
- else
- {
- // Copy static sensor fields into response struct
- memcpy(&(l_rsp_ptr->sensor_info), &(G_sensor_info[l_gsid]), sizeof(sensor_info_t));
- l_resp_data_length += sizeof(sensor_info_t);
-
- // Copy dynamic sensor fields into response struct
- memcpy(&(l_rsp_ptr->sensor), G_amec_sensor_list[l_gsid], sizeof(sensor_t));
- l_resp_data_length += sizeof(sensor_t);
- }
- }
-
- // Populate the response data header
- if (l_rsp_ptr != NULL)
- {
- l_rsp_ptr->data_length[0] = CONVERT_UINT16_UINT8_HIGH(l_resp_data_length);
- l_rsp_ptr->data_length[1] = CONVERT_UINT16_UINT8_LOW(l_resp_data_length);
- }
- G_rsp_status = l_rc;
-}
-
-// Function Specification
-//
-// Name: cmdh_dbug_wof_control
-//
-// Description: Sets the specified bit or clears all of them of wof_disabled
-//
-// End Function Specification
-void cmdh_dbug_wof_control( const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr )
-{
- const cmdh_dbug_wof_control_cmd_t * l_cmd_ptr = (cmdh_dbug_wof_control_cmd_t*) i_cmd_ptr;
- cmdh_dbug_wof_control_rsp_t * l_rsp_ptr = (cmdh_dbug_wof_control_rsp_t*) o_rsp_ptr;
- uint8_t l_rc = ERRL_RC_SUCCESS;
- uint16_t l_resp_data_length = sizeof(g_amec->wof.wof_disabled);
-
- // Do sanity check on the function inputs
- if ((NULL == l_cmd_ptr) || (NULL == l_rsp_ptr))
- {
- l_rc = ERRL_RC_INTERNAL_FAIL;
- }
- else
- {
- // Process action
- if( l_cmd_ptr->action == SET )
- {
- g_amec->wof.wof_disabled |= l_cmd_ptr->wof_rc;
- }
- else if( l_cmd_ptr->action == CLEAR )
- {
- if(g_amec->wof.wof_disabled & WOF_RC_NO_WOF_HEADER_MASK)
- {
- TRAC_INFO("DEBUG - No WOF header present in memory."
- " Cannot enable WOF!");
- g_amec->wof.wof_disabled = WOF_RC_NO_WOF_HEADER_MASK;
- }
- else
- {
- g_amec->wof.wof_disabled = 0x00000000;
- }
- }
- // Fill in response data
- l_rsp_ptr->wof_disabled = g_amec->wof.wof_disabled;
- }
-
- TRAC_INFO("DEBUG - wof_disabled: 0x%08x", g_amec->wof.wof_disabled);
-
- // Fill in response data length
- if( l_rsp_ptr != NULL )
- {
- l_rsp_ptr->data_length[0] = CONVERT_UINT16_UINT8_HIGH(l_resp_data_length);
- l_rsp_ptr->data_length[1] = CONVERT_UINT16_UINT8_LOW(l_resp_data_length);
- }
- G_rsp_status = l_rc;
- return;
-}
-
-// Function Specification
-//
-// Name: cmdh_dbug_dump_wof_data
-//
-// Description: Dumps out the contents of g_amec_sys.wof
-//
-// End Function Specification
-void cmdh_dbug_dump_wof_data( const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr)
-{
- uint16_t l_datalen = sizeof(amec_wof_t);
-
- // Fill in response data
- memcpy((void*)&(o_rsp_ptr->data[0]),
- (void*)&(g_amec->wof),
- l_datalen);
-
- // Fill in response data length
- o_rsp_ptr->data_length[0] = CONVERT_UINT16_UINT8_HIGH(l_datalen);
- o_rsp_ptr->data_length[1] = CONVERT_UINT16_UINT8_LOW(l_datalen);
- G_rsp_status = ERRL_RC_SUCCESS;
- return;
-}
-
-void cmdh_dbug_force_wof_reset( const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr)
-{
- TRAC_INFO("DEBUG - Forcing WOF Reset");
- set_clear_wof_disabled( SET,
- WOF_RC_RESET_DEBUG_CMD,
- ERC_WOF_RESET_DEBUG_CMD );
- G_rsp_status = ERRL_RC_SUCCESS;
-}
-
-
-
-// Function Specification
-//
-// Name: cmdh_dbug_allow_trace
-//
-// Description: Set/Clear flags that allow/prevent certain traces to appear
-//
-// End Function Specification
-void cmdh_dbug_allow_trace( const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr )
-{
- const cmdh_dbug_allow_trace_cmd_t * l_cmd_ptr =
- (cmdh_dbug_allow_trace_cmd_t*)i_cmd_ptr;
- cmdh_dbug_allow_trace_rsp_t * l_rsp_ptr =
- (cmdh_dbug_allow_trace_rsp_t*)o_rsp_ptr;
-
- uint8_t l_rc = ERRL_RC_SUCCESS;
- uint16_t l_resp_data_length = sizeof(G_allow_trace_flags);
-
- if((NULL == l_cmd_ptr) || (NULL == l_rsp_ptr))
- {
- l_rc = ERRL_RC_INTERNAL_FAIL;
- }
- else
- {
- if( l_cmd_ptr->action == SET )
- {
- G_allow_trace_flags |= l_cmd_ptr->trace_flags;
- }
- else
- {
- G_allow_trace_flags = 0x0000;
- }
- }
-
- TRAC_INFO("DEBUG - allow_trace FLAGS 0x%04x Action: %d",
- G_allow_trace_flags,
- l_cmd_ptr->action);
-
- // fill in response data length
- if( l_rsp_ptr != NULL )
- {
- l_rsp_ptr->data_length[0] = CONVERT_UINT16_UINT8_HIGH(l_resp_data_length);
- l_rsp_ptr->data_length[1] = CONVERT_UINT16_UINT8_LOW(l_resp_data_length);
- }
- G_rsp_status = l_rc;
- return;
-}
-
-
-
-// Function Specification
-//
-// Name: cmdh_dbug_dimm_inject
-//
-// Description: Set/Clear internal debug flags
-//
-// End Function Specification
-void cmdh_dbug_dimm_inject( const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr )
-{
- const cmdh_dbug_dimm_inject_cmd_t * l_cmd_ptr =
- (cmdh_dbug_dimm_inject_cmd_t*)i_cmd_ptr;
- cmdh_dbug_dimm_inject_rsp_t * l_rsp_ptr =
- (cmdh_dbug_dimm_inject_rsp_t*)o_rsp_ptr;
-
- uint8_t l_rc = ERRL_RC_SUCCESS;
- // confirm inject data length (ignore sub_command byte)
- const uint16_t inject_length = CMDH_DATALEN_FIELD_UINT16(l_cmd_ptr) - 1;
-
- if((NULL == l_cmd_ptr) || (NULL == l_rsp_ptr))
- {
- l_rc = ERRL_RC_INTERNAL_FAIL;
- }
- // Command Length Check
- else if ((inject_length != 0) && (inject_length != MAX_NUM_CENTAURS))
- {
- TRAC_ERR("cmdh_dbug_dimm_inject: Invalid inject data length %u (expected %u)",
- inject_length, MAX_NUM_CENTAURS);
- l_rc = ERRL_RC_INVALID_CMD_LEN;
- }
- else
- {
- if (inject_length == MAX_NUM_CENTAURS)
- {
- TRAC_INFO("cmdh_dbug_dimm_inject: updating DIMM inject mask from 0x%08X.%08X to 0x%08X.%08X",
- G_inject_dimm >> 32, G_inject_dimm & 0xFFFFFFFF,
- l_cmd_ptr->inject_mask >> 32, l_cmd_ptr->inject_mask & 0xFFFFFFFF);
- G_inject_dimm = l_cmd_ptr->inject_mask;
-
- unsigned int l_cent;
- for(l_cent = 0; l_cent < MAX_NUM_CENTAURS; l_cent++)
- {
- uint8_t dimms = (G_inject_dimm >> (l_cent*8)) & 0xFF;
- if (dimms != 0)
- {
- unsigned int k;
- for(k=0; k < NUM_DIMMS_PER_CENTAUR; k++)
- {
- if (dimms & (1 << k))
- {
- if(!CENTAUR_SENSOR_ENABLED(l_cent, k))
- {
- TRAC_ERR("cmdh_dbug_dimm_inject: centaur%d DIMM%d is not enabled", l_cent, k);
- }
- }
- }
- }
- }
- }
- // else just return current values
-
- // Return the current DIMM inject mask
- if( l_rsp_ptr != NULL )
- {
- l_rsp_ptr->data_length[0] = 0x00;
- l_rsp_ptr->data_length[1] = MAX_NUM_CENTAURS;
- memcpy(&o_rsp_ptr->data[0], &G_inject_dimm, MAX_NUM_CENTAURS);
- }
- }
- G_rsp_status = l_rc;
- return;
-}
-
-
-
-// Function Specification
-//
-// Name: cmdh_dbug_internal_flags
-//
-// Description: Set/Clear internal debug flags
-//
-// End Function Specification
-void cmdh_dbug_internal_flags( const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr )
-{
- const cmdh_dbug_internal_flags_cmd_t * l_cmd_ptr =
- (cmdh_dbug_internal_flags_cmd_t*)i_cmd_ptr;
- cmdh_dbug_internal_flags_rsp_t * l_rsp_ptr =
- (cmdh_dbug_internal_flags_rsp_t*)o_rsp_ptr;
-
- uint8_t l_rc = ERRL_RC_SUCCESS;
- const unsigned int flag_size = sizeof(G_internal_flags);
- // data length (ignore sub_command byte)
- const uint16_t data_length = CMDH_DATALEN_FIELD_UINT16(l_cmd_ptr) - 1;
-
- if ((NULL == l_cmd_ptr) || (NULL == l_rsp_ptr))
- {
- l_rc = ERRL_RC_INTERNAL_FAIL;
- }
- else if ((data_length != 0) && (data_length != flag_size))
- {
- TRAC_ERR("cmdh_dbug_dimm_inject: Invalid internal flags length %u (expected %u)",
- data_length, flag_size);
- l_rc = ERRL_RC_INVALID_CMD_LEN;
- }
- else
- {
- if (data_length == flag_size)
- {
- TRAC_INFO("DEBUG - updating internal flags from 0x%08X to 0x%08X",
- G_internal_flags, l_cmd_ptr->flags);
-
- G_internal_flags = l_cmd_ptr->flags;
- }
-
- // always respond with the current flag value
- if( l_rsp_ptr != NULL )
- {
- l_rsp_ptr->data_length[0] = 0x00;
- l_rsp_ptr->data_length[1] = flag_size;
- // Fill in response data
- memcpy(&o_rsp_ptr->data[0], &G_internal_flags, flag_size);
- }
- }
-
- G_rsp_status = l_rc;
- return;
-}
-
-
-
-// Function Specification
-//
-// Name: cmdh_dbug_clear_ame_sensor
-//
-// Description: Clears minimum and maximum fields in one sensor.
-// Returns all dynamic sensor fields after the clear.
-//
-// End Function Specification
-void cmdh_dbug_clear_ame_sensor(const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr)
-{
- const cmdh_dbug_clear_ame_sensor_cmd_t * l_cmd_ptr = (cmdh_dbug_clear_ame_sensor_cmd_t*) i_cmd_ptr;
- cmdh_dbug_clear_ame_sensor_rsp_t * l_rsp_ptr = (cmdh_dbug_clear_ame_sensor_rsp_t*) o_rsp_ptr;
- uint8_t l_rc = ERRL_RC_SUCCESS; // Assume succeeds
- uint16_t l_resp_data_length = 0;
-
- // Make sure command and response pointer are valid
- if ((l_cmd_ptr == NULL) || (l_rsp_ptr == NULL))
- {
- l_rc = ERRL_RC_INTERNAL_FAIL;
- }
- else
- {
- // Make sure sensor gsid is valid
- uint16_t l_gsid = l_cmd_ptr->gsid;
- if (l_gsid >= G_amec_sensor_count)
- {
- l_rc = ERRL_RC_INVALID_DATA;
- }
- else
- {
- // Clear specified min/max fields in sensor
- AMEC_SENSOR_CLEAR_TYPE l_clear_type = (AMEC_SENSOR_CLEAR_TYPE) l_cmd_ptr->clear_type;
- sensor_clear_minmax(G_amec_sensor_list[l_gsid], l_clear_type);
-
- // Copy dynamic sensor fields (after clear) into response struct
- memcpy(&(l_rsp_ptr->sensor), G_amec_sensor_list[l_gsid], sizeof(sensor_t));
- l_resp_data_length += sizeof(sensor_t);
- }
- }
-
- // Populate the response data header
- if (l_rsp_ptr != NULL)
- {
- l_rsp_ptr->data_length[0] = CONVERT_UINT16_UINT8_HIGH(l_resp_data_length);
- l_rsp_ptr->data_length[1] = CONVERT_UINT16_UINT8_LOW(l_resp_data_length);
- }
- G_rsp_status = l_rc;
-}
-
-void cmdh_dump_gpu_timings(void)
-{
- extern gpuTimingTable_t G_gpu_tick_times;
- int i = 0;
-
- for( ; i < MAX_NUM_GPU_PER_DOMAIN; i++)
- {
- TRAC_INFO("=======================================GPU%d===================================================", i);
- TRAC_INFO("| Max Avg 1s count 100ms count <100ms count|");
- TRAC_INFO("| Core Temperatures %-5d msecs %-5d msecs %-5d %-5d %-5d",
- G_gpu_tick_times.coretemp[i].max,
- G_gpu_tick_times.coretemp[i].avg,
- G_gpu_tick_times.coretemp[i].count_1s,
- G_gpu_tick_times.coretemp[i].count_100ms,
- G_gpu_tick_times.coretemp[i].count_lt100ms);
- TRAC_INFO("| Mem Temperatures %-5d msecs %-5d msecs %-5d %-5d %-5d",
- G_gpu_tick_times.memtemp[i].max,
- G_gpu_tick_times.memtemp[i].avg,
- G_gpu_tick_times.memtemp[i].count_1s,
- G_gpu_tick_times.memtemp[i].count_100ms,
- G_gpu_tick_times.memtemp[i].count_lt100ms);
- TRAC_INFO("| Check Driver Loaded %-5d msecs %-5d msecs %-5d %-5d %-5d",
- G_gpu_tick_times.checkdriver[i].max,
- G_gpu_tick_times.checkdriver[i].avg,
- G_gpu_tick_times.checkdriver[i].count_1s,
- G_gpu_tick_times.checkdriver[i].count_100ms,
- G_gpu_tick_times.checkdriver[i].count_lt100ms);
- TRAC_INFO("| Mem Capabilities %-5d msecs %-5d msecs %-5d %-5d %-5d",
- G_gpu_tick_times.capabilities[i].max,
- G_gpu_tick_times.capabilities[i].avg,
- G_gpu_tick_times.capabilities[i].count_1s,
- G_gpu_tick_times.capabilities[i].count_100ms,
- G_gpu_tick_times.capabilities[i].count_lt100ms);
- TRAC_INFO("| Read Power Policy %-5d msecs %-5d msecs %-5d %-5d %-5d",
- G_gpu_tick_times.getpcap[i].max,
- G_gpu_tick_times.getpcap[i].avg,
- G_gpu_tick_times.getpcap[i].count_1s,
- G_gpu_tick_times.getpcap[i].count_100ms,
- G_gpu_tick_times.getpcap[i].count_lt100ms);
- TRAC_INFO("| Set Power Cap %-5d msecs %-5d msecs %-5d %-5d %-5d",
- G_gpu_tick_times.setpcap[i].max,
- G_gpu_tick_times.setpcap[i].avg,
- G_gpu_tick_times.setpcap[i].count_1s,
- G_gpu_tick_times.setpcap[i].count_100ms,
- G_gpu_tick_times.setpcap[i].count_lt100ms);
- TRAC_INFO("==============================================================================================", i);
- }
-}
-
-// Function Specification
-//
-// Name: dbug_parse_cmd
-//
-// Description: Process debug commands
-//
-// End Function Specification
-void cmdh_dbug_cmd (const cmdh_fsp_cmd_t * i_cmd_ptr,
- cmdh_fsp_rsp_t * o_rsp_ptr)
-{
- uint8_t l_rc = 0;
- uint8_t l_sub_cmd = 0;
- errl_generic_resp_t * l_err_rsp_ptr = (errl_generic_resp_t *) o_rsp_ptr;
- errlHndl_t l_errl = NULL;
- cmdhDbugCmdArg_t l_cmdh_dbug_args;
-
- // Sub Command for debug is always first byte of data
- l_sub_cmd = i_cmd_ptr->data[0];
-
- /// Tracing based on Debug Sub-Command
- switch (l_sub_cmd)
- {
- // ----------------------------------------------------
- // NOTE: This for for TRACING only, any actual command
- // handling goes in the switch statement below.
- // ----------------------------------------------------
- case DBUG_GET_TRACE:
- case DBUG_GET_AME_SENSOR:
- // Don't trace that we got these debug commands, they happen too
- // often, or are not destructive when they do occur.
- break;
-
- default:
- // Trace the rest of the debug commands.
- TRAC_INFO("Debug Command: Sub:0x%02x\n", l_sub_cmd);
-
- break;
- }
-
- // Act on Debug Sub-Command
- switch ( l_sub_cmd )
- {
- case DBUG_DUMP_GPU_TIMINGS:
- cmdh_dump_gpu_timings();
- break;
-
- case DBUG_GET_AME_SENSOR:
- cmdh_dbug_get_ame_sensor(i_cmd_ptr, o_rsp_ptr);
- break;
-
- case DBUG_FSP_ATTN:
- break;
-
- case DBUG_GET_TRACE:
- // Get trace buffer SRAM address
- cmdh_dbug_get_trace(i_cmd_ptr, o_rsp_ptr);
- break;
-
- case DBUG_CLEAR_TRACE:
- // Call clear trace function
- TRAC_reset_buf();
- G_rsp_status = ERRL_RC_SUCCESS;
- break;
-
- case DBUG_PEEK:
- cmdh_dbug_peek(i_cmd_ptr, o_rsp_ptr);
- break;
-
- case DBUG_FLUSH_DCACHE:
- dcache_flush_all();
- break;
-
- case DBUG_GEN_CHOM_LOG:
- chom_force_gen_log();
- break;
-
- case DBUG_WOF_CONTROL:
- cmdh_dbug_wof_control(i_cmd_ptr, o_rsp_ptr);
- break;
-
- case DBUG_DUMP_WOF_DATA:
- cmdh_dbug_dump_wof_data(i_cmd_ptr, o_rsp_ptr);
- break;
-
- case DBUG_FORCE_WOF_RESET:
- cmdh_dbug_force_wof_reset(i_cmd_ptr, o_rsp_ptr);
- break;
-
- case DBUG_ALLOW_TRACE:
- cmdh_dbug_allow_trace( i_cmd_ptr, o_rsp_ptr );
- break;
-
- case DBUG_DIMM_INJECT:
- cmdh_dbug_dimm_inject( i_cmd_ptr, o_rsp_ptr );
- break;
-
- case DBUG_INTERNAL_FLAGS:
- cmdh_dbug_internal_flags( i_cmd_ptr, o_rsp_ptr );
- break;
-
- case DBUG_POKE:
- case DBUG_SET_PEXE_EVENT:
- case DBUG_DUMP_THEMAL:
- case DBUG_DUMP_POWER:
- case DBUG_DUMP_RAW_AD:
- case DBUG_MEM_PWR_CTL:
- case DBUG_PERFCOUNT:
- case DBUG_TEST_INTF:
- case DBUG_INJECT_ERRL:
- case DBUG_GPIO_READ:
- case DBUG_CALCULATE_MAX_DIFF:
- case DBUG_FORCE_ELOG:
- case DBUG_SWITCH_PHASE:
- case DBUG_INJECT_ERR:
- case DBUG_VERIFY_V_F:
- case DBUG_DUMP_PPM_DATA:
- case DBUG_CENTAUR_SENSOR_CACHE:
- case DBUG_DUMP_PROC_DATA:
-
- l_cmdh_dbug_args.i_cmd_ptr = (cmdh_fsp_cmd_t *) i_cmd_ptr;
- l_cmdh_dbug_args.io_rsp_ptr = o_rsp_ptr;
-
- l_errl = cmdhDbugCmd(&l_cmdh_dbug_args);
-
- if(NULL != l_errl)
- {
- TRAC_ERR("Debug command returned error: RC: 0x%x", l_errl->iv_reasonCode);
- commitErrl( &l_errl );
- }
- break;
-
- case DBUG_DUMP_APSS_DATA:
- cmdh_dbug_get_apss_data(i_cmd_ptr, o_rsp_ptr);
- break;
-
- case DBUG_DUMP_AME_SENSOR:
- cmdh_dbug_dump_ame_sensor(i_cmd_ptr, o_rsp_ptr);
- break;
-
- case DBUG_CLEAR_AME_SENSOR:
- cmdh_dbug_clear_ame_sensor(i_cmd_ptr, o_rsp_ptr);
- break;
-
- default:
- l_rc = ERRL_RC_INVALID_DATA; //should NEVER get here...
- break;
- } //end switch
-
- // We don't do errors in DBUG, as a safety check make sure the response is valid.
- if ( l_rc )
- {
- G_rsp_status = l_rc;
- l_err_rsp_ptr->data_length[0] = 0;
- l_err_rsp_ptr->data_length[1] = 1;
- }
-
- return;
-}
-
-// Function Specification
-//
// Name: SMGR_base_setmodestate_cmdh
//
// Description: Process set mode and state command
OpenPOWER on IntegriCloud