Skip to content

Commit 52bf8fb

Browse files
krish2718cfriedt
authored andcommitted
tests: nrf70: bustest: Add more QSPI tests
Add tests based on QSPI command register, this is the entry point even before we test nRF70 internal memories. Signed-off-by: Chaitanya Tata <[email protected]>
1 parent e17fe78 commit 52bf8fb

File tree

1 file changed

+182
-0
lines changed
  • tests/boards/nrf/nrf70/bustest/src

1 file changed

+182
-0
lines changed

tests/boards/nrf/nrf70/bustest/src/main.c

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,158 @@ static int test_peripbus(void)
180180
return 0;
181181
}
182182

183+
/* Register address macros for testing */
184+
#define RDSR0_ADDR 0x05
185+
#define RDSR1_ADDR 0x1F
186+
#define RDSR2_ADDR 0x2F
187+
#define WRSR2_ADDR 0x3F
188+
189+
static int test_rdsr0(void)
190+
{
191+
int ret;
192+
uint8_t val;
193+
194+
LOG_INF("Testing RDSR0");
195+
196+
ret = rpu_read_reg(RDSR0_ADDR, &val);
197+
if (ret) {
198+
LOG_ERR("Failed to read RDSR0: %d", ret);
199+
return -1;
200+
}
201+
202+
LOG_INF("RDSR0 value: 0x%x", val);
203+
204+
if (val == 0x42) {
205+
return 0;
206+
}
207+
LOG_ERR("RDSR0 test failed: expected 0x42, got 0x%x", val);
208+
return -1;
209+
}
210+
211+
/* Helper function to write and verify a test pattern */
212+
static int test_rdsr2_pattern(uint8_t test_pattern, const char *pattern_name)
213+
{
214+
int ret;
215+
uint8_t read_val;
216+
uint8_t masked_pattern = test_pattern & 0xFE; /* Ensure bit 0 is 0 */
217+
218+
LOG_INF("Testing RDSR2 pattern %s (0x%02x)", pattern_name, masked_pattern);
219+
220+
ret = rpu_write_reg(WRSR2_ADDR, masked_pattern);
221+
if (ret) {
222+
LOG_ERR("Failed to write RDSR2 pattern %s", pattern_name);
223+
return -1;
224+
}
225+
226+
ret = rpu_read_reg(RDSR2_ADDR, &read_val);
227+
if (ret) {
228+
LOG_ERR("Failed to read RDSR2 after writing pattern %s", pattern_name);
229+
return -1;
230+
}
231+
232+
/* Compare only bits 7:1 */
233+
if ((read_val & 0xFE) != masked_pattern) {
234+
LOG_ERR("RDSR2 pattern %s test failed: wrote 0x%02x, read 0x%02x (bits 7:1)",
235+
pattern_name, masked_pattern, read_val & 0xFE);
236+
return -1;
237+
}
238+
239+
LOG_INF("RDSR2 pattern %s test passed: wrote 0x%02x, read 0x%02x",
240+
pattern_name, masked_pattern, read_val);
241+
return 0;
242+
}
243+
244+
/* Individual test for pattern 0xAA (10101010) */
245+
static int test_rdsr2_pattern_0xAA(void)
246+
{
247+
return test_rdsr2_pattern(0xAA, "0xAA (10101010)");
248+
}
249+
250+
/* Individual test for pattern 0x54 (01010100) */
251+
static int test_rdsr2_pattern_0x54(void)
252+
{
253+
return test_rdsr2_pattern(0x54, "0x54 (01010100)");
254+
}
255+
256+
/* Helper function to test walking bit patterns */
257+
static int test_rdsr2_walking_pattern(bool walking_ones, const char *test_name)
258+
{
259+
int ret, i;
260+
uint8_t read_val, test_val;
261+
262+
LOG_INF("Starting %s test for RDSR2 bits 7:1", test_name);
263+
264+
for (i = 1; i <= 7; i++) {
265+
if (walking_ones) {
266+
test_val = (1 << i); /* Set walking bit */
267+
} else {
268+
test_val = (0xFE & ~(1 << i)); /* Clear walking bit */
269+
}
270+
271+
ret = rpu_write_reg(WRSR2_ADDR, test_val & 0xFE);
272+
/* Ensure bit 0 is 0 when writing */
273+
if (ret) {
274+
LOG_ERR("Failed to write RDSR2 %s bit %d", test_name, i);
275+
return -1;
276+
}
277+
278+
ret = rpu_read_reg(RDSR2_ADDR, &read_val);
279+
if (ret) {
280+
LOG_ERR("Failed to read RDSR2 after writing %s bit %d", test_name, i);
281+
return -1;
282+
}
283+
284+
/* Compare only bits 7:1 */
285+
if ((read_val & 0xFE) != (test_val & 0xFE)) {
286+
LOG_ERR("RDSR2 %s bit %d test failed: wrote 0x%02x, read 0x%02x (bits 7:1)",
287+
test_name, i, test_val & 0xFE, read_val & 0xFE);
288+
return -1;
289+
}
290+
LOG_DBG("RDSR2 %s bit %d passed: wrote 0x%02x, read 0x%02x",
291+
test_name, i, test_val & 0xFE, read_val);
292+
}
293+
294+
LOG_INF("%s test completed successfully", test_name);
295+
return 0;
296+
}
297+
298+
/* Individual test for walking '1' pattern */
299+
static int test_rdsr2_walking_ones(void)
300+
{
301+
return test_rdsr2_walking_pattern(true, "walking '1'");
302+
}
303+
304+
/* Individual test for walking '0' pattern */
305+
static int test_rdsr2_walking_zeros(void)
306+
{
307+
return test_rdsr2_walking_pattern(false, "walking '0'");
308+
}
309+
310+
/* Test for RDSR1 register */
311+
static int test_rdsr1(void)
312+
{
313+
int ret;
314+
uint8_t val;
315+
316+
LOG_INF("Testing RDSR1");
317+
318+
ret = rpu_read_reg(RDSR1_ADDR, &val);
319+
if (ret) {
320+
LOG_ERR("Failed to read RDSR1: %d", ret);
321+
return -1;
322+
}
323+
324+
LOG_INF("RDSR1 value: 0x%x", val);
325+
326+
/* RDSR1 should have RPU_AWAKE_BIT set when RPU is awake */
327+
if (val & 0x02) { /* RPU_AWAKE_BIT = BIT(1) */
328+
LOG_INF("RDSR1 test passed: RPU is awake");
329+
return 0;
330+
}
331+
LOG_ERR("RDSR1 test failed: RPU is not awake (0x%x)", val);
332+
return -1;
333+
}
334+
183335
ZTEST_SUITE(bustest_suite, NULL, (void *)wifi_on, NULL, NULL, wifi_off);
184336

