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

#include <zephyr/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;
	k_tid_t thread;

	printf("Supervisor thread started\n");

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

		inst_before = csr_read(0xB02);
		cycle_before = csr_read(0xB00);
		thread = 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(%p):\t%8lu cycles\t%8lu instructions\n",
			thread, cycle_count, inst_count);
	}
}
