[Skiboot] [PATCH 3/3] opal/hmi: set a flag to inform OS that TOD/TB has failed.
Stewart Smith
stewart at linux.ibm.com
Tue Feb 19 13:02:51 AEDT 2019
Mahesh J Salgaonkar <mahesh at linux.vnet.ibm.com> writes:
> From: Mahesh Salgaonkar <mahesh at linux.vnet.ibm.com>
>
> Set a flag to indicate OS about TOD/TB failure as part of new
> opal_handle_hmi2 handler. This flag then can be used by OS to make sure
> functions depending on TB value (e.g. udelay()) are aware of TB not
> ticking.
>
> Signed-off-by: Mahesh Salgaonkar <mahesh at linux.vnet.ibm.com>
> ---
> core/hmi.c | 4 +++-
> include/opal-api.h | 1 +
> 2 files changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/core/hmi.c b/core/hmi.c
> index 7094b4ca5..fbb182c32 100644
> --- a/core/hmi.c
> +++ b/core/hmi.c
> @@ -1223,10 +1223,12 @@ static int handle_tfac_errors(struct OpalHMIEvent *hmi_evt, uint64_t *out_flags)
> /* Set the TB state looking at TFMR register before we head out. */
> this_cpu()->tb_invalid = !(mfspr(SPR_TFMR) & SPR_TFMR_TB_VALID);
>
> - if (this_cpu()->tb_invalid)
> + if (this_cpu()->tb_invalid) {
> + *out_flags |= OPAL_HMI_FLAGS_TOD_TB_FAIL;
> prlog(PR_WARNING, "Failed to get TB in running state! "
> "CPU=%x, TFMR=%016lx\n", this_cpu()->pir,
> mfspr(SPR_TFMR));
> + }
>
> return recover;
> }
> diff --git a/include/opal-api.h b/include/opal-api.h
> index 5f397c8e6..73f86f9a5 100644
> --- a/include/opal-api.h
> +++ b/include/opal-api.h
> @@ -777,6 +777,7 @@ enum {
> OPAL_HMI_FLAGS_TB_RESYNC = (1ull << 0), /* Timebase has been resynced */
> OPAL_HMI_FLAGS_DEC_LOST = (1ull << 1), /* DEC lost, needs to be reprogrammed */
> OPAL_HMI_FLAGS_HDEC_LOST = (1ull << 2), /* HDEC lost, needs to be reprogrammed */
> + OPAL_HMI_FLAGS_TOD_TB_FAIL = (1ull << 3), /* TOD/TB recovery failed. */
> OPAL_HMI_FLAGS_NEW_EVENT = (1ull << 63), /* An event has been created */
> };
Please also add to doc/opal-api/opal-handle-hmi-98-166.rst so we have
some amount of documentation for it. It's probably worthwhile to add a
paragraph there about since the TB is dead at that point, the OS should
not do anything that relies on it, and panic() is the likely only
correct outcome.
--
Stewart Smith
OPAL Architect, IBM.
More information about the Skiboot
mailing list