Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions include/sbi/sbi_tlb.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,6 @@ int sbi_tlb_request(ulong hmask, ulong hbase, struct sbi_tlb_info *tinfo);

int sbi_tlb_init(struct sbi_scratch *scratch, bool cold_boot);

void __tlb_flush_all(void);

#endif
13 changes: 12 additions & 1 deletion lib/sbi/sbi_fwft.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@
#include <sbi/sbi_error.h>
#include <sbi/sbi_hart.h>
#include <sbi/sbi_heap.h>
#include <sbi/sbi_hfence.h>
#include <sbi/sbi_scratch.h>
#include <sbi/sbi_string.h>
#include <sbi/sbi_tlb.h>
#include <sbi/sbi_types.h>

#include <sbi/riscv_asm.h>
Expand Down Expand Up @@ -167,7 +169,16 @@ static int fwft_adue_supported(struct fwft_config *conf)

static int fwft_set_adue(struct fwft_config *conf, unsigned long value)
{
return fwft_menvcfg_set_bit(value, ENVCFG_ADUE_SHIFT);
int res = fwft_menvcfg_set_bit(value, ENVCFG_ADUE_SHIFT);

if (res == SBI_OK) {
__asm__ __volatile__("sfence.vma");

if (misa_extension('H'))
__sbi_hfence_gvma_all();
}

return res;
}

static int fwft_get_adue(struct fwft_config *conf, unsigned long *value)
Expand Down
4 changes: 2 additions & 2 deletions lib/sbi/sbi_tlb.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ static unsigned long tlb_fifo_off;
static unsigned long tlb_fifo_mem_off;
static unsigned long tlb_range_flush_limit;

static void tlb_flush_all(void)
void __tlb_flush_all(void)
{
__asm__ __volatile("sfence.vma");
}
Expand Down Expand Up @@ -86,7 +86,7 @@ static void sbi_tlb_local_sfence_vma(struct sbi_tlb_info *tinfo)
sbi_pmu_ctr_incr_fw(SBI_PMU_FW_SFENCE_VMA_RCVD);

if ((start == 0 && size == 0) || (size == SBI_TLB_FLUSH_ALL)) {
tlb_flush_all();
__tlb_flush_all();
return;
}

Expand Down