From b2df751acfd2858f2370d896f91543593647b243 Mon Sep 17 00:00:00 2001 From: Atish Patra Date: Sat, 9 May 2020 16:47:28 -0700 Subject: platform: Move platform features to hart PMP & performance counters belong to a hart rather than a platform. In addition to that, these features enable reading/writing from a particular csr. Thus, they can be detected and set at runtime rather than compile time. Move PMP/MCOUNTEREN/SCOUNTEREN features to hart and detect them at runtime. Signed-off-by: Atish Patra Tested-by: Jonathan Balkind Reviewed-by: Anup Patel --- include/sbi/sbi_hart.h | 11 +++++++++++ include/sbi/sbi_platform.h | 22 +++------------------- 2 files changed, 14 insertions(+), 19 deletions(-) (limited to 'include') diff --git a/include/sbi/sbi_hart.h b/include/sbi/sbi_hart.h index e285bdf..f7870d9 100644 --- a/include/sbi/sbi_hart.h +++ b/include/sbi/sbi_hart.h @@ -12,6 +12,16 @@ #include +/** Possible feature flags of a hart */ +enum sbi_hart_features { + /** Hart has PMP support */ + SBI_HART_HAS_PMP = (1 << 0), + /** Hart has S-mode counter enable */ + SBI_HART_HAS_SCOUNTEREN = (1 << 1), + /** Hart has M-mode counter enable */ + SBI_HART_HAS_MCOUNTEREN = (1 << 2), +}; + struct sbi_scratch; int sbi_hart_init(struct sbi_scratch *scratch, u32 hartid, bool cold_boot); @@ -27,6 +37,7 @@ void sbi_hart_pmp_dump(struct sbi_scratch *scratch); int sbi_hart_pmp_check_addr(struct sbi_scratch *scratch, unsigned long daddr, unsigned long attr); bool sbi_hart_has_feature(u32 hartid, unsigned long feature); +unsigned long sbi_hart_get_features(u32 hartid); void __attribute__((noreturn)) sbi_hart_hang(void); diff --git a/include/sbi/sbi_platform.h b/include/sbi/sbi_platform.h index 9eaf82e..675d021 100644 --- a/include/sbi/sbi_platform.h +++ b/include/sbi/sbi_platform.h @@ -52,23 +52,15 @@ enum sbi_platform_features { SBI_PLATFORM_HAS_TIMER_VALUE = (1 << 0), /** Platform has HART hotplug support */ SBI_PLATFORM_HAS_HART_HOTPLUG = (1 << 1), - /** Platform has PMP support */ - SBI_PLATFORM_HAS_PMP = (1 << 2), - /** Platform has S-mode counter enable */ - SBI_PLATFORM_HAS_SCOUNTEREN = (1 << 3), - /** Platform has M-mode counter enable */ - SBI_PLATFORM_HAS_MCOUNTEREN = (1 << 4), /** Platform has fault delegation support */ - SBI_PLATFORM_HAS_MFAULTS_DELEGATION = (1 << 5), + SBI_PLATFORM_HAS_MFAULTS_DELEGATION = (1 << 2), /** Platform has custom secondary hart booting support */ - SBI_PLATFORM_HAS_HART_SECONDARY_BOOT = (1 << 6), + SBI_PLATFORM_HAS_HART_SECONDARY_BOOT = (1 << 3), }; /** Default feature set for a platform */ #define SBI_PLATFORM_DEFAULT_FEATURES \ - (SBI_PLATFORM_HAS_TIMER_VALUE | SBI_PLATFORM_HAS_PMP | \ - SBI_PLATFORM_HAS_SCOUNTEREN | SBI_PLATFORM_HAS_MCOUNTEREN | \ - SBI_PLATFORM_HAS_MFAULTS_DELEGATION) + (SBI_PLATFORM_HAS_TIMER_VALUE | SBI_PLATFORM_HAS_MFAULTS_DELEGATION) /** Platform functions */ struct sbi_platform_operations { @@ -224,14 +216,6 @@ struct sbi_platform { /** Check whether the platform supports HART hotplug */ #define sbi_platform_has_hart_hotplug(__p) \ ((__p)->features & SBI_PLATFORM_HAS_HART_HOTPLUG) -/** Check whether the platform has PMP support */ -#define sbi_platform_has_pmp(__p) ((__p)->features & SBI_PLATFORM_HAS_PMP) -/** Check whether the platform supports scounteren CSR */ -#define sbi_platform_has_scounteren(__p) \ - ((__p)->features & SBI_PLATFORM_HAS_SCOUNTEREN) -/** Check whether the platform supports mcounteren CSR */ -#define sbi_platform_has_mcounteren(__p) \ - ((__p)->features & SBI_PLATFORM_HAS_MCOUNTEREN) /** Check whether the platform supports fault delegation */ #define sbi_platform_has_mfaults_delegation(__p) \ ((__p)->features & SBI_PLATFORM_HAS_MFAULTS_DELEGATION) -- cgit v1.2.3