summaryrefslogtreecommitdiff
path: root/include/sbi/sbi_hart.h
diff options
context:
space:
mode:
authorAtish Patra <atish.patra@wdc.com>2020-05-10 02:47:28 +0300
committerAnup Patel <anup@brainfault.org>2020-05-10 07:35:41 +0300
commitb2df751acfd2858f2370d896f91543593647b243 (patch)
tree75bb454392222a4686dbf12191ce3831738662d6 /include/sbi/sbi_hart.h
parent6a053f6e6cb4db8a291239e882e9a778c2738e0a (diff)
downloadopensbi-b2df751acfd2858f2370d896f91543593647b243.tar.xz
platform: Move platform features to hart
PMP & performance counters belong to a hart rather than a platform. In addition to that, these features enable reading/writing from a particular csr. Thus, they can be detected and set at runtime rather than compile time. Move PMP/MCOUNTEREN/SCOUNTEREN features to hart and detect them at runtime. Signed-off-by: Atish Patra <atish.patra@wdc.com> Tested-by: Jonathan Balkind <jbalkind@cs.princeton.edu> Reviewed-by: Anup Patel <anup.patel@wdc.com>
Diffstat (limited to 'include/sbi/sbi_hart.h')
-rw-r--r--include/sbi/sbi_hart.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/include/sbi/sbi_hart.h b/include/sbi/sbi_hart.h
index e285bdf..f7870d9 100644
--- a/include/sbi/sbi_hart.h
+++ b/include/sbi/sbi_hart.h
@@ -12,6 +12,16 @@
#include <sbi/sbi_types.h>
+/** Possible feature flags of a hart */
+enum sbi_hart_features {
+ /** Hart has PMP support */
+ SBI_HART_HAS_PMP = (1 << 0),
+ /** Hart has S-mode counter enable */
+ SBI_HART_HAS_SCOUNTEREN = (1 << 1),
+ /** Hart has M-mode counter enable */
+ SBI_HART_HAS_MCOUNTEREN = (1 << 2),
+};
+
struct sbi_scratch;
int sbi_hart_init(struct sbi_scratch *scratch, u32 hartid, bool cold_boot);
@@ -27,6 +37,7 @@ void sbi_hart_pmp_dump(struct sbi_scratch *scratch);
int sbi_hart_pmp_check_addr(struct sbi_scratch *scratch, unsigned long daddr,
unsigned long attr);
bool sbi_hart_has_feature(u32 hartid, unsigned long feature);
+unsigned long sbi_hart_get_features(u32 hartid);
void __attribute__((noreturn)) sbi_hart_hang(void);