Skip to content

Commit

Permalink
UTILS/ARCH: Add riscv64 support
Browse files Browse the repository at this point in the history
Signed-off-by: Rob Bradford <[email protected]>
  • Loading branch information
rbradford committed Aug 25, 2023
1 parent efc04dd commit 7a7f41f
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/utils/arch/cpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ typedef enum ucc_cpu_vendor {
UCC_CPU_VENDOR_AMD,
UCC_CPU_VENDOR_GENERIC_ARM,
UCC_CPU_VENDOR_GENERIC_PPC,
UCC_CPU_VENDOR_GENERIC_RISCV,
UCC_CPU_VENDOR_FUJITSU_ARM,
UCC_CPU_VENDOR_ZHAOXIN,
UCC_CPU_VENDOR_LAST
Expand All @@ -59,6 +60,8 @@ static inline ucc_cpu_vendor_t ucc_get_vendor_from_str(const char *v_name)
return UCC_CPU_VENDOR_GENERIC_ARM;
if (strcasecmp(v_name, "ppc") == 0)
return UCC_CPU_VENDOR_GENERIC_PPC;
if (strcasecmp(v_name, "riscv") == 0)
return UCC_CPU_VENDOR_GENERIC_RISCV;
if (strcasecmp(v_name, "fujitsu") == 0)
return UCC_CPU_VENDOR_FUJITSU_ARM;
if (strcasecmp(v_name, "zhaoxin") == 0)
Expand Down Expand Up @@ -107,6 +110,8 @@ static inline ucc_cpu_model_t ucc_get_model_from_str(const char *m_name)
# include "ppc64/cpu.h"
#elif defined(__aarch64__)
# include "aarch64/cpu.h"
#elif defined(__riscv) && (__riscv_xlen == 64)
# include "riscv64/cpu.h"
#else
# error "Unsupported architecture"
#endif
Expand Down
33 changes: 33 additions & 0 deletions src/utils/arch/riscv64/cpu.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/**
* Copyright (c) 2001-2013, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* Copyright (C) ARM Ltd. 2016-2017. ALL RIGHTS RESERVED.
* Copyright (C) Rivos Inc. 2023
*
* See file LICENSE for terms.
*/

#ifndef UCC_UTILS_ARCH_RISCV64_CPU_H_
#define UCC_UTILS_ARCH_RISCV64_CPU_H_

#define UCC_ARCH_CACHE_LINE_SIZE 64

/* RVWMO rules */
#define ucc_memory_bus_fence() asm volatile("fence iorw, iorw" ::: "memory")
#define ucc_memory_bus_store_fence() asm volatile("fence ow, ow" ::: "memory")
#define ucc_memory_bus_load_fence() asm volatile("fence ir, ir" ::: "memory")

#define ucc_memory_cpu_fence() asm volatile("fence rw, rw" ::: "memory")
#define ucc_memory_cpu_store_fence() asm volatile("fence rw, w" ::: "memory")
#define ucc_memory_cpu_load_fence() asm volatile("fence r, rw" ::: "memory")

static inline ucc_cpu_model_t ucc_arch_get_cpu_model()
{
return UCC_CPU_MODEL_UNKNOWN;
}

static inline ucc_cpu_vendor_t ucc_arch_get_cpu_vendor()
{
return UCC_CPU_VENDOR_GENERIC_RISCV;
}

#endif

0 comments on commit 7a7f41f

Please sign in to comment.