Nothing pinned which bits of a time register survive a write.
Signed-off-by: Emmanuel Blot <[email protected]>
---
tests/qtest/ds1338-test.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/tests/qtest/ds1338-test.c b/tests/qtest/ds1338-test.c
index 1b9c02d931..9e2e257307 100644
--- a/tests/qtest/ds1338-test.c
+++ b/tests/qtest/ds1338-test.c
@@ -125,6 +125,26 @@ static void test_clock_halt(void *obj, void *data,
QGuestAllocator *alloc)
==, DS1338_CTRL_OSF);
}
+/* Reserved time-register bits read back zero even with the clock halted. */
+static void test_stopped_reserved_bits(void *obj, void *data,
+ QGuestAllocator *alloc)
+{
+ QI2CDevice *i2cdev = (QI2CDevice *)obj;
+ const uint8_t all_ones[7] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+ uint8_t resp[7];
+
+ i2c_write_block(i2cdev, DS1338_SECONDS, all_ones, sizeof(all_ones));
+
+ i2c_read_block(i2cdev, DS1338_SECONDS, resp, sizeof(resp));
+ g_assert_cmphex(resp[0], ==, 0xff); /* the halt bit is writable here */
+ g_assert_cmphex(resp[1], ==, 0x7f);
+ g_assert_cmphex(resp[2], ==, 0x7f);
+ g_assert_cmphex(resp[3], ==, 0x07);
+ g_assert_cmphex(resp[4], ==, 0x3f);
+ g_assert_cmphex(resp[5], ==, 0x1f); /* no century bit on this part */
+ g_assert_cmphex(resp[6], ==, 0xff);
+}
+
/* The user RAM returns what the guest wrote to it. */
static void test_nvram(void *obj, void *data, QGuestAllocator *alloc)
{
@@ -207,6 +227,8 @@ static void ds1338_register_nodes(void)
qos_add_test("control-register", "ds1338", test_control_register, NULL);
qos_add_test("osf-write-protect", "ds1338", test_osf_write_protect, NULL);
qos_add_test("clock-halt", "ds1338", test_clock_halt, NULL);
+ qos_add_test("stopped-reserved-bits", "ds1338",
+ test_stopped_reserved_bits, NULL);
qos_add_test("nvram", "ds1338", test_nvram, NULL);
qos_add_test("address-wrap", "ds1338", test_address_wrap, NULL);
qos_add_test("reset-clears", "ds1338", test_reset_clears, NULL);
--
2.50.1