diff for duplicates of <2f1c7dff-168e-4ad0-b426-cfe99fc33fd0@rivosinc.com> diff --git a/a/1.txt b/N1/1.txt index b975102..608d1a2 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -27,72 +27,72 @@ On 18/07/2024 18:43, Alexandre Ghiti wrote: >> Signed-off-by: Yong-Xuan Wang <yongxuan.wang@sifive.com> >> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> >> --- ->> ? arch/riscv/Kconfig?????????????? |? 1 + ->> ? arch/riscv/include/asm/csr.h???? |? 1 + ->> ? arch/riscv/include/asm/hwcap.h?? |? 2 ++ ->> ? arch/riscv/include/asm/pgtable.h | 13 ++++++++++++- ->> ? arch/riscv/kernel/cpufeature.c?? | 32 ++++++++++++++++++++++++++++++++ ->> ? 5 files changed, 48 insertions(+), 1 deletion(-) +>> arch/riscv/Kconfig | 1 + +>> arch/riscv/include/asm/csr.h | 1 + +>> arch/riscv/include/asm/hwcap.h | 2 ++ +>> arch/riscv/include/asm/pgtable.h | 13 ++++++++++++- +>> arch/riscv/kernel/cpufeature.c | 32 ++++++++++++++++++++++++++++++++ +>> 5 files changed, 48 insertions(+), 1 deletion(-) >> >> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig >> index 0525ee2d63c7..3d705e28ff85 100644 >> --- a/arch/riscv/Kconfig >> +++ b/arch/riscv/Kconfig >> @@ -36,6 +36,7 @@ config RISCV ->> ????? select ARCH_HAS_PMEM_API ->> ????? select ARCH_HAS_PREPARE_SYNC_CORE_CMD ->> ????? select ARCH_HAS_PTE_SPECIAL ->> +??? select ARCH_HAS_HW_PTE_YOUNG ->> ????? select ARCH_HAS_SET_DIRECT_MAP if MMU ->> ????? select ARCH_HAS_SET_MEMORY if MMU ->> ????? select ARCH_HAS_STRICT_KERNEL_RWX if MMU && !XIP_KERNEL +>> select ARCH_HAS_PMEM_API +>> select ARCH_HAS_PREPARE_SYNC_CORE_CMD +>> select ARCH_HAS_PTE_SPECIAL +>> + select ARCH_HAS_HW_PTE_YOUNG +>> select ARCH_HAS_SET_DIRECT_MAP if MMU +>> select ARCH_HAS_SET_MEMORY if MMU +>> select ARCH_HAS_STRICT_KERNEL_RWX if MMU && !XIP_KERNEL >> diff --git a/arch/riscv/include/asm/csr.h b/arch/riscv/include/asm/csr.h >> index 25966995da04..524cd4131c71 100644 >> --- a/arch/riscv/include/asm/csr.h >> +++ b/arch/riscv/include/asm/csr.h >> @@ -195,6 +195,7 @@ ->> ? /* xENVCFG flags */ ->> ? #define ENVCFG_STCE??????????? (_AC(1, ULL) << 63) ->> ? #define ENVCFG_PBMTE??????????? (_AC(1, ULL) << 62) ->> +#define ENVCFG_ADUE??????????? (_AC(1, ULL) << 61) ->> ? #define ENVCFG_CBZE??????????? (_AC(1, UL) << 7) ->> ? #define ENVCFG_CBCFE??????????? (_AC(1, UL) << 6) ->> ? #define ENVCFG_CBIE_SHIFT??????? 4 +>> /* xENVCFG flags */ +>> #define ENVCFG_STCE (_AC(1, ULL) << 63) +>> #define ENVCFG_PBMTE (_AC(1, ULL) << 62) +>> +#define ENVCFG_ADUE (_AC(1, ULL) << 61) +>> #define ENVCFG_CBZE (_AC(1, UL) << 7) +>> #define ENVCFG_CBCFE (_AC(1, UL) << 6) +>> #define ENVCFG_CBIE_SHIFT 4 >> diff --git a/arch/riscv/include/asm/hwcap.h >> b/arch/riscv/include/asm/hwcap.h >> index e17d0078a651..35d7aa49785d 100644 >> --- a/arch/riscv/include/asm/hwcap.h >> +++ b/arch/riscv/include/asm/hwcap.h >> @@ -81,6 +81,8 @@ ->> ? #define RISCV_ISA_EXT_ZTSO??????? 72 ->> ? #define RISCV_ISA_EXT_ZACAS??????? 73 ->> ? #define RISCV_ISA_EXT_XANDESPMU??????? 74 ->> +#define RISCV_ISA_EXT_SVADE???????????? 75 ->> +#define RISCV_ISA_EXT_SVADU??????? 76 ->> ? ? #define RISCV_ISA_EXT_XLINUXENVCFG??? 127 ->> ? diff --git a/arch/riscv/include/asm/pgtable.h +>> #define RISCV_ISA_EXT_ZTSO 72 +>> #define RISCV_ISA_EXT_ZACAS 73 +>> #define RISCV_ISA_EXT_XANDESPMU 74 +>> +#define RISCV_ISA_EXT_SVADE 75 +>> +#define RISCV_ISA_EXT_SVADU 76 +>> #define RISCV_ISA_EXT_XLINUXENVCFG 127 +>> diff --git a/arch/riscv/include/asm/pgtable.h >> b/arch/riscv/include/asm/pgtable.h >> index aad8b8ca51f1..ec0cdacd7da0 100644 >> --- a/arch/riscv/include/asm/pgtable.h >> +++ b/arch/riscv/include/asm/pgtable.h >> @@ -120,6 +120,7 @@ ->> ? #include <asm/tlbflush.h> ->> ? #include <linux/mm_types.h> ->> ? #include <asm/compat.h> +>> #include <asm/tlbflush.h> +>> #include <linux/mm_types.h> +>> #include <asm/compat.h> >> +#include <asm/cpufeature.h> ->> ? ? #define __page_val_to_pfn(_val)? (((_val) & _PAGE_PFN_MASK) >> +>> #define __page_val_to_pfn(_val) (((_val) & _PAGE_PFN_MASK) >> >> _PAGE_PFN_SHIFT) ->> ? @@ -288,7 +289,6 @@ static inline pte_t pud_pte(pud_t pud) ->> ? } ->> ? ? #ifdef CONFIG_RISCV_ISA_SVNAPOT +>> @@ -288,7 +289,6 @@ static inline pte_t pud_pte(pud_t pud) +>> } +>> #ifdef CONFIG_RISCV_ISA_SVNAPOT >> -#include <asm/cpufeature.h> ->> ? ? static __always_inline bool has_svnapot(void) ->> ? { +>> static __always_inline bool has_svnapot(void) +>> { >> @@ -624,6 +624,17 @@ static inline pgprot_t >> pgprot_writecombine(pgprot_t _prot) ->> ????? return __pgprot(prot); ->> ? } ->> ? +/* +>> return __pgprot(prot); +>> } +>> +/* >> + * Both Svade and Svadu control the hardware behavior when the PTE >> A/D bits need to be set. By >> + * default the M-mode firmware enables the hardware updating scheme @@ -102,75 +102,75 @@ On 18/07/2024 18:43, Alexandre Ghiti wrote: >> +#define arch_has_hw_pte_young arch_has_hw_pte_young >> +static inline bool arch_has_hw_pte_young(void) >> +{ ->> +??? return riscv_has_extension_unlikely(RISCV_ISA_EXT_SVADU); +>> + return riscv_has_extension_unlikely(RISCV_ISA_EXT_SVADU); >> +} >> + ->> ? /* ->> ?? * THP functions ->> ?? */ +>> /* +>> * THP functions +>> */ >> diff --git a/arch/riscv/kernel/cpufeature.c >> b/arch/riscv/kernel/cpufeature.c >> index 5ef48cb20ee1..b2c3fe945e89 100644 >> --- a/arch/riscv/kernel/cpufeature.c >> +++ b/arch/riscv/kernel/cpufeature.c >> @@ -301,6 +301,8 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = { ->> ????? __RISCV_ISA_EXT_DATA(ssaia, RISCV_ISA_EXT_SSAIA), ->> ????? __RISCV_ISA_EXT_DATA(sscofpmf, RISCV_ISA_EXT_SSCOFPMF), ->> ????? __RISCV_ISA_EXT_DATA(sstc, RISCV_ISA_EXT_SSTC), ->> +??? __RISCV_ISA_EXT_DATA(svade, RISCV_ISA_EXT_SVADE), ->> +??? __RISCV_ISA_EXT_DATA(svadu, RISCV_ISA_EXT_SVADU), ->> ????? __RISCV_ISA_EXT_DATA(svinval, RISCV_ISA_EXT_SVINVAL), ->> ????? __RISCV_ISA_EXT_DATA(svnapot, RISCV_ISA_EXT_SVNAPOT), ->> ????? __RISCV_ISA_EXT_DATA(svpbmt, RISCV_ISA_EXT_SVPBMT), +>> __RISCV_ISA_EXT_DATA(ssaia, RISCV_ISA_EXT_SSAIA), +>> __RISCV_ISA_EXT_DATA(sscofpmf, RISCV_ISA_EXT_SSCOFPMF), +>> __RISCV_ISA_EXT_DATA(sstc, RISCV_ISA_EXT_SSTC), +>> + __RISCV_ISA_EXT_DATA(svade, RISCV_ISA_EXT_SVADE), +>> + __RISCV_ISA_EXT_DATA(svadu, RISCV_ISA_EXT_SVADU), +>> __RISCV_ISA_EXT_DATA(svinval, RISCV_ISA_EXT_SVINVAL), +>> __RISCV_ISA_EXT_DATA(svnapot, RISCV_ISA_EXT_SVNAPOT), +>> __RISCV_ISA_EXT_DATA(svpbmt, RISCV_ISA_EXT_SVPBMT), >> @@ -554,6 +556,21 @@ static void __init >> riscv_fill_hwcap_from_isa_string(unsigned long *isa2hwcap) ->> ????????????? clear_bit(RISCV_ISA_EXT_v, isainfo->isa); ->> ????????? } ->> ? +??????? /* ->> +???????? * When neither Svade nor Svadu present in DT, it is technically ->> +???????? * unknown whether the platform uses Svade or Svadu. +>> clear_bit(RISCV_ISA_EXT_v, isainfo->isa); +>> } +>> + /* +>> + * When neither Svade nor Svadu present in DT, it is technically +>> + * unknown whether the platform uses Svade or Svadu. >> Supervisor may ->> +???????? * assume Svade to be present and enabled or it can discover +>> + * assume Svade to be present and enabled or it can discover >> based ->> +???????? * on mvendorid, marchid, and mimpid. When both Svade and +>> + * on mvendorid, marchid, and mimpid. When both Svade and >> Svadu present ->> +???????? * in DT, supervisor must assume Svadu turned-off at boot +>> + * in DT, supervisor must assume Svadu turned-off at boot >> time. To use ->> +???????? * Svadu, supervisor must explicitly enable it using the SBI +>> + * Svadu, supervisor must explicitly enable it using the SBI >> FWFT extension. ->> +???????? */ ->> +??????? if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && ->> +??????????? !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) ->> +??????????? set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa); ->> +??????? else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && ->> +???????????? test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) ->> +??????????? clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa); +>> + */ +>> + if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && +>> + !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) +>> + set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa); +>> + else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && +>> + test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) +>> + clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa); >> + ->> ????????? /* ->> ?????????? * All "okay" hart should have same isa. Set HWCAP based on ->> ?????????? * common capabilities of every "okay" hart, in case they don't +>> /* +>> * All "okay" hart should have same isa. Set HWCAP based on +>> * common capabilities of every "okay" hart, in case they don't >> @@ -619,6 +636,21 @@ static int __init >> riscv_fill_hwcap_from_ext_list(unsigned long *isa2hwcap) ->> ? ????????? of_node_put(cpu_node); ->> ? +??????? /* ->> +???????? * When neither Svade nor Svadu present in DT, it is technically ->> +???????? * unknown whether the platform uses Svade or Svadu. +>> of_node_put(cpu_node); +>> + /* +>> + * When neither Svade nor Svadu present in DT, it is technically +>> + * unknown whether the platform uses Svade or Svadu. >> Supervisor may ->> +???????? * assume Svade to be present and enabled or it can discover +>> + * assume Svade to be present and enabled or it can discover >> based ->> +???????? * on mvendorid, marchid, and mimpid. When both Svade and +>> + * on mvendorid, marchid, and mimpid. When both Svade and >> Svadu present ->> +???????? * in DT, supervisor must assume Svadu turned-off at boot +>> + * in DT, supervisor must assume Svadu turned-off at boot >> time. To use ->> +???????? * Svadu, supervisor must explicitly enable it using the SBI +>> + * Svadu, supervisor must explicitly enable it using the SBI >> FWFT extension. ->> +???????? */ ->> +??????? if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && ->> +??????????? !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) ->> +??????????? set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa); ->> +??????? else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && ->> +???????????? test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) ->> +??????????? clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa); +>> + */ +>> + if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && +>> + !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) +>> + set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa); +>> + else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && +>> + test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) +>> + clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa); >> + This is a duplicate of the previous chunk of code. Moreover, now that we @@ -206,13 +206,13 @@ in your patch series, I think it is sane to keep it like that. Thanks, -Cl?ment +Clément ->> ????????? /* ->> ?????????? * All "okay" harts should have same isa. Set HWCAP based on ->> ?????????? * common capabilities of every "okay" hart, in case they +>> /* +>> * All "okay" harts should have same isa. Set HWCAP based on +>> * common capabilities of every "okay" hart, in case they >> don't. > > @@ -221,4 +221,9 @@ Cl?ment > Thanks, > > Alex -> +> + +_______________________________________________ +linux-riscv mailing list +linux-riscv@lists.infradead.org +http://lists.infradead.org/mailman/listinfo/linux-riscv diff --git a/a/content_digest b/N1/content_digest index 5136de4..d4d8962 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -2,9 +2,38 @@ "ref\020240712083850.4242-2-yongxuan.wang@sifive.com\0" "ref\06ad0c386-6777-4467-bab4-8fba149f3bfe@ghiti.fr\0" "From\0Cl\303\251ment L\303\251ger <cleger@rivosinc.com>\0" - "Subject\0[PATCH v7 1/4] RISC-V: Add Svade and Svadu Extensions Support\0" + "Subject\0Re: [PATCH v7 1/4] RISC-V: Add Svade and Svadu Extensions Support\0" "Date\0Fri, 19 Jul 2024 09:38:04 +0200\0" - "To\0kvm-riscv@lists.infradead.org\0" + "To\0Alexandre Ghiti <alex@ghiti.fr>" + Yong-Xuan Wang <yongxuan.wang@sifive.com> + linux-kernel@vger.kernel.org + linux-riscv@lists.infradead.org + kvm-riscv@lists.infradead.org + " kvm@vger.kernel.org\0" + "Cc\0greentime.hu@sifive.com" + vincent.chen@sifive.com + Jinyu Tang <tjytimi@163.com> + Paul Walmsley <paul.walmsley@sifive.com> + Palmer Dabbelt <palmer@dabbelt.com> + Albert Ou <aou@eecs.berkeley.edu> + Andrew Jones <ajones@ventanamicro.com> + Anup Patel <anup@brainfault.org> + Conor Dooley <conor.dooley@microchip.com> + Mayuresh Chitale <mchitale@ventanamicro.com> + Atish Patra <atishp@rivosinc.com> + Samuel Ortiz <sameo@rivosinc.com> + Daniel Henrique Barboza <dbarboza@ventanamicro.com> + Samuel Holland <samuel.holland@sifive.com> + Evan Green <evan@rivosinc.com> + Xiao Wang <xiao.w.wang@intel.com> + Alexandre Ghiti <alexghiti@rivosinc.com> + Andrew Morton <akpm@linux-foundation.org> + Kemeng Shi <shikemeng@huaweicloud.com> + Mike Rapoport (IBM) <rppt@kernel.org> + Leonardo Bras <leobras@redhat.com> + Charlie Jenkins <charlie@rivosinc.com> + Matthew Wilcox (Oracle) <willy@infradead.org> + " Jisheng Zhang <jszhang@kernel.org>\0" "\00:1\0" "b\0" "\n" @@ -36,72 +65,72 @@ ">> Signed-off-by: Yong-Xuan Wang <yongxuan.wang@sifive.com>\n" ">> Reviewed-by: Andrew Jones <ajones@ventanamicro.com>\n" ">> ---\n" - ">> ? arch/riscv/Kconfig?????????????? |? 1 +\n" - ">> ? arch/riscv/include/asm/csr.h???? |? 1 +\n" - ">> ? arch/riscv/include/asm/hwcap.h?? |? 2 ++\n" - ">> ? arch/riscv/include/asm/pgtable.h | 13 ++++++++++++-\n" - ">> ? arch/riscv/kernel/cpufeature.c?? | 32 ++++++++++++++++++++++++++++++++\n" - ">> ? 5 files changed, 48 insertions(+), 1 deletion(-)\n" + ">> \302\240 arch/riscv/Kconfig\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 |\302\240 1 +\n" + ">> \302\240 arch/riscv/include/asm/csr.h\302\240\302\240\302\240\302\240 |\302\240 1 +\n" + ">> \302\240 arch/riscv/include/asm/hwcap.h\302\240\302\240 |\302\240 2 ++\n" + ">> \302\240 arch/riscv/include/asm/pgtable.h | 13 ++++++++++++-\n" + ">> \302\240 arch/riscv/kernel/cpufeature.c\302\240\302\240 | 32 ++++++++++++++++++++++++++++++++\n" + ">> \302\240 5 files changed, 48 insertions(+), 1 deletion(-)\n" ">>\n" ">> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig\n" ">> index 0525ee2d63c7..3d705e28ff85 100644\n" ">> --- a/arch/riscv/Kconfig\n" ">> +++ b/arch/riscv/Kconfig\n" ">> @@ -36,6 +36,7 @@ config RISCV\n" - ">> ????? select ARCH_HAS_PMEM_API\n" - ">> ????? select ARCH_HAS_PREPARE_SYNC_CORE_CMD\n" - ">> ????? select ARCH_HAS_PTE_SPECIAL\n" - ">> +??? select ARCH_HAS_HW_PTE_YOUNG\n" - ">> ????? select ARCH_HAS_SET_DIRECT_MAP if MMU\n" - ">> ????? select ARCH_HAS_SET_MEMORY if MMU\n" - ">> ????? select ARCH_HAS_STRICT_KERNEL_RWX if MMU && !XIP_KERNEL\n" + ">> \302\240\302\240\302\240\302\240\302\240 select ARCH_HAS_PMEM_API\n" + ">> \302\240\302\240\302\240\302\240\302\240 select ARCH_HAS_PREPARE_SYNC_CORE_CMD\n" + ">> \302\240\302\240\302\240\302\240\302\240 select ARCH_HAS_PTE_SPECIAL\n" + ">> +\302\240\302\240\302\240 select ARCH_HAS_HW_PTE_YOUNG\n" + ">> \302\240\302\240\302\240\302\240\302\240 select ARCH_HAS_SET_DIRECT_MAP if MMU\n" + ">> \302\240\302\240\302\240\302\240\302\240 select ARCH_HAS_SET_MEMORY if MMU\n" + ">> \302\240\302\240\302\240\302\240\302\240 select ARCH_HAS_STRICT_KERNEL_RWX if MMU && !XIP_KERNEL\n" ">> diff --git a/arch/riscv/include/asm/csr.h b/arch/riscv/include/asm/csr.h\n" ">> index 25966995da04..524cd4131c71 100644\n" ">> --- a/arch/riscv/include/asm/csr.h\n" ">> +++ b/arch/riscv/include/asm/csr.h\n" ">> @@ -195,6 +195,7 @@\n" - ">> ? /* xENVCFG flags */\n" - ">> ? #define ENVCFG_STCE??????????? (_AC(1, ULL) << 63)\n" - ">> ? #define ENVCFG_PBMTE??????????? (_AC(1, ULL) << 62)\n" - ">> +#define ENVCFG_ADUE??????????? (_AC(1, ULL) << 61)\n" - ">> ? #define ENVCFG_CBZE??????????? (_AC(1, UL) << 7)\n" - ">> ? #define ENVCFG_CBCFE??????????? (_AC(1, UL) << 6)\n" - ">> ? #define ENVCFG_CBIE_SHIFT??????? 4\n" + ">> \302\240 /* xENVCFG flags */\n" + ">> \302\240 #define ENVCFG_STCE\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 (_AC(1, ULL) << 63)\n" + ">> \302\240 #define ENVCFG_PBMTE\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 (_AC(1, ULL) << 62)\n" + ">> +#define ENVCFG_ADUE\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 (_AC(1, ULL) << 61)\n" + ">> \302\240 #define ENVCFG_CBZE\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 (_AC(1, UL) << 7)\n" + ">> \302\240 #define ENVCFG_CBCFE\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 (_AC(1, UL) << 6)\n" + ">> \302\240 #define ENVCFG_CBIE_SHIFT\302\240\302\240\302\240\302\240\302\240\302\240\302\240 4\n" ">> diff --git a/arch/riscv/include/asm/hwcap.h\n" ">> b/arch/riscv/include/asm/hwcap.h\n" ">> index e17d0078a651..35d7aa49785d 100644\n" ">> --- a/arch/riscv/include/asm/hwcap.h\n" ">> +++ b/arch/riscv/include/asm/hwcap.h\n" ">> @@ -81,6 +81,8 @@\n" - ">> ? #define RISCV_ISA_EXT_ZTSO??????? 72\n" - ">> ? #define RISCV_ISA_EXT_ZACAS??????? 73\n" - ">> ? #define RISCV_ISA_EXT_XANDESPMU??????? 74\n" - ">> +#define RISCV_ISA_EXT_SVADE???????????? 75\n" - ">> +#define RISCV_ISA_EXT_SVADU??????? 76\n" - ">> ? ? #define RISCV_ISA_EXT_XLINUXENVCFG??? 127\n" - ">> ? diff --git a/arch/riscv/include/asm/pgtable.h\n" + ">> \302\240 #define RISCV_ISA_EXT_ZTSO\302\240\302\240\302\240\302\240\302\240\302\240\302\240 72\n" + ">> \302\240 #define RISCV_ISA_EXT_ZACAS\302\240\302\240\302\240\302\240\302\240\302\240\302\240 73\n" + ">> \302\240 #define RISCV_ISA_EXT_XANDESPMU\302\240\302\240\302\240\302\240\302\240\302\240\302\240 74\n" + ">> +#define RISCV_ISA_EXT_SVADE\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 75\n" + ">> +#define RISCV_ISA_EXT_SVADU\302\240\302\240\302\240\302\240\302\240\302\240\302\240 76\n" + ">> \302\240 \302\240 #define RISCV_ISA_EXT_XLINUXENVCFG\302\240\302\240\302\240 127\n" + ">> \302\240 diff --git a/arch/riscv/include/asm/pgtable.h\n" ">> b/arch/riscv/include/asm/pgtable.h\n" ">> index aad8b8ca51f1..ec0cdacd7da0 100644\n" ">> --- a/arch/riscv/include/asm/pgtable.h\n" ">> +++ b/arch/riscv/include/asm/pgtable.h\n" ">> @@ -120,6 +120,7 @@\n" - ">> ? #include <asm/tlbflush.h>\n" - ">> ? #include <linux/mm_types.h>\n" - ">> ? #include <asm/compat.h>\n" + ">> \302\240 #include <asm/tlbflush.h>\n" + ">> \302\240 #include <linux/mm_types.h>\n" + ">> \302\240 #include <asm/compat.h>\n" ">> +#include <asm/cpufeature.h>\n" - ">> ? ? #define __page_val_to_pfn(_val)? (((_val) & _PAGE_PFN_MASK) >>\n" + ">> \302\240 \302\240 #define __page_val_to_pfn(_val)\302\240 (((_val) & _PAGE_PFN_MASK) >>\n" ">> _PAGE_PFN_SHIFT)\n" - ">> ? @@ -288,7 +289,6 @@ static inline pte_t pud_pte(pud_t pud)\n" - ">> ? }\n" - ">> ? ? #ifdef CONFIG_RISCV_ISA_SVNAPOT\n" + ">> \302\240 @@ -288,7 +289,6 @@ static inline pte_t pud_pte(pud_t pud)\n" + ">> \302\240 }\n" + ">> \302\240 \302\240 #ifdef CONFIG_RISCV_ISA_SVNAPOT\n" ">> -#include <asm/cpufeature.h>\n" - ">> ? ? static __always_inline bool has_svnapot(void)\n" - ">> ? {\n" + ">> \302\240 \302\240 static __always_inline bool has_svnapot(void)\n" + ">> \302\240 {\n" ">> @@ -624,6 +624,17 @@ static inline pgprot_t\n" ">> pgprot_writecombine(pgprot_t _prot)\n" - ">> ????? return __pgprot(prot);\n" - ">> ? }\n" - ">> ? +/*\n" + ">> \302\240\302\240\302\240\302\240\302\240 return __pgprot(prot);\n" + ">> \302\240 }\n" + ">> \302\240 +/*\n" ">> + * Both Svade and Svadu control the hardware behavior when the PTE\n" ">> A/D bits need to be set. By\n" ">> + * default the M-mode firmware enables the hardware updating scheme\n" @@ -111,75 +140,75 @@ ">> +#define arch_has_hw_pte_young arch_has_hw_pte_young\n" ">> +static inline bool arch_has_hw_pte_young(void)\n" ">> +{\n" - ">> +??? return riscv_has_extension_unlikely(RISCV_ISA_EXT_SVADU);\n" + ">> +\302\240\302\240\302\240 return riscv_has_extension_unlikely(RISCV_ISA_EXT_SVADU);\n" ">> +}\n" ">> +\n" - ">> ? /*\n" - ">> ?? * THP functions\n" - ">> ?? */\n" + ">> \302\240 /*\n" + ">> \302\240\302\240 * THP functions\n" + ">> \302\240\302\240 */\n" ">> diff --git a/arch/riscv/kernel/cpufeature.c\n" ">> b/arch/riscv/kernel/cpufeature.c\n" ">> index 5ef48cb20ee1..b2c3fe945e89 100644\n" ">> --- a/arch/riscv/kernel/cpufeature.c\n" ">> +++ b/arch/riscv/kernel/cpufeature.c\n" ">> @@ -301,6 +301,8 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {\n" - ">> ????? __RISCV_ISA_EXT_DATA(ssaia, RISCV_ISA_EXT_SSAIA),\n" - ">> ????? __RISCV_ISA_EXT_DATA(sscofpmf, RISCV_ISA_EXT_SSCOFPMF),\n" - ">> ????? __RISCV_ISA_EXT_DATA(sstc, RISCV_ISA_EXT_SSTC),\n" - ">> +??? __RISCV_ISA_EXT_DATA(svade, RISCV_ISA_EXT_SVADE),\n" - ">> +??? __RISCV_ISA_EXT_DATA(svadu, RISCV_ISA_EXT_SVADU),\n" - ">> ????? __RISCV_ISA_EXT_DATA(svinval, RISCV_ISA_EXT_SVINVAL),\n" - ">> ????? __RISCV_ISA_EXT_DATA(svnapot, RISCV_ISA_EXT_SVNAPOT),\n" - ">> ????? __RISCV_ISA_EXT_DATA(svpbmt, RISCV_ISA_EXT_SVPBMT),\n" + ">> \302\240\302\240\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(ssaia, RISCV_ISA_EXT_SSAIA),\n" + ">> \302\240\302\240\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(sscofpmf, RISCV_ISA_EXT_SSCOFPMF),\n" + ">> \302\240\302\240\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(sstc, RISCV_ISA_EXT_SSTC),\n" + ">> +\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(svade, RISCV_ISA_EXT_SVADE),\n" + ">> +\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(svadu, RISCV_ISA_EXT_SVADU),\n" + ">> \302\240\302\240\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(svinval, RISCV_ISA_EXT_SVINVAL),\n" + ">> \302\240\302\240\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(svnapot, RISCV_ISA_EXT_SVNAPOT),\n" + ">> \302\240\302\240\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(svpbmt, RISCV_ISA_EXT_SVPBMT),\n" ">> @@ -554,6 +556,21 @@ static void __init\n" ">> riscv_fill_hwcap_from_isa_string(unsigned long *isa2hwcap)\n" - ">> ????????????? clear_bit(RISCV_ISA_EXT_v, isainfo->isa);\n" - ">> ????????? }\n" - ">> ? +??????? /*\n" - ">> +???????? * When neither Svade nor Svadu present in DT, it is technically\n" - ">> +???????? * unknown whether the platform uses Svade or Svadu.\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clear_bit(RISCV_ISA_EXT_v, isainfo->isa);\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n" + ">> \302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /*\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * When neither Svade nor Svadu present in DT, it is technically\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * unknown whether the platform uses Svade or Svadu.\n" ">> Supervisor may\n" - ">> +???????? * assume Svade to be present and enabled or it can discover\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * assume Svade to be present and enabled or it can discover\n" ">> based\n" - ">> +???????? * on mvendorid, marchid, and mimpid. When both Svade and\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * on mvendorid, marchid, and mimpid. When both Svade and\n" ">> Svadu present\n" - ">> +???????? * in DT, supervisor must assume Svadu turned-off at boot\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * in DT, supervisor must assume Svadu turned-off at boot\n" ">> time. To use\n" - ">> +???????? * Svadu, supervisor must explicitly enable it using the SBI\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * Svadu, supervisor must explicitly enable it using the SBI\n" ">> FWFT extension.\n" - ">> +???????? */\n" - ">> +??????? if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" - ">> +??????????? !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" - ">> +??????????? set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa);\n" - ">> +??????? else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" - ">> +???????????? test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" - ">> +??????????? clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa);\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 */\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa);\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa);\n" ">> +\n" - ">> ????????? /*\n" - ">> ?????????? * All \"okay\" hart should have same isa. Set HWCAP based on\n" - ">> ?????????? * common capabilities of every \"okay\" hart, in case they don't\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /*\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * All \"okay\" hart should have same isa. Set HWCAP based on\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * common capabilities of every \"okay\" hart, in case they don't\n" ">> @@ -619,6 +636,21 @@ static int __init\n" ">> riscv_fill_hwcap_from_ext_list(unsigned long *isa2hwcap)\n" - ">> ? ????????? of_node_put(cpu_node);\n" - ">> ? +??????? /*\n" - ">> +???????? * When neither Svade nor Svadu present in DT, it is technically\n" - ">> +???????? * unknown whether the platform uses Svade or Svadu.\n" + ">> \302\240 \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 of_node_put(cpu_node);\n" + ">> \302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /*\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * When neither Svade nor Svadu present in DT, it is technically\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * unknown whether the platform uses Svade or Svadu.\n" ">> Supervisor may\n" - ">> +???????? * assume Svade to be present and enabled or it can discover\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * assume Svade to be present and enabled or it can discover\n" ">> based\n" - ">> +???????? * on mvendorid, marchid, and mimpid. When both Svade and\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * on mvendorid, marchid, and mimpid. When both Svade and\n" ">> Svadu present\n" - ">> +???????? * in DT, supervisor must assume Svadu turned-off at boot\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * in DT, supervisor must assume Svadu turned-off at boot\n" ">> time. To use\n" - ">> +???????? * Svadu, supervisor must explicitly enable it using the SBI\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * Svadu, supervisor must explicitly enable it using the SBI\n" ">> FWFT extension.\n" - ">> +???????? */\n" - ">> +??????? if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" - ">> +??????????? !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" - ">> +??????????? set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa);\n" - ">> +??????? else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" - ">> +???????????? test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" - ">> +??????????? clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa);\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 */\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa);\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa);\n" ">> +\n" "\n" "This is a duplicate of the previous chunk of code. Moreover, now that we\n" @@ -215,13 +244,13 @@ "\n" "Thanks,\n" "\n" - "Cl?ment\n" + "Cl\303\251ment\n" "\n" "\n" "\n" - ">> ????????? /*\n" - ">> ?????????? * All \"okay\" harts should have same isa. Set HWCAP based on\n" - ">> ?????????? * common capabilities of every \"okay\" hart, in case they\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /*\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * All \"okay\" harts should have same isa. Set HWCAP based on\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * common capabilities of every \"okay\" hart, in case they\n" ">> don't.\n" "> \n" "> \n" @@ -230,6 +259,11 @@ "> Thanks,\n" "> \n" "> Alex\n" - > + "> \n" + "\n" + "_______________________________________________\n" + "linux-riscv mailing list\n" + "linux-riscv@lists.infradead.org\n" + http://lists.infradead.org/mailman/listinfo/linux-riscv -f819cde2730614b60577706e158544787248cf999a23cb726d5c5e4577982781 +459c16717021240b1b6a5e949e50850c968c590fde3c92de6784ebfde8f2f8b7
diff --git a/a/1.txt b/N2/1.txt index b975102..13e559a 100644 --- a/a/1.txt +++ b/N2/1.txt @@ -27,72 +27,72 @@ On 18/07/2024 18:43, Alexandre Ghiti wrote: >> Signed-off-by: Yong-Xuan Wang <yongxuan.wang@sifive.com> >> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> >> --- ->> ? arch/riscv/Kconfig?????????????? |? 1 + ->> ? arch/riscv/include/asm/csr.h???? |? 1 + ->> ? arch/riscv/include/asm/hwcap.h?? |? 2 ++ ->> ? arch/riscv/include/asm/pgtable.h | 13 ++++++++++++- ->> ? arch/riscv/kernel/cpufeature.c?? | 32 ++++++++++++++++++++++++++++++++ ->> ? 5 files changed, 48 insertions(+), 1 deletion(-) +>> arch/riscv/Kconfig | 1 + +>> arch/riscv/include/asm/csr.h | 1 + +>> arch/riscv/include/asm/hwcap.h | 2 ++ +>> arch/riscv/include/asm/pgtable.h | 13 ++++++++++++- +>> arch/riscv/kernel/cpufeature.c | 32 ++++++++++++++++++++++++++++++++ +>> 5 files changed, 48 insertions(+), 1 deletion(-) >> >> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig >> index 0525ee2d63c7..3d705e28ff85 100644 >> --- a/arch/riscv/Kconfig >> +++ b/arch/riscv/Kconfig >> @@ -36,6 +36,7 @@ config RISCV ->> ????? select ARCH_HAS_PMEM_API ->> ????? select ARCH_HAS_PREPARE_SYNC_CORE_CMD ->> ????? select ARCH_HAS_PTE_SPECIAL ->> +??? select ARCH_HAS_HW_PTE_YOUNG ->> ????? select ARCH_HAS_SET_DIRECT_MAP if MMU ->> ????? select ARCH_HAS_SET_MEMORY if MMU ->> ????? select ARCH_HAS_STRICT_KERNEL_RWX if MMU && !XIP_KERNEL +>> select ARCH_HAS_PMEM_API +>> select ARCH_HAS_PREPARE_SYNC_CORE_CMD +>> select ARCH_HAS_PTE_SPECIAL +>> + select ARCH_HAS_HW_PTE_YOUNG +>> select ARCH_HAS_SET_DIRECT_MAP if MMU +>> select ARCH_HAS_SET_MEMORY if MMU +>> select ARCH_HAS_STRICT_KERNEL_RWX if MMU && !XIP_KERNEL >> diff --git a/arch/riscv/include/asm/csr.h b/arch/riscv/include/asm/csr.h >> index 25966995da04..524cd4131c71 100644 >> --- a/arch/riscv/include/asm/csr.h >> +++ b/arch/riscv/include/asm/csr.h >> @@ -195,6 +195,7 @@ ->> ? /* xENVCFG flags */ ->> ? #define ENVCFG_STCE??????????? (_AC(1, ULL) << 63) ->> ? #define ENVCFG_PBMTE??????????? (_AC(1, ULL) << 62) ->> +#define ENVCFG_ADUE??????????? (_AC(1, ULL) << 61) ->> ? #define ENVCFG_CBZE??????????? (_AC(1, UL) << 7) ->> ? #define ENVCFG_CBCFE??????????? (_AC(1, UL) << 6) ->> ? #define ENVCFG_CBIE_SHIFT??????? 4 +>> /* xENVCFG flags */ +>> #define ENVCFG_STCE (_AC(1, ULL) << 63) +>> #define ENVCFG_PBMTE (_AC(1, ULL) << 62) +>> +#define ENVCFG_ADUE (_AC(1, ULL) << 61) +>> #define ENVCFG_CBZE (_AC(1, UL) << 7) +>> #define ENVCFG_CBCFE (_AC(1, UL) << 6) +>> #define ENVCFG_CBIE_SHIFT 4 >> diff --git a/arch/riscv/include/asm/hwcap.h >> b/arch/riscv/include/asm/hwcap.h >> index e17d0078a651..35d7aa49785d 100644 >> --- a/arch/riscv/include/asm/hwcap.h >> +++ b/arch/riscv/include/asm/hwcap.h >> @@ -81,6 +81,8 @@ ->> ? #define RISCV_ISA_EXT_ZTSO??????? 72 ->> ? #define RISCV_ISA_EXT_ZACAS??????? 73 ->> ? #define RISCV_ISA_EXT_XANDESPMU??????? 74 ->> +#define RISCV_ISA_EXT_SVADE???????????? 75 ->> +#define RISCV_ISA_EXT_SVADU??????? 76 ->> ? ? #define RISCV_ISA_EXT_XLINUXENVCFG??? 127 ->> ? diff --git a/arch/riscv/include/asm/pgtable.h +>> #define RISCV_ISA_EXT_ZTSO 72 +>> #define RISCV_ISA_EXT_ZACAS 73 +>> #define RISCV_ISA_EXT_XANDESPMU 74 +>> +#define RISCV_ISA_EXT_SVADE 75 +>> +#define RISCV_ISA_EXT_SVADU 76 +>> #define RISCV_ISA_EXT_XLINUXENVCFG 127 +>> diff --git a/arch/riscv/include/asm/pgtable.h >> b/arch/riscv/include/asm/pgtable.h >> index aad8b8ca51f1..ec0cdacd7da0 100644 >> --- a/arch/riscv/include/asm/pgtable.h >> +++ b/arch/riscv/include/asm/pgtable.h >> @@ -120,6 +120,7 @@ ->> ? #include <asm/tlbflush.h> ->> ? #include <linux/mm_types.h> ->> ? #include <asm/compat.h> +>> #include <asm/tlbflush.h> +>> #include <linux/mm_types.h> +>> #include <asm/compat.h> >> +#include <asm/cpufeature.h> ->> ? ? #define __page_val_to_pfn(_val)? (((_val) & _PAGE_PFN_MASK) >> +>> #define __page_val_to_pfn(_val) (((_val) & _PAGE_PFN_MASK) >> >> _PAGE_PFN_SHIFT) ->> ? @@ -288,7 +289,6 @@ static inline pte_t pud_pte(pud_t pud) ->> ? } ->> ? ? #ifdef CONFIG_RISCV_ISA_SVNAPOT +>> @@ -288,7 +289,6 @@ static inline pte_t pud_pte(pud_t pud) +>> } +>> #ifdef CONFIG_RISCV_ISA_SVNAPOT >> -#include <asm/cpufeature.h> ->> ? ? static __always_inline bool has_svnapot(void) ->> ? { +>> static __always_inline bool has_svnapot(void) +>> { >> @@ -624,6 +624,17 @@ static inline pgprot_t >> pgprot_writecombine(pgprot_t _prot) ->> ????? return __pgprot(prot); ->> ? } ->> ? +/* +>> return __pgprot(prot); +>> } +>> +/* >> + * Both Svade and Svadu control the hardware behavior when the PTE >> A/D bits need to be set. By >> + * default the M-mode firmware enables the hardware updating scheme @@ -102,75 +102,75 @@ On 18/07/2024 18:43, Alexandre Ghiti wrote: >> +#define arch_has_hw_pte_young arch_has_hw_pte_young >> +static inline bool arch_has_hw_pte_young(void) >> +{ ->> +??? return riscv_has_extension_unlikely(RISCV_ISA_EXT_SVADU); +>> + return riscv_has_extension_unlikely(RISCV_ISA_EXT_SVADU); >> +} >> + ->> ? /* ->> ?? * THP functions ->> ?? */ +>> /* +>> * THP functions +>> */ >> diff --git a/arch/riscv/kernel/cpufeature.c >> b/arch/riscv/kernel/cpufeature.c >> index 5ef48cb20ee1..b2c3fe945e89 100644 >> --- a/arch/riscv/kernel/cpufeature.c >> +++ b/arch/riscv/kernel/cpufeature.c >> @@ -301,6 +301,8 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = { ->> ????? __RISCV_ISA_EXT_DATA(ssaia, RISCV_ISA_EXT_SSAIA), ->> ????? __RISCV_ISA_EXT_DATA(sscofpmf, RISCV_ISA_EXT_SSCOFPMF), ->> ????? __RISCV_ISA_EXT_DATA(sstc, RISCV_ISA_EXT_SSTC), ->> +??? __RISCV_ISA_EXT_DATA(svade, RISCV_ISA_EXT_SVADE), ->> +??? __RISCV_ISA_EXT_DATA(svadu, RISCV_ISA_EXT_SVADU), ->> ????? __RISCV_ISA_EXT_DATA(svinval, RISCV_ISA_EXT_SVINVAL), ->> ????? __RISCV_ISA_EXT_DATA(svnapot, RISCV_ISA_EXT_SVNAPOT), ->> ????? __RISCV_ISA_EXT_DATA(svpbmt, RISCV_ISA_EXT_SVPBMT), +>> __RISCV_ISA_EXT_DATA(ssaia, RISCV_ISA_EXT_SSAIA), +>> __RISCV_ISA_EXT_DATA(sscofpmf, RISCV_ISA_EXT_SSCOFPMF), +>> __RISCV_ISA_EXT_DATA(sstc, RISCV_ISA_EXT_SSTC), +>> + __RISCV_ISA_EXT_DATA(svade, RISCV_ISA_EXT_SVADE), +>> + __RISCV_ISA_EXT_DATA(svadu, RISCV_ISA_EXT_SVADU), +>> __RISCV_ISA_EXT_DATA(svinval, RISCV_ISA_EXT_SVINVAL), +>> __RISCV_ISA_EXT_DATA(svnapot, RISCV_ISA_EXT_SVNAPOT), +>> __RISCV_ISA_EXT_DATA(svpbmt, RISCV_ISA_EXT_SVPBMT), >> @@ -554,6 +556,21 @@ static void __init >> riscv_fill_hwcap_from_isa_string(unsigned long *isa2hwcap) ->> ????????????? clear_bit(RISCV_ISA_EXT_v, isainfo->isa); ->> ????????? } ->> ? +??????? /* ->> +???????? * When neither Svade nor Svadu present in DT, it is technically ->> +???????? * unknown whether the platform uses Svade or Svadu. +>> clear_bit(RISCV_ISA_EXT_v, isainfo->isa); +>> } +>> + /* +>> + * When neither Svade nor Svadu present in DT, it is technically +>> + * unknown whether the platform uses Svade or Svadu. >> Supervisor may ->> +???????? * assume Svade to be present and enabled or it can discover +>> + * assume Svade to be present and enabled or it can discover >> based ->> +???????? * on mvendorid, marchid, and mimpid. When both Svade and +>> + * on mvendorid, marchid, and mimpid. When both Svade and >> Svadu present ->> +???????? * in DT, supervisor must assume Svadu turned-off at boot +>> + * in DT, supervisor must assume Svadu turned-off at boot >> time. To use ->> +???????? * Svadu, supervisor must explicitly enable it using the SBI +>> + * Svadu, supervisor must explicitly enable it using the SBI >> FWFT extension. ->> +???????? */ ->> +??????? if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && ->> +??????????? !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) ->> +??????????? set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa); ->> +??????? else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && ->> +???????????? test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) ->> +??????????? clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa); +>> + */ +>> + if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && +>> + !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) +>> + set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa); +>> + else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && +>> + test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) +>> + clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa); >> + ->> ????????? /* ->> ?????????? * All "okay" hart should have same isa. Set HWCAP based on ->> ?????????? * common capabilities of every "okay" hart, in case they don't +>> /* +>> * All "okay" hart should have same isa. Set HWCAP based on +>> * common capabilities of every "okay" hart, in case they don't >> @@ -619,6 +636,21 @@ static int __init >> riscv_fill_hwcap_from_ext_list(unsigned long *isa2hwcap) ->> ? ????????? of_node_put(cpu_node); ->> ? +??????? /* ->> +???????? * When neither Svade nor Svadu present in DT, it is technically ->> +???????? * unknown whether the platform uses Svade or Svadu. +>> of_node_put(cpu_node); +>> + /* +>> + * When neither Svade nor Svadu present in DT, it is technically +>> + * unknown whether the platform uses Svade or Svadu. >> Supervisor may ->> +???????? * assume Svade to be present and enabled or it can discover +>> + * assume Svade to be present and enabled or it can discover >> based ->> +???????? * on mvendorid, marchid, and mimpid. When both Svade and +>> + * on mvendorid, marchid, and mimpid. When both Svade and >> Svadu present ->> +???????? * in DT, supervisor must assume Svadu turned-off at boot +>> + * in DT, supervisor must assume Svadu turned-off at boot >> time. To use ->> +???????? * Svadu, supervisor must explicitly enable it using the SBI +>> + * Svadu, supervisor must explicitly enable it using the SBI >> FWFT extension. ->> +???????? */ ->> +??????? if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && ->> +??????????? !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) ->> +??????????? set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa); ->> +??????? else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && ->> +???????????? test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) ->> +??????????? clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa); +>> + */ +>> + if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && +>> + !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) +>> + set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa); +>> + else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) && +>> + test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa)) +>> + clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa); >> + This is a duplicate of the previous chunk of code. Moreover, now that we @@ -206,13 +206,13 @@ in your patch series, I think it is sane to keep it like that. Thanks, -Cl?ment +Clément ->> ????????? /* ->> ?????????? * All "okay" harts should have same isa. Set HWCAP based on ->> ?????????? * common capabilities of every "okay" hart, in case they +>> /* +>> * All "okay" harts should have same isa. Set HWCAP based on +>> * common capabilities of every "okay" hart, in case they >> don't. > > diff --git a/a/content_digest b/N2/content_digest index 5136de4..6464b49 100644 --- a/a/content_digest +++ b/N2/content_digest @@ -2,9 +2,38 @@ "ref\020240712083850.4242-2-yongxuan.wang@sifive.com\0" "ref\06ad0c386-6777-4467-bab4-8fba149f3bfe@ghiti.fr\0" "From\0Cl\303\251ment L\303\251ger <cleger@rivosinc.com>\0" - "Subject\0[PATCH v7 1/4] RISC-V: Add Svade and Svadu Extensions Support\0" + "Subject\0Re: [PATCH v7 1/4] RISC-V: Add Svade and Svadu Extensions Support\0" "Date\0Fri, 19 Jul 2024 09:38:04 +0200\0" - "To\0kvm-riscv@lists.infradead.org\0" + "To\0Alexandre Ghiti <alex@ghiti.fr>" + Yong-Xuan Wang <yongxuan.wang@sifive.com> + linux-kernel@vger.kernel.org + linux-riscv@lists.infradead.org + kvm-riscv@lists.infradead.org + " kvm@vger.kernel.org\0" + "Cc\0greentime.hu@sifive.com" + vincent.chen@sifive.com + Jinyu Tang <tjytimi@163.com> + Paul Walmsley <paul.walmsley@sifive.com> + Palmer Dabbelt <palmer@dabbelt.com> + Albert Ou <aou@eecs.berkeley.edu> + Andrew Jones <ajones@ventanamicro.com> + Anup Patel <anup@brainfault.org> + Conor Dooley <conor.dooley@microchip.com> + Mayuresh Chitale <mchitale@ventanamicro.com> + Atish Patra <atishp@rivosinc.com> + Samuel Ortiz <sameo@rivosinc.com> + Daniel Henrique Barboza <dbarboza@ventanamicro.com> + Samuel Holland <samuel.holland@sifive.com> + Evan Green <evan@rivosinc.com> + Xiao Wang <xiao.w.wang@intel.com> + Alexandre Ghiti <alexghiti@rivosinc.com> + Andrew Morton <akpm@linux-foundation.org> + Kemeng Shi <shikemeng@huaweicloud.com> + Mike Rapoport (IBM) <rppt@kernel.org> + Leonardo Bras <leobras@redhat.com> + Charlie Jenkins <charlie@rivosinc.com> + Matthew Wilcox (Oracle) <willy@infradead.org> + " Jisheng Zhang <jszhang@kernel.org>\0" "\00:1\0" "b\0" "\n" @@ -36,72 +65,72 @@ ">> Signed-off-by: Yong-Xuan Wang <yongxuan.wang@sifive.com>\n" ">> Reviewed-by: Andrew Jones <ajones@ventanamicro.com>\n" ">> ---\n" - ">> ? arch/riscv/Kconfig?????????????? |? 1 +\n" - ">> ? arch/riscv/include/asm/csr.h???? |? 1 +\n" - ">> ? arch/riscv/include/asm/hwcap.h?? |? 2 ++\n" - ">> ? arch/riscv/include/asm/pgtable.h | 13 ++++++++++++-\n" - ">> ? arch/riscv/kernel/cpufeature.c?? | 32 ++++++++++++++++++++++++++++++++\n" - ">> ? 5 files changed, 48 insertions(+), 1 deletion(-)\n" + ">> \302\240 arch/riscv/Kconfig\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 |\302\240 1 +\n" + ">> \302\240 arch/riscv/include/asm/csr.h\302\240\302\240\302\240\302\240 |\302\240 1 +\n" + ">> \302\240 arch/riscv/include/asm/hwcap.h\302\240\302\240 |\302\240 2 ++\n" + ">> \302\240 arch/riscv/include/asm/pgtable.h | 13 ++++++++++++-\n" + ">> \302\240 arch/riscv/kernel/cpufeature.c\302\240\302\240 | 32 ++++++++++++++++++++++++++++++++\n" + ">> \302\240 5 files changed, 48 insertions(+), 1 deletion(-)\n" ">>\n" ">> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig\n" ">> index 0525ee2d63c7..3d705e28ff85 100644\n" ">> --- a/arch/riscv/Kconfig\n" ">> +++ b/arch/riscv/Kconfig\n" ">> @@ -36,6 +36,7 @@ config RISCV\n" - ">> ????? select ARCH_HAS_PMEM_API\n" - ">> ????? select ARCH_HAS_PREPARE_SYNC_CORE_CMD\n" - ">> ????? select ARCH_HAS_PTE_SPECIAL\n" - ">> +??? select ARCH_HAS_HW_PTE_YOUNG\n" - ">> ????? select ARCH_HAS_SET_DIRECT_MAP if MMU\n" - ">> ????? select ARCH_HAS_SET_MEMORY if MMU\n" - ">> ????? select ARCH_HAS_STRICT_KERNEL_RWX if MMU && !XIP_KERNEL\n" + ">> \302\240\302\240\302\240\302\240\302\240 select ARCH_HAS_PMEM_API\n" + ">> \302\240\302\240\302\240\302\240\302\240 select ARCH_HAS_PREPARE_SYNC_CORE_CMD\n" + ">> \302\240\302\240\302\240\302\240\302\240 select ARCH_HAS_PTE_SPECIAL\n" + ">> +\302\240\302\240\302\240 select ARCH_HAS_HW_PTE_YOUNG\n" + ">> \302\240\302\240\302\240\302\240\302\240 select ARCH_HAS_SET_DIRECT_MAP if MMU\n" + ">> \302\240\302\240\302\240\302\240\302\240 select ARCH_HAS_SET_MEMORY if MMU\n" + ">> \302\240\302\240\302\240\302\240\302\240 select ARCH_HAS_STRICT_KERNEL_RWX if MMU && !XIP_KERNEL\n" ">> diff --git a/arch/riscv/include/asm/csr.h b/arch/riscv/include/asm/csr.h\n" ">> index 25966995da04..524cd4131c71 100644\n" ">> --- a/arch/riscv/include/asm/csr.h\n" ">> +++ b/arch/riscv/include/asm/csr.h\n" ">> @@ -195,6 +195,7 @@\n" - ">> ? /* xENVCFG flags */\n" - ">> ? #define ENVCFG_STCE??????????? (_AC(1, ULL) << 63)\n" - ">> ? #define ENVCFG_PBMTE??????????? (_AC(1, ULL) << 62)\n" - ">> +#define ENVCFG_ADUE??????????? (_AC(1, ULL) << 61)\n" - ">> ? #define ENVCFG_CBZE??????????? (_AC(1, UL) << 7)\n" - ">> ? #define ENVCFG_CBCFE??????????? (_AC(1, UL) << 6)\n" - ">> ? #define ENVCFG_CBIE_SHIFT??????? 4\n" + ">> \302\240 /* xENVCFG flags */\n" + ">> \302\240 #define ENVCFG_STCE\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 (_AC(1, ULL) << 63)\n" + ">> \302\240 #define ENVCFG_PBMTE\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 (_AC(1, ULL) << 62)\n" + ">> +#define ENVCFG_ADUE\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 (_AC(1, ULL) << 61)\n" + ">> \302\240 #define ENVCFG_CBZE\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 (_AC(1, UL) << 7)\n" + ">> \302\240 #define ENVCFG_CBCFE\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 (_AC(1, UL) << 6)\n" + ">> \302\240 #define ENVCFG_CBIE_SHIFT\302\240\302\240\302\240\302\240\302\240\302\240\302\240 4\n" ">> diff --git a/arch/riscv/include/asm/hwcap.h\n" ">> b/arch/riscv/include/asm/hwcap.h\n" ">> index e17d0078a651..35d7aa49785d 100644\n" ">> --- a/arch/riscv/include/asm/hwcap.h\n" ">> +++ b/arch/riscv/include/asm/hwcap.h\n" ">> @@ -81,6 +81,8 @@\n" - ">> ? #define RISCV_ISA_EXT_ZTSO??????? 72\n" - ">> ? #define RISCV_ISA_EXT_ZACAS??????? 73\n" - ">> ? #define RISCV_ISA_EXT_XANDESPMU??????? 74\n" - ">> +#define RISCV_ISA_EXT_SVADE???????????? 75\n" - ">> +#define RISCV_ISA_EXT_SVADU??????? 76\n" - ">> ? ? #define RISCV_ISA_EXT_XLINUXENVCFG??? 127\n" - ">> ? diff --git a/arch/riscv/include/asm/pgtable.h\n" + ">> \302\240 #define RISCV_ISA_EXT_ZTSO\302\240\302\240\302\240\302\240\302\240\302\240\302\240 72\n" + ">> \302\240 #define RISCV_ISA_EXT_ZACAS\302\240\302\240\302\240\302\240\302\240\302\240\302\240 73\n" + ">> \302\240 #define RISCV_ISA_EXT_XANDESPMU\302\240\302\240\302\240\302\240\302\240\302\240\302\240 74\n" + ">> +#define RISCV_ISA_EXT_SVADE\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 75\n" + ">> +#define RISCV_ISA_EXT_SVADU\302\240\302\240\302\240\302\240\302\240\302\240\302\240 76\n" + ">> \302\240 \302\240 #define RISCV_ISA_EXT_XLINUXENVCFG\302\240\302\240\302\240 127\n" + ">> \302\240 diff --git a/arch/riscv/include/asm/pgtable.h\n" ">> b/arch/riscv/include/asm/pgtable.h\n" ">> index aad8b8ca51f1..ec0cdacd7da0 100644\n" ">> --- a/arch/riscv/include/asm/pgtable.h\n" ">> +++ b/arch/riscv/include/asm/pgtable.h\n" ">> @@ -120,6 +120,7 @@\n" - ">> ? #include <asm/tlbflush.h>\n" - ">> ? #include <linux/mm_types.h>\n" - ">> ? #include <asm/compat.h>\n" + ">> \302\240 #include <asm/tlbflush.h>\n" + ">> \302\240 #include <linux/mm_types.h>\n" + ">> \302\240 #include <asm/compat.h>\n" ">> +#include <asm/cpufeature.h>\n" - ">> ? ? #define __page_val_to_pfn(_val)? (((_val) & _PAGE_PFN_MASK) >>\n" + ">> \302\240 \302\240 #define __page_val_to_pfn(_val)\302\240 (((_val) & _PAGE_PFN_MASK) >>\n" ">> _PAGE_PFN_SHIFT)\n" - ">> ? @@ -288,7 +289,6 @@ static inline pte_t pud_pte(pud_t pud)\n" - ">> ? }\n" - ">> ? ? #ifdef CONFIG_RISCV_ISA_SVNAPOT\n" + ">> \302\240 @@ -288,7 +289,6 @@ static inline pte_t pud_pte(pud_t pud)\n" + ">> \302\240 }\n" + ">> \302\240 \302\240 #ifdef CONFIG_RISCV_ISA_SVNAPOT\n" ">> -#include <asm/cpufeature.h>\n" - ">> ? ? static __always_inline bool has_svnapot(void)\n" - ">> ? {\n" + ">> \302\240 \302\240 static __always_inline bool has_svnapot(void)\n" + ">> \302\240 {\n" ">> @@ -624,6 +624,17 @@ static inline pgprot_t\n" ">> pgprot_writecombine(pgprot_t _prot)\n" - ">> ????? return __pgprot(prot);\n" - ">> ? }\n" - ">> ? +/*\n" + ">> \302\240\302\240\302\240\302\240\302\240 return __pgprot(prot);\n" + ">> \302\240 }\n" + ">> \302\240 +/*\n" ">> + * Both Svade and Svadu control the hardware behavior when the PTE\n" ">> A/D bits need to be set. By\n" ">> + * default the M-mode firmware enables the hardware updating scheme\n" @@ -111,75 +140,75 @@ ">> +#define arch_has_hw_pte_young arch_has_hw_pte_young\n" ">> +static inline bool arch_has_hw_pte_young(void)\n" ">> +{\n" - ">> +??? return riscv_has_extension_unlikely(RISCV_ISA_EXT_SVADU);\n" + ">> +\302\240\302\240\302\240 return riscv_has_extension_unlikely(RISCV_ISA_EXT_SVADU);\n" ">> +}\n" ">> +\n" - ">> ? /*\n" - ">> ?? * THP functions\n" - ">> ?? */\n" + ">> \302\240 /*\n" + ">> \302\240\302\240 * THP functions\n" + ">> \302\240\302\240 */\n" ">> diff --git a/arch/riscv/kernel/cpufeature.c\n" ">> b/arch/riscv/kernel/cpufeature.c\n" ">> index 5ef48cb20ee1..b2c3fe945e89 100644\n" ">> --- a/arch/riscv/kernel/cpufeature.c\n" ">> +++ b/arch/riscv/kernel/cpufeature.c\n" ">> @@ -301,6 +301,8 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {\n" - ">> ????? __RISCV_ISA_EXT_DATA(ssaia, RISCV_ISA_EXT_SSAIA),\n" - ">> ????? __RISCV_ISA_EXT_DATA(sscofpmf, RISCV_ISA_EXT_SSCOFPMF),\n" - ">> ????? __RISCV_ISA_EXT_DATA(sstc, RISCV_ISA_EXT_SSTC),\n" - ">> +??? __RISCV_ISA_EXT_DATA(svade, RISCV_ISA_EXT_SVADE),\n" - ">> +??? __RISCV_ISA_EXT_DATA(svadu, RISCV_ISA_EXT_SVADU),\n" - ">> ????? __RISCV_ISA_EXT_DATA(svinval, RISCV_ISA_EXT_SVINVAL),\n" - ">> ????? __RISCV_ISA_EXT_DATA(svnapot, RISCV_ISA_EXT_SVNAPOT),\n" - ">> ????? __RISCV_ISA_EXT_DATA(svpbmt, RISCV_ISA_EXT_SVPBMT),\n" + ">> \302\240\302\240\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(ssaia, RISCV_ISA_EXT_SSAIA),\n" + ">> \302\240\302\240\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(sscofpmf, RISCV_ISA_EXT_SSCOFPMF),\n" + ">> \302\240\302\240\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(sstc, RISCV_ISA_EXT_SSTC),\n" + ">> +\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(svade, RISCV_ISA_EXT_SVADE),\n" + ">> +\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(svadu, RISCV_ISA_EXT_SVADU),\n" + ">> \302\240\302\240\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(svinval, RISCV_ISA_EXT_SVINVAL),\n" + ">> \302\240\302\240\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(svnapot, RISCV_ISA_EXT_SVNAPOT),\n" + ">> \302\240\302\240\302\240\302\240\302\240 __RISCV_ISA_EXT_DATA(svpbmt, RISCV_ISA_EXT_SVPBMT),\n" ">> @@ -554,6 +556,21 @@ static void __init\n" ">> riscv_fill_hwcap_from_isa_string(unsigned long *isa2hwcap)\n" - ">> ????????????? clear_bit(RISCV_ISA_EXT_v, isainfo->isa);\n" - ">> ????????? }\n" - ">> ? +??????? /*\n" - ">> +???????? * When neither Svade nor Svadu present in DT, it is technically\n" - ">> +???????? * unknown whether the platform uses Svade or Svadu.\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clear_bit(RISCV_ISA_EXT_v, isainfo->isa);\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n" + ">> \302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /*\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * When neither Svade nor Svadu present in DT, it is technically\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * unknown whether the platform uses Svade or Svadu.\n" ">> Supervisor may\n" - ">> +???????? * assume Svade to be present and enabled or it can discover\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * assume Svade to be present and enabled or it can discover\n" ">> based\n" - ">> +???????? * on mvendorid, marchid, and mimpid. When both Svade and\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * on mvendorid, marchid, and mimpid. When both Svade and\n" ">> Svadu present\n" - ">> +???????? * in DT, supervisor must assume Svadu turned-off at boot\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * in DT, supervisor must assume Svadu turned-off at boot\n" ">> time. To use\n" - ">> +???????? * Svadu, supervisor must explicitly enable it using the SBI\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * Svadu, supervisor must explicitly enable it using the SBI\n" ">> FWFT extension.\n" - ">> +???????? */\n" - ">> +??????? if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" - ">> +??????????? !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" - ">> +??????????? set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa);\n" - ">> +??????? else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" - ">> +???????????? test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" - ">> +??????????? clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa);\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 */\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa);\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa);\n" ">> +\n" - ">> ????????? /*\n" - ">> ?????????? * All \"okay\" hart should have same isa. Set HWCAP based on\n" - ">> ?????????? * common capabilities of every \"okay\" hart, in case they don't\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /*\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * All \"okay\" hart should have same isa. Set HWCAP based on\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * common capabilities of every \"okay\" hart, in case they don't\n" ">> @@ -619,6 +636,21 @@ static int __init\n" ">> riscv_fill_hwcap_from_ext_list(unsigned long *isa2hwcap)\n" - ">> ? ????????? of_node_put(cpu_node);\n" - ">> ? +??????? /*\n" - ">> +???????? * When neither Svade nor Svadu present in DT, it is technically\n" - ">> +???????? * unknown whether the platform uses Svade or Svadu.\n" + ">> \302\240 \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 of_node_put(cpu_node);\n" + ">> \302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /*\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * When neither Svade nor Svadu present in DT, it is technically\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * unknown whether the platform uses Svade or Svadu.\n" ">> Supervisor may\n" - ">> +???????? * assume Svade to be present and enabled or it can discover\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * assume Svade to be present and enabled or it can discover\n" ">> based\n" - ">> +???????? * on mvendorid, marchid, and mimpid. When both Svade and\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * on mvendorid, marchid, and mimpid. When both Svade and\n" ">> Svadu present\n" - ">> +???????? * in DT, supervisor must assume Svadu turned-off at boot\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * in DT, supervisor must assume Svadu turned-off at boot\n" ">> time. To use\n" - ">> +???????? * Svadu, supervisor must explicitly enable it using the SBI\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * Svadu, supervisor must explicitly enable it using the SBI\n" ">> FWFT extension.\n" - ">> +???????? */\n" - ">> +??????? if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" - ">> +??????????? !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" - ">> +??????????? set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa);\n" - ">> +??????? else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" - ">> +???????????? test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" - ">> +??????????? clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa);\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 */\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 if (!test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 !test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 set_bit(RISCV_ISA_EXT_SVADE, isainfo->isa);\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 else if (test_bit(RISCV_ISA_EXT_SVADE, isainfo->isa) &&\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 test_bit(RISCV_ISA_EXT_SVADU, isainfo->isa))\n" + ">> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clear_bit(RISCV_ISA_EXT_SVADU, isainfo->isa);\n" ">> +\n" "\n" "This is a duplicate of the previous chunk of code. Moreover, now that we\n" @@ -215,13 +244,13 @@ "\n" "Thanks,\n" "\n" - "Cl?ment\n" + "Cl\303\251ment\n" "\n" "\n" "\n" - ">> ????????? /*\n" - ">> ?????????? * All \"okay\" harts should have same isa. Set HWCAP based on\n" - ">> ?????????? * common capabilities of every \"okay\" hart, in case they\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /*\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * All \"okay\" harts should have same isa. Set HWCAP based on\n" + ">> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * common capabilities of every \"okay\" hart, in case they\n" ">> don't.\n" "> \n" "> \n" @@ -232,4 +261,4 @@ "> Alex\n" > -f819cde2730614b60577706e158544787248cf999a23cb726d5c5e4577982781 +18bfae13c3d34d5da5ed2dc197f4899aded9f84108842b29cb0705c8ff7d261f
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.