diff options
author | Stewart Smith <stewart@linux.vnet.ibm.com> | 2016-09-09 14:09:48 +1000 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2016-09-14 11:13:32 +1000 |
commit | 81154ba9b2d418cd5f9eda3a6f89ca6631556510 (patch) | |
tree | f0b8fffb619d6da13272c24ad0241d10d6cef3fe /hw/slw.c | |
parent | 459a7e1f012df02393c0bc0a0885024e044cbafd (diff) | |
download | skiboot-81154ba9b2d418cd5f9eda3a6f89ca6631556510.zip skiboot-81154ba9b2d418cd5f9eda3a6f89ca6631556510.tar.gz skiboot-81154ba9b2d418cd5f9eda3a6f89ca6631556510.tar.bz2 |
slw: improve error message for SLW timer stuck
We still register dump, but only to in memory console buffer by default.
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'hw/slw.c')
-rw-r--r-- | hw/slw.c | 24 |
1 files changed, 21 insertions, 3 deletions
@@ -1196,13 +1196,13 @@ static void slw_dump_timer_ffdc(void) * root-cause. OPAL/skiboot may be stuck on some operation that * requires SLW timer state machine (e.g. core powersaving) */ - prlog(PR_ERR, "SLW: Register state:\n"); + prlog(PR_DEBUG, "SLW: Register state:\n"); for (i = 0; i < ARRAY_SIZE(dump_regs); i++) { uint32_t reg = dump_regs[i]; rc = xscom_read(slw_timer_chip, reg, &val); if (rc) { - prlog(PR_ERR, "SLW: XSCOM error %lld reading" + prlog(PR_DEBUG, "SLW: XSCOM error %lld reading" " reg 0x%x\n", rc, reg); break; } @@ -1249,7 +1249,25 @@ void slw_update_timer_expiry(uint64_t new_target) if (!(gen & 1)) break; if (tb_compare(now + msecs_to_tb(1), mftb()) == TB_ABEFOREB) { - prerror("SLW: Stuck with odd generation !\n"); + /** + * @fwts-label SLWTimerStuck + * @fwts-advice The SLeep/Winkle Engine (SLW) + * failed to increment the generation number + * within our timeout period (it *should* have + * done so within ~10us, not >1ms. OPAL uses + * the SLW timer to schedule some operations, + * but can fall back to the (much less frequent + * OPAL poller, which although does not affect + * functionality, runs *much* less frequently. + * This could have the effect of slow I2C + * operations (for example). It may also mean + * that you *had* an increase in jitter, due + * to slow interactions with SLW. + * This error may also occur if the machine + * is connected to via soft FSI. + */ + prerror("SLW: timer stuck, falling back to OPAL pollers. You will likely have slower I2C and may have experienced increased jitter.\n"); + prlog(PR_DEBUG, "SLW: Stuck with odd generation !\n"); slw_has_timer = false; slw_dump_timer_ffdc(); return; |