lib: Invalid all tlb entries to workaroud c920 bug

Signed-off-by: Xiaoguang Xing <xiaoguang.xing@sophgo.com>
This commit is contained in:
Xiaoguang Xing
2024-08-29 20:51:23 +08:00
parent 14a44c33ba
commit b34f366831
3 changed files with 18 additions and 2 deletions

View File

@@ -79,6 +79,7 @@ static void sbi_tlb_local_hfence_gvma(struct sbi_tlb_info *tinfo)
static void sbi_tlb_local_sfence_vma(struct sbi_tlb_info *tinfo)
{
#ifndef CONFIG_THEAD_C9XX_ERRATA_JTLB
unsigned long start = tinfo->start;
unsigned long size = tinfo->size;
unsigned long i;
@@ -96,6 +97,11 @@ static void sbi_tlb_local_sfence_vma(struct sbi_tlb_info *tinfo)
: "r"(start + i)
: "memory");
}
#else
sbi_pmu_ctr_incr_fw(SBI_PMU_FW_SFENCE_VMA_RCVD);
tlb_flush_all();
#endif
}
static void sbi_tlb_local_hfence_vvma_asid(struct sbi_tlb_info *tinfo)
@@ -145,10 +151,11 @@ static void sbi_tlb_local_hfence_gvma_vmid(struct sbi_tlb_info *tinfo)
static void sbi_tlb_local_sfence_vma_asid(struct sbi_tlb_info *tinfo)
{
#ifndef CONFIG_THEAD_C9XX_ERRATA_JTLB
unsigned long start = tinfo->start;
unsigned long size = tinfo->size;
unsigned long asid = tinfo->asid;
//unsigned long i;
unsigned long i;
sbi_pmu_ctr_incr_fw(SBI_PMU_FW_SFENCE_VMA_ASID_RCVD);
@@ -161,7 +168,6 @@ static void sbi_tlb_local_sfence_vma_asid(struct sbi_tlb_info *tinfo)
return;
}
#if 0
for (i = 0; i < size; i += PAGE_SIZE) {
__asm__ __volatile__("sfence.vma %0, %1"
:
@@ -169,6 +175,10 @@ static void sbi_tlb_local_sfence_vma_asid(struct sbi_tlb_info *tinfo)
: "memory");
}
#else
unsigned long asid = tinfo->asid;
sbi_pmu_ctr_incr_fw(SBI_PMU_FW_SFENCE_VMA_ASID_RCVD);
__asm__ __volatile__("sfence.vma x0, %0"
:
: "r"(asid)

View File

@@ -60,6 +60,8 @@ config PLATFORM_SOPHGO_SG2042
config PLATFORM_SOPHGO_SG2044
bool "Sophgo sg2044 support"
select THEAD_C9XX_ERRATA
select THEAD_C9XX_ERRATA_JTLB
select THEAD_C9XX_PMU
default n

View File

@@ -7,3 +7,7 @@ config THEAD_C9XX_PMU
config THEAD_C9XX_ERRATA
bool "T-HEAD c9xx errata support"
default n
config THEAD_C9XX_ERRATA_JTLB
bool "T-HEAD c9xx errata(JTLB) support"
default n