[OpenPower-Firmware] [POWER8] OCC Firdata over IPMI

Artem Senichev artemsen at gmail.com
Wed May 22 17:43:24 AEST 2019


Hi all,

The current OCC implementation for POWER8 has a bug and sometimes data
written in the FIRDATA partition has ECC errors.
In these cases, hostboot stops the IPL, so we don't get a SEL and we
have to clean up FIRDATA or overwrite PNOR image to boot the host.

Meanwhile, the latest commit to the OCC project (master_p8) adds
support for writing FIRDATA to the PNOR flash over IPMI:

https://github.com/open-power/occ/commit/a2856b77a618e35f597e3e472868a2617eec67fa
commit a2856b77a618e35f597e3e472868a2617eec67fa
Author: Douglas Gilbert <dgilbert at us.ibm.com>
Date:   Wed Oct 10 14:39:53 2018 -0500

But I can't get it to work properly, the IPMI subsystem in the OCC
unable to send/receive messages.
I have added single getInfo() call to the main thread routine of OCC
and got the following log from OCC:

-------------------------------------------------------------------------------
TRACEBUFFER: Mixed buffer
-------------------------------------------------------------------------------
 Sec    Usec      PID Comp             Line Entry Data Filename  
-------------------------------------------------------------------------------
00000000.000066848|    0|IMP             |1189|IMP: I am the FIR master|main.c
00000000.000105630|    1|IMP             | 247|IMP: dcom_initialize_roles: Overriding chip_id[0] with node_id[0]|dcom/dcom.c
00000000.000108200|    1|IMP             | 274|IMP: Proc ChipId=0, NodeId=0, isDcm=0, isDcmMaster=1, ChipEC=0x220ea049|dcom/dcom.c
00000000.000211615|    1|IMP             | 566|IMP: Sensor Initialization Complete|sensor/sensor.c
00000000.000255155|    1|IMP             |  95|IMP: Initializing ppc405 watchdog. period=3, reset_ctrl=0|timer/timer.c
00000000.009108846|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.009213643|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000804|firdata/native.c
00000000.009215700|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.009217861|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.009321970|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.009324756|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.009327406|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000080000|firdata/native.c
00000000.009329405|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.009434201|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000804|firdata/native.c
00000000.009436258|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.009438420|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.009542530|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.009545328|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.009547978|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000804|firdata/native.c
00000000.009549976|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.009552138|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.009656183|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.009658875|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.009661528|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000801|firdata/native.c
00000000.009663526|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.009665688|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.009769873|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.009772720|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.009775443|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000804|firdata/native.c
00000000.009777445|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.009779610|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.009883653|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.009886350|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.009889000|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000080000|firdata/native.c
00000000.009890998|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.009995795|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000080000|firdata/native.c
00000000.009997851|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.010202701|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000804|firdata/native.c
00000000.010204760|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.010206938|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.010311475|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.010314256|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.010316906|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000804|firdata/native.c
00000000.010318905|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.010321070|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.010425151|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.010427843|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.010430496|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000801|firdata/native.c
00000000.010432633|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000004, stat=0x0000000000000000|firdata/lpc.c
00000000.010434793|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.010538976|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.010541743|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.010544391|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000804|firdata/native.c
00000000.010546388|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.010548545|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.010652583|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.010655270|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.010657915|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000080000|firdata/native.c
00000000.010659911|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.010768355|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000804|firdata/native.c
00000000.010770408|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.010772586|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.010876588|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.010879316|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.010881961|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000080000|firdata/native.c
00000000.010883958|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.010988753|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000804|firdata/native.c
00000000.010990805|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.010992965|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.011097068|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.011099850|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.011102495|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000804|firdata/native.c
00000000.011104491|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.011106651|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.011210690|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.011213373|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.011216026|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000801|firdata/native.c
00000000.011218020|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.011220176|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.011324356|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.011327123|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.011329771|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000804|firdata/native.c
00000000.011331768|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.011333925|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.011437963|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.011440650|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.011443441|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000080000|firdata/native.c
00000000.011445438|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.011550341|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000804|firdata/native.c
00000000.011552395|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.011554571|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.011658576|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.011661305|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.011664100|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000000801|firdata/native.c
00000000.011666093|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.011668253|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.011772436|    1|INF             | 171|INF: >>pollCtrl|firdata/pnor_ipmi.c
00000000.011775218|    1|INF             |  71|INF: xscom_write(000B0020)=D1010100D00100E4|firdata/native.c
00000000.011777868|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000080000|firdata/native.c
00000000.011779861|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.011884656|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000080000|firdata/native.c
00000000.011886705|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.012091550|    1|INF             |  52|INF: xscom_read(000B0022)=0000000000080000|firdata/native.c
00000000.012093600|    1|INF             | 158|INF: writeLPC> Poll on ECCB Status, poll_time=0x0000000000000000, stat=0x0000000000000000|firdata/lpc.c
00000000.012397973|    1|INF             | 182|INF: LpcDD::pollComplete> LPC error or timeout: addr=0xD00100E4, status=0x0000000000080000|firdata/lpc.c
00000000.012400101|    1|INF             | 242|INF: readLPC> D00100E4[1] = 00000000|firdata/lpc.c
00000000.012401973|    1|ERR             | 183|INF: ERR: polling loop encountered an error. rc = -1, exiting|firdata/pnor_ipmi.c
00000000.012403923|    1|ERR             | 387|INF: ERR: send_ipmi_msg: cmd 0x2 Failed rc = -1|firdata/pnor_ipmi.c
00000000.012405805|    1|ERR             | 425|INF: ERR: getInfo: ping BMC faild with rc = 0xffffffff|firdata/pnor_ipmi.c

We have HIOMAP support for our bundle (OpenBMC+OpenPOWER), it looks like
the entire solution works fine except the OCC project, it is the last
component that directly writes data to the PNOR flash.

Can anybody help me with that? Any idea how to make it work?

-- 
Regards,
Artem Senichev
Software Engineer, YADRO.


More information about the OpenPower-Firmware mailing list