185337
ZTEST(bustest_suite, test_sysbus)
@@ -196,3 +348,33 @@ ZTEST(bustest_suite, test_dataram)
196348
{
197349
zassert_equal(0, memtest(DATARAM_ADDR, "DATA RAM"), "DATA RAM memtest failed!!!");
198350
}
351+
352+
ZTEST(bustest_suite, test_rdsr0)
353+
{
354+
zassert_equal(0, test_rdsr0(), "RDSR0 test failed!!!");
355+
}
356+
357+
ZTEST(bustest_suite, test_rdsr2_pattern_0xAA)
358+
{
359+
zassert_equal(0, test_rdsr2_pattern_0xAA(), "RDSR2 pattern 0xAA test failed!!!");
360+
}
361+
362+
ZTEST(bustest_suite, test_rdsr2_pattern_0x54)
363+
{
364+
zassert_equal(0, test_rdsr2_pattern_0x54(), "RDSR2 pattern 0x54 test failed!!!");
365+
}
366+
367+
ZTEST(bustest_suite, test_rdsr2_walking_ones)
368+
{
369+
zassert_equal(0, test_rdsr2_walking_ones(), "RDSR2 walking '1' test failed!!!");
370+
}
371+
372+
ZTEST(bustest_suite, test_rdsr2_walking_zeros)
373+
{
374+
zassert_equal(0, test_rdsr2_walking_zeros(), "RDSR2 walking '0' test failed!!!");
375+
}
376+
377+
ZTEST(bustest_suite, test_rdsr1)
378+
{
379+
zassert_equal(0, test_rdsr1(), "RDSR1 test failed!!!");
380+
}

0 commit comments

Comments
 (0)