[PATCH v3 4/5] platform: generic: add extensions_init handler and platform-override

Andrew Jones ajones at ventanamicro.com
Thu Sep 8 09:04:24 PDT 2022


On Thu, Sep 08, 2022 at 03:42:41PM +0200, Heiko Stuebner wrote:
> Init of non-standard extensions is a platform-specific thing,
> so allow generic platforms to do this via a platform-override.
> 
> Signed-off-by: Heiko Stuebner <heiko at sntech.de>
> ---
>  platform/generic/include/platform_override.h | 1 +
>  platform/generic/platform.c                  | 9 +++++++++
>  2 files changed, 10 insertions(+)
> 
> diff --git a/platform/generic/include/platform_override.h b/platform/generic/include/platform_override.h
> index e55da25..06a26dd 100644
> --- a/platform/generic/include/platform_override.h
> +++ b/platform/generic/include/platform_override.h
> @@ -22,6 +22,7 @@ struct platform_override {
>  	void (*early_exit)(const struct fdt_match *match);
>  	void (*final_exit)(const struct fdt_match *match);
>  	int (*fdt_fixup)(void *fdt, const struct fdt_match *match);
> +	int (*extensions_init)(const struct fdt_match *match);

If we go with the quirk concept, then maybe this should be renamed to
quirks_init() and it'd be where pmu_quirks[] would get initialized by
the platform.

Thanks,
drew

>  	int (*vendor_ext_check)(long extid, const struct fdt_match *match);
>  	int (*vendor_ext_provider)(long extid, long funcid,
>  				   const struct sbi_trap_regs *regs,
> diff --git a/platform/generic/platform.c b/platform/generic/platform.c
> index cc3620f..de406e3 100644
> --- a/platform/generic/platform.c
> +++ b/platform/generic/platform.c
> @@ -203,6 +203,14 @@ static void generic_final_exit(void)
>  		generic_plat->final_exit(generic_plat_match);
>  }
>  
> +static int generic_extensions_init(void)
> +{
> +	if (generic_plat && generic_plat->extensions_init)
> +		return generic_plat->extensions_init(generic_plat_match);
> +
> +	return 0;
> +}
> +
>  static int generic_domains_init(void)
>  {
>  	return fdt_domains_populate(fdt_get_address());
> @@ -248,6 +256,7 @@ const struct sbi_platform_operations platform_ops = {
>  	.final_init		= generic_final_init,
>  	.early_exit		= generic_early_exit,
>  	.final_exit		= generic_final_exit,
> +	.extensions_init	= generic_extensions_init,
>  	.domains_init		= generic_domains_init,
>  	.console_init		= fdt_serial_init,
>  	.irqchip_init		= fdt_irqchip_init,
> -- 
> 2.35.1
> 
> 
> -- 
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi



More information about the opensbi mailing list