forked from Mirrors/opensbi
		
	lib: sbi_platform: expose hart_features to extension_init callback
The platform-specific extension_init callback is supposed to set specific things for the platform opensbi is running on. So it's also the right place to override specific hart_features if needed - when it's know that autodetection has provided wrong results for example. Suggested-by: Atish Patra <atishp@atishpatra.org> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Reviewed-by: Guo Ren <guoren@kernel.org> Reviewed-by: Anup Patel <anup@brainfault.org> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
This commit is contained in:
		
				
					committed by
					
						
						Anup Patel
					
				
			
			
				
	
			
			
			
						parent
						
							c316fa38c2
						
					
				
				
					commit
					4f2acb53e2
				
			@@ -48,6 +48,7 @@
 | 
			
		||||
struct sbi_domain_memregion;
 | 
			
		||||
struct sbi_trap_info;
 | 
			
		||||
struct sbi_trap_regs;
 | 
			
		||||
struct sbi_hart_features;
 | 
			
		||||
 | 
			
		||||
/** Possible feature flags of a platform */
 | 
			
		||||
enum sbi_platform_features {
 | 
			
		||||
@@ -90,7 +91,7 @@ struct sbi_platform_operations {
 | 
			
		||||
	int (*misa_get_xlen)(void);
 | 
			
		||||
 | 
			
		||||
	/** Initialize (or populate) HART extensions for the platform */
 | 
			
		||||
	int (*extensions_init)(void);
 | 
			
		||||
	int (*extensions_init)(struct sbi_hart_features *hfeatures);
 | 
			
		||||
 | 
			
		||||
	/** Initialize (or populate) domains for the platform */
 | 
			
		||||
	int (*domains_init)(void);
 | 
			
		||||
@@ -464,10 +465,11 @@ static inline int sbi_platform_misa_xlen(const struct sbi_platform *plat)
 | 
			
		||||
 * @return 0 on success and negative error code on failure
 | 
			
		||||
 */
 | 
			
		||||
static inline int sbi_platform_extensions_init(
 | 
			
		||||
					const struct sbi_platform *plat)
 | 
			
		||||
					const struct sbi_platform *plat,
 | 
			
		||||
					struct sbi_hart_features *hfeatures)
 | 
			
		||||
{
 | 
			
		||||
	if (plat && sbi_platform_ops(plat)->extensions_init)
 | 
			
		||||
		return sbi_platform_ops(plat)->extensions_init();
 | 
			
		||||
		return sbi_platform_ops(plat)->extensions_init(hfeatures);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -672,7 +672,8 @@ __mhpm_skip:
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Let platform populate extensions */
 | 
			
		||||
	rc = sbi_platform_extensions_init(sbi_platform_thishart_ptr());
 | 
			
		||||
	rc = sbi_platform_extensions_init(sbi_platform_thishart_ptr(),
 | 
			
		||||
					  hfeatures);
 | 
			
		||||
	if (rc)
 | 
			
		||||
		return rc;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user