SG2044: add t-head c9xx jtlb errta
Signed-off-by: Chao Wei <chao.wei@sophgo.com>
This commit is contained in:
@@ -79,12 +79,15 @@ static void sbi_tlb_local_hfence_gvma(struct sbi_tlb_info *tinfo)
|
|||||||
|
|
||||||
static void sbi_tlb_local_sfence_vma(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 start = tinfo->start;
|
||||||
unsigned long size = tinfo->size;
|
unsigned long size = tinfo->size;
|
||||||
unsigned long i;
|
unsigned long i;
|
||||||
|
#endif
|
||||||
|
|
||||||
sbi_pmu_ctr_incr_fw(SBI_PMU_FW_SFENCE_VMA_RCVD);
|
sbi_pmu_ctr_incr_fw(SBI_PMU_FW_SFENCE_VMA_RCVD);
|
||||||
|
|
||||||
|
#ifndef CONFIG_THEAD_C9XX_ERRATA_JTLB
|
||||||
if ((start == 0 && size == 0) || (size == SBI_TLB_FLUSH_ALL)) {
|
if ((start == 0 && size == 0) || (size == SBI_TLB_FLUSH_ALL)) {
|
||||||
tlb_flush_all();
|
tlb_flush_all();
|
||||||
return;
|
return;
|
||||||
@@ -96,6 +99,10 @@ static void sbi_tlb_local_sfence_vma(struct sbi_tlb_info *tinfo)
|
|||||||
: "r"(start + i)
|
: "r"(start + i)
|
||||||
: "memory");
|
: "memory");
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
tlb_flush_all();
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sbi_tlb_local_hfence_vvma_asid(struct sbi_tlb_info *tinfo)
|
static void sbi_tlb_local_hfence_vvma_asid(struct sbi_tlb_info *tinfo)
|
||||||
@@ -148,7 +155,9 @@ static void sbi_tlb_local_sfence_vma_asid(struct sbi_tlb_info *tinfo)
|
|||||||
unsigned long start = tinfo->start;
|
unsigned long start = tinfo->start;
|
||||||
unsigned long size = tinfo->size;
|
unsigned long size = tinfo->size;
|
||||||
unsigned long asid = tinfo->asid;
|
unsigned long asid = tinfo->asid;
|
||||||
|
#ifndef CONFIG_THEAD_C9XX_ERRATA_JTLB
|
||||||
unsigned long i;
|
unsigned long i;
|
||||||
|
#endif
|
||||||
|
|
||||||
sbi_pmu_ctr_incr_fw(SBI_PMU_FW_SFENCE_VMA_ASID_RCVD);
|
sbi_pmu_ctr_incr_fw(SBI_PMU_FW_SFENCE_VMA_ASID_RCVD);
|
||||||
|
|
||||||
@@ -161,12 +170,20 @@ static void sbi_tlb_local_sfence_vma_asid(struct sbi_tlb_info *tinfo)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef CONFIG_THEAD_C9XX_ERRATA_JTLB
|
||||||
for (i = 0; i < size; i += PAGE_SIZE) {
|
for (i = 0; i < size; i += PAGE_SIZE) {
|
||||||
__asm__ __volatile__("sfence.vma %0, %1"
|
__asm__ __volatile__("sfence.vma %0, %1"
|
||||||
:
|
:
|
||||||
: "r"(start + i), "r"(asid)
|
: "r"(start + i), "r"(asid)
|
||||||
: "memory");
|
: "memory");
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
__asm__ __volatile__("sfence.vma x0, %0"
|
||||||
|
:
|
||||||
|
: "r"(asid)
|
||||||
|
: "memory");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sbi_tlb_local_fence_i(struct sbi_tlb_info *tinfo)
|
static void sbi_tlb_local_fence_i(struct sbi_tlb_info *tinfo)
|
||||||
|
|||||||
@@ -58,6 +58,13 @@ config PLATFORM_SOPHGO_SG2042
|
|||||||
select THEAD_C9XX_PMU
|
select THEAD_C9XX_PMU
|
||||||
default n
|
default n
|
||||||
|
|
||||||
|
config PLATFORM_SOPHGO_SG2044
|
||||||
|
bool "Sophgo sg2044 support"
|
||||||
|
select THEAD_C9XX_ERRATA
|
||||||
|
select THEAD_C9XX_ERRATA_JTLB
|
||||||
|
select THEAD_C9XX_PMU
|
||||||
|
default n
|
||||||
|
|
||||||
config PLATFORM_STARFIVE_JH7110
|
config PLATFORM_STARFIVE_JH7110
|
||||||
bool "StarFive JH7110 support"
|
bool "StarFive JH7110 support"
|
||||||
default n
|
default n
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ CONFIG_PLATFORM_RENESAS_RZFIVE=y
|
|||||||
CONFIG_PLATFORM_SIFIVE_FU540=y
|
CONFIG_PLATFORM_SIFIVE_FU540=y
|
||||||
CONFIG_PLATFORM_SIFIVE_FU740=y
|
CONFIG_PLATFORM_SIFIVE_FU740=y
|
||||||
CONFIG_PLATFORM_SOPHGO_SG2042=y
|
CONFIG_PLATFORM_SOPHGO_SG2042=y
|
||||||
|
CONFIG_PLATFORM_SOPHGO_SG2044=y
|
||||||
CONFIG_PLATFORM_STARFIVE_JH7110=y
|
CONFIG_PLATFORM_STARFIVE_JH7110=y
|
||||||
CONFIG_PLATFORM_THEAD=y
|
CONFIG_PLATFORM_THEAD=y
|
||||||
CONFIG_FDT_CPPC=y
|
CONFIG_FDT_CPPC=y
|
||||||
|
|||||||
@@ -7,3 +7,7 @@ config THEAD_C9XX_PMU
|
|||||||
config THEAD_C9XX_ERRATA
|
config THEAD_C9XX_ERRATA
|
||||||
bool "T-HEAD c9xx errata support"
|
bool "T-HEAD c9xx errata support"
|
||||||
default n
|
default n
|
||||||
|
|
||||||
|
config THEAD_C9XX_ERRATA_JTLB
|
||||||
|
bool "T-HEAD c9xx errata(JTLB) support"
|
||||||
|
default n
|
||||||
|
|||||||
Reference in New Issue
Block a user