[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH v3 14/24] tests/qtest: add register access macros and functio
|
From: |
Octavian Purdila |
|
Subject: |
[RFC PATCH v3 14/24] tests/qtest: add register access macros and functions |
|
Date: |
Mon, 26 Aug 2024 23:45:18 -0700 |
Add utility macros for accessing register or register bit fields in
tests, e.g.:
REG32_WRITE(FLEXCOMM, PSELID, persel);
g_assert(REG32_READ_FIELD(FLEXCOMM, PSELID, PERSEL) == persel);
Signed-off-by: Octavian Purdila <tavip@google.com>
---
tests/qtest/reg-utils.h | 70 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 70 insertions(+)
create mode 100644 tests/qtest/reg-utils.h
diff --git a/tests/qtest/reg-utils.h b/tests/qtest/reg-utils.h
new file mode 100644
index 0000000000..e09aaf3333
--- /dev/null
+++ b/tests/qtest/reg-utils.h
@@ -0,0 +1,70 @@
+/*
+ * Register access utilities for device tests.
+ *
+ * Copyright (C) 2024 Google LLC
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+#ifndef _REG_UTILS_H
+#define _REG_UTILS_H
+
+#include "libqtest-single.h"
+#include "hw/registerfields.h"
+
+#ifdef DEBUG_REG
+#define debug(fmt, args...) fprintf(stderr, fmt, ## args)
+#else
+#define debug(fmt, args...)
+#endif
+
+#define _REG_OFF(mod, reg) (A_##mod##_##reg)
+
+#define REG32_READ(mod, reg) \
+ ({ \
+ uint32_t value; \
+ value = readl(mod##_BASE + _REG_OFF(mod, reg)); \
+ debug("[%s] -> %08x\n", #reg, value); \
+ value; \
+ })
+
+#define REG32_WRITE(mod, reg, value) \
+ do { \
+ debug("[%s] <- %08x\n", #reg, value); \
+ writel(mod##_BASE + _REG_OFF(mod, reg), value); \
+ } while (0)
+
+#define REG_FIELD_VAL(v, mod, reg, field) \
+ FIELD_EX32(v, mod##_##reg, field) \
+
+#define REG32_READ_FIELD(mod, reg, field) \
+ REG_FIELD_VAL(REG32_READ(mod, reg), mod, reg, field)
+
+#define REG32_WRITE_FIELD(mod, reg, field, val) \
+ do { \
+ uint32_t _tmp = REG32_READ(mod, reg); \
+ _tmp = FIELD_DP32(_tmp, mod##_##reg, field, val); \
+ REG32_WRITE(mod, reg, _tmp); \
+ } while (0)
+
+#define REG32_WRITE_FIELD_NOUPDATE(mod, reg, field, val) \
+ do { \
+ uint32_t _tmp = FIELD_DP32(0, mod##_##reg, field, val); \
+ REG32_WRITE(mod, reg, _tmp); \
+ } while (0)
+
+#define WAIT_REG32_FIELD(ns, mod, reg, field, val) \
+ do { \
+ clock_step(ns); \
+ g_assert_cmpuint(REG32_READ_FIELD(mod, reg, field), ==, val); \
+ } while (0)
+
+#define REG32_READ_FAIL(mod, reg) \
+ readl_fail(mod##_BASE + _REG_OFF(mod, reg))
+
+#define REG32_WRITE_FAIL(mod, reg, value) \
+ writel_fail(mod##_BASE + _REG_OFF(mod, reg), value)
+
+#endif /* _REG_UTILS_H */
--
2.46.0.295.g3b9ea8a38a-goog
- [RFC PATCH v3 07/24] hw/i2c: add support for flexcomm i2c, (continued)
- [RFC PATCH v3 07/24] hw/i2c: add support for flexcomm i2c, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 17/24] tests/qtest: add flexcomm usart tests, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 08/24] hw/ssi: add support for flexcomm spi, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 20/24] hw/ssi: allow NULL realize callbacks for peripherals, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 24/24] test/unit: add unit tests for RT500's clock controller, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 10/24] hw/ssi: add support for flexspi, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 09/24] hw/misc: add support for RT500's clock controller, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 16/24] tests/qtest: add flexcomm tests, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 12/24] hw/arm: add basic support for the RT500 SoC, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 11/24] hw/misc: add support for RT500's reset controller, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 14/24] tests/qtest: add register access macros and functions,
Octavian Purdila <=
- [RFC PATCH v3 15/24] system/qtest: add APIS to check for memory access failures, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 13/24] hw/arm: add RT595-EVK board, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 23/24] systems/qtest: add device clock APIs, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 19/24] tests/qtest: add tests for flexcomm i2c, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 18/24] hw/misc: add i2c-tester, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 21/24] hw/misc: add spi-tester, Octavian Purdila, 2024/08/27
- [RFC PATCH v3 22/24] tests/qtest: add tests for flexcomm spi, Octavian Purdila, 2024/08/27