[RFC 05/14] lib: sbi: Disable m/scounteren & enable mcountinhibit

Anup Patel Anup.Patel at wdc.com
Thu Apr 8 04:24:50 BST 2021



> -----Original Message-----
> From: Atish Patra <atish.patra at wdc.com>
> Sent: 20 March 2021 03:43
> To: opensbi at lists.infradead.org
> Cc: Atish Patra <Atish.Patra at wdc.com>; Anup Patel <Anup.Patel at wdc.com>
> Subject: [RFC 05/14] lib: sbi: Disable m/scounteren & enable mcountinhibit
> 
> Currently, all bits in mcountern are enabled unconditionally at boot time.
> With SBI PMU extension, this should enabled only during performance
> monitoring for a particular event except the TM bit. However, this is done
> only if mcountinhibit is implemented because the supervisor mode can not
> start/stop any event without mcountinhibit.
> 
> Similarly, supervisor should take care enabling scounteren which allows U-
> mode to access pmu counters. Disable all bits in scounteren in M-mode.
> 
> Signed-off-by: Atish Patra <atish.patra at wdc.com>

Looks good to me.

Reviewed-by: Anup Patel <anup.patel at wdc.com>

Regards,
Anup

> ---
>  lib/sbi/sbi_hart.c | 22 ++++++++++++++++++----
>  1 file changed, 18 insertions(+), 4 deletions(-)
> 
> diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c index
> 006ec830d86c..b87d1dbedc0b 100644
> --- a/lib/sbi/sbi_hart.c
> +++ b/lib/sbi/sbi_hart.c
> @@ -51,12 +51,26 @@ static void mstatus_init(struct sbi_scratch *scratch)
> 
>  	csr_write(CSR_MSTATUS, mstatus_val);
> 
> -	/* Enable user/supervisor use of perf counters */
> +	/* Disable user mode usage of perf counters */
>  	if (misa_extension('S') &&
>  	    sbi_hart_has_feature(scratch, SBI_HART_HAS_SCOUNTEREN))
> -		csr_write(CSR_SCOUNTEREN, -1);
> -	if (sbi_hart_has_feature(scratch, SBI_HART_HAS_MCOUNTEREN))
> -		csr_write(CSR_MCOUNTEREN, -1);
> +		csr_write(CSR_SCOUNTEREN, 0);
> +
> +	if (sbi_hart_has_feature(scratch, SBI_HART_HAS_MCOUNTEREN)) {
> +		if (sbi_hart_has_feature(scratch,
> SBI_HART_HAS_MCOUNTINHIBIT))
> +			/**
> +			 * Just enable TM bit now. All other counters will be
> +			 * enabled at runtime after S-mode request
> +			 */
> +			csr_write(CSR_MCOUNTEREN, 2);
> +		else
> +			/* Supervisor mode usage are enabled by default */
> +			csr_write(CSR_MCOUNTEREN, -1);
> +	}
> +
> +	/* Counters will start running at runtime after S-mode request */
> +	if (sbi_hart_has_feature(scratch, SBI_HART_HAS_MCOUNTINHIBIT))
> +		csr_write(CSR_MCOUNTINHIBIT, -1);
> 
>  	/* Disable all interrupts */
>  	csr_write(CSR_MIE, 0);
> --
> 2.25.1




More information about the opensbi mailing list