[Skiboot] [PATCH 1/5] xscom: Abstract error recovery registers
Cédric Le Goater
clg at kaod.org
Thu Mar 23 00:34:26 AEDT 2017
On 03/22/2017 03:59 AM, Michael Neuling wrote:
> Abstract error recovery registers to get ready for POWER9.
>
> Signed-off-by: Michael Neuling <mikey at neuling.org>
> ---
> hw/xscom.c | 12 +++++++++---
> 1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/hw/xscom.c b/hw/xscom.c
> index d7b8627d8b..4a5f0f2d73 100644
> --- a/hw/xscom.c
> +++ b/hw/xscom.c
> @@ -95,22 +95,28 @@ static uint64_t xscom_wait_done(void)
> static void xscom_reset(uint32_t gcid)
> {
> u64 hmer;
> + uint32_t local, target1, target2;
>
> /* Clear errors in HMER */
> mtspr(SPR_HMER, HMER_CLR_MASK);
>
> + /* Setup local and target scom addresses */
> + local = 0x202000f;
> + target1 = 0x2020007;
> + target2 = 0x2020009;
> +
maybe we could use some real names for :
0x2020007 - XSCOM Error Log Register
0x2020009 - XSCOM Error Register
0x202000F - XSCOM Command Received Status and Source Register
P9 is nearly the same :
0x90012 - XSCOM Status Log Register
0x90013 - XSCOM Error Register
0x90018 - XSCOM Received Remote Status pMisc and Source Register
local, target[12] are a bit obscure.
It might be interesting to read and dump these registers in case
of failure also.
Cheers,
C.
> /* First we need to write 0 to a register on our chip */
> - out_be64(xscom_addr(this_cpu()->chip_id, 0x202000f), 0);
> + out_be64(xscom_addr(this_cpu()->chip_id, local), 0);
> hmer = xscom_wait_done();
> if (hmer & SPR_HMER_XSCOM_FAIL)
> goto fail;
>
> /* Then we need to clear those two other registers on the target */
> - out_be64(xscom_addr(gcid, 0x2020007), 0);
> + out_be64(xscom_addr(gcid, target1), 0);
> hmer = xscom_wait_done();
> if (hmer & SPR_HMER_XSCOM_FAIL)
> goto fail;
> - out_be64(xscom_addr(gcid, 0x2020009), 0);
> + out_be64(xscom_addr(gcid, target2), 0);
> hmer = xscom_wait_done();
> if (hmer & SPR_HMER_XSCOM_FAIL)
> goto fail;
>
More information about the Skiboot
mailing list