Skip to content

Commit 81e84fa

Browse files
committed
Improve logs for partial read/write access
Fixes #356
1 parent a763c67 commit 81e84fa

File tree

4 files changed

+79
-10
lines changed

4 files changed

+79
-10
lines changed

RELEASENOTES-1.4.md

+1
Original file line numberDiff line numberDiff line change
@@ -356,3 +356,4 @@
356356
The bugfix is opt-in, because an immediate bugfix would risk breaking existing builds; the error will only be reported when the flag `--no-compat=broken_unused_types` is passed to DMLC. This flag will be automatically enabled in Simics 8.
357357
- `release 7 7063`
358358
- `release 6 6362`
359+
- `note 6` Improved the log messages that are output by default for partial register accesses (fixes [#356](https://github.com/intel/device-modeling-language/issues/356)).

lib/1.4/dml-builtins.dml

+10-10
Original file line numberDiff line numberDiff line change
@@ -2162,9 +2162,9 @@ template bank is (object, shown_desc) {
21622162
hits[r]._qname(), cast(size*2, int), r_val;
21632163
} else {
21642164
log info, 4, Register_Read:
2165-
"Partial read from register %s: bytes %d-%d -> 0x%0*x",
2166-
hits[r]._qname(), r_start, r_end-1,
2167-
cast(r_end - r_start, int),
2165+
"Partial read from register %s[%d:%d] -> 0x%0*x",
2166+
hits[r]._qname(), r_end * 8 - 1, r_start * 8,
2167+
cast((r_end - r_start) * 2, int),
21682168
r_val[r_end * 8 - 1 : r_start * 8];
21692169
}
21702170

@@ -2255,10 +2255,10 @@ template bank is (object, shown_desc) {
22552255
hits[r]._qname(), cast(size*2, int), r_value;
22562256
} else {
22572257
log info, 4, Register_Write:
2258-
"Partial write to register %s: bytes %d-%d <- 0x%0*x",
2259-
hits[r]._qname(), r_start, r_end-1,
2260-
cast(r_end - r_start, int),
2261-
r_value[r_end * 8 - 1 : r_start * 8];
2258+
"Partial write to register %s[%d:%d] <- 0x%0*x",
2259+
hits[r]._qname(), r_end * 8 - 1, r_start * 8,
2260+
cast((r_end - r_start) * 2, int),
2261+
r_value[r_end * 8 - 1 : r_start * 8];
22622262
}
22632263

22642264
hits[r].write_register(r_value & r_enabled_bytes, r_enabled_bytes,
@@ -2297,9 +2297,9 @@ template bank is (object, shown_desc) {
22972297
hits[r]._qname(), cast(size*2, int), r_value;
22982298
} else {
22992299
log info, 4, Register_Write:
2300-
"Partially setting register %s: bytes %d-%d <- 0x%0*x",
2301-
hits[r]._qname(), r_start, r_end-1,
2302-
cast(r_end - r_start, int),
2300+
"Partially setting register %s[%d:%d] <- 0x%0*x",
2301+
hits[r]._qname(), r_end * 8 - 1, r_start * 8,
2302+
cast((r_end - r_start) * 2, int),
23032303
r_value[r_end * 8 - 1 : r_start * 8];
23042304
}
23052305

test/1.4/lib/T_partial_access_log.dml

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
© 2025 Intel Corporation
3+
SPDX-License-Identifier: MPL-2.0
4+
*/
5+
6+
dml 1.4;
7+
8+
device test;
9+
10+
/// DMLC-FLAG --no-compat=shared_logs_on_device
11+
bank le {
12+
param byte_order = "little-endian";
13+
register r size 4 @ 4;
14+
}
15+
bank be {
16+
param byte_order = "big-endian";
17+
register r size 4 @ 4;
18+
}

test/1.4/lib/T_partial_access_log.py

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# © 2025 Intel Corporation
2+
# SPDX-License-Identifier: MPL-2.0
3+
4+
import dev_util
5+
import stest
6+
7+
for (order, bank) in [('little', obj.bank.le), ('big', obj.bank.be)]:
8+
bank.log_level = 4
9+
bank.r = 0x04030201
10+
if order == 'little':
11+
whole = dev_util.Register_LE(bank, 4, size=4)
12+
one = dev_util.Register_LE(bank, 5, size=1)
13+
three = dev_util.Register_LE(bank, 5, size=3)
14+
else:
15+
whole = dev_util.Register_BE(bank, 4, size=4)
16+
one = dev_util.Register_BE(bank, 6, size=1)
17+
three = dev_util.Register_BE(bank, 4, size=3)
18+
with stest.expect_log_mgr(
19+
bank, 'info',
20+
regex='Read from register [lb]e.r -> 0x04030201'):
21+
whole.read()
22+
with stest.expect_log_mgr(
23+
bank, 'info',
24+
regex='Partial read from register [lb]e.r[[]15:8[]] -> 0x02'):
25+
one.read()
26+
with stest.expect_log_mgr(
27+
bank, 'info',
28+
regex='Partial read from register [lb]e.r[[]31:8[]] -> 0x040302'):
29+
three.read()
30+
31+
with stest.expect_log_mgr(
32+
bank, 'info',
33+
regex='Write to register [lb]e.r <- 0x01234567'):
34+
whole.write(0x01234567)
35+
with stest.expect_log_mgr(
36+
bank, 'info',
37+
regex='Partial write to register [lb]e.r[[]15:8[]] <- 0x03'):
38+
one.write(0x3)
39+
with stest.expect_log_mgr(
40+
bank, 'info',
41+
regex='Partial write to register [lb]e.r[[]31:8[]] <- 0x012345'):
42+
three.write(0x012345)
43+
with stest.expect_log_mgr(
44+
bank, 'info',
45+
regex='Partially setting register [lb]e.r[[]31:8[]] <- 0x012345'):
46+
simics.SIM_issue_transaction(
47+
bank, simics.transaction_t(write=True, size=3,
48+
data=(0x012345).to_bytes(3, order),
49+
inquiry=True),
50+
5 if order == 'little' else 4)

0 commit comments

Comments
 (0)