diff options
author | Michael Neuling <mikey@neuling.org> | 2017-03-23 17:15:05 +1100 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2017-03-24 12:50:05 +1100 |
commit | e1bfc5116bcb66259192148f0fa9a0751b906aef (patch) | |
tree | 7a4f2301de3ef41b7f8353741276fec860241688 | |
parent | 5f7e491556b5af3d04bc6241cd080922c7801030 (diff) | |
download | skiboot-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>
-rw-r--r-- | hw/xscom.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -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; |