/*
 * Copyright (c) 2020 BayLibre, SAS
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr.h>
#include <stdio.h>

#include "main.h"

/*
 * 0xB00 is CSR mcycle
 * 0xB02 is CSR minstret
 */
void supervisor_thread_function(void *p1, void *p2, void *p3)
{
	register unsigned long cycle_before, cycle_count;
	register unsigned long inst_before, inst_count;

	printf("Supervisor thread started\n");

	while (1) {
		k_sleep(K_MSEC(2000));

		inst_before = csr_read(0xB02);
		cycle_before = csr_read(0xB00);
		k_current_get();
		cycle_count = csr_read(0xB00);
		inst_count = csr_read(0xB02);

		if (cycle_count > cycle_before) {
			cycle_count -= cycle_before;
		} else {
			cycle_count += 0xFFFFFFFF - cycle_before;
		}

		if (inst_count > inst_before) {
			inst_count -= inst_before;
		} else {
			inst_count += 0xFFFFFFFF - inst_before;
		}

		/* Remove CSR accesses to be more accurate */
		inst_count -= 3;

		printf("Supervisor thread:\t%8lu cycles\t%8lu instructions\n",
			cycle_count, inst_count);
	}
}
