From: Anup Patel <apatel@ventanamicro.com>
To: opensbi@lists.infradead.org
Subject: [PATCH 01/11] lib: sbi: Detect and print privileged spec version
Date: Fri, 29 Apr 2022 21:21:41 +0530 [thread overview]
Message-ID: <20220429155151.314788-2-apatel@ventanamicro.com> (raw)
In-Reply-To: <20220429155151.314788-1-apatel@ventanamicro.com>
It is possible to guess privileged spec versions based on the CSRs
that where introduced in different privleged spec versions. In future,
if we are not able guess privileged spec version then we can have
platform provide it.
We add privileged spec version as per-hart feature and try to guess
it based on presense of mcounteren, mcountinhibit, and menvcfg CSRs.
Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
include/sbi/sbi_hart.h | 15 ++++++++++++
lib/sbi/sbi_hart.c | 52 +++++++++++++++++++++++++++++++++++++-----
lib/sbi/sbi_init.c | 2 ++
3 files changed, 63 insertions(+), 6 deletions(-)
diff --git a/include/sbi/sbi_hart.h b/include/sbi/sbi_hart.h
index 1d09374..3c37933 100644
--- a/include/sbi/sbi_hart.h
+++ b/include/sbi/sbi_hart.h
@@ -12,6 +12,18 @@
#include <sbi/sbi_types.h>
+/** Possible privileged specification versions of a hart */
+enum sbi_hart_priv_versions {
+ /** Unknown privileged specification */
+ SBI_HART_PRIV_VER_UNKNOWN = 0,
+ /** Privileged specification v1.10 */
+ SBI_HART_PRIV_VER_1_10 = 1,
+ /** Privileged specification v1.11 */
+ SBI_HART_PRIV_VER_1_11 = 2,
+ /** Privileged specification v1.12 */
+ SBI_HART_PRIV_VER_1_12 = 3,
+};
+
/** Possible feature flags of a hart */
enum sbi_hart_features {
/** Hart has S-mode counter enable */
@@ -56,6 +68,9 @@ unsigned long sbi_hart_pmp_granularity(struct sbi_scratch *scratch);
unsigned int sbi_hart_pmp_addrbits(struct sbi_scratch *scratch);
unsigned int sbi_hart_mhpm_bits(struct sbi_scratch *scratch);
int sbi_hart_pmp_configure(struct sbi_scratch *scratch);
+int sbi_hart_priv_version(struct sbi_scratch *scratch);
+void sbi_hart_get_priv_version_str(struct sbi_scratch *scratch,
+ char *version_str, int nvstr);
bool sbi_hart_has_feature(struct sbi_scratch *scratch, unsigned long feature);
void sbi_hart_get_features_str(struct sbi_scratch *scratch,
char *features_str, int nfstr);
diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c
index 229c14a..ed4e631 100644
--- a/lib/sbi/sbi_hart.c
+++ b/lib/sbi/sbi_hart.c
@@ -28,6 +28,7 @@ extern void __sbi_expected_trap_hext(void);
void (*sbi_hart_expected_trap)(void) = &__sbi_expected_trap;
struct hart_features {
+ int priv_version;
unsigned long features;
unsigned int pmp_count;
unsigned int pmp_addr_bits;
@@ -334,6 +335,39 @@ int sbi_hart_pmp_configure(struct sbi_scratch *scratch)
return 0;
}
+int sbi_hart_priv_version(struct sbi_scratch *scratch)
+{
+ struct hart_features *hfeatures =
+ sbi_scratch_offset_ptr(scratch, hart_features_offset);
+
+ return hfeatures->priv_version;
+}
+
+void sbi_hart_get_priv_version_str(struct sbi_scratch *scratch,
+ char *version_str, int nvstr)
+{
+ char *temp;
+ struct hart_features *hfeatures =
+ sbi_scratch_offset_ptr(scratch, hart_features_offset);
+
+ switch (hfeatures->priv_version) {
+ case SBI_HART_PRIV_VER_1_10:
+ temp = "v1.10";
+ break;
+ case SBI_HART_PRIV_VER_1_11:
+ temp = "v1.11";
+ break;
+ case SBI_HART_PRIV_VER_1_12:
+ temp = "v1.12";
+ break;
+ default:
+ temp = "unknown";
+ break;
+ }
+
+ sbi_snprintf(version_str, nvstr, "%s", temp);
+}
+
/**
* Check whether a particular hart feature is available
*
@@ -583,6 +617,7 @@ __mhpm_skip:
/* Detect if hart supports SCOUNTEREN feature */
val = csr_read_allowed(CSR_SCOUNTEREN, (unsigned long)&trap);
if (!trap.cause) {
+ hfeatures->priv_version = SBI_HART_PRIV_VER_1_10;
csr_write_allowed(CSR_SCOUNTEREN, (unsigned long)&trap, val);
if (!trap.cause)
hfeatures->features |= SBI_HART_HAS_SCOUNTEREN;
@@ -591,6 +626,7 @@ __mhpm_skip:
/* Detect if hart supports MCOUNTEREN feature */
val = csr_read_allowed(CSR_MCOUNTEREN, (unsigned long)&trap);
if (!trap.cause) {
+ hfeatures->priv_version = SBI_HART_PRIV_VER_1_10;
csr_write_allowed(CSR_MCOUNTEREN, (unsigned long)&trap, val);
if (!trap.cause)
hfeatures->features |= SBI_HART_HAS_MCOUNTEREN;
@@ -600,8 +636,17 @@ __mhpm_skip:
val = csr_read_allowed(CSR_MCOUNTINHIBIT, (unsigned long)&trap);
if (!trap.cause) {
csr_write_allowed(CSR_MCOUNTINHIBIT, (unsigned long)&trap, val);
- if (!trap.cause)
+ if (!trap.cause) {
+ hfeatures->priv_version = SBI_HART_PRIV_VER_1_11;
hfeatures->features |= SBI_HART_HAS_MCOUNTINHIBIT;
+ }
+ }
+
+ /* Detect if hart has menvcfg CSR */
+ csr_read_allowed(CSR_MENVCFG, (unsigned long)&trap);
+ if (!trap.cause) {
+ hfeatures->priv_version = SBI_HART_PRIV_VER_1_12;
+ hfeatures->features |= SBI_HART_HAS_MENVCFG;
}
/* Counter overflow/filtering is not useful without mcounter/inhibit */
@@ -625,11 +670,6 @@ __mhpm_skip:
hfeatures->features |= SBI_HART_HAS_AIA;
__aia_skip:
- /* Detect if hart has menvcfg CSR */
- csr_read_allowed(CSR_MENVCFG, (unsigned long)&trap);
- if (!trap.cause)
- hfeatures->features |= SBI_HART_HAS_MENVCFG;
-
/**
* Detect if hart supports stimecmp CSR(Sstc extension) and menvcfg is
* implemented.
diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c
index 2b9e5ae..660b11f 100644
--- a/lib/sbi/sbi_init.c
+++ b/lib/sbi/sbi_init.c
@@ -139,6 +139,8 @@ static void sbi_boot_print_hart(struct sbi_scratch *scratch, u32 hartid)
/* Boot HART details */
sbi_printf("Boot HART ID : %u\n", hartid);
sbi_printf("Boot HART Domain : %s\n", dom->name);
+ sbi_hart_get_priv_version_str(scratch, str, sizeof(str));
+ sbi_printf("Boot HART Priv Version : %s\n", str);
misa_string(xlen, str, sizeof(str));
sbi_printf("Boot HART ISA : %s\n", str);
sbi_hart_get_features_str(scratch, str, sizeof(str));
--
2.34.1
next prev parent reply other threads:[~2022-04-29 15:51 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-29 15:51 [PATCH 00/11] HART Feature Improvements Anup Patel
2022-04-29 15:51 ` Anup Patel [this message]
2022-05-04 1:42 ` [PATCH 01/11] lib: sbi: Detect and print privileged spec version Atish Patra
2022-05-07 4:57 ` Anup Patel
2022-04-29 15:51 ` [PATCH 02/11] lib: sbi: Remove 's' and 'u' from misa_string() output Anup Patel
2022-05-04 1:42 ` Atish Patra
2022-05-07 4:58 ` Anup Patel
2022-04-29 15:51 ` [PATCH 03/11] lib: sbi: Update the name of ISA string printed at boot time Anup Patel
2022-05-04 1:55 ` Atish Patra
2022-05-07 4:59 ` Anup Patel
2022-04-29 15:51 ` [PATCH 04/11] lib: sbi: Remove MCOUNTEREN and SCOUNTEREN hart features Anup Patel
2022-05-04 1:51 ` Atish Patra
2022-05-04 1:55 ` Atish Patra
2022-05-07 5:00 ` Anup Patel
2022-04-29 15:51 ` [PATCH 05/11] lib: sbi: Remove MCOUNTINHIBT hart feature Anup Patel
2022-05-04 1:56 ` Atish Patra
2022-05-07 5:00 ` Anup Patel
2022-04-29 15:51 ` [PATCH 06/11] lib: sbi: Remove MENVCFG " Anup Patel
2022-05-04 1:57 ` Atish Patra
2022-05-07 5:03 ` Anup Patel
2022-04-29 15:51 ` [PATCH 07/11] lib: sbi: Fix AIA feature detection Anup Patel
2022-05-04 1:57 ` Atish Patra
2022-05-07 5:03 ` Anup Patel
2022-04-29 15:51 ` [PATCH 08/11] lib: sbi: Convert hart features into hart extensions Anup Patel
2022-05-04 2:00 ` Atish Patra
2022-05-07 5:04 ` Anup Patel
2022-04-29 15:51 ` [PATCH 09/11] lib: sbi: Detect hart features only once for each hart Anup Patel
2022-05-04 2:01 ` Atish Patra
2022-05-07 5:04 ` Anup Patel
2022-04-29 15:51 ` [PATCH 10/11] lib: sbi: Add sbi_hart_update_extension() function Anup Patel
2022-05-04 2:02 ` Atish Patra
2022-05-07 5:04 ` Anup Patel
2022-04-29 15:51 ` [PATCH 11/11] lib: sbi_platform: Add callback to populate HART extensions Anup Patel
2022-05-04 2:05 ` Atish Patra
2022-05-07 5:05 ` Anup Patel
2022-05-05 16:30 ` [PATCH 00/11] HART Feature Improvements Xiang W
2022-05-06 3:21 ` Anup Patel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220429155151.314788-2-apatel@ventanamicro.com \
--to=apatel@ventanamicro.com \
--cc=opensbi@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox