-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathtest_deuna_func.tcl
172 lines (142 loc) · 5.61 KB
/
test_deuna_func.tcl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# $Id: test_deuna_func.tcl 1365 2023-02-02 11:46:43Z mueller $
# SPDX-License-Identifier: GPL-3.0-or-later
# Copyright 2017-2023 by Walter F.J. Mueller <[email protected]>
#
# Revision History:
# Date Rev Version Comment
# 2017-05-06 894 1.0 Initial version (full functionality)
# 2017-04-14 874 0.5 Initial version (partial functionality)
# 2017-01-30 848 0.1 First draft
#
# Test function response
# ----------------------------------------------------------------------------
rlc log "test_deuna_func: test function response -----------------------------"
package require ibd_deuna
if {![ibd_deuna::setup]} {
rlc log " test_deuna_func-W: device not found, test aborted"
return
}
rlc set statmask $rw11::STAT_DEFMASK
rlc set statvalue 0
# discard pending attn to be on save side
rlc wtlam 0.
rlc exec -attn
set attnmsk [expr {1<<$ibd_deuna::ANUM}]
# -- Section A ---------------------------------------------------------------
rlc log " A1: test PR0:PCMD -----------------------------------------"
rlc log " A1.1: set PR1 state to READY -----------------------"
$cpu cp -wibr xua.pr1 [regbld ibd_deuna::PR1 {state "READY"}]
rlc log " A1.2: check NOOP doesn't LAM -----------------------"
# cleanup pr0 loc and rem
$cpu cp \
-wma xua.pr0 0xff00 \
-rma xua.pr0 -edata 0 \
-wibr xua.pr0 [regbld ibd_deuna::PR0RW busy rset brst] \
-ribr xua.pr0 -edata 0
rlc wtlam 0.
rlc exec -attn -edata 0
rlc log " A1.3: check PCMD>0 gives LAM ----------------------"
# 0001:GETPCB; 0010:GETCMD; 1000:PDMD; 1111:STOP
foreach pcmd {0x01 0x02 0x08 0x0f} {
set pr0 [regbldkv ibd_deuna::PR0 pcmd $pcmd]
# loc write and read pr0; also check rem pr0
$cpu cp \
-wma xua.pr0 $pcmd \
-rma xua.pr0 -edata $pcmd \
-ribr xua.pr0 -edata [regbldkv ibd_deuna::PR0RR \
pcmdbp $pcmd busy 1 pcmd $pcmd]
rlc wtlam 1.
rlc exec -attn -edata $attnmsk
# simulate command handling in backend and driver response
# rem: PR0 write dni
# loc: PR0 expect dni,intr
# loc: PR0 write dni (to clear), also set pcmd=0
# loc: PR0 expect dni cleared (in fact pr0 = 0)
$cpu cp \
-wibr xua.pr0 [regbld ibd_deuna::PR0RW dni] \
-rma xua.pr0 -edata [regbldkv ibd_deuna::PR0 dni 1 intr 1 pcmd $pcmd] \
-wma xua.pr0 [regbldkv ibd_deuna::PR0 dni 1] \
-rma xua.pr0 -edata 0
}
rlc log " A1.4: pcmd busy protect logic: 2nd not PDMD -------"
# pr0 is clean from previous test !
# issue 1st GETPCB and 2nd GETCMD
$cpu cp \
-wma xua.pr0 [regbld ibd_deuna::PR0 {pcmd "GETPCB"}] \
-rma xua.pr0 -edata [regbld ibd_deuna::PR0 {pcmd "GETPCB"}] \
-wma xua.pr0 [regbld ibd_deuna::PR0 {pcmd "GETCMD"}] \
-rma xua.pr0 -edata [regbld ibd_deuna::PR0 {pcmd "GETCMD"}]
rlc wtlam 1.
rlc exec -attn -edata $attnmsk
# simulate command handling in backend
# pcmd and pcmdbp differ now
# pcwwb is cleared by dni
$cpu cp \
-ribr xua.pr0 -edata [regbldkv ibd_deuna::PR0RR \
pcmdbp "GETPCB" busy 1 pcwwb 1 pcmd "GETCMD"] \
-wibr xua.pr0 [regbld ibd_deuna::PR0RW dni] \
-rma xua.pr0 -edata [regbldkv ibd_deuna::PR0 dni 1 intr 1 pcmd "GETCMD"] \
-wma xua.pr0 [regbldkv ibd_deuna::PR0 dni 1] \
-rma xua.pr0 -edata 0
rlc log " A1.5: pcmd busy protect logic: restart with PDMD --"
# pr0 is clean from previous test !
# issue 1st GETCMD and 2nd PDMD
$cpu cp \
-wma xua.pr0 [regbld ibd_deuna::PR0 {pcmd "GETCMD"}] \
-rma xua.pr0 -edata [regbld ibd_deuna::PR0 {pcmd "GETCMD"}] \
-wma xua.pr0 [regbld ibd_deuna::PR0 {pcmd "PDMD"}] \
-rma xua.pr0 -edata [regbld ibd_deuna::PR0 {pcmd "PDMD"}]
rlc wtlam 1.
rlc exec -attn -edata $attnmsk
# simulate command handling in backend
# pcmd and pcmdbp differ now
# dni will clear pcwwb, restart with attn, and not set dni (thus intr=0)
$cpu cp \
-ribr xua.pr0 -edata [regbldkv ibd_deuna::PR0RR \
pcmdbp "GETCMD" busy 1 pcwwb 1 pcmd "PDMD"] \
-wibr xua.pr0 [regbld ibd_deuna::PR0RW dni] \
-rma xua.pr0 -edata [regbldkv ibd_deuna::PR0 dni 0 intr 0 pcmd "PDMD"]
# handle restarted pdmd
rlc wtlam 1.
rlc exec -attn -edata $attnmsk
# simulate command handling in backend
# pcmd and pcmdbp equal now; pcwwb=0 now
# dni will end transaction now
$cpu cp \
-ribr xua.pr0 -edata [regbldkv ibd_deuna::PR0RR \
pcmdbp "PDMD" pdmdwb 1 busy 1 pcwwb 0 pcmd "PDMD"] \
-wibr xua.pr0 [regbld ibd_deuna::PR0RW dni] \
-rma xua.pr0 -edata [regbldkv ibd_deuna::PR0 dni 1 intr 1 pcmd "PDMD"] \
-wma xua.pr0 [regbldkv ibd_deuna::PR0 dni 1] \
-rma xua.pr0 -edata 0
rlc log " A2: test PR0:RSET -----------------------------------------"
# pr0 is clean from previous test !
$cpu cp \
-wma xua.pr0 [regbld ibd_deuna::PR0 rset] \
-rma xua.pr0 -edata 0 \
-rma xua.pr1 -edata [regbld ibd_deuna::PR1 {state "RESET"}]
rlc wtlam 1.
rlc exec -attn -edata $attnmsk
# simulate command handling in backend
$cpu cp \
-ribr xua.pr0 -edata [regbld ibd_deuna::PR0RR busy rset] \
-wibr xua.pr0 [regbld ibd_deuna::PR0RW rset] \
-ribr xua.pr0 -edata 0
rlc log " A3: test BRESET ------------------------------------------"
# pr0 is clean from previous test !
# But PR1 state must be set to READY again
$cpu cp \
-wibr xua.pr1 [regbld ibd_deuna::PR1 {state "READY"}] \
-breset \
-rma xua.pr0 -edata 0 \
-rma xua.pr1 -edata [regbld ibd_deuna::PR1 {state "RESET"}]
rlc wtlam 1.
rlc exec -attn -edata $attnmsk
# simulate command handling in backend
$cpu cp \
-ribr xua.pr0 -edata [regbld ibd_deuna::PR0RR busy brst] \
-wibr xua.pr0 [regbld ibd_deuna::PR0RW brst] \
-ribr xua.pr0 -edata 0
# harvest breset/creset triggered attn's
rlc exec -attn -edata 0
rlc wtlam 0.