20
20
#include "test_syscall.h"
21
21
#include <zephyr/sys/libc-hooks.h> /* for z_libc_partition */
22
22
23
+ #if defined(CONFIG_XTENSA )
24
+ #include <zephyr/arch/xtensa/cache.h>
25
+ #include <zephyr/arch/xtensa/xtensa_mmu.h>
26
+ #endif
27
+
23
28
#if defined(CONFIG_ARC )
24
29
#include <zephyr/arch/arc/v2/mpu/arc_core_mpu.h>
25
30
#endif
@@ -178,6 +183,12 @@ ZTEST_USER(userspace, test_write_control)
178
183
set_fault (K_ERR_CPU_EXCEPTION );
179
184
180
185
__asm__ volatile ("csrr %0, mstatus" : "=r" (status ));
186
+ #elif defined(CONFIG_XTENSA )
187
+ unsigned int ps ;
188
+
189
+ set_fault (K_ERR_CPU_EXCEPTION );
190
+
191
+ __asm__ volatile ("rsr.ps %0" : "=r" (ps ));
181
192
#else
182
193
#error "Not implemented for this architecture"
183
194
zassert_unreachable ("Write to control register did not fault" );
@@ -245,6 +256,24 @@ ZTEST_USER(userspace, test_disable_mmu_mpu)
245
256
*/
246
257
csr_write (pmpaddr3 , LLONG_MAX );
247
258
csr_write (pmpcfg0 , (PMP_R |PMP_W |PMP_X |PMP_NAPOT ) << 24 );
259
+ #elif defined(CONFIG_XTENSA )
260
+ set_fault (K_ERR_CPU_EXCEPTION );
261
+
262
+ /* Reset way 6 to do identity mapping.
263
+ * Complier would complain addr going out of range if we
264
+ * simply do addr = i * 0x20000000 inside the loop. So
265
+ * we do increment instead.
266
+ */
267
+ uint32_t addr = 0U ;
268
+
269
+ for (int i = 0 ; i < 8 ; i ++ ) {
270
+ uint32_t attr = addr | Z_XTENSA_MMU_XW ;
271
+
272
+ __asm__ volatile ("wdtlb %0, %1; witlb %0, %1"
273
+ :: "r" (attr ), "r" (addr ));
274
+
275
+ addr += 0x20000000 ;
276
+ }
248
277
#else
249
278
#error "Not implemented for this architecture"
250
279
#endif
@@ -381,7 +410,8 @@ ZTEST_USER(userspace, test_read_priv_stack)
381
410
382
411
s [0 ] = 0 ;
383
412
priv_stack_ptr = (char * )& s [0 ] - size ;
384
- #elif defined(CONFIG_ARM ) || defined(CONFIG_X86 ) || defined(CONFIG_RISCV ) || defined(CONFIG_ARM64 )
413
+ #elif defined(CONFIG_ARM ) || defined(CONFIG_X86 ) || defined(CONFIG_RISCV ) || \
414
+ defined(CONFIG_ARM64 ) || defined(CONFIG_XTENSA )
385
415
/* priv_stack_ptr set by test_main() */
386
416
#else
387
417
#error "Not implemented for this architecture"
@@ -405,7 +435,8 @@ ZTEST_USER(userspace, test_write_priv_stack)
405
435
406
436
s [0 ] = 0 ;
407
437
priv_stack_ptr = (char * )& s [0 ] - size ;
408
- #elif defined(CONFIG_ARM ) || defined(CONFIG_X86 ) || defined(CONFIG_RISCV ) || defined(CONFIG_ARM64 )
438
+ #elif defined(CONFIG_ARM ) || defined(CONFIG_X86 ) || defined(CONFIG_RISCV ) || \
439
+ defined(CONFIG_ARM64 ) || defined(CONFIG_XTENSA )
409
440
/* priv_stack_ptr set by test_main() */
410
441
#else
411
442
#error "Not implemented for this architecture"
0 commit comments