[Skiboot] [PATCH 09/33] xscom: A few P9 updates
Michael Neuling
mikey at neuling.org
Wed Jul 6 17:19:33 AEST 2016
On Sat, 2016-06-25 at 08:47 +1000, Benjamin Herrenschmidt wrote:
> More to go, especially we need to review recovery, but at least
> this enables indirect and errors out on not-yet-supported EX
> targeting.
>
> Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
This conflicts upstream due to :
commit e761222593a1ae932cddbc81239b6a7cd98ddb70
Author: Vipin K Parashar < vipin at linux.vnet.ibm.com >
Date: Mon Jun 6 14:56:37 2016 +0530
hw/xscom: Reset XSCOM engine after finite number of retries when busy
I have a rebase here:
https://github.com/mikey/skiboot/commit/baaae284ee8c3089b50e265ef99774f500ef41bb
Other than that:
Acked-by: Michael Neuling <mikey at neuling.org>
> ---
> hw/xscom.c | 29 ++++++++++++++++++++---------
> 1 file changed, 20 insertions(+), 9 deletions(-)
>
> diff --git a/hw/xscom.c b/hw/xscom.c
> index 395217b..f8a6402 100644
> --- a/hw/xscom.c
> +++ b/hw/xscom.c
> @@ -129,13 +129,17 @@ static int xscom_handle_error(uint64_t hmer,
> uint32_t gcid, uint32_t pcb_addr,
> * recovery procedures
> */
> switch(stat) {
> - /* XSCOM blocked, just retry */
> - case 1:
> + case 1: /* XSCOM blocked, just retry */
> return OPAL_BUSY;
> - /* CPU is asleep, don't retry */
> - case 2:
> + case 2: /* Chiplet offline, no retry */
> return OPAL_WRONG_STATE;
> - }
> + case 3: /* Partial good */
> + case 4: /* Invalid address / address error */
> + case 5: /* Clock error */
> + case 6: /* Parity error */
> + case 7: /* Time out */
> + break;
> + };
>
> /* XXX: Create error log entry ? */
> log_simple_error(&e_info(OPAL_RC_XSCOM_RW),
> @@ -254,7 +258,7 @@ static int xscom_indirect_read(uint32_t gcid,
> uint64_t pcb_addr, uint64_t *val)
> uint64_t data;
> int rc, retries;
>
> - if (proc_gen != proc_gen_p8) {
> + if (proc_gen < proc_gen_p8) {
> *val = (uint64_t)-1;
> return OPAL_UNSUPPORTED;
> }
> @@ -297,7 +301,7 @@ static int xscom_indirect_write(uint32_t gcid,
> uint64_t pcb_addr, uint64_t val)
> uint64_t data;
> int rc, retries;
>
> - if (proc_gen != proc_gen_p8)
> + if (proc_gen < proc_gen_p8)
> return OPAL_UNSUPPORTED;
>
> /* Write indirect address & data */
> @@ -334,8 +338,13 @@ static uint32_t xscom_decode_chiplet(uint32_t
> partid, uint64_t *pcb_addr)
> uint32_t gcid = (partid & 0x0fffffff) >> 4;
> uint32_t core = partid & 0xf;
>
> - *pcb_addr |= P8_EX_PCB_SLAVE_BASE;
> - *pcb_addr |= core << 24;
> + if (proc_gen == proc_gen_p9) {
> + /* XXX Not supported */
> + *pcb_addr = 0;
> + } else {
> + *pcb_addr |= P8_EX_PCB_SLAVE_BASE;
> + *pcb_addr |= core << 24;
> + }
>
> return gcid;
> }
> @@ -357,6 +366,8 @@ int xscom_read(uint32_t partid, uint64_t pcb_addr,
> uint64_t *val)
> return centaur_xscom_read(partid, pcb_addr, val);
> case 4: /* EX chiplet */
> gcid = xscom_decode_chiplet(partid, &pcb_addr);
> + if (pcb_addr == 0)
> + return OPAL_UNSUPPORTED;
> break;
> default:
> return OPAL_PARAMETER;
More information about the Skiboot
mailing list