forked from Mirrors/opensbi
Compare commits
5 Commits
v1.7
...
release-1.
Author | SHA1 | Date | |
---|---|---|---|
![]() |
43cace6c36 | ||
![]() |
cb0f4757fc | ||
![]() |
baf6a75e3f | ||
![]() |
778949eeb8 | ||
![]() |
65a3938fad |
@@ -207,7 +207,7 @@
|
||||
|
||||
#endif
|
||||
|
||||
#define MHPMEVENT_SSCOF_MASK _ULL(0xFFFF000000000000)
|
||||
#define MHPMEVENT_SSCOF_MASK _ULL(0xFF00000000000000)
|
||||
|
||||
#define ENVCFG_STCE (_ULL(1) << 63)
|
||||
#define ENVCFG_PBMTE (_ULL(1) << 62)
|
||||
|
@@ -291,7 +291,8 @@ int is_pmp_entry_mapped(unsigned long entry)
|
||||
unsigned long addr;
|
||||
unsigned long log2len;
|
||||
|
||||
pmp_get(entry, &prot, &addr, &log2len);
|
||||
if (pmp_get(entry, &prot, &addr, &log2len) != 0)
|
||||
return false;
|
||||
|
||||
/* If address matching bits are non-zero, the entry is enable */
|
||||
if (prot & PMP_A)
|
||||
|
@@ -357,7 +357,7 @@ static void dbtr_trigger_enable(struct sbi_dbtr_trigger *trig)
|
||||
unsigned long state;
|
||||
unsigned long tdata1;
|
||||
|
||||
if (!trig && !(trig->state & RV_DBTR_BIT_MASK(TS, MAPPED)))
|
||||
if (!trig || !(trig->state & RV_DBTR_BIT_MASK(TS, MAPPED)))
|
||||
return;
|
||||
|
||||
state = trig->state;
|
||||
@@ -403,7 +403,7 @@ static void dbtr_trigger_disable(struct sbi_dbtr_trigger *trig)
|
||||
{
|
||||
unsigned long tdata1;
|
||||
|
||||
if (!trig && !(trig->state & RV_DBTR_BIT_MASK(TS, MAPPED)))
|
||||
if (!trig || !(trig->state & RV_DBTR_BIT_MASK(TS, MAPPED)))
|
||||
return;
|
||||
|
||||
tdata1 = trig->tdata1;
|
||||
@@ -429,7 +429,7 @@ static void dbtr_trigger_disable(struct sbi_dbtr_trigger *trig)
|
||||
|
||||
static void dbtr_trigger_clear(struct sbi_dbtr_trigger *trig)
|
||||
{
|
||||
if (!trig && !(trig->state & RV_DBTR_BIT_MASK(TS, MAPPED)))
|
||||
if (!trig || !(trig->state & RV_DBTR_BIT_MASK(TS, MAPPED)))
|
||||
return;
|
||||
|
||||
csr_write(CSR_TSELECT, trig->index);
|
||||
|
@@ -251,7 +251,7 @@ int sbi_fwft_init(struct sbi_scratch *scratch, bool cold_boot)
|
||||
|
||||
fhs = fwft_get_hart_state_ptr(scratch);
|
||||
if (!fhs) {
|
||||
fhs = sbi_zalloc(sizeof(fhs) + array_size(features) * sizeof(struct fwft_config));
|
||||
fhs = sbi_zalloc(sizeof(*fhs) + array_size(features) * sizeof(struct fwft_config));
|
||||
if (!fhs)
|
||||
return SBI_ENOMEM;
|
||||
|
||||
|
@@ -423,10 +423,12 @@ void __sbi_hsm_suspend_non_ret_save(struct sbi_scratch *scratch)
|
||||
hdata->saved_mie = csr_read(CSR_MIE);
|
||||
hdata->saved_mip = csr_read(CSR_MIP) & (MIP_SSIP | MIP_STIP);
|
||||
hdata->saved_medeleg = csr_read(CSR_MEDELEG);
|
||||
if (sbi_hart_priv_version(scratch) >= SBI_HART_PRIV_VER_1_12) {
|
||||
#if __riscv_xlen == 32
|
||||
hdata->saved_menvcfgh = csr_read(CSR_MENVCFGH);
|
||||
hdata->saved_menvcfgh = csr_read(CSR_MENVCFGH);
|
||||
#endif
|
||||
hdata->saved_menvcfg = csr_read(CSR_MENVCFG);
|
||||
hdata->saved_menvcfg = csr_read(CSR_MENVCFG);
|
||||
}
|
||||
}
|
||||
|
||||
static void __sbi_hsm_suspend_non_ret_restore(struct sbi_scratch *scratch)
|
||||
@@ -434,10 +436,12 @@ static void __sbi_hsm_suspend_non_ret_restore(struct sbi_scratch *scratch)
|
||||
struct sbi_hsm_data *hdata = sbi_scratch_offset_ptr(scratch,
|
||||
hart_data_offset);
|
||||
|
||||
csr_write(CSR_MENVCFG, hdata->saved_menvcfg);
|
||||
if (sbi_hart_priv_version(scratch) >= SBI_HART_PRIV_VER_1_12) {
|
||||
csr_write(CSR_MENVCFG, hdata->saved_menvcfg);
|
||||
#if __riscv_xlen == 32
|
||||
csr_write(CSR_MENVCFGH, hdata->saved_menvcfgh);
|
||||
csr_write(CSR_MENVCFGH, hdata->saved_menvcfgh);
|
||||
#endif
|
||||
}
|
||||
csr_write(CSR_MEDELEG, hdata->saved_medeleg);
|
||||
csr_write(CSR_MIE, hdata->saved_mie);
|
||||
csr_set(CSR_MIP, (hdata->saved_mip & (MIP_SSIP | MIP_STIP)));
|
||||
|
Reference in New Issue
Block a user