1
0
mirror of https://github.com/wfjm/w11.git synced 2026-04-26 04:08:17 +00:00
Files
wfjm.w11/tools/tcl/rbmoni/test_regs.tcl
2018-09-21 19:35:31 +02:00

168 lines
7.2 KiB
Tcl

# $Id: test_regs.tcl 1044 2018-09-15 11:12:07Z mueller $
#
# Copyright 2011-2017 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
# This program is free software; you may redistribute and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for complete details.
#
# Revision History:
# Date Rev Version Comment
# 2017-04-29 888 3.1 add data/addr logic tests
# 2017-04-13 873 3.0 adopt to revised interface
# 2015-04-03 661 2.1 drop estatdef (stat err check default now)
# 2014-12-27 622 2.0 rbd_rbmon reorganized, supports now 16 bit addresses
# 2011-03-27 374 1.0 Initial version
# 2011-03-13 369 0.1 First Draft
#
package provide rbmoni 1.0
package require rutiltpp
package require rutil
package require rlink
namespace eval rbmoni {
#
# Basic access tests for rbmoni registers
#
proc test_regs {} {
#
set errcnt 0
rlc errcnt -clear
#
rlc log "rbmoni::test_regs - start"
#
#-------------------------------------------------------------------------
rlc log " A basic register access tests -----------------------------"
rlc log " A1: write/read cntl---------------------------------"
# test that starting captures option flags, and that stoping keeps them
rlc exec \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STA"}] \
-rreg rm.cntl -edata [regbld rbmoni::CNTL] \
-wreg rm.cntl [regbld rbmoni::CNTL wstop {func "STA"}] \
-rreg rm.cntl -edata [regbld rbmoni::CNTL wstop] \
-wreg rm.cntl [regbld rbmoni::CNTL rcolr {func "STA"}] \
-rreg rm.cntl -edata [regbld rbmoni::CNTL rcolr] \
-wreg rm.cntl [regbld rbmoni::CNTL rcolw {func "STA"}] \
-rreg rm.cntl -edata [regbld rbmoni::CNTL rcolw] \
-wreg rm.cntl [regbld rbmoni::CNTL rcolw rcolr {func "STA"}] \
-rreg rm.cntl -edata [regbld rbmoni::CNTL rcolw rcolr] \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STO"}] \
-rreg rm.cntl -edata [regbld rbmoni::CNTL rcolw rcolr]
#
#-------------------------------------------------------------------------
rlc log " A2: write cntl, read stat --------------------------"
# test that susp/run follow functions set to cntl
rlc exec \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STA"}] \
-rreg rm.stat -edata [regbld rbmoni::STAT run] \
-wreg rm.cntl [regbld rbmoni::CNTL {func "SUS"}] \
-rreg rm.stat -edata [regbld rbmoni::STAT susp run] \
-wreg rm.cntl [regbld rbmoni::CNTL {func "RES"}] \
-rreg rm.stat -edata [regbld rbmoni::STAT run] \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STO"}] \
-rreg rm.stat -edata [regbld rbmoni::STAT]
# test that suspend/resume of a stopped system is a noop
rlc exec \
-wreg rm.cntl [regbld rbmoni::CNTL {func "SUS"}] \
-rreg rm.stat -edata [regbld rbmoni::STAT] \
-wreg rm.cntl [regbld rbmoni::CNTL {func "RES"}] \
-rreg rm.stat -edata [regbld rbmoni::STAT]
# test that start of a suspended system clears suspend
rlc exec \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STA"}] \
-rreg rm.stat -edata [regbld rbmoni::STAT run] \
-wreg rm.cntl [regbld rbmoni::CNTL {func "SUS"}] \
-rreg rm.stat -edata [regbld rbmoni::STAT susp run] \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STA"}] \
-rreg rm.stat -edata [regbld rbmoni::STAT run]
# test that suspend of a suspended system is a noop
# test that stop of a suspended system clears suspend
rlc exec \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STA"}] \
-rreg rm.stat -edata [regbld rbmoni::STAT run] \
-wreg rm.cntl [regbld rbmoni::CNTL {func "SUS"}] \
-rreg rm.stat -edata [regbld rbmoni::STAT susp run] \
-wreg rm.cntl [regbld rbmoni::CNTL {func "SUS"}] \
-rreg rm.stat -edata [regbld rbmoni::STAT susp run] \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STO"}] \
-rreg rm.stat -edata [regbld rbmoni::STAT]
# get amax for later usage
rlc exec \
-rreg rm.stat rstat
set bsize [regget rbmoni::STAT(bsize) $rstat]
set amax [expr {( 512 << $bsize ) - 1}]
#
#-------------------------------------------------------------------------
rlc log " A3: write/read hilim/lolim -------------------------"
foreach {lolim hilim} {0xffff 0x0000 \
0x0000 0xfffb} {
rlc exec \
-wreg rm.lolim $lolim -wreg rm.hilim $hilim \
-rreg rm.lolim -edata $lolim -rreg rm.hilim -edata $hilim
}
#
#-------------------------------------------------------------------------
rlc log " A4: test addr --------------------------------------"
rlc log " A4.1: write/read addr when stopped -----------------"
foreach {laddr waddr} [list 0x0000 0 0x0000 3 $amax 0 $amax 3] {
set addr [regbld rbmoni::ADDR [list laddr $laddr] [list waddr $waddr]]
rlc exec \
-wreg rm.addr $addr \
-rreg rm.addr -edata $addr
}
#
#-------------------------------------------------------------------------
rlc log " A4.2: verify that starting clears addr -------------"
rlc exec \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STO"}] \
-wreg rm.addr [regbld rbmoni::ADDR [list laddr $amax]] \
-rreg rm.addr -edata [regbld rbmoni::ADDR [list laddr $amax]] \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STA"}] \
-rreg rm.addr -edata 0x00 \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STO"}]
#
#-------------------------------------------------------------------------
rlc log " A4.3: test err when started and addr written -------"
rlc exec \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STA"}] \
-wreg rm.addr 0x100 -estaterr \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STO"}]
#
#-------------------------------------------------------------------------
rlc log " A5: test data --------------------------------------"
rlc log " A5.1: when stopped ---------------------------------"
# stop, set addr, and four times data, check addr
# at 5th data read waddr goes 0 and laddr incs
rlc exec \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STO"}] \
-wreg rm.addr [regbld rbmoni::ADDR {laddr 010} {waddr 0}] \
-rreg rm.data \
-rreg rm.addr -edata [regbld rbmoni::ADDR {laddr 010} {waddr 001}] \
-rreg rm.data \
-rreg rm.addr -edata [regbld rbmoni::ADDR {laddr 010} {waddr 002}] \
-rreg rm.data \
-rreg rm.addr -edata [regbld rbmoni::ADDR {laddr 010} {waddr 003}] \
-rreg rm.data \
-rreg rm.addr -edata [regbld rbmoni::ADDR {laddr 011} {waddr 000}]
#
#-------------------------------------------------------------------------
rlc log " A5.2: test err when written ------------------------"
rlc exec -wreg rm.data 0x100 -estaterr
#
#-------------------------------------------------------------------------
rlc log "rbmoni::test_regs - cleanup"
rbmoni::init
#
incr errcnt [rlc errcnt -clear]
return $errcnt
}
}