/*
 * Copyright (c) 2022 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/ztest.h>
#include <zephyr/cache.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 = sys_cache_uncached_ptr_get(cached);

	*cached = 42;
	*uncached = 40;

	/* Just some sanity checks */
	zassert_equal(*cached, 42, NULL);
	zassert_equal(*uncached, 40, NULL);

	sys_cache_data_flush_and_invd_all();

	/* After sys_cache_data_flush_and_invd_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 */
	sys_cache_data_flush_and_invd_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);

	sys_cache_data_flush_all();

	/* After sys_cache_data_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);

	sys_cache_data_invd_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);
