[Pdbg] [PATCH v2 3/3] libsbefifo: Set long read timeout for chip-ops

Nicholas Piggin npiggin at gmail.com
Wed Feb 23 22:54:39 AEDT 2022


Excerpts from Joel Stanley's message of February 23, 2022 3:34 pm:
> From: Amitay Isaacs <amitay at ozlabs.org>
> 
> SBE interface specification lists several sbe chip-ops that require long
> read timeout as those chip-ops can take up to 30 seconds to complete.
> 
> Reset the long timeout back to the default after performing the chip-op.
> 
> The list of chip-ops from the spec (v2.0):
> 
>  0xA1	0x01	Execute istep
>  0xA2 	0x05	Execute multi-SCOM
>  0xA3	0x01	Get Ring
> 	0x02	Set Ring
>  0xA4	0x01	Get Memory
> 	0x02	Put Memory
> 	0x03	Get SRAM
> 	0x04	Put SRAM
>  0xA5	0x01	Get Architected Register
>  	0x02	Put Architected Register
>  0xA6	0x01	Control Fast Array
>  	0x02	Control Trace Array
>  0xA8	0x03	Quiesce SBE
>  0xA9	0x01	Enter MPIPL
>  	0x02	Continue MPIPL
> 	0x04	TI Info
> 
> Signed-off-by: Amitay Isaacs <amitay at ozlabs.org>
> Signed-off-by: Joel Stanley <joel at jms.id.au>
> ---
> v2: Split out from second patch
>     Add list of ops from spec to commit message

That's useful ^ could add it in a comment or doc somewhere maybe?


> 
>  libsbefifo/cmd_array.c    | 12 ++++++++++++
>  libsbefifo/cmd_control.c  |  6 ++++++
>  libsbefifo/cmd_generic.c  |  6 ++++++
>  libsbefifo/cmd_memory.c   | 23 +++++++++++++++++++++++
>  libsbefifo/cmd_mpipl.c    | 18 ++++++++++++++++++
>  libsbefifo/cmd_register.c | 12 ++++++++++++
>  libsbefifo/cmd_ring.c     | 18 ++++++++++++++++++
>  7 files changed, 95 insertions(+)
> 
> diff --git a/libsbefifo/cmd_array.c b/libsbefifo/cmd_array.c
> index 1ff8c03d7278..d579eafdfb77 100644
> --- a/libsbefifo/cmd_array.c
> +++ b/libsbefifo/cmd_array.c
> @@ -69,12 +69,18 @@ int sbefifo_control_fast_array(struct sbefifo_context *sctx, uint16_t target_typ
>  	if (rc)
>  		return rc;
>  
> +	rc = sbefifo_set_long_timeout(sctx);
> +	if (rc)
> +		return rc;

Leaks msg if we fail.

> +
>  	out_len = 0;
>  	rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len);
>  	free(msg);
>  	if (rc)
>  		return rc;
>  
> +	sbefifo_reset_timeout(sctx);

This misses the reset if we fail. Same issues repeat a few times.

Thanks,
Nick


More information about the Pdbg mailing list