diff options
author | Bill Hoffa <wghoffa@us.ibm.com> | 2017-06-09 15:54:47 -0500 |
---|---|---|
committer | William A. Bryan <wilbryan@us.ibm.com> | 2017-07-21 15:25:31 -0400 |
commit | c4b8c5c8953c984dc4908959b002be836a885dee (patch) | |
tree | 7d31332d5d0f7356da069f201e334d20a4d46e54 /src/occ_405/firdata/pnor_mboxdd.c | |
parent | 237557e36673c70772d163913581cb9dfd83c96d (diff) | |
download | talos-occ-c4b8c5c8953c984dc4908959b002be836a885dee.tar.gz talos-occ-c4b8c5c8953c984dc4908959b002be836a885dee.zip |
rt_xstop_analysis: initial commit to get pnor acceses working
Change-Id: I1d0e07bfbbc206b9ade87befdb0d86c5bcc4385a
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/43045
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Reviewed-by: ILYA SMIRNOV <ismirno@us.ibm.com>
Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: William A. Bryan <wilbryan@us.ibm.com>
Diffstat (limited to 'src/occ_405/firdata/pnor_mboxdd.c')
-rw-r--r-- | src/occ_405/firdata/pnor_mboxdd.c | 129 |
1 files changed, 65 insertions, 64 deletions
diff --git a/src/occ_405/firdata/pnor_mboxdd.c b/src/occ_405/firdata/pnor_mboxdd.c index 5253ccf..463e950 100644 --- a/src/occ_405/firdata/pnor_mboxdd.c +++ b/src/occ_405/firdata/pnor_mboxdd.c @@ -36,61 +36,79 @@ #include <norflash.h> #include <pnor_mboxdd.h> #include <lpc.h> -extern int TRACE_PNOR_MBOX; -int TRACE_PNOR_MBOX = 0; errorHndl_t hwInit(pnorMbox_t* i_pnorMbox) { errorHndl_t l_err = NO_ERROR; - - //Current window starts closed - i_pnorMbox->iv_curWindowOpen = false; - i_pnorMbox->iv_mbox.iv_mboxMsgSeq = 1; - initializeMbox(); - - //Send message to BMC Mbox to get MBOX info - // This message gets the MBOX protocol version - mboxMessage_t l_getInfoMsg; - l_getInfoMsg.iv_cmd = MBOX_C_GET_MBOX_INFO; - put8(&l_getInfoMsg, 0, 2); - doMessage(&i_pnorMbox->iv_mbox, &l_getInfoMsg); - i_pnorMbox->iv_protocolVersion = get8(&l_getInfoMsg, 0); - - if (i_pnorMbox->iv_protocolVersion == 1) - { - i_pnorMbox->iv_blockShift = 12; - i_pnorMbox->iv_readWindowSize = get16(&l_getInfoMsg, 1) - << i_pnorMbox->iv_blockShift; - i_pnorMbox->iv_writeWindowSize = get16(&l_getInfoMsg, 3) - << i_pnorMbox->iv_blockShift; - } - else + uint8_t* l_data; + int i; + do { - i_pnorMbox->iv_blockShift = get8(&l_getInfoMsg, 5); - } + //Current window starts closed + i_pnorMbox->iv_curWindowOpen = false; + i_pnorMbox->iv_mbox.iv_mboxMsgSeq = 1; + l_err = initializeMbox(); + if (l_err) + { + TRAC_ERR("initializeMbox failed rc:0x%x", l_err); + break; + } - TRAC_INFO("mboxPnor: protocolVersion=%d blockShift=%d", - i_pnorMbox->iv_protocolVersion, - i_pnorMbox->iv_blockShift); + //Send message to BMC Mbox to get MBOX info + // This message gets the MBOX protocol version + mboxMessage_t l_getInfoMsg; + l_data = (uint8_t*)(&l_getInfoMsg); + for (i = 0; i < BMC_MBOX_DATA_REGS; i++) + { + l_data[i] = 0; + } - //Now get the size of the flash - mboxMessage_t l_getSizeMsg; - l_getSizeMsg.iv_cmd = MBOX_C_GET_FLASH_INFO; - doMessage(&i_pnorMbox->iv_mbox, &l_getSizeMsg); + l_getInfoMsg.iv_cmd = MBOX_C_GET_MBOX_INFO; + put8(&l_getInfoMsg, 0, 2); + l_err = doMessage(&i_pnorMbox->iv_mbox, &l_getInfoMsg); + if (l_err) + { + TRAC_ERR("doMessage to ping BMC failed with rc=0x%x", l_err); + break; + } - if (i_pnorMbox->iv_protocolVersion == 1) - { - i_pnorMbox->iv_flashSize = get32(&l_getSizeMsg, 0); - i_pnorMbox->iv_flashEraseSize = get32(&l_getSizeMsg, 4); - } - else - { - i_pnorMbox->iv_flashSize = get16(&l_getSizeMsg, 0) - << i_pnorMbox->iv_blockShift; - i_pnorMbox->iv_flashEraseSize = get16(&l_getSizeMsg, 2) - << i_pnorMbox->iv_blockShift; - } + i_pnorMbox->iv_protocolVersion = get8(&l_getInfoMsg, 0); + if (i_pnorMbox->iv_protocolVersion == 1) + { + i_pnorMbox->iv_blockShift = 12; + i_pnorMbox->iv_readWindowSize = get16(&l_getInfoMsg, 1) + << i_pnorMbox->iv_blockShift; + i_pnorMbox->iv_writeWindowSize = get16(&l_getInfoMsg, 3) + << i_pnorMbox->iv_blockShift; + } + else + { + i_pnorMbox->iv_blockShift = get8(&l_getInfoMsg, 5); + } + + //Now get the size of the flash + mboxMessage_t l_getSizeMsg; + l_getSizeMsg.iv_cmd = MBOX_C_GET_FLASH_INFO; + l_err = doMessage(&i_pnorMbox->iv_mbox, &l_getSizeMsg); + if (l_err) + { + TRAC_ERR("doMessage failed to get flash size rc=0x%x", l_err); + break; + } + if (i_pnorMbox->iv_protocolVersion == 1) + { + i_pnorMbox->iv_flashSize = get32(&l_getSizeMsg, 0); + i_pnorMbox->iv_flashEraseSize = get32(&l_getSizeMsg, 4); + } + else + { + i_pnorMbox->iv_flashSize = get16(&l_getSizeMsg, 0) + << i_pnorMbox->iv_blockShift; + i_pnorMbox->iv_flashEraseSize = get16(&l_getSizeMsg, 2) + << i_pnorMbox->iv_blockShift; + } + } while (0); return l_err; } @@ -105,14 +123,12 @@ errorHndl_t readFlash(pnorMbox_t* i_pnorMbox, do { // Ensure we are operating on a 4-byte boundary - if (i_size % 4 != 0) + if ((i_size % 4 != 0) && (i_addr % 4 != 0)) { TRAC_ERR("readFlash: not on 4-byte boundary"); return FAIL; } - TRAC_INFO("readFlash(i_addr=0x%.8X)> ", i_addr); - while (i_size) { uint32_t l_lpcAddr; @@ -170,7 +186,6 @@ errorHndl_t writeFlash(pnorMbox_t* i_pnorMbox, return FAIL; } - TRAC_INFO(ENTER_MRK"writeFlash(i_address=0x%llx)> ", i_addr); errorHndl_t l_flushErr = NO_ERROR; @@ -229,9 +244,6 @@ errorHndl_t writeFlash(pnorMbox_t* i_pnorMbox, i_size = 0; } - TRAC_INFO("writeFlash(i_address=0x%llx)> i_size=%.8X", - i_addr, i_size); - if(l_err) { break; @@ -289,8 +301,6 @@ errorHndl_t adjustMboxWindow(pnorMbox_t* i_pnorMbox, * Then open the new one at the right position. The required * alignment differs between protocol versions */ - TRAC_INFO("astMboxDD::adjustMboxWindow using protocol version: %d", - i_pnorMbox->iv_protocolVersion); if (i_pnorMbox->iv_protocolVersion == 1) { l_wSize = i_isWrite ? i_pnorMbox->iv_writeWindowSize @@ -307,10 +317,6 @@ errorHndl_t adjustMboxWindow(pnorMbox_t* i_pnorMbox, - l_pos; } - TRAC_INFO("adjustMboxWindow opening %s window at 0x%08x" - " for addr 0x%08x req_size 0x%08x", - i_isWrite ? "write" : "read", l_pos, i_reqAddr, l_reqSize); - mboxMessage_t winMsg; if (i_isWrite) { @@ -353,11 +359,6 @@ errorHndl_t adjustMboxWindow(pnorMbox_t* i_pnorMbox, i_pnorMbox->iv_curWindowOpen = true; i_pnorMbox->iv_curWindowWrite = i_isWrite; - TRAC_INFO(" curWindowOffset = %08x", i_pnorMbox->iv_curWindowOffset); - TRAC_INFO(" curWindowSize = %08x", i_pnorMbox->iv_curWindowSize); - TRAC_INFO(" curWindowLpcOffset = %08x", - i_pnorMbox->iv_curWindowLpcOffset); - } while (true); |