forked from Mirrors/opensbi
		
	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 <atish.patra@wdc.com> Tested-by: Jonathan Balkind <jbalkind@cs.princeton.edu> Reviewed-by: Anup Patel <anup.patel@wdc.com>
This commit is contained in:
		@@ -12,6 +12,16 @@
 | 
			
		||||
 | 
			
		||||
#include <sbi/sbi_types.h>
 | 
			
		||||
 | 
			
		||||
/** 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);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user