diff options
author | Mike Jones <mjjones@us.ibm.com> | 2014-02-20 12:37:34 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-02-27 12:31:29 -0600 |
commit | d5505b55b4fc85d35b7c1f16d6811601295d4796 (patch) | |
tree | 5b8c4a2fda025218a0f6261212dbc2d680c9fcd8 /src | |
parent | 490b05ed93567d09c3ba820628465157406b2892 (diff) | |
download | talos-hostboot-d5505b55b4fc85d35b7c1f16d6811601295d4796.tar.gz talos-hostboot-d5505b55b4fc85d35b7c1f16d6811601295d4796.zip |
Do not send zero length VDDR message to HWSV
Change-Id: I48bc00a165e1dc8021c8bc2150a7e42107699660
CQ: SW245217
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9055
Tested-by: Jenkins Server
Reviewed-by: William H. Schwartz <whs@us.ibm.com>
Reviewed-by: Brian H. Horton <brianh@linux.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/usr/hwpf/hwp/dram_training/hbVddrMsg.C | 90 | ||||
-rw-r--r-- | src/usr/mbox/mailboxsp.C | 3 |
2 files changed, 45 insertions, 48 deletions
diff --git a/src/usr/hwpf/hwp/dram_training/hbVddrMsg.C b/src/usr/hwpf/hwp/dram_training/hbVddrMsg.C index b2011e206..36f0eae1b 100644 --- a/src/usr/hwpf/hwp/dram_training/hbVddrMsg.C +++ b/src/usr/hwpf/hwp/dram_training/hbVddrMsg.C @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -151,10 +151,10 @@ errlHndl_t HBVddrMsg::sendMsg(uint32_t i_msgType) const TRACFCOMP(g_trac_volt, ENTER_MRK "hbVddrMsg::sendMsg msg_type =0x%08X",i_msgType); - do{ - + do + { RequestContainer l_request; - + if ( (i_msgType == HB_VDDR_ENABLE) || (i_msgType == HB_VDDR_DISABLE) ) { createVddrData(l_request); @@ -163,7 +163,6 @@ errlHndl_t HBVddrMsg::sendMsg(uint32_t i_msgType) const { TRACFCOMP(g_trac_volt, ERR_MRK "hbVddrMsg::send msg with non-" "valid msg type%08X",i_msgType); - //generate errorLog; /*@ * @errortype * @moduleid fapi::MOD_VDDR_SEND_MSG @@ -179,63 +178,60 @@ errlHndl_t HBVddrMsg::sendMsg(uint32_t i_msgType) const fapi::RC_INCORRECT_MSG_TYPE, i_msgType); break; } - - size_t l_dataCount = l_request.size(); - uint32_t l_msgSize = l_dataCount*sizeof(hwsvPowrVmemRequest_t); + size_t l_dataCount = l_request.size(); - //create the hb send msg. the memory should be taken care of by mbox - msg_t* l_msg =NULL; - l_msg = msg_allocate(); + // Only send a message if there is data to send + if (l_dataCount) + { + uint32_t l_msgSize = l_dataCount*sizeof(hwsvPowrVmemRequest_t); - l_msg->type = i_msgType; + // Create the message to send to HWSV + msg_t* l_msg = msg_allocate(); + l_msg->type = i_msgType; + l_msg->data[0] = 0; + l_msg->data[1] = l_msgSize; + TRACFCOMP(g_trac_volt, INFO_MRK "hbVddrMsg::l_dataCount=%d,l_msgSize=%d", + l_dataCount, l_msgSize); + void* l_data = malloc(l_msgSize); - l_msg->data[0]=0; - l_msg->data[1] =l_msgSize; - - TRACFCOMP(g_trac_volt, INFO_MRK "hbVddrMsg::l_dataCount=%d,l_msgSize=%d",l_dataCount,l_msgSize); - void* l_data=NULL; - l_data = malloc(l_msgSize); - - hwsvPowrVmemRequest_t* l_ptr = reinterpret_cast<hwsvPowrVmemRequest_t*>(l_data); - - for (size_t j =0; j<l_dataCount; ++j) - { - l_ptr->VmemId=l_request.at(j).VmemId; - l_ptr->Voltage=l_request.at(j).Voltage; + hwsvPowrVmemRequest_t* l_ptr = + reinterpret_cast<hwsvPowrVmemRequest_t*>(l_data); - TRACFCOMP(g_trac_volt, ENTER_MRK "hbVddrMsg::sendMsg " - "l_ptr->VmemId=0x%04X,l_ptr->Voltage=%d, j=%d", - l_ptr->VmemId, l_ptr->Voltage,j); + for (size_t j =0; j<l_dataCount; ++j) + { + l_ptr->VmemId=l_request.at(j).VmemId; + l_ptr->Voltage=l_request.at(j).Voltage; - l_ptr++; - } + TRACFCOMP(g_trac_volt, ENTER_MRK "hbVddrMsg::sendMsg " + "VmemId=0x%04X, Voltage=%d, index=%d", + l_ptr->VmemId, l_ptr->Voltage,j); + l_ptr++; + } - l_msg->extra_data = l_data; + l_msg->extra_data = l_data; - TRACFBIN(g_trac_volt, "l_data", l_data, l_msgSize); - l_err = MBOX::sendrecv( MBOX::FSP_VDDR_MSGQ, l_msg ); - if (l_err) - { - TRACFCOMP(g_trac_volt, ERR_MRK "Failed sending VDDR message to FSP"); - - if (l_msg->extra_data!=NULL) + TRACFBIN(g_trac_volt, "l_data", l_data, l_msgSize); + l_err = MBOX::sendrecv( MBOX::FSP_VDDR_MSGQ, l_msg ); + if (l_err) { - free(l_msg->extra_data); + TRACFCOMP(g_trac_volt, ERR_MRK "Failed sending VDDR message to FSP"); } - if (l_msg) + else { - msg_free(l_msg); + l_err=processMsg(l_msg); } - } - else - { - l_err=processMsg(l_msg); - } + // If sendrecv returns error then it may not have freed the + // extra_data, else need to free the response message extra_data + free(l_msg->extra_data); + l_msg->extra_data = NULL; - }while(0); + msg_free(l_msg); + l_msg = NULL; + } + } while(0); TRACFCOMP(g_trac_volt, EXIT_MRK "hbEnableVddr::sendMsg"); return l_err; diff --git a/src/usr/mbox/mailboxsp.C b/src/usr/mbox/mailboxsp.C index 3fbdf1ae1..59b5dff04 100644 --- a/src/usr/mbox/mailboxsp.C +++ b/src/usr/mbox/mailboxsp.C @@ -564,6 +564,7 @@ void MailboxSp::send_msg(mbox_msg_t * i_msg) reinterpret_cast<void*>(iv_dmaBuffer.toPhysAddr(dma_buffer)); free(payload->extra_data); + payload->extra_data = NULL; } else // DMA buffer request from FSP { @@ -621,7 +622,7 @@ void MailboxSp::send_msg(mbox_msg_t * i_msg) ERRORLOG::ERRL_SEV_INFORMATIONAL, MBOX::MOD_MBOXSRV_SENDMSG, MBOX::RC_INVALID_DMA_LENGTH, // reason Code - payload->data[1], // DMA data len + dma_size, // DMA data len iv_msg_to_send.msg_queue_id, // MSG queueid true //Add HB Software Callout ); |