[PATCH v2 3/4] lib: sbi: sse: add a is_supported_cb() callback

Samuel Holland samuel.holland at sifive.com
Tue Dec 10 10:45:34 PST 2024


Hi Clément,

On 2024-12-10 11:05 AM, Clément Léger wrote:
> This callback will be used to expose the availability of events based on
> the presence of the dependencies (PMU Overflow IRQ for the PMU Overflow
> SSE event for instance). Drivers that want to handle an SSE event will
> need to register callbacks for the SSE event with at least the
> is_supported_cb() callback implemented. Now that this callback is
> implemented, set all non software events as not supported by default.
> 
> Signed-off-by: Clément Léger <cleger at rivosinc.com>
> ---
>  include/sbi/sbi_sse.h |  5 +++++
>  lib/sbi/sbi_sse.c     | 11 +++++++----
>  2 files changed, 12 insertions(+), 4 deletions(-)
> 
> diff --git a/include/sbi/sbi_sse.h b/include/sbi/sbi_sse.h
> index 7419698a..1eab4f8b 100644
> --- a/include/sbi/sbi_sse.h
> +++ b/include/sbi/sbi_sse.h
> @@ -52,6 +52,11 @@ struct sbi_sse_cb_ops {
>  	 * Called when the SBI_EXT_SSE_DISABLE is invoked on the event.
>  	 */
>  	void (*disable_cb)(uint32_t event_id);
> +
> +	/**
> +	 * Called at init to check if an event is supported.
> +	 */
> +	bool (*is_supported_cb)(uint32_t event_id);
>  };
>  
>  /* Set the callback operations for an event
> diff --git a/lib/sbi/sbi_sse.c b/lib/sbi/sbi_sse.c
> index 4c186a22..31002a7d 100644
> --- a/lib/sbi/sbi_sse.c
> +++ b/lib/sbi/sbi_sse.c
> @@ -46,10 +46,10 @@ struct sse_event_info {
>  };
>  
>  static struct sse_event_info valid_events[] = {
> -	{.event_id = SBI_SSE_EVENT_LOCAL_RAS, .supported = true},
> -	{.event_id = SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP, .supported = true},
> -	{.event_id = SBI_SSE_EVENT_GLOBAL_RAS, .supported = true},
> -	{.event_id = SBI_SSE_EVENT_LOCAL_PMU, .supported = true},
> +	{.event_id = SBI_SSE_EVENT_LOCAL_RAS, .supported = false},
> +	{.event_id = SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP, .supported = false},
> +	{.event_id = SBI_SSE_EVENT_GLOBAL_RAS, .supported = false},
> +	{.event_id = SBI_SSE_EVENT_LOCAL_PMU, .supported = false},

This change breaks bisectability, because the PMU callback isn't added until the
next commit. So I would suggest moving this hunk to a separate final commit. The
commit looks good otherwise.

Regards,
Samuel

>  	{.event_id = SBI_SSE_EVENT_LOCAL_SOFTWARE, .supported = true},
>  	{.event_id = SBI_SSE_EVENT_GLOBAL_SOFTWARE, .supported = true},
>  };
> @@ -1106,6 +1106,9 @@ static void sse_event_info_init(void)
>  
>  	for (i = 0; i < EVENT_COUNT; i++) {
>  		info = &valid_events[i];
> +		if (info->cb_ops && info->cb_ops->is_supported_cb)
> +			info->supported = info->cb_ops->is_supported_cb(info->event_id);
> +
>  		if (!info->supported)
>  			continue;
>  




More information about the opensbi mailing list