From 15c8ab7701d19059e5cd2d39f58160cf6688e26e Mon Sep 17 00:00:00 2001 From: Chao Wei Date: Tue, 23 Dec 2025 20:15:26 +0800 Subject: [PATCH] SG2044: add t-head c9xx jtlb errta Signed-off-by: Chao Wei --- lib/sbi/sbi_tlb.c | 17 +++++++++++++++++ platform/generic/Kconfig | 7 +++++++ platform/generic/configs/defconfig | 1 + platform/generic/thead/Kconfig | 4 ++++ 4 files changed, 29 insertions(+) diff --git a/lib/sbi/sbi_tlb.c b/lib/sbi/sbi_tlb.c index 01b31f4e..71872aa1 100644 --- a/lib/sbi/sbi_tlb.c +++ b/lib/sbi/sbi_tlb.c @@ -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) { +#ifndef CONFIG_THEAD_C9XX_ERRATA_JTLB unsigned long start = tinfo->start; unsigned long size = tinfo->size; unsigned long i; +#endif 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)) { tlb_flush_all(); return; @@ -96,6 +99,10 @@ static void sbi_tlb_local_sfence_vma(struct sbi_tlb_info *tinfo) : "r"(start + i) : "memory"); } +#else + tlb_flush_all(); + return; +#endif } 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 size = tinfo->size; unsigned long asid = tinfo->asid; +#ifndef CONFIG_THEAD_C9XX_ERRATA_JTLB unsigned long i; +#endif 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; } + +#ifndef CONFIG_THEAD_C9XX_ERRATA_JTLB for (i = 0; i < size; i += PAGE_SIZE) { __asm__ __volatile__("sfence.vma %0, %1" : : "r"(start + i), "r"(asid) : "memory"); } +#else + __asm__ __volatile__("sfence.vma x0, %0" + : + : "r"(asid) + : "memory"); +#endif } static void sbi_tlb_local_fence_i(struct sbi_tlb_info *tinfo) diff --git a/platform/generic/Kconfig b/platform/generic/Kconfig index 688da3f4..9c979a5d 100644 --- a/platform/generic/Kconfig +++ b/platform/generic/Kconfig @@ -58,6 +58,13 @@ config PLATFORM_SOPHGO_SG2042 select THEAD_C9XX_PMU 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 bool "StarFive JH7110 support" default n diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig index d7fa3b14..930ee21b 100644 --- a/platform/generic/configs/defconfig +++ b/platform/generic/configs/defconfig @@ -4,6 +4,7 @@ CONFIG_PLATFORM_RENESAS_RZFIVE=y CONFIG_PLATFORM_SIFIVE_FU540=y CONFIG_PLATFORM_SIFIVE_FU740=y CONFIG_PLATFORM_SOPHGO_SG2042=y +CONFIG_PLATFORM_SOPHGO_SG2044=y CONFIG_PLATFORM_STARFIVE_JH7110=y CONFIG_PLATFORM_THEAD=y CONFIG_FDT_CPPC=y diff --git a/platform/generic/thead/Kconfig b/platform/generic/thead/Kconfig index c50d38ee..7ac60d3b 100644 --- a/platform/generic/thead/Kconfig +++ b/platform/generic/thead/Kconfig @@ -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