/* * Copyright (c) 2016 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ #include #include #define SIZE (4096) static ZTEST_BMEM uint8_t user_buffer[SIZE]; ZTEST(cache_api, test_instr_cache_api) { int ret; #ifdef CONFIG_XTENSA_MMU /* With MMU enabled, user_buffer is not marked as executable. * Invalidating the i-cache by region will cause an instruction * fetch prohibited exception. So skip all i-cache tests, * instead of just the range ones to avoid confusions of * only running the test partially. */ ztest_test_skip(); #endif ret = sys_cache_instr_flush_all(); zassert_true((ret == 0) || (ret == -ENOTSUP)); ret = sys_cache_instr_invd_all(); zassert_true((ret == 0) || (ret == -ENOTSUP)); ret = sys_cache_instr_flush_and_invd_all(); zassert_true((ret == 0) || (ret == -ENOTSUP)); ret = sys_cache_instr_flush_range(user_buffer, SIZE); zassert_true((ret == 0) || (ret == -ENOTSUP)); ret = sys_cache_instr_invd_range(user_buffer, SIZE); zassert_true((ret == 0) || (ret == -ENOTSUP)); ret = sys_cache_instr_flush_and_invd_range(user_buffer, SIZE); zassert_true((ret == 0) || (ret == -ENOTSUP)); } ZTEST(cache_api, test_data_cache_api) { int ret; ret = sys_cache_data_flush_all(); zassert_true((ret == 0) || (ret == -ENOTSUP)); ret = sys_cache_data_flush_and_invd_all(); zassert_true((ret == 0) || (ret == -ENOTSUP)); ret = sys_cache_data_flush_range(user_buffer, SIZE); zassert_true((ret == 0) || (ret == -ENOTSUP)); ret = sys_cache_data_invd_range(user_buffer, SIZE); zassert_true((ret == 0) || (ret == -ENOTSUP)); ret = sys_cache_data_flush_and_invd_range(user_buffer, SIZE); zassert_true((ret == 0) || (ret == -ENOTSUP)); } ZTEST_USER(cache_api, test_data_cache_api_user) { int ret; ret = sys_cache_data_flush_range(user_buffer, SIZE); zassert_true((ret == 0) || (ret == -ENOTSUP)); ret = sys_cache_data_invd_range(user_buffer, SIZE); zassert_true((ret == 0) || (ret == -ENOTSUP)); ret = sys_cache_data_flush_and_invd_range(user_buffer, SIZE); zassert_true((ret == 0) || (ret == -ENOTSUP)); } static void *cache_api_setup(void) { sys_cache_data_enable(); sys_cache_instr_enable(); return NULL; } static void cache_api_teardown(void *unused) { sys_cache_data_disable(); sys_cache_instr_disable(); } ZTEST_SUITE(cache_api, NULL, cache_api_setup, NULL, NULL, cache_api_teardown);