summaryrefslogtreecommitdiffstats
path: root/sbe
diff options
context:
space:
mode:
authorSachin Gupta <sgupta2m@in.ibm.com>2016-03-21 07:35:17 -0500
committerAMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com>2016-05-17 05:16:07 -0400
commit55f9061a6810f7122765bcafad382ed98f67dd5f (patch)
treedbd80ee2a727188f908186176765d6fe312d4c31 /sbe
parent1349a59f0b860c268bd178ad099269dccd9f8a10 (diff)
downloadtalos-sbe-55f9061a6810f7122765bcafad382ed98f67dd5f.tar.gz
talos-sbe-55f9061a6810f7122765bcafad382ed98f67dd5f.zip
Reg access support
RTC: 128984 Change-Id: I6c5637de94077cca58a72d20a88c6db20c137632 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/22279 Tested-by: Jenkins Server Reviewed-by: RAJA DAS <rajadas2@in.ibm.com> Reviewed-by: AMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com>
Diffstat (limited to 'sbe')
-rw-r--r--sbe/build/citest/etc/patches/chip.act.patch2
-rw-r--r--sbe/build/citest/etc/patches/p9.inst.patch880
-rw-r--r--sbe/build/citest/etc/patches/patchlist.txt4
-rwxr-xr-xsbe/build/citest/etc/workarounds.postsimsetup11
-rw-r--r--sbe/sbefw/sbeFifoMsgUtils.C40
-rw-r--r--sbe/sbefw/sbeFifoMsgUtils.H11
-rw-r--r--sbe/sbefw/sbeSpMsg.H47
-rw-r--r--sbe/sbefw/sbe_sp_intf.H15
-rw-r--r--sbe/sbefw/sbecmdgeneric.C3
-rw-r--r--sbe/sbefw/sbecmdparser.C23
-rw-r--r--sbe/sbefw/sbecmdregaccess.C248
-rw-r--r--sbe/sbefw/sbecmdregaccess.H33
-rw-r--r--sbe/sbefw/sbefwfiles.mk2
-rwxr-xr-xsbe/test/test.xml1
-rwxr-xr-xsbe/test/testGetCapabilities.py2
-rwxr-xr-xsbe/test/testPutGetRegFpr.py58
-rwxr-xr-xsbe/test/testPutGetRegGpr.py58
-rwxr-xr-xsbe/test/testPutGetRegSpr.py58
-rwxr-xr-xsbe/test/testRegAccess.xml15
19 files changed, 1509 insertions, 2 deletions
diff --git a/sbe/build/citest/etc/patches/chip.act.patch b/sbe/build/citest/etc/patches/chip.act.patch
new file mode 100644
index 00000000..4e47f2fc
--- /dev/null
+++ b/sbe/build/citest/etc/patches/chip.act.patch
@@ -0,0 +1,2 @@
+265a266
+> EFFECT: TARGET=[MODULE(executeInstruction, MYCORE)] OP=[MODULECALL] DATA=[REG(MYCHIPLET, 0x00010A4F)]
diff --git a/sbe/build/citest/etc/patches/p9.inst.patch b/sbe/build/citest/etc/patches/p9.inst.patch
new file mode 100644
index 00000000..eba2f47d
--- /dev/null
+++ b/sbe/build/citest/etc/patches/p9.inst.patch
@@ -0,0 +1,880 @@
+6c6,10
+<
+---
+> # This file maps ppc core instructions to simics instructions.
+> # First column tells the ppc instruction. The rest of columns
+> # indicates the corrosponding simics instruction. Simics
+> # only support single thread. So all instructions are for thread0.
+> # For ppc instructions refer to PPC instruction set architecture(ISA).
+13,180c17,184
+< 0F821F54C0000000, mv, hid0, gpr0
+< 0F821F74C0000000, mv, gpr0, hid0
+< 0F832954C0000000, mv, hrmor, gpr0
+< 0F832974C0000000, mv, gpr0, hrmor
+< 0F806054C0000000, mv, dscr, gpr0
+< 0F806074C0000000, mv, gpr0, dscr
+< 0F81A054C0000000, mv, uamr, gpr0
+< 0F81A074C0000000, mv, gpr0, uamr
+< 0F83A154C0000000, mv, iamr, gpr0
+< 0F83A174C0000000, mv, gpr0, iamr
+< 0F800454C0000000, mv, tfhar, gpr0
+< 0F800474C0000000, mv, gpr0, tfhar
+< 0F804454C0000000, mv, texasr, gpr0
+< 0F804474C0000000, mv, gpr0, texasr
+< 0F806454C0000000, mv, texasru, gpr0
+< 0F806474C0000000, mv, gpr0, texasru
+< 0F814454C0000000, mv, apscr, gpr0
+< 0F814474C0000000, mv, gpr0, apscr
+< 0F816454C0000000, mv, apscru, gpr0
+< 0F816474C0000000, mv, gpr0, apscru
+< 0F820454C0000000, mv, tidr, gpr0
+< 0F820474C0000000, mv, gpr0, tidr
+< 0F832454C0000000, mv, fscr, gpr0
+< 0F832474C0000000, mv, gpr0, fscr
+< 0F83E454C0000000, mv, pspb, gpr0
+< 0F83E474C0000000, mv, gpr0, pspb
+< 0F820554C0000000, mv, dpdes, gpr0
+< 0F820574C0000000, mv, gpr0, dpdes
+< 0F822554C0000000, mv, dhdes, gpr0
+< 0F822574C0000000, mv, gpr0, dhdes
+< 0F828554C0000000, mv, dawr, gpr0
+< 0F828574C0000000, mv, gpr0, dawr
+< 0F830554C0000000, mv, mppr, gpr0
+< 0F830574C0000000, mv, gpr0, mppr
+< 0F834554C0000000, mv, rpr, gpr0
+< 0F834574C0000000, mv, gpr0, rpr
+< 0F836554C0000000, mv, ciabr, gpr0
+< 0F836574C0000000, mv, gpr0, ciabr
+< 0F838554C0000000, mv, dawrx, gpr0
+< 0F838574C0000000, mv, gpr0, dawrx
+< 0F83C554C0000000, mv, hfscr, gpr0
+< 0F83C574C0000000, mv, gpr0, hfscr
+< 0F828854C0000000, mv, sprc, gpr0
+< 0F828874C0000000, mv, gpr0, sprc
+< 0F836854C0000000, mv, cir, gpr0
+< 0F836874C0000000, mv, gpr0, cir
+< 0F83EA54C0000000, mv, hacop, gpr0
+< 0F83EA74C0000000, mv, gpr0, hacop
+< 0F83C854C0000000, mv, tbu40, gpr0
+< 0F83C874C0000000, mv, gpr0, tbu40
+< 0F83E854C0000000, mv, pvr, gpr0
+< 0F83E874C0000000, mv, gpr0, pvr
+< 0F82A954C0000000, mv, purr, gpr0
+< 0F82A974C0000000, mv, gpr0, purr
+< 0F830954C0000000, mv, rmor, gpr0
+< 0F830974C0000000, mv, gpr0, rmor
+< 0F83CD54C0000000, mv, tir, gpr0
+< 0F83CD74C0000000, mv, gpr0, tir
+< 0F821854C0000000, mv, sier, gpr0
+< 0F821874C0000000, mv, gpr0, sier
+< 0F823854C0000000, mv, mmcr2, gpr0
+< 0F823874C0000000, mv, gpr0, mmcr2
+< 0F83F854C0000000, mv, imc, gpr0
+< 0F83F874C0000000, mv, gpr0, imc
+< 0F801954C0000000, mv, bescrs, gpr0
+< 0F801974C0000000, mv, gpr0, bescrs
+< 0F803954C0000000, mv, bescrsu, gpr0
+< 0F803974C0000000, mv, gpr0, bescrsu
+< 0F805954C0000000, mv, bescrr, gpr0
+< 0F805974C0000000, mv, gpr0, bescrr
+< 0F807954C0000000, mv, bescrru, gpr0
+< 0F807974C0000000, mv, gpr0, bescrru
+< 0F809954C0000000, mv, ebbhr, gpr0
+< 0F809974C0000000, mv, gpr0, ebbhr
+< 0F80B954C0000000, mv, ebbrr, gpr0
+< 0F80B974C0000000, mv, gpr0, ebbrr
+< 0F80D954C0000000, mv, bescrr, gpr0
+< 0F80D974C0000000, mv, gpr0, bescrr
+< 0F81F954C0000000, mv, tar, gpr0
+< 0F81F974C0000000, mv, gpr0, tar
+< 0F821A54C0000000, mv, ic, gpr0
+< 0F821A74C0000000, mv, gpr0, ic
+< 0F823A54C0000000, mv, vtb, gpr0
+< 0F823A74C0000000, mv, gpr0, vtb
+< 0F825A54C0000000, mv, ldbar, gpr0
+< 0F825A74C0000000, mv, gpr0, ldbar
+< 0F827A54C0000000, mv, mmcrc, gpr0
+< 0F827A74C0000000, mv, gpr0, mmcrc
+< 0F829A54C0000000, mv, pmicr, gpr0
+< 0F829A74C0000000, mv, gpr0, pmicr
+< 0F82BA54C0000000, mv, pmsr, gpr0
+< 0F82BA74C0000000, mv, gpr0, pmsr
+< 0F82DA54C0000000, mv, pmmar, gpr0
+< 0F82DA74C0000000, mv, gpr0, pmmar
+< 0F83FA54C0000000, mv, worc, gpr0
+< 0F83FA74C0000000, mv, gpr0, worc
+< 0F831B54C0000000, mv, tacr, gpr0
+< 0F831B74C0000000, mv, gpr0, tacr
+< 0F833B54C0000000, mv, tcscr, gpr0
+< 0F833B74C0000000, mv, gpr0, tcscr
+< 0F835B54C0000000, mv, csigr, gpr0
+< 0F835B74C0000000, mv, gpr0, csigr
+< 0F839B54C0000000, mv, spcm1, gpr0
+< 0F839B74C0000000, mv, gpr0, spcm1
+< 0F83BB54C0000000, mv, spcm2, gpr0
+< 0F83BB74C0000000, mv, gpr0, spcm2
+< 0F83DB54C0000000, mv, mmcrs, gpr0
+< 0F83DB74C0000000, mv, gpr0, mmcrs
+< 0F83FB54C0000000, mv, wort, gpr0
+< 0F83FB74C0000000, mv, gpr0, wort
+< 0F805C54C0000000, mv, ppr32, gpr0
+< 0F805C74C0000000, mv, gpr0, ppr32
+< 0F803C54C0000000, mv, tsr, gpr0
+< 0F803C74C0000000, mv, gpr0, tsr
+< 0F835C54C0000000, mv, ttr, gpr0
+< 0F835C74C0000000, mv, gpr0, ttr
+< 0F81DF54C0000000, mv, trace, gpr0
+< 0F81DF74C0000000, mv, gpr0, trace
+< 0F83E054C0000000, mv, acop, gpr0
+< 0F83E074C0000000, mv, gpr0, acop
+< 0F83AA54C0000000, mv, amor, gpr0
+< 0F83AA74C0000000, mv, gpr0, amor
+< 0F83A054C0000000, mv, amr, gpr0
+< 0F83A074C0000000, mv, gpr0, amr
+< 0F838054C0000000, mv, cfar, gpr0
+< 0F838074C0000000, mv, gpr0, cfar
+< 0F820204C0000000, mv, cr0, gpr0
+< 0F82022400000000, mv, gpr0, cr0
+< 0F820404C0000000, mv, cr1, gpr0
+< 0F82042400000000, mv, gpr0, cr1
+< 0F820804C0000000, mv, cr2, gpr0
+< 0F82082400000000, mv, gpr0, cr2
+< 0F821004C0000000, mv, cr3, gpr0
+< 0F82102400000000, mv, gpr0, cr3
+< 0F822004C0000000, mv, cr4, gpr0
+< 0F82202400000000, mv, gpr0, cr4
+< 0F824004C0000000, mv, cr5, gpr0
+< 0F82402400000000, mv, gpr0, cr5
+< 0F828004C0000000, mv, cr6, gpr0
+< 0F82802400000000, mv, gpr0, cr6
+< 0F830004C0000000, mv, cr7, gpr0
+< 0F83002400000000, mv, gpr0, cr7
+< 0F812054C0000000, mv, ctr, gpr0
+< 0F812074C0000000, mv, gpr0, ctr
+< 0F830454C0000000, mv, ctrl, gpr0
+< 0F830474C0000000, mv, gpr0, ctrl #@06
+< 0F82BF54C0000000, mv, dabr, gpr0
+< 0F82BF74C0000000, mv, gpr0, dabr
+< 0F82FF54C0000000, mv, dabrx, gpr0
+< 0F82FF74C0000000, mv, gpr0, dabrx
+< 0F826054C0000000, mv, dar, gpr0
+< 0F826074C0000000, mv, gpr0, dar
+< 0F835D54C0000000, mv, dcidr0, gpr0
+< 0F835D74C0000000, mv, gpr0, dcidr0
+< 0F83BD54C0000000, mv, dcidr1, gpr0
+< 0F83BD74C0000000, mv, gpr0, dcidr1
+< 0F82C054C0000000, mv, dec, gpr0
+< 0F82C074C0000000, mv, gpr0, dec
+< 0F833D54C0000000, mv, drmr0, gpr0
+< 0F833D74C0000000, mv, gpr0, drmr0
+< 0F839D54C0000000, mv, drmr1, gpr0
+< 0F839D74C0000000, mv, gpr0, drmr1
+< 0F831D54C0000000, mv, drsr0, gpr0
+< 0F831D74c0000000, mv, gpr0, drsr0
+< 0F837D54C0000000, mv, drsr1, gpr0
+< 0F837D74C0000000, mv, gpr0, drsr1
+< 0F824054C0000000, mv, dsisr, gpr0
+< 0F824074C0000000, mv, gpr0, dsisr
+---
+> 007c10faa6000000, mv, hid0, gpr0
+> 007c10fba6000000, mv, gpr0, hid0
+> 007c194aa6000000, mv, hrmor, gpr0
+> 007c194ba6000000, mv, gpr0, hrmor
+> 007c0302a6000000, mv, dscr, gpr0
+> 007c0303a6000000, mv, gpr0, dscr
+> 007c0d02a6000000, mv, uamr, gpr0
+> 007c0d03a6000000, mv, gpr0, uamr
+> 007c1d0aa6000000, mv, iamr, gpr0
+> 007c1d0ba6000000, mv, gpr0, iamr
+> 007c0022a6000000, mv, tfhar, gpr0
+> 007c0023a6000000, mv, gpr0, tfhar
+> 007c0222a6000000, mv, texasr, gpr0
+> 007c0223a6000000, mv, gpr0, texasr
+> 007c0322a6000000, mv, texasru, gpr0
+> 007c0323a6000000, mv, gpr0, texasru
+> 007c0a22a6000000, mv, apscr, gpr0
+> 007c0a23a6000000, mv, gpr0, apscr
+> 007c0b22a6000000, mv, apscru, gpr0
+> 007c0b23a6000000, mv, gpr0, apscru
+> 007c1022a6000000, mv, tidr, gpr0
+> 007c1023a6000000, mv, gpr0, tidr
+> 007c1922a6000000, mv, fscr, gpr0
+> 007c1923a6000000, mv, gpr0, fscr
+> 007c1f22a6000000, mv, pspb, gpr0
+> 007c1f23a6000000, mv, gpr0, pspb
+> 007c102aa6000000, mv, dpdes, gpr0
+> 007c102ba6000000, mv, gpr0, dpdes
+> 007c112aa6000000, mv, dhdes, gpr0
+> 007c112ba6000000, mv, gpr0, dhdes
+> 007c142aa6000000, mv, dawr, gpr0
+> 007c142ba6000000, mv, gpr0, dawr
+> 007c182aa6000000, mv, mppr, gpr0
+> 007c182ba6000000, mv, gpr0, mppr
+> 007c1a2aa6000000, mv, rpr, gpr0
+> 007c1a2ba6000000, mv, gpr0, rpr
+> 007c1b2aa6000000, mv, ciabr, gpr0
+> 007c1b2ba6000000, mv, gpr0, ciabr
+> 007c1c2aa6000000, mv, dawrx, gpr0
+> 007c1c2ba6000000, mv, gpr0, dawrx
+> 007c1e2aa6000000, mv, hfscr, gpr0
+> 007c1e2ba6000000, mv, gpr0, hfscr
+> 007c1442a6000000, mv, sprc, gpr0
+> 007c1443a6000000, mv, gpr0, sprc
+> 007c1b42a6000000, mv, cir, gpr0
+> 007c1b43a6000000, mv, gpr0, cir
+> 007c1f52a6000000, mv, hacop, gpr0
+> 007c1f53a6000000, mv, gpr0, hacop
+> 007c1e42a6000000, mv, tbu40, gpr0
+> 007c1e43a6000000, mv, gpr0, tbu40
+> 007c1f42a6000000, mv, pvr, gpr0
+> 007c1f43a6000000, mv, gpr0, pvr
+> 007c154aa6000000, mv, purr, gpr0
+> 007c154ba6000000, mv, gpr0, purr
+> 007c184aa6000000, mv, rmor, gpr0
+> 007c184ba6000000, mv, gpr0, rmor
+> 007c1e6aa6000000, mv, tir, gpr0
+> 007c1e6ba6000000, mv, gpr0, tir
+> 007c10c2a6000000, mv, sier, gpr0
+> 007c10c3a6000000, mv, gpr0, sier
+> 007c11c2a6000000, mv, mmcr2, gpr0
+> 007c11c3a6000000, mv, gpr0, mmcr2
+> 007c1fc2a6000000, mv, imc, gpr0
+> 007c1fc3a6000000, mv, gpr0, imc
+> 007c00caa6000000, mv, bescrs, gpr0
+> 007c00cba6000000, mv, gpr0, bescrs
+> 007c01caa6000000, mv, bescrsu, gpr0
+> 007c01cba6000000, mv, gpr0, bescrsu
+> 007c02caa6000000, mv, bescrr, gpr0
+> 007c02cba6000000, mv, gpr0, bescrr
+> 007c03caa6000000, mv, bescrru, gpr0
+> 007c03cba6000000, mv, gpr0, bescrru
+> 007c04caa6000000, mv, ebbhr, gpr0
+> 007c04cba6000000, mv, gpr0, ebbhr
+> 007c05caa6000000, mv, ebbrr, gpr0
+> 007c05cba6000000, mv, gpr0, ebbrr
+> 007c06caa6000000, mv, bescrr, gpr0
+> 007c06cba6000000, mv, gpr0, bescrr
+> 007c0fcaa6000000, mv, tar, gpr0
+> 007c0fcba6000000, mv, gpr0, tar
+> 007c10d2a6000000, mv, ic, gpr0
+> 007c10d3a6000000, mv, gpr0, ic
+> 007c11d2a6000000, mv, vtb, gpr0
+> 007c11d3a6000000, mv, gpr0, vtb
+> 007c12d2a6000000, mv, ldbar, gpr0
+> 007c12d3a6000000, mv, gpr0, ldbar
+> 007c13d2a6000000, mv, mmcrc, gpr0
+> 007c13d3a6000000, mv, gpr0, mmcrc
+> 007c14d2a6000000, mv, pmicr, gpr0
+> 007c14d3a6000000, mv, gpr0, pmicr
+> 007c15d2a6000000, mv, pmsr, gpr0
+> 007c15d3a6000000, mv, gpr0, pmsr
+> 007c16d2a6000000, mv, pmmar, gpr0
+> 007c16d3a6000000, mv, gpr0, pmmar
+> 007c1fd2a6000000, mv, worc, gpr0
+> 007c1fd3a6000000, mv, gpr0, worc
+> 007c18daa6000000, mv, tacr, gpr0
+> 007c18dba6000000, mv, gpr0, tacr
+> 007c19daa6000000, mv, tcscr, gpr0
+> 007c19dba6000000, mv, gpr0, tcscr
+> 007c1adaa6000000, mv, csigr, gpr0
+> 007c1adba6000000, mv, gpr0, csigr
+> 007c1cdaa6000000, mv, spcm1, gpr0
+> 007c1cdba6000000, mv, gpr0, spcm1
+> 007c1ddaa6000000, mv, spcm2, gpr0
+> 007c1ddba6000000, mv, gpr0, spcm2
+> 007c1edaa6000000, mv, mmcrs, gpr0
+> 007c1edba6000000, mv, gpr0, mmcrs
+> 007c1fdaa6000000, mv, wort, gpr0
+> 007c1fdba6000000, mv, gpr0, wort
+> 007c02e2a6000000, mv, ppr32, gpr0
+> 007c02e3a6000000, mv, gpr0, ppr32
+> 007c01e2a6000000, mv, tsr, gpr0
+> 007c01e3a6000000, mv, gpr0, tsr
+> 007c1ae2a6000000, mv, ttr, gpr0
+> 007c1ae3a6000000, mv, gpr0, ttr
+> 007c0efaa6000000, mv, trace, gpr0
+> 007c0efba6000000, mv, gpr0, trace
+> 007c1f02a6000000, mv, acop, gpr0
+> 007c1f03a6000000, mv, gpr0, acop
+> 007c1d52a6000000, mv, amor, gpr0
+> 007c1d53a6000000, mv, gpr0, amor
+> 007c1d02a6000000, mv, amr, gpr0
+> 007c1d03a6000000, mv, gpr0, amr
+> 007c1c02a6000000, mv, cfar, gpr0
+> 007c1c03a6000000, mv, gpr0, cfar
+> 007c101026000000, mv, cr0, gpr0
+> 007c101120000000, mv, gpr0, cr0
+> 007c102026000000, mv, cr1, gpr0
+> 007c102120000000, mv, gpr0, cr1
+> 007c104026000000, mv, cr2, gpr0
+> 007c104120000000, mv, gpr0, cr2
+> 007c108026000000, mv, cr3, gpr0
+> 007c108120000000, mv, gpr0, cr3
+> 007c110026000000, mv, cr4, gpr0
+> 007c110120000000, mv, gpr0, cr4
+> 007c120026000000, mv, cr5, gpr0
+> 007c120120000000, mv, gpr0, cr5
+> 007c140026000000, mv, cr6, gpr0
+> 007c140120000000, mv, gpr0, cr6
+> 007c180026000000, mv, cr7, gpr0
+> 007c180120000000, mv, gpr0, cr7
+> 007c0902a6000000, mv, ctr, gpr0
+> 007c0903a6000000, mv, gpr0, ctr
+> 007c1822a6000000, mv, ctrl, gpr0
+> 007c1823a6000000, mv, gpr0, ctrl #@06
+> 007c15faa6000000, mv, dabr, gpr0
+> 007c15fba6000000, mv, gpr0, dabr
+> 007c17faa6000000, mv, dabrx, gpr0
+> 007c17fba6000000, mv, gpr0, dabrx
+> 007c1302a6000000, mv, dar, gpr0
+> 007c1303a6000000, mv, gpr0, dar
+> 007c1aeaa6000000, mv, dcidr0, gpr0
+> 007c1aeba6000000, mv, gpr0, dcidr0
+> 007c1deaa6000000, mv, dcidr1, gpr0
+> 007c1deba6000000, mv, gpr0, dcidr1
+> 007c1602a6000000, mv, dec, gpr0
+> 007c1603a6000000, mv, gpr0, dec
+> 007c19eaa6000000, mv, drmr0, gpr0
+> 007c19eba6000000, mv, gpr0, drmr0
+> 007c1ceaa6000000, mv, drmr1, gpr0
+> 007c1ceba6000000, mv, gpr0, drmr1
+> 007c18eaa6000000, mv, drsr0, gpr0
+> 007c18eba6000000, mv, gpr0, drsr0
+> 007c1beaa6000000, mv, drsr1, gpr0
+> 007c1beba6000000, mv, gpr0, drsr1
+> 007c1202a6000000, mv, dsisr, gpr0
+> 007c1203a6000000, mv, gpr0, dsisr
+183,243c187,247
+< 0F826954C0000000, mv, hdar, gpr0
+< 0F826974C0000000, mv, gpr0, hdar
+< 0F82C954C0000000, mv, hdec, gpr0
+< 0F82C974C0000000, mv, gpr0, hdec
+< 0F824954C0000000, mv, hdsisr, gpr0
+< 0F824974C0000000, mv, gpr0, hdsisr
+< 0F826A54C0000000, mv, heir, gpr0
+< 0F826A74C0000000, mv, gpr0, heir
+< 0F823F54C0000000, mv, hid1, gpr0
+< 0F823F74C0000000, mv, gpr0, hid1
+< 0F829F54C0000000, mv, hid4, gpr0
+< 0F829F74C0000000, mv, gpr0, hid4
+< 0F82DF54C0000000, mv, hid5, gpr0
+< 0F82DF74C0000000, mv, gpr0, hid5
+< 0F822A54C0000000, mv, hmeer, gpr0
+< 0F822A74C0000000, mv, gpr0, hmeer
+< 0F820A54C0000000, mv, hmer, gpr0
+< 0F820A74C0000000, mv, gpr0, hmer
+< 0F830A54C0000000, mv, hpmc1, gpr0
+< 0F830A74C0000000, mv, gpr0, hpmc1
+< 0F832A54C0000000, mv, hpmc2, gpr0
+< 0F832A74C0000000, mv, gpr0, hpmc2
+< 0F834A54C0000000, mv, hpmc3, gpr0
+< 0F834A74C0000000, mv, gpr0, hpmc3
+< 0F836A54C0000000, mv, hpmc4, gpr0
+< 0F836A74C0000000, mv, gpr0, hpmc4
+< 0F820954C0000000, mv, hsprg0, gpr0
+< 0F820974C0000000, mv, gpr0, hsprg0
+< 0F822954C0000000, mv, hsprg1, gpr0
+< 0F822974C0000000, mv, gpr0, hsprg1
+< 0F834954C0000000, mv, hsrr0, gpr0
+< 0F834974C0000000, mv, gpr0, hsrr0
+< 0F836954C0000000, mv, hsrr1, gpr0
+< 0F836974C0000000, mv, gpr0, hsrr1
+< f825e54c0000000, mv, icidr0, gpr0
+< f825e74c0000000, mv, gpr0, icidr0
+< f82be54c0000000, mv, icidr1, gpr0
+< f82be74c0000000, mv, gpr0, icidr1
+< f823e54c0000000, mv, irmr0, gpr0
+< f823e74c0000000, mv, gpr0, irmr0
+< f829e54c0000000, mv, irmr1, gpr0
+< f829e74c0000000, mv, gpr0, irmr1
+< f821e54c0000000, mv, irsr0, gpr0
+< f821e74c0000000, mv, gpr0, irsr0
+< f827e54c0000000, mv, irsr1, gpr0
+< f827e74c0000000, mv, gpr0, irsr1
+< 0F83C954C0000000, mv, lpcr, gpr0
+< 0F83C974C0000000, mv, gpr0, lpcr
+< 0F83E954C0000000, mv, lpidr, gpr0
+< 0F83E974C0000000, mv, gpr0, lpidr
+< 0F810054C0000000, mv, lr, gpr0
+< 0F810074C0000000, mv, gpr0, lr
+< 0F837854C0000000, mv, mmcr0, gpr0
+< 0F837874C0000000, mv, gpr0, mmcr0
+< 0F83D854C0000000, mv, mmcr1, gpr0
+< 0F83D874C0000000, mv, gpr0, mmcr1
+< 0F825854C0000000, mv, mmcra, gpr0
+< 0F825874C0000000, mv, gpr0, mmcra
+< 0F838954C0000000, mv, mmcrh, gpr0
+< 0F838974C0000000, mv, gpr0, mmcrh
+< 0F800014C0000000, mv, msr, gpr0
+---
+> 007c134aa6000000, mv, hdar, gpr0
+> 007c134ba6000000, mv, gpr0, hdar
+> 007c164aa6000000, mv, hdec, gpr0
+> 007c164ba6000000, mv, gpr0, hdec
+> 007c124aa6000000, mv, hdsisr, gpr0
+> 007c124ba6000000, mv, gpr0, hdsisr
+> 007c1352a6000000, mv, heir, gpr0
+> 007c1353a6000000, mv, gpr0, heir
+> 007c11faa6000000, mv, hid1, gpr0
+> 007c11fba6000000, mv, gpr0, hid1
+> 007c14faa6000000, mv, hid4, gpr0
+> 007c14fba6000000, mv, gpr0, hid4
+> 007c16faa6000000, mv, hid5, gpr0
+> 007c16fba6000000, mv, gpr0, hid5
+> 007c1152a6000000, mv, hmeer, gpr0
+> 007c1153a6000000, mv, gpr0, hmeer
+> 007c1052a6000000, mv, hmer, gpr0
+> 007c1053a6000000, mv, gpr0, hmer
+> 007c1852a6000000, mv, hpmc1, gpr0
+> 007c1853a6000000, mv, gpr0, hpmc1
+> 007c1952a6000000, mv, hpmc2, gpr0
+> 007c1953a6000000, mv, gpr0, hpmc2
+> 007c1a52a6000000, mv, hpmc3, gpr0
+> 007c1a53a6000000, mv, gpr0, hpmc3
+> 007c1b52a6000000, mv, hpmc4, gpr0
+> 007c1b53a6000000, mv, gpr0, hpmc4
+> 007c104aa6000000, mv, hsprg0, gpr0
+> 007c104ba6000000, mv, gpr0, hsprg0
+> 007c114aa6000000, mv, hsprg1, gpr0
+> 007c114ba6000000, mv, gpr0, hsprg1
+> 007c1a4aa6000000, mv, hsrr0, gpr0
+> 007c1a4ba6000000, mv, gpr0, hsrr0
+> 007c1b4aa6000000, mv, hsrr1, gpr0
+> 007c1b4ba6000000, mv, gpr0, hsrr1
+> 007c12f2a6000000, mv, icidr0, gpr0
+> 007c12f3a6000000, mv, gpr0, icidr0
+> 007c15f2a6000000, mv, icidr1, gpr0
+> 007c15f3a6000000, mv, gpr0, icidr1
+> 007c11f2a6000000, mv, irmr0, gpr0
+> 007c11f3a6000000, mv, gpr0, irmr0
+> 007c14f2a6000000, mv, irmr1, gpr0
+> 007c14f3a6000000, mv, gpr0, irmr1
+> 007c10f2a6000000, mv, irsr0, gpr0
+> 007c10f3a6000000, mv, gpr0, irsr0
+> 007c13f2a6000000, mv, irsr1, gpr0
+> 007c13f3a6000000, mv, gpr0, irsr1
+> 007c1e4aa6000000, mv, lpcr, gpr0
+> 007c1e4ba6000000, mv, gpr0, lpcr
+> 007c1f4aa6000000, mv, lpidr, gpr0
+> 007c1f4ba6000000, mv, gpr0, lpidr
+> 007c0802a6000000, mv, lr, gpr0
+> 007c0803a6000000, mv, gpr0, lr
+> 007c1bc2a6000000, mv, mmcr0, gpr0
+> 007c1bc3a6000000, mv, gpr0, mmcr0
+> 007c1ec2a6000000, mv, mmcr1, gpr0
+> 007c1ec3a6000000, mv, gpr0, mmcr1
+> 007c12c2a6000000, mv, mmcra, gpr0
+> 007c12c3a6000000, mv, gpr0, mmcra
+> 007c1c4aa6000000, mv, mmcrh, gpr0
+> 007c1c4ba6000000, mv, gpr0, mmcrh
+> 007c0000a6000000, mv, msr, gpr0
+245,318c249,322
+< 0F80002480000000, mv, gpr0, msr
+< 0F824A54C0000000, mv, pcr, gpr0
+< 0F824A74C0000000, mv, gpr0, pcr
+< 0F820154C0000000, mv, pid, gpr0
+< 0F820174C0000000, mv, gpr0, pid
+< 0F83FF54C0000000, mv, pir, gpr0 #Read Only Reg
+< 0F827854C0000000, mv, pmc1, gpr0
+< 0F827874C0000000, mv, gpr0, pmc1
+< 0F829854C0000000, mv, pmc2, gpr0
+< 0F829874C0000000, mv, gpr0, pmc2
+< 0F82B854C0000000, mv, pmc3, gpr0
+< 0F82B874C0000000, mv, gpr0, pmc3
+< 0F82D854C0000000, mv, pmc4, gpr0
+< 0F82D874C0000000, mv, gpr0, pmc4
+< 0F82F854C0000000, mv, pmc5, gpr0
+< 0F82F874C0000000, mv, gpr0, pmc5
+< 0F831854C0000000, mv, pmc6, gpr0
+< 0F831874C0000000, mv, gpr0, pmc6 #PMC7,PMC8 not supported in P7
+< 0F829B54C0000000, mv, pmcr, gpr0
+< 0F829B74C0000000, mv, gpr0, pmcr
+< 0F801C54C0000000, mv, ppr, gpr0 #PPR=TSR - @04
+< 0F801C74C0000000, mv, gpr0, ppr
+< 0F82BB54C0000000, mv, rwmr, gpr0
+< 0F82BB74C0000000, mv, gpr0, rwmr
+< 0F83B854C0000000, mv, sdar, gpr0
+< 0F83B874C0000000, mv, gpr0, sdar
+< 0F832054C0000000, mv, sdr1, gpr0
+< 0F832074C0000000, mv, gpr0, sdr1
+< 0F839854C0000000, mv, siar, gpr0
+< 0F839874C0000000, mv, gpr0, siar
+< 0F820854C0000000, mv, sprg0, gpr0
+< 0F820874C0000000, mv, gpr0, sprg0
+< 0F822854C0000000, mv, sprg1, gpr0
+< 0F822874C0000000, mv, gpr0, sprg1
+< 0F824854C0000000, mv, sprg2, gpr0
+< 0F824874C0000000, mv, gpr0, sprg2
+< 0F826854C0000000, mv, sprg3, gpr0
+< 0F826874C0000000, mv, gpr0, sprg3
+< 0F828954C0000000, mv, spurr, gpr0
+< 0F828974C0000000, mv, gpr0, spurr
+< 0F834054C0000000, mv, srr0, gpr0
+< 0F834074C0000000, mv, gpr0, srr0
+< 0F836054C0000000, mv, srr1, gpr0
+< 0F836074C0000000, mv, gpr0, srr1
+< 0F818854C0000000, mv, tb, gpr0
+< 0F818874C0000000, mv, gpr0, tb
+< 0F838854C0000000, mv, tbl, gpr0
+< 0F838874C0000000, mv, gpr0, tbl
+< 0F83A854C0000000, mv, tbu, gpr0
+< 0F83A874C0000000, mv, gpr0, tbu
+< 0F83A954C0000000, mv, tfmr, gpr0
+< 0F83A974C0000000, mv, gpr0, tfmr
+< f828a54c0000000, mv, tlbindexr, gpr0
+< f828a74c0000000, mv, gpr0, tlbindexr
+< f82ea54c0000000, mv, tlblpidr, gpr0
+< f82ea74c0000000, mv, gpr0, tlblpidr
+< f82fd54c0000000, mv, tlbrmt, gpr0
+< f82fd74c0000000, mv, gpr0, tlbrmt
+< f82ca54c0000000, mv, tlbrpnr, gpr0 #@05
+< f82ca74c0000000, mv, gpr0, tlbrpnr #@05
+< f82aa54c0000000, mv, tlbvpnr, gpr0
+< f82aa74c0000000, mv, gpr0, tlbvpnr
+< 0F821B54C0000000, mv, trig0, gpr0
+< 0F821B74C0000000, mv, gpr0, trig0 #@04
+< 0F823B54C0000000, mv, trig1, gpr0
+< 0F823B74C0000000, mv, gpr0, trig1 #@04
+< 0F825B54C0000000, mv, trig2, gpr0
+< 0F825B74C0000000, mv, gpr0, trig2 #@04
+< 0F833C54C0000000, mv, tscr, gpr0
+< 0F833C74C0000000, mv, gpr0, tscr
+< 0F83A454C0000000, mv, uamor, gpr0
+< 0F83A474C0000000, mv, gpr0, uamor
+< 0F800854C0000000, mv, vrsave, gpr0
+< 0F800874C0000000, mv, gpr0, vrsave
+---
+> 007c000124000000, mv, gpr0, msr
+> 007c1252a6000000, mv, pcr, gpr0
+> 007c1253a6000000, mv, gpr0, pcr
+> 007c100aa6000000, mv, pid, gpr0
+> 007c100ba6000000, mv, gpr0, pid
+> 007c1ffaa6000000, mv, pir, gpr0 #Read Only Reg
+> 007c13c2a6000000, mv, pmc1, gpr0
+> 007c13c3a6000000, mv, gpr0, pmc1
+> 007c14c2a6000000, mv, pmc2, gpr0
+> 007c14c3a6000000, mv, gpr0, pmc2
+> 007c15c2a6000000, mv, pmc3, gpr0
+> 007c15c3a6000000, mv, gpr0, pmc3
+> 007c16c2a6000000, mv, pmc4, gpr0
+> 007c16c3a6000000, mv, gpr0, pmc4
+> 007c17c2a6000000, mv, pmc5, gpr0
+> 007c17c3a6000000, mv, gpr0, pmc5
+> 007c18c2a6000000, mv, pmc6, gpr0
+> 007c18c3a6000000, mv, gpr0, pmc6 #PMC7,PMC8 not supported in P7
+> 007c14daa6000000, mv, pmcr, gpr0
+> 007c14dba6000000, mv, gpr0, pmcr
+> 007c00e2a6000000, mv, ppr, gpr0 #PPR=TSR - @04
+> 007c00e3a6000000, mv, gpr0, ppr
+> 007c15daa6000000, mv, rwmr, gpr0
+> 007c15dba6000000, mv, gpr0, rwmr
+> 007c1dc2a6000000, mv, sdar, gpr0
+> 007c1dc3a6000000, mv, gpr0, sdar
+> 007c1902a6000000, mv, sdr1, gpr0
+> 007c1903a6000000, mv, gpr0, sdr1
+> 007c1cc2a6000000, mv, siar, gpr0
+> 007c1cc3a6000000, mv, gpr0, siar
+> 007c1042a6000000, mv, sprg0, gpr0
+> 007c1043a6000000, mv, gpr0, sprg0
+> 007c1142a6000000, mv, sprg1, gpr0
+> 007c1143a6000000, mv, gpr0, sprg1
+> 007c1242a6000000, mv, sprg2, gpr0
+> 007c1243a6000000, mv, gpr0, sprg2
+> 007c1342a6000000, mv, sprg3, gpr0
+> 007c1343a6000000, mv, gpr0, sprg3
+> 007c144aa6000000, mv, spurr, gpr0
+> 007c144ba6000000, mv, gpr0, spurr
+> 007c1a02a6000000, mv, srr0, gpr0
+> 007c1a03a6000000, mv, gpr0, srr0
+> 007c1b02a6000000, mv, srr1, gpr0
+> 007c1b03a6000000, mv, gpr0, srr1
+> 007c0c42a6000000, mv, tb, gpr0
+> 007c0c43a6000000, mv, gpr0, tb
+> 007c1c42a6000000, mv, tbl, gpr0
+> 007c1c43a6000000, mv, gpr0, tbl
+> 007c1d42a6000000, mv, tbu, gpr0
+> 007c1d43a6000000, mv, gpr0, tbu
+> 007c1d4aa6000000, mv, tfmr, gpr0
+> 007c1d4ba6000000, mv, gpr0, tfmr
+> 007c1452a6000000, mv, tlbindexr, gpr0
+> 007c1453a6000000, mv, gpr0, tlbindexr
+> 007c1752a6000000, mv, tlblpidr, gpr0
+> 007c1753a6000000, mv, gpr0, tlblpidr
+> 007c17eaa6000000, mv, tlbrmt, gpr0
+> 007c17eba6000000, mv, gpr0, tlbrmt
+> 007c1652a6000000, mv, tlbrpnr, gpr0 #@05
+> 007c1653a6000000, mv, gpr0, tlbrpnr #@05
+> 007c1552a6000000, mv, tlbvpnr, gpr0
+> 007c1553a6000000, mv, gpr0, tlbvpnr
+> 007c10daa6000000, mv, trig0, gpr0
+> 007c10dba6000000, mv, gpr0, trig0 #@04
+> 007c11daa6000000, mv, trig1, gpr0
+> 007c11dba6000000, mv, gpr0, trig1 #@04
+> 007c12daa6000000, mv, trig2, gpr0
+> 007c12dba6000000, mv, gpr0, trig2 #@04
+> 007c19e2a6000000, mv, tscr, gpr0
+> 007c19e3a6000000, mv, gpr0, tscr
+> 007c1d22a6000000, mv, uamor, gpr0
+> 007c1d23a6000000, mv, gpr0, uamor
+> 007c0042a6000000, mv, vrsave, gpr0
+> 007c0043a6000000, mv, gpr0, vrsave
+350,413c354,417
+< 0F82A854C0000000, mv, scratch, gpr0 #mfSCOMD 0
+< 0F82A874C0000000, mv, gpr0, scratch #mtSCOMD 0
+< 0F86A854C0000000, mv, scratch, gpr1
+< 0F86A874C0000000, mv, gpr1, scratch
+< 0F8AA854C0000000, mv, scratch, gpr2
+< 0F8AA874C0000000, mv, gpr2, scratch
+< 0F8EA854C0000000, mv, scratch, gpr3
+< 0F8EA874C0000000, mv, gpr3, scratch
+< 0F92A854C0000000, mv, scratch, gpr4
+< 0F92A874C0000000, mv, gpr4, scratch
+< 0F96A854C0000000, mv, scratch, gpr5
+< 0F96A874C0000000, mv, gpr5, scratch
+< 0F9AA854C0000000, mv, scratch, gpr6
+< 0F9AA874C0000000, mv, gpr6, scratch
+< 0F9EA854C0000000, mv, scratch, gpr7
+< 0F9EA874C0000000, mv, gpr7, scratch
+< 0FA2A854C0000000, mv, scratch, gpr8
+< 0FA2A874C0000000, mv, gpr8, scratch
+< 0FA6A854C0000000, mv, scratch, gpr9
+< 0FA6A874C0000000, mv, gpr9, scratch
+< 0FAAA854C0000000, mv, scratch, gpr10
+< 0FAAA874C0000000, mv, gpr10, scratch
+< 0FAEA854C0000000, mv, scratch, gpr11
+< 0FAEA874C0000000, mv, gpr11, scratch
+< 0FB2A854C0000000, mv, scratch, gpr12
+< 0FB2A874C0000000, mv, gpr12, scratch
+< 0FB6A854C0000000, mv, scratch, gpr13
+< 0FB6A874C0000000, mv, gpr13, scratch
+< 0FBAA854C0000000, mv, scratch, gpr14
+< 0FBAA874C0000000, mv, gpr14, scratch
+< 0FBEA854C0000000, mv, scratch, gpr15
+< 0FBEA874C0000000, mv, gpr15, scratch
+< 0FC2A854C0000000, mv, scratch, gpr16
+< 0FC2A874C0000000, mv, gpr16, scratch
+< 0FC6A854C0000000, mv, scratch, gpr17
+< 0FC6A874C0000000, mv, gpr17, scratch
+< 0FCAA854C0000000, mv, scratch, gpr18
+< 0FCAA874C0000000, mv, gpr18, scratch
+< 0FCEA854C0000000, mv, scratch, gpr19
+< 0FCEA874C0000000, mv, gpr19, scratch
+< 0FD2A854C0000000, mv, scratch, gpr20
+< 0FD2A874C0000000, mv, gpr20, scratch
+< 0FD6A854C0000000, mv, scratch, gpr21
+< 0FD6A874C0000000, mv, gpr21, scratch
+< 0FDAA854C0000000, mv, scratch, gpr22
+< 0FDAA874C0000000, mv, gpr22, scratch
+< 0FDEA854C0000000, mv, scratch, gpr23
+< 0FDEA874C0000000, mv, gpr23, scratch
+< 0FE2A854C0000000, mv, scratch, gpr24
+< 0FE2A874C0000000, mv, gpr24, scratch
+< 0FE6A854C0000000, mv, scratch, gpr25
+< 0FE6A874C0000000, mv, gpr25, scratch
+< 0FEAA854C0000000, mv, scratch, gpr26
+< 0FEAA874C0000000, mv, gpr26, scratch
+< 0FEEA854C0000000, mv, scratch, gpr27
+< 0FEEA874C0000000, mv, gpr27, scratch
+< 0FF2A854C0000000, mv, scratch, gpr28
+< 0FF2A874C0000000, mv, gpr28, scratch
+< 0FF6A854C0000000, mv, scratch, gpr29
+< 0FF6A874C0000000, mv, gpr29, scratch
+< 0FFAA854C0000000, mv, scratch, gpr30
+< 0FFAA874C0000000, mv, gpr30, scratch
+< 0FFEA854C0000000, mv, scratch, gpr31
+< 0FFEA874C0000000, mv, gpr31, scratch
+---
+> 007c1542a6000000, mv, scratch, gpr0 #mfSCOMD 0
+> 007c1543a6000000, mv, gpr0, scratch #mtSCOMD 0
+> 007c3542a6000000, mv, scratch, gpr1
+> 007c3543a6000000, mv, gpr1, scratch
+> 007c5542a6000000, mv, scratch, gpr2
+> 007c5543a6000000, mv, gpr2, scratch
+> 007c7542a6000000, mv, scratch, gpr3
+> 007c7543a6000000, mv, gpr3, scratch
+> 007c9542a6000000, mv, scratch, gpr4
+> 007c9543a6000000, mv, gpr4, scratch
+> 007cb542a6000000, mv, scratch, gpr5
+> 007cb543a6000000, mv, gpr5, scratch
+> 007cd542a6000000, mv, scratch, gpr6
+> 007cd543a6000000, mv, gpr6, scratch
+> 007cf542a6000000, mv, scratch, gpr7
+> 007cf543a6000000, mv, gpr7, scratch
+> 007d1542a6000000, mv, scratch, gpr8
+> 007d1543a6000000, mv, gpr8, scratch
+> 007d3542a6000000, mv, scratch, gpr9
+> 007d3543a6000000, mv, gpr9, scratch
+> 007d5542a6000000, mv, scratch, gpr10
+> 007d5543a6000000, mv, gpr10, scratch
+> 007d7542a6000000, mv, scratch, gpr11
+> 007d7543a6000000, mv, gpr11, scratch
+> 007d9542a6000000, mv, scratch, gpr12
+> 007d9543a6000000, mv, gpr12, scratch
+> 007db542a6000000, mv, scratch, gpr13
+> 007db543a6000000, mv, gpr13, scratch
+> 007dd542a6000000, mv, scratch, gpr14
+> 007dd543a6000000, mv, gpr14, scratch
+> 007df542a6000000, mv, scratch, gpr15
+> 007df543a6000000, mv, gpr15, scratch
+> 007e1542a6000000, mv, scratch, gpr16
+> 007e1543a6000000, mv, gpr16, scratch
+> 007e3542a6000000, mv, scratch, gpr17
+> 007e3543a6000000, mv, gpr17, scratch
+> 007e5542a6000000, mv, scratch, gpr18
+> 007e5543a6000000, mv, gpr18, scratch
+> 007e7542a6000000, mv, scratch, gpr19
+> 007e7543a6000000, mv, gpr19, scratch
+> 007e9542a6000000, mv, scratch, gpr20
+> 007e9543a6000000, mv, gpr20, scratch
+> 007eb542a6000000, mv, scratch, gpr21
+> 007eb543a6000000, mv, gpr21, scratch
+> 007ed542a6000000, mv, scratch, gpr22
+> 007ed543a6000000, mv, gpr22, scratch
+> 007ef542a6000000, mv, scratch, gpr23
+> 007ef543a6000000, mv, gpr23, scratch
+> 007f1542a6000000, mv, scratch, gpr24
+> 007f1543a6000000, mv, gpr24, scratch
+> 007f3542a6000000, mv, scratch, gpr25
+> 007f3543a6000000, mv, gpr25, scratch
+> 007f5542a6000000, mv, scratch, gpr26
+> 007f5543a6000000, mv, gpr26, scratch
+> 007f7542a6000000, mv, scratch, gpr27
+> 007f7543a6000000, mv, gpr27, scratch
+> 007f9542a6000000, mv, scratch, gpr28
+> 007f9543a6000000, mv, gpr28, scratch
+> 007fb542a6000000, mv, scratch, gpr29
+> 007fb543a6000000, mv, gpr29, scratch
+> 007fd542a6000000, mv, scratch, gpr30
+> 007fd543a6000000, mv, gpr30, scratch
+> 007ff542a6000000, mv, scratch, gpr31
+> 007ff543a6000000, mv, gpr31, scratch
+421,484c425,488
+< 0F80002CC0000000, mv, gpr0, fpr0 #LFD 0 1
+< 0F80000CC0000000, mv, fpr0, gpr0 #STFD 0 1
+< 0F84002CC0000000, mv, gpr0, fpr1
+< 0F84000CC0000000, mv, fpr1, gpr0
+< 0F88002CC0000000, mv, gpr0, fpr2
+< 0F88000CC0000000, mv, fpr2, gpr0
+< 0F8C002CC0000000, mv, gpr0, fpr3
+< 0F8C000CC0000000, mv, fpr3, gpr0
+< 0F90002CC0000000, mv, gpr0, fpr4
+< 0F90000CC0000000, mv, fpr4, gpr0
+< 0F94002CC0000000, mv, gpr0, fpr5
+< 0F94000CC0000000, mv, fpr5, gpr0
+< 0F98002CC0000000, mv, gpr0, fpr6
+< 0F98000CC0000000, mv, fpr6, gpr0
+< 0F9C002CC0000000, mv, gpr0, fpr7
+< 0F9C000CC0000000, mv, fpr7, gpr0
+< 0FA0002CC0000000, mv, gpr0, fpr8
+< 0FA0000CC0000000, mv, fpr8, gpr0
+< 0FA4002CC0000000, mv, gpr0, fpr9
+< 0FA4000CC0000000, mv, fpr9, gpr0
+< 0FA8002CC0000000, mv, gpr0, fpr10
+< 0FA8000CC0000000, mv, fpr10, gpr0
+< 0FAC002CC0000000, mv, gpr0, fpr11
+< 0FAC000CC0000000, mv, fpr11, gpr0
+< 0FB0002CC0000000, mv, gpr0, fpr12
+< 0FB0000CC0000000, mv, fpr12, gpr0
+< 0FB4002CC0000000, mv, gpr0, fpr13
+< 0FB4000CC0000000, mv, fpr13, gpr0
+< 0FB8002CC0000000, mv, gpr0, fpr14
+< 0FB8000CC0000000, mv, fpr14, gpr0
+< 0FBC002CC0000000, mv, gpr0, fpr15
+< 0FBC000CC0000000, mv, fpr15, gpr0
+< 0FC0002CC0000000, mv, gpr0, fpr16
+< 0FC0000CC0000000, mv, fpr16, gpr0
+< 0FC4002CC0000000, mv, gpr0, fpr17
+< 0FC4000CC0000000, mv, fpr17, gpr0
+< 0FC8002CC0000000, mv, gpr0, fpr18
+< 0FC8000CC0000000, mv, fpr18, gpr0
+< 0FCC002CC0000000, mv, gpr0, fpr19
+< 0FCC000CC0000000, mv, fpr19, gpr0
+< 0FD0002CC0000000, mv, gpr0, fpr20
+< 0FD0000CC0000000, mv, fpr20, gpr0
+< 0FD4002CC0000000, mv, gpr0, fpr21
+< 0FD4000CC0000000, mv, fpr21, gpr0
+< 0FD8002CC0000000, mv, gpr0, fpr22
+< 0FD8000CC0000000, mv, fpr22, gpr0
+< 0FDC002CC0000000, mv, gpr0, fpr23
+< 0FDC000CC0000000, mv, fpr23, gpr0
+< 0FE0002CC0000000, mv, gpr0, fpr24
+< 0FE0000CC0000000, mv, fpr24, gpr0
+< 0FE4002CC0000000, mv, gpr0, fpr25
+< 0FE4000CC0000000, mv, fpr25, gpr0
+< 0FE8002CC0000000, mv, gpr0, fpr26
+< 0FE8000CC0000000, mv, fpr26, gpr0
+< 0FEC002CC0000000, mv, gpr0, fpr27
+< 0FEC000CC0000000, mv, fpr27, gpr0
+< 0FF0002CC0000000, mv, gpr0, fpr28
+< 0FF0000CC0000000, mv, fpr28, gpr0
+< 0FF4002CC0000000, mv, gpr0, fpr29
+< 0FF4000CC0000000, mv, fpr29, gpr0
+< 0FF8002CC0000000, mv, gpr0, fpr30
+< 0FF8000CC0000000, mv, fpr30, gpr0
+< 0FFC002CC0000000, mv, gpr0, fpr31
+< 0FFC000CC0000000, mv, fpr31, gpr0
+---
+> 007c000166000000, mv, gpr0, fpr0 #LFD 0 1
+> 007c000066000000, mv, fpr0, gpr0 #STFD 0 1
+> 007c200166000000, mv, gpr0, fpr1
+> 007c200066000000, mv, fpr1, gpr0
+> 007c400166000000, mv, gpr0, fpr2
+> 007c400066000000, mv, fpr2, gpr0
+> 007c600166000000, mv, gpr0, fpr3
+> 007c600066000000, mv, fpr3, gpr0
+> 007c800166000000, mv, gpr0, fpr4
+> 007c800066000000, mv, fpr4, gpr0
+> 007ca00166000000, mv, gpr0, fpr5
+> 007ca00066000000, mv, fpr5, gpr0
+> 007cc00166000000, mv, gpr0, fpr6
+> 007cc00066000000, mv, fpr6, gpr0
+> 007ce00166000000, mv, gpr0, fpr7
+> 007ce00066000000, mv, fpr7, gpr0
+> 007d000166000000, mv, gpr0, fpr8
+> 007d000066000000, mv, fpr8, gpr0
+> 007d200166000000, mv, gpr0, fpr9
+> 007d200066000000, mv, fpr9, gpr0
+> 007d400166000000, mv, gpr0, fpr10
+> 007d400066000000, mv, fpr10, gpr0
+> 007d600166000000, mv, gpr0, fpr11
+> 007d600066000000, mv, fpr11, gpr0
+> 007d800166000000, mv, gpr0, fpr12
+> 007d800066000000, mv, fpr12, gpr0
+> 007da00166000000, mv, gpr0, fpr13
+> 007da00066000000, mv, fpr13, gpr0
+> 007dc00166000000, mv, gpr0, fpr14
+> 007dc00066000000, mv, fpr14, gpr0
+> 007de00166000000, mv, gpr0, fpr15
+> 007de00066000000, mv, fpr15, gpr0
+> 007e000166000000, mv, gpr0, fpr16
+> 007e000066000000, mv, fpr16, gpr0
+> 007e200166000000, mv, gpr0, fpr17
+> 007e200066000000, mv, fpr17, gpr0
+> 007e400166000000, mv, gpr0, fpr18
+> 007e400066000000, mv, fpr18, gpr0
+> 007e600166000000, mv, gpr0, fpr19
+> 007e600066000000, mv, fpr19, gpr0
+> 007e800166000000, mv, gpr0, fpr20
+> 007e800066000000, mv, fpr20, gpr0
+> 007ea00166000000, mv, gpr0, fpr21
+> 007ea00066000000, mv, fpr21, gpr0
+> 007ec00166000000, mv, gpr0, fpr22
+> 007ec00066000000, mv, fpr22, gpr0
+> 007ee00166000000, mv, gpr0, fpr23
+> 007ee00066000000, mv, fpr23, gpr0
+> 007f000166000000, mv, gpr0, fpr24
+> 007f000066000000, mv, fpr24, gpr0
+> 007f200166000000, mv, gpr0, fpr25
+> 007f200066000000, mv, fpr25, gpr0
+> 007f400166000000, mv, gpr0, fpr26
+> 007f400066000000, mv, fpr26, gpr0
+> 007f600166000000, mv, gpr0, fpr27
+> 007f600066000000, mv, fpr27, gpr0
+> 007f800166000000, mv, gpr0, fpr28
+> 007f800066000000, mv, fpr28, gpr0
+> 007fa00166000000, mv, gpr0, fpr29
+> 007fa00066000000, mv, fpr29, gpr0
+> 007fc00166000000, mv, gpr0, fpr30
+> 007fc00066000000, mv, fpr30, gpr0
+> 007fe00166000000, mv, gpr0, fpr31
+> 007fe00066000000, mv, fpr31, gpr0
diff --git a/sbe/build/citest/etc/patches/patchlist.txt b/sbe/build/citest/etc/patches/patchlist.txt
index 6e932f48..4fd0444a 100644
--- a/sbe/build/citest/etc/patches/patchlist.txt
+++ b/sbe/build/citest/etc/patches/patchlist.txt
@@ -8,3 +8,7 @@
RTC: 144728
Files : pervasive.act.patch. Currently SUET does not support FSIMBOX KW. Once
support is in, remove this patch.
+
+RTC: 128984
+Files: chip.act.patch. Added call for executeInstruction module call.
+ p9.inst.patch. Added P9 specific commands for ramming.
diff --git a/sbe/build/citest/etc/workarounds.postsimsetup b/sbe/build/citest/etc/workarounds.postsimsetup
index 083ec4a7..209a7b3f 100755
--- a/sbe/build/citest/etc/workarounds.postsimsetup
+++ b/sbe/build/citest/etc/workarounds.postsimsetup
@@ -25,3 +25,14 @@ echo "+++ Patching standalone.simics"
mkdir -p $SANDBOXBASE/obj/ppc/simu/scripts/hbfw
cp $BACKING_BUILD/obj/ppc/simu/scripts/hbfw/standalone.simics $SANDBOXBASE/obj/ppc/simu/scripts/hbfw
patch -p0 $SANDBOXBASE/obj/ppc/simu/scripts/hbfw/standalone.simics $SBEROOT/sbe/build/citest/etc/patches/standalone.simics.patch
+
+echo " +++ Add executeInstruction module call"
+echo " patch -p0 $SANDBOXBASE/src/simu/data/cec-chip/chip.act $SBEROOT/sbe/build/citest/etc/patches/chip.act.patch"
+patch -p0 $SANDBOXBASE/src/simu/data/cec-chip/chip.act $SBEROOT/sbe/build/citest/etc/patches/chip.act.patch
+
+echo " +++ Update ramming instructions"
+echo " cp $BACKING_BUILD/src/simu/data/cec-chip/p9.inst $SANDBOXBASE/src/simu/data/cec-chip/p9.inst"
+echo " patch -p0 $SANDBOXBASE/src/simu/data/cec-chip/p9.inst $SBEROOT/sbe/build/citest/etc/patches/p9.inst.patch"
+cp $BACKING_BUILD/src/simu/data/cec-chip/p9.inst $SANDBOXBASE/src/simu/data/cec-chip/p9.inst
+patch -p0 $SANDBOXBASE/src/simu/data/cec-chip/p9.inst $SBEROOT/sbe/build/citest/etc/patches/p9.inst.patch
+
diff --git a/sbe/sbefw/sbeFifoMsgUtils.C b/sbe/sbefw/sbeFifoMsgUtils.C
index f926bfdd..a86f1363 100644
--- a/sbe/sbefw/sbeFifoMsgUtils.C
+++ b/sbe/sbefw/sbeFifoMsgUtils.C
@@ -294,3 +294,43 @@ uint32_t sbeDownFifoSignalEot (void)
#undef SBE_FUNC
}
+
+uint32_t sbeDsSendRespHdr(const sbeRespGenHdr_t &i_hdr,
+ const sbeResponseFfdc_t &i_ffdc )
+{
+ uint32_t rc = SBE_SEC_OPERATION_SUCCESSFUL;
+ do
+ {
+ uint32_t distance = 1; //initialise by 1 for entry count itself.
+ uint32_t len = sizeof( i_hdr )/sizeof(uint32_t);
+ // sbeDownFifoEnq_mult.
+ rc = sbeDownFifoEnq_mult ( len, ( uint32_t *) &i_hdr);
+ if (rc)
+ {
+ break;
+ }
+ distance += len;
+
+ // If no ffdc , exit;
+ if( i_ffdc.getRc() )
+ {
+ len = sizeof(i_ffdc)/sizeof(uint32_t);
+ rc = sbeDownFifoEnq_mult ( len, ( uint32_t *) &i_ffdc);
+ if (rc)
+ {
+ break;
+ }
+ distance += len;
+ }
+ len = sizeof(distance)/sizeof(uint32_t);
+ //@TODO via RTC 129076.
+ //Need to add FFDC data as well.
+ rc = sbeDownFifoEnq_mult ( len, &distance);
+ if (rc)
+ {
+ break;
+ }
+
+ }while(0);
+ return rc;
+}
diff --git a/sbe/sbefw/sbeFifoMsgUtils.H b/sbe/sbefw/sbeFifoMsgUtils.H
index 83d033c4..d9d460f3 100644
--- a/sbe/sbefw/sbeFifoMsgUtils.H
+++ b/sbe/sbefw/sbeFifoMsgUtils.H
@@ -155,4 +155,15 @@ void sbeBuildMinRespHdr ( uint32_t *io_pBuf,
*/
uint32_t sbeDownFifoSignalEot (void);
+/**
+ * @brief sbeDsSendRespHdr : Send response header to DS FIFO
+ * - This also sends the FFDC if exist.
+ *
+ * @param[in] i_hdr Response Header
+ * @param[in] i_ffdc FFDC object
+ *
+ * @return Rc from the underlying scom utility
+ */
+uint32_t sbeDsSendRespHdr(const sbeRespGenHdr_t &i_hdr,
+ const sbeResponseFfdc_t &i_ffdc );
#endif // __SBEFW_SBEFIFOMSGUTILS_H
diff --git a/sbe/sbefw/sbeSpMsg.H b/sbe/sbefw/sbeSpMsg.H
index 7d8e3fb1..df2730cb 100644
--- a/sbe/sbefw/sbeSpMsg.H
+++ b/sbe/sbefw/sbeSpMsg.H
@@ -144,7 +144,7 @@ typedef struct sbeResponseFfdc
*
* @return fapiRc
*/
- uint32_t getRc()
+ uint32_t getRc() const
{
return lowFapiRc;
}
@@ -475,5 +475,50 @@ typedef struct
}
}
}sbeCntlInstRegMsgHdr_t;
+/**
+ * @brief Reg access message header
+ */
+typedef struct
+{
+ uint32_t reserved:8;
+ uint32_t coreChiplet:8;
+ uint32_t threadNr:4;
+ uint32_t regType:4;
+ uint32_t numRegs:8;
+
+ /**
+ * @brief checks if it is valid request.
+ *
+ * @return true if valid request, false otherwise
+ */
+ bool isValidRequest() const
+ {
+ return (( SBE_REG_ACCESS_FPR >= regType )
+ &&( SBE_MAX_REG_ACCESS_REGS >= numRegs )
+ &&( SMT4_THREAD3 >= threadNr )
+ &&( SMT4_CORE0_ID <= coreChiplet )
+ &&( SMT4_CORE_ID_MAX >= coreChiplet )) ? true:false;
+ }
+}sbeRegAccessMsgHdr_t;
+
+/**
+ * @brief reg scom package
+ */
+typedef struct
+{
+ uint32_t regNr;
+ uint32_t hiData;
+ uint32_t lowData;
+
+ /**
+ * @brief data for a register.
+ *
+ * @return data.
+ */
+ uint64_t getData() const
+ {
+ return (((uint64_t)hiData << 32 ) | lowData );
+ }
+}sbeRegAccessPackage_t;
#endif // __SBEFW_SBESP_MSG_H
diff --git a/sbe/sbefw/sbe_sp_intf.H b/sbe/sbefw/sbe_sp_intf.H
index 7f5fac19..62894b6a 100644
--- a/sbe/sbefw/sbe_sp_intf.H
+++ b/sbe/sbefw/sbe_sp_intf.H
@@ -286,6 +286,10 @@ enum sbeSramAccessMode
DEBUG_MODE = 0x2,
CIRCULAR_MODE = 0x3,
};
+/*
+ * Constants for maximum number of register supported in reg access chipop.
+ */
+static const uint32_t SBE_MAX_REG_ACCESS_REGS = 64;
/**
* @brief Error Mode enum
@@ -330,6 +334,17 @@ enum sbeThreadOps
THREAD_SRESET_INS = 0x3,
};
+/**
+ * @brief enums for Reg access register type
+ *
+ */
+enum sbeRegAccesRegType
+{
+ SBE_REG_ACCESS_GPR = 0x00,
+ SBE_REG_ACCESS_SPR = 0x01,
+ SBE_REG_ACCESS_FPR = 0x02,
+};
+
#ifdef __cplusplus
}
#endif
diff --git a/sbe/sbefw/sbecmdgeneric.C b/sbe/sbefw/sbecmdgeneric.C
index 8fe7b6a2..a1d62aa5 100644
--- a/sbe/sbefw/sbecmdgeneric.C
+++ b/sbe/sbefw/sbecmdgeneric.C
@@ -44,6 +44,9 @@ sbeCapabilityRespMsg::sbeCapabilityRespMsg()
capability[INSTRUCTION_CTRL_CAPABILITY_START_IDX] =
CONTROL_INSTRUCTIONS_SUPPPORTED;
+ capability[REGISTER_CAPABILITY_START_IDX] =
+ GET_REGISTER_SUPPPORTED |
+ PUT_REGISTER_SUPPPORTED ;
}
// Functions
//----------------------------------------------------------------------------
diff --git a/sbe/sbefw/sbecmdparser.C b/sbe/sbefw/sbecmdparser.C
index 6769be77..9dc6c094 100644
--- a/sbe/sbefw/sbecmdparser.C
+++ b/sbe/sbefw/sbecmdparser.C
@@ -10,6 +10,7 @@
#include "sbecmdiplcontrol.H"
#include "sbecmdgeneric.H"
#include "sbecmdmemaccess.H"
+#include "sbecmdregaccess.H"
#include "sbecmdcntrldmt.H"
#include "sbecmdsram.H"
#include "sbecmdcntlinst.H"
@@ -114,6 +115,22 @@ static sbeCmdStruct_t g_sbeInstructionCntlCmdArray[] =
SBE_FENCE_AT_CONTINUOUS_IPL,
},
};
+//////////////////////////////////////////////////////////////
+// @brief g_sbeRegAccessCmdArray
+//
+//////////////////////////////////////////////////////////////
+static sbeCmdStruct_t g_sbeRegAccessCmdArray [] =
+{
+ {sbeGetReg,
+ SBE_CMD_GETREG,
+ SBE_FENCE_AT_CONTINUOUS_IPL,
+ },
+
+ {sbePutReg,
+ SBE_CMD_PUTREG,
+ SBE_FENCE_AT_CONTINUOUS_IPL,
+ },
+};
//////////////////////////////////////////////////////////////
// @brief g_sbeCoreStateControlCmdArray
@@ -170,6 +187,12 @@ uint8_t sbeGetCmdStructAttr (const uint8_t i_cmdClass,
*o_ppCmd = (sbeCmdStruct_t*)g_sbeInstructionCntlCmdArray;
break;
+ case SBE_CMD_CLASS_REGISTER_ACCESS:
+ l_numCmds = sizeof(g_sbeRegAccessCmdArray) /
+ sizeof(sbeCmdStruct_t);
+ *o_ppCmd = (sbeCmdStruct_t*)g_sbeRegAccessCmdArray;
+ break;
+
// PSU Commands
case SBE_PSU_CMD_CLASS_CORE_STATE:
l_numCmds = sizeof(g_sbeCoreStateControlCmdArray) /
diff --git a/sbe/sbefw/sbecmdregaccess.C b/sbe/sbefw/sbecmdregaccess.C
new file mode 100644
index 00000000..1b0fbe39
--- /dev/null
+++ b/sbe/sbefw/sbecmdregaccess.C
@@ -0,0 +1,248 @@
+/*
+ * @file: ppe/sbe/sbefw/sbecmdregaccess.C
+ *
+ * @brief This file contains the SBE Reg Access chipOps
+ *
+ */
+
+#include "sbecmdregaccess.H"
+#include "sbefifo.H"
+#include "sbe_sp_intf.H"
+#include "sbetrace.H"
+#include "sbeFifoMsgUtils.H"
+#include "p9_ram_core.H"
+
+using namespace fapi2;
+
+Enum_RegType getRegType( const sbeRegAccessMsgHdr_t &regReq)
+{
+ Enum_RegType type = REG_GPR;
+ switch( regReq.regType )
+ {
+ case SBE_REG_ACCESS_SPR:
+ type = REG_SPR;
+ break;
+
+ case SBE_REG_ACCESS_FPR:
+ type = REG_FPR;
+ break;
+ }
+ return type;
+}
+
+//////////////////////////////////////////////////////
+//////////////////////////////////////////////////////
+uint32_t sbeGetReg(uint8_t *i_pArg)
+{
+ #define SBE_FUNC " sbeGetReg "
+ SBE_ENTER(SBE_FUNC);
+
+ uint32_t rc = SBE_SEC_OPERATION_SUCCESSFUL;
+ sbeRegAccessMsgHdr_t regReqMsg;
+ uint32_t reqData[SBE_MAX_REG_ACCESS_REGS];
+ sbeRespGenHdr_t respHdr;
+ respHdr.init();
+ sbeResponseFfdc_t ffdc;
+ ReturnCode fapiRc;
+
+ do
+ {
+ // Get the reg access header
+ uint32_t len = sizeof(sbeRegAccessMsgHdr_t)/sizeof(uint32_t);
+ rc = sbeUpFifoDeq_mult (len, (uint32_t *)&regReqMsg, false);
+
+ // If FIFO access failure
+ if (rc != SBE_SEC_OPERATION_SUCCESSFUL)
+ {
+ // Let command processor routine to handle the RC.
+ break;
+ }
+ if( false == regReqMsg.isValidRequest() )
+ {
+ SBE_ERROR(SBE_FUNC" Invalid request. core: 0x%02x threadNr:0x%x"
+ " regType:0x%01x numRegs:0x%02x", regReqMsg.coreChiplet,
+ regReqMsg.threadNr, regReqMsg.regType, regReqMsg.numRegs);
+
+ respHdr.setStatus( SBE_PRI_INVALID_DATA,
+ SBE_SEC_GENERIC_FAILURE_IN_EXECUTION);
+ break;
+ }
+
+ len = regReqMsg.numRegs;
+ rc = sbeUpFifoDeq_mult (len, reqData, true);
+ if (rc != SBE_SEC_OPERATION_SUCCESSFUL)
+ {
+ break;
+ }
+ uint8_t core = regReqMsg.coreChiplet;
+ RamCore ramCore( plat_getTargetHandleByChipletNumber(core),
+ regReqMsg.threadNr );
+
+ fapiRc = ramCore.ram_setup();
+ if( fapiRc != FAPI2_RC_SUCCESS )
+ {
+ SBE_ERROR(SBE_FUNC" ram_setup failed. threadNr:0x%x"
+ "chipletId:0x%02x", regReqMsg.threadNr, core);
+ respHdr.setStatus( SBE_PRI_GENERIC_EXECUTION_FAILURE,
+ SBE_SEC_GENERIC_FAILURE_IN_EXECUTION);
+ ffdc.setRc(fapiRc);
+ break;
+ }
+
+ fapi2::buffer<uint64_t> data64;
+ uint64_t respData = 0;
+ for( uint32_t regIdx = 0; regIdx < regReqMsg.numRegs; regIdx++ )
+ {
+ fapiRc = ramCore.get_reg( getRegType(regReqMsg), reqData[regIdx],
+ &data64, true );
+ if( fapiRc != FAPI2_RC_SUCCESS )
+ {
+ SBE_ERROR(SBE_FUNC" get_reg failed. threadNr:0x%x"
+ "chipletId:0x%02x, regNr:%u regType:%u ",
+ regReqMsg.threadNr, core, reqData[regIdx],
+ regReqMsg.regType);
+ respHdr.setStatus( SBE_PRI_GENERIC_EXECUTION_FAILURE,
+ SBE_SEC_GENERIC_FAILURE_IN_EXECUTION);
+ ffdc.setRc(fapiRc);
+ break;
+ }
+ SBE_DEBUG(SBE_FUNC" getting response data");
+ respData = data64;
+ // Now enqueue into the downstream FIFO
+ len = sizeof( respData )/sizeof(uint32_t);
+ rc = sbeDownFifoEnq_mult (len, ( uint32_t *)&respData);
+ if (rc)
+ {
+ break;
+ }
+ }
+ // HWP team does not care about cleanup for failure case.
+ // So call cleaup only for success case.
+ if( ffdc.getRc() )
+ {
+ break;
+ }
+ fapiRc = ramCore.ram_cleanup();
+ if( fapiRc != FAPI2_RC_SUCCESS )
+ {
+ SBE_ERROR(SBE_FUNC" ram_cleanup failed. threadNr:0x%x"
+ "chipletId:0x%02x", regReqMsg.threadNr, core);
+ respHdr.setStatus( SBE_PRI_GENERIC_EXECUTION_FAILURE,
+ SBE_SEC_GENERIC_FAILURE_IN_EXECUTION);
+ ffdc.setRc(fapiRc);
+ }
+ }while(false);
+
+ if ( SBE_SEC_OPERATION_SUCCESSFUL == rc )
+ {
+ rc = sbeDsSendRespHdr( respHdr, ffdc);
+ }
+
+ return rc;
+ #undef SBE_FUNC
+}
+//////////////////////////////////////////////////////
+//////////////////////////////////////////////////////
+uint32_t sbePutReg(uint8_t *i_pArg)
+{
+ #define SBE_FUNC " sbePutReg "
+ SBE_ENTER(SBE_FUNC);
+
+ uint32_t rc = SBE_SEC_OPERATION_SUCCESSFUL;
+ sbeRegAccessMsgHdr_t regReqMsg;
+ sbeRespGenHdr_t respHdr;
+ respHdr.init();
+ sbeResponseFfdc_t ffdc;
+ ReturnCode fapiRc;
+
+ do
+ {
+ // Get the reg access header
+ uint32_t len = sizeof(sbeRegAccessMsgHdr_t)/sizeof(uint32_t);
+ rc = sbeUpFifoDeq_mult (len, (uint32_t *)&regReqMsg, false);
+
+ // If FIFO access failure
+ if (rc != SBE_SEC_OPERATION_SUCCESSFUL)
+ {
+ // Let command processor routine to handle the RC.
+ break;
+ }
+ if( false == regReqMsg.isValidRequest() )
+ {
+ SBE_ERROR(SBE_FUNC" Invalid request. threadNr:0x%x"
+ " regType:0x%02x numRegs:0x%02x", regReqMsg.threadNr,
+ regReqMsg.regType, regReqMsg.numRegs);
+ respHdr.setStatus( SBE_PRI_INVALID_DATA,
+ SBE_SEC_GENERIC_FAILURE_IN_EXECUTION);
+ break;
+ }
+
+ sbeRegAccessPackage_t regPkg[SBE_MAX_REG_ACCESS_REGS];
+ len = (sizeof(sbeRegAccessPackage_t)/sizeof(uint32_t)) *
+ regReqMsg.numRegs;
+ rc = sbeUpFifoDeq_mult (len, (uint32_t *) regPkg,true );
+ if (rc != SBE_SEC_OPERATION_SUCCESSFUL)
+ {
+ break;
+ }
+ uint8_t core = regReqMsg.coreChiplet;
+ RamCore ramCore( plat_getTargetHandleByChipletNumber(core),
+ regReqMsg.threadNr );
+
+ fapiRc = ramCore.ram_setup();
+ if( fapiRc != FAPI2_RC_SUCCESS )
+ {
+ SBE_ERROR(SBE_FUNC" ram_setup failed. threadNr:0x%x"
+ "chipletId:0x%02x", regReqMsg.threadNr, core);
+ respHdr.setStatus( SBE_PRI_GENERIC_EXECUTION_FAILURE,
+ SBE_SEC_GENERIC_FAILURE_IN_EXECUTION);
+ ffdc.setRc(fapiRc);
+ break;
+ }
+
+ fapi2::buffer<uint64_t> data64;
+ for( uint32_t regIdx = 0; regIdx < regReqMsg.numRegs; regIdx++ )
+ {
+ data64 = regPkg[regIdx].getData();
+ fapiRc = ramCore.put_reg( getRegType(regReqMsg),
+ regPkg[regIdx].regNr,
+ &data64, true );
+ if( fapiRc != FAPI2_RC_SUCCESS )
+ {
+ SBE_ERROR(SBE_FUNC" get_reg failed. threadNr:0x%x"
+ "chipletId:0x%02x, regNr:%u regType:%u ",
+ regReqMsg.threadNr, core, regPkg[regIdx].regNr,
+ regReqMsg.regType);
+ respHdr.setStatus( SBE_PRI_GENERIC_EXECUTION_FAILURE,
+ SBE_SEC_GENERIC_FAILURE_IN_EXECUTION);
+ ffdc.setRc(fapiRc);
+ break;
+ }
+ }
+ // HWP team does not care about cleanup for failure case.
+ // So call cleaup only for success case.
+ if( ffdc.getRc() )
+ {
+ break;
+ }
+ fapiRc = ramCore.ram_cleanup();
+ if( fapiRc )
+ {
+ SBE_ERROR(SBE_FUNC" ram_cleanup failed. threadNr:0x%x"
+ " chipletId:0x%02x", regReqMsg.threadNr, core);
+ respHdr.setStatus( SBE_PRI_GENERIC_EXECUTION_FAILURE,
+ SBE_SEC_GENERIC_FAILURE_IN_EXECUTION);
+ ffdc.setRc(fapiRc);
+ }
+
+ }while(false);
+
+ if ( SBE_SEC_OPERATION_SUCCESSFUL == rc )
+ {
+ rc = sbeDsSendRespHdr( respHdr, ffdc);
+ }
+
+ return rc;
+ #undef SBE_FUNC
+}
+
diff --git a/sbe/sbefw/sbecmdregaccess.H b/sbe/sbefw/sbecmdregaccess.H
new file mode 100644
index 00000000..b297fc59
--- /dev/null
+++ b/sbe/sbefw/sbecmdregaccess.H
@@ -0,0 +1,33 @@
+/*
+ * @file: ppe/sbe/sbefw/sbecmdregaccess.H
+ *
+ * @brief This file contains the Interfaces for the SCOM Access chip-ops
+ *
+ */
+
+#ifndef __SBEFW_SBECMDREGACCESS_H
+#define __SBEFW_SBECMDREGACCESS_H
+
+#include <stdint.h>
+
+/**
+ * @brief sbeGetRegs : Get the reg data
+ *
+ * @param[in] i_pArg Buffer to be passed to the function (not used as of now)
+ *
+ * @return Rc from the FIFO access utility
+ */
+uint32_t sbeGetReg(uint8_t *i_pArg);
+
+
+/**
+ * @brief sbePutRegs : Put the reg data
+ *
+ * @param[in] i_pArg Buffer to be passed to the function (not used as of now)
+ *
+ * @return Rc from the FIFO access utility
+ */
+uint32_t sbePutReg(uint8_t *i_pArg);
+
+
+#endif /* __SBEFW_SBECMDREGACCESS_H */
diff --git a/sbe/sbefw/sbefwfiles.mk b/sbe/sbefw/sbefwfiles.mk
index f666bdb6..d38df07d 100644
--- a/sbe/sbefw/sbefwfiles.mk
+++ b/sbe/sbefw/sbefwfiles.mk
@@ -14,6 +14,8 @@ SBEFW-CPP-SOURCES += sbecmdcntrldmt.C
SBEFW-CPP-SOURCES += sbecmdsram.C
SBEFW-CPP-SOURCES += sberegaccess.C
SBEFW-CPP-SOURCES += sbecmdcntlinst.C
+SBEFW-CPP-SOURCES += sbecmdregaccess.C
+
SBEFW-C-SOURCES =
SBEFW-S-SOURCES =
diff --git a/sbe/test/test.xml b/sbe/test/test.xml
index 6fb16651..07d1f1a0 100755
--- a/sbe/test/test.xml
+++ b/sbe/test/test.xml
@@ -10,6 +10,7 @@
<include>../simics/targets/p9_nimbus/sbeTest/testPutGetMem.xml</include>
<include>../simics/targets/p9_nimbus/sbeTest/testSram.xml</include>
<include>../simics/targets/p9_nimbus/sbeTest/testCntlInstruction.xml</include>
+ <include>../simics/targets/p9_nimbus/sbeTest/testRegAccess.xml</include>
<testcase>
<simcmd>sbe-trace 0</simcmd>
</testcase>
diff --git a/sbe/test/testGetCapabilities.py b/sbe/test/testGetCapabilities.py
index 4fb13a7f..f9292532 100755
--- a/sbe/test/testGetCapabilities.py
+++ b/sbe/test/testGetCapabilities.py
@@ -17,7 +17,7 @@ EXPDATA1 = [0x0,0x0,0x0,0x0,
EXPDATA2 = [0xa4,0x0,0x0,0x0f, #GetMemPba/PutMemPba/GetSramOcc/PutSramOcc
0x0,0x0,0x0,0x0,
- 0x0,0x0,0x0,0x0,
+ 0xa5,0x0,0x0,0x03, #GetReg/PutReg
0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,
diff --git a/sbe/test/testPutGetRegFpr.py b/sbe/test/testPutGetRegFpr.py
new file mode 100755
index 00000000..63cf4186
--- /dev/null
+++ b/sbe/test/testPutGetRegFpr.py
@@ -0,0 +1,58 @@
+import sys
+sys.path.append("targets/p9_nimbus/sbeTest" )
+import testUtil
+err = False
+
+PUTREG_TESTDATA = [0,0,0,9,
+ 0,0,0xA5,0x02,
+ 0x00,0x20,0x02,0x02, # two fpr registers
+ 0,0,0x0,0x01,
+ 0,0,0x0,0x0,
+ 0,0,0x0,0x1,
+ 0,0,0x0,0x02,
+ 0,0,0x0,0x0,
+ 0,0,0x0,0x2 ]
+
+PUTREG_EXPDATA = [0xc0,0xde,0xa5,0x02,
+ 0x0,0x0,0x0,0x0,
+ 0x00,0x0,0x0,0x03];
+
+GETREG_TESTDATA = [0,0,0,5,
+ 0,0,0xA5,0x01,
+ 0x00,0x20,0x02,0x02, #two fpr registers
+ 0,0,0x0,0x01,
+ 0,0,0x0,0x02 ]
+
+GETREG_EXPDATA = [0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x01,
+ 0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x02,
+ 0xc0,0xde,0xa5,0x01,
+ 0x0,0x0,0x0,0x0,
+ 0x00,0x0,0x0,0x03];
+
+# MAIN Test Run Starts Here...
+#-------------------------------------------------
+def main( ):
+ testUtil.runCycles( 10000000 )
+ testUtil.writeUsFifo( PUTREG_TESTDATA )
+ testUtil.writeEot( )
+ testUtil.readDsFifo( PUTREG_EXPDATA )
+ testUtil.readEot( )
+ testUtil.writeUsFifo( GETREG_TESTDATA )
+ testUtil.writeEot( )
+ testUtil.readDsFifo( GETREG_EXPDATA )
+ testUtil.readEot( )
+
+#-------------------------------------------------
+# Calling all test code
+#-------------------------------------------------
+main()
+
+if err:
+ print ("\nTest Suite completed with error(s)")
+ #sys.exit(1)
+else:
+ print ("\nTest Suite completed with no errors")
+ #sys.exit(0);
+
diff --git a/sbe/test/testPutGetRegGpr.py b/sbe/test/testPutGetRegGpr.py
new file mode 100755
index 00000000..ce5891e7
--- /dev/null
+++ b/sbe/test/testPutGetRegGpr.py
@@ -0,0 +1,58 @@
+import sys
+sys.path.append("targets/p9_nimbus/sbeTest" )
+import testUtil
+err = False
+
+PUTREG_TESTDATA = [0,0,0,9,
+ 0,0,0xA5,0x02,
+ 0x00,0x20,0x00,0x02, # two gpr registers
+ 0,0,0x0,0x07,
+ 0,0,0x0,0x0,
+ 0,0,0x0,0x1,
+ 0,0,0x0,0x08,
+ 0,0,0x0,0x0,
+ 0,0,0x0,0x2 ]
+
+PUTREG_EXPDATA = [0xc0,0xde,0xa5,0x02,
+ 0x0,0x0,0x0,0x0,
+ 0x00,0x0,0x0,0x03];
+
+GETREG_TESTDATA = [0,0,0,5,
+ 0,0,0xA5,0x01,
+ 0x00,0x20,0x00,0x02, # two gpr registers
+ 0,0,0x0,0x07,
+ 0,0,0x0,0x08 ]
+
+GETREG_EXPDATA = [0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x01,
+ 0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x02,
+ 0xc0,0xde,0xa5,0x01,
+ 0x0,0x0,0x0,0x0,
+ 0x00,0x0,0x0,0x03];
+
+# MAIN Test Run Starts Here...
+#-------------------------------------------------
+def main( ):
+ testUtil.runCycles( 10000000 )
+ testUtil.writeUsFifo( PUTREG_TESTDATA )
+ testUtil.writeEot( )
+ testUtil.readDsFifo( PUTREG_EXPDATA )
+ testUtil.readEot( )
+ testUtil.writeUsFifo( GETREG_TESTDATA )
+ testUtil.writeEot( )
+ testUtil.readDsFifo( GETREG_EXPDATA )
+ testUtil.readEot( )
+
+#-------------------------------------------------
+# Calling all test code
+#-------------------------------------------------
+main()
+
+if err:
+ print ("\nTest Suite completed with error(s)")
+ #sys.exit(1)
+else:
+ print ("\nTest Suite completed with no errors")
+ #sys.exit(0);
+
diff --git a/sbe/test/testPutGetRegSpr.py b/sbe/test/testPutGetRegSpr.py
new file mode 100755
index 00000000..82f7c8d2
--- /dev/null
+++ b/sbe/test/testPutGetRegSpr.py
@@ -0,0 +1,58 @@
+import sys
+sys.path.append("targets/p9_nimbus/sbeTest" )
+import testUtil
+err = False
+
+PUTREG_TESTDATA = [0,0,0,9,
+ 0,0,0xA5,0x02,
+ 0x00,0x20,0x01,0x02, # two spr registers
+ 0,0,0x0,0x08,
+ 0,0,0x0,0x0,
+ 0,0,0x0,0x1,
+ 0,0,0x0,0x09,
+ 0,0,0x0,0x0,
+ 0,0,0x0,0x2 ]
+
+PUTREG_EXPDATA = [0xc0,0xde,0xa5,0x02,
+ 0x0,0x0,0x0,0x0,
+ 0x00,0x0,0x0,0x03];
+
+GETREG_TESTDATA = [0,0,0,5,
+ 0,0,0xA5,0x01,
+ 0x00,0x20,0x01,0x02, # two spr registers
+ 0,0,0x0,0x08,
+ 0,0,0x0,0x09 ]
+
+GETREG_EXPDATA = [0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x01,
+ 0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x02,
+ 0xc0,0xde,0xa5,0x01,
+ 0x0,0x0,0x0,0x0,
+ 0x00,0x0,0x0,0x03];
+
+# MAIN Test Run Starts Here...
+#-------------------------------------------------
+def main( ):
+ testUtil.runCycles( 10000000 )
+ testUtil.writeUsFifo( PUTREG_TESTDATA )
+ testUtil.writeEot( )
+ testUtil.readDsFifo( PUTREG_EXPDATA )
+ testUtil.readEot( )
+ testUtil.writeUsFifo( GETREG_TESTDATA )
+ testUtil.writeEot( )
+ testUtil.readDsFifo( GETREG_EXPDATA )
+ testUtil.readEot( )
+
+#-------------------------------------------------
+# Calling all test code
+#-------------------------------------------------
+main()
+
+if err:
+ print ("\nTest Suite completed with error(s)")
+ #sys.exit(1)
+else:
+ print ("\nTest Suite completed with no errors")
+ #sys.exit(0);
+
diff --git a/sbe/test/testRegAccess.xml b/sbe/test/testRegAccess.xml
new file mode 100755
index 00000000..53cfa4c1
--- /dev/null
+++ b/sbe/test/testRegAccess.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <testcase>
+ <simcmd>run-python-file targets/p9_nimbus/sbeTest/testPutGetRegGpr.py</simcmd>
+ <exitonerror>yes</exitonerror>
+ </testcase>
+ <testcase>
+ <simcmd>run-python-file targets/p9_nimbus/sbeTest/testPutGetRegFpr.py</simcmd>
+ <exitonerror>yes</exitonerror>
+ </testcase>
+ <testcase>
+ <simcmd>run-python-file targets/p9_nimbus/sbeTest/testPutGetRegSpr.py</simcmd>
+ <exitonerror>yes</exitonerror>
+ </testcase>
+
OpenPOWER on IntegriCloud