aboutsummaryrefslogtreecommitdiff
path: root/hw/xscom.c
diff options
context:
space:
mode:
authorMichael Neuling <mikey@neuling.org>2017-03-23 17:15:05 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-03-24 12:50:05 +1100
commite1bfc5116bcb66259192148f0fa9a0751b906aef (patch)
tree7a4f2301de3ef41b7f8353741276fec860241688 /hw/xscom.c
parent5f7e491556b5af3d04bc6241cd080922c7801030 (diff)
downloadskiboot-e1bfc5116bcb66259192148f0fa9a0751b906aef.zip
skiboot-e1bfc5116bcb66259192148f0fa9a0751b906aef.tar.gz
skiboot-e1bfc5116bcb66259192148f0fa9a0751b906aef.tar.bz2
xscom: Abstract error recovery registers
Abstract error recovery registers to get ready for POWER9. Signed-off-by: Michael Neuling <mikey@neuling.org> Reviewed-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'hw/xscom.c')
-rw-r--r--hw/xscom.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/hw/xscom.c b/hw/xscom.c
index d7b8627..dd7aeca 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 recv_status_reg, log_reg, err_reg;
/* Clear errors in HMER */
mtspr(SPR_HMER, HMER_CLR_MASK);
+ /* Setup local and target scom addresses */
+ recv_status_reg = 0x202000f;
+ log_reg = 0x2020007;
+ err_reg = 0x2020009;
+
/* 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, recv_status_reg), 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, log_reg), 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, err_reg), 0);
hmer = xscom_wait_done();
if (hmer & SPR_HMER_XSCOM_FAIL)
goto fail;