blob: 5ad4e89e3e8f0b7227f9dd14fcddc565eed100ec [file] [log] [blame]
/*
* Copyright (c) 2022 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/ztest.h>
#include <adsp_memory.h>
ZTEST(adsp_cache, test_adsp_cache_flush_inv_all)
{
uint32_t *cached, *uncached;
cached = (uint32_t *)LP_SRAM_BASE;
uncached = arch_xtensa_uncached_ptr(cached);
*cached = 42;
*uncached = 40;
/* Just some sanity checks */
zassert_equal(*cached, 42, NULL);
zassert_equal(*uncached, 40, NULL);
z_xtensa_cache_flush_inv_all();
/* After z_xtensa_cache_flush_inv_all(), uncached should be updated */
zassert_equal(*cached, 42, NULL);
zassert_equal(*uncached, 42, NULL);
/* Flush and invalidate again, this time to check the invalidate part */
z_xtensa_cache_flush_inv_all();
*uncached = 80;
/* As cache is invalid, cached should be updated with uncached new value */
zassert_equal(*cached, 80, NULL);
zassert_equal(*uncached, 80, NULL);
*cached = 82;
/* Only cached should have changed */
zassert_equal(*cached, 82, NULL);
zassert_equal(*uncached, 80, NULL);
z_xtensa_cache_flush_all();
/* After z_xtensa_cache_flush_all(), uncached should be updated */
zassert_equal(*cached, 82, NULL);
zassert_equal(*uncached, 82, NULL);
*uncached = 100;
/* As cache is not invalid, only uncached should be updated */
zassert_equal(*cached, 82, NULL);
zassert_equal(*uncached, 100, NULL);
z_xtensa_cache_inv_all();
/* Now, cached should be updated */
zassert_equal(*cached, 100, NULL);
zassert_equal(*uncached, 100, NULL);
}
ZTEST_SUITE(adsp_cache, NULL, NULL, NULL, NULL, NULL);