Example #1
0
static void query_harts(const char* config_string)
{
  for (int core = 0, hart; ; core++) {
    for (hart = 0; ; hart++) {
      char buf[32];
      snprintf(buf, sizeof buf, "core{%d{%d{ipi", core, hart);
      query_result res = query_config_string(config_string, buf);
      if (!res.start)
        break;
      hls_t* hls = hls_init(num_harts);
      hls->ipi = (void*)(uintptr_t)get_uint(res);

      snprintf(buf, sizeof buf, "core{%d{%d{timecmp", core, hart);
      res = query_config_string(config_string, buf);
      assert(res.start);
      hls->timecmp = (void*)(uintptr_t)get_uint(res);

      num_harts++;
    }
    if (!hart)
      break;
  }
  assert(num_harts);
  assert(num_harts <= MAX_HARTS);
}
Example #2
0
void machine_init(uint32_t hart_id)
{
  hls_init(hart_id);
  mstatus_init();
  fp_init();

  if (hart_id == 0)
    init_first_hart();
  else
    init_other_hart();
}
Example #3
0
static void query_harts(const char* config_string)
{
  for (int core = 0, hart; ; core++) {
    for (hart = 0; ; hart++) {
      char buf[32];
      snprintf(buf, sizeof buf, "core{%d{%d{addr", core, hart);
      query_result res = query_config_string(config_string, buf);
      if (!res.start)
        break;
      csr_t* base = (csr_t*)get_uint(res);
      uintptr_t hart_id = base[CSR_MHARTID];
      hls_init(hart_id, base);
      num_harts++;
      assert(hart_id == num_harts-1);
    }
    if (!hart)
      break;
  }
  assert(num_harts);
  assert(num_harts <= MAX_HARTS);
}