| diff --git a/hw/xscom.c b/hw/xscom.c |
| index 6bd71a3..a3533be 100644 |
| --- a/hw/xscom.c |
| +++ b/hw/xscom.c |
| @@ -342,7 +342,6 @@ static uint32_t xscom_decode_chiplet(uint32_t partid, uint64_t *pcb_addr) |
| */ |
| int xscom_read(uint32_t partid, uint64_t pcb_addr, uint64_t *val) |
| { |
| - bool need_unlock; |
| uint32_t gcid; |
| int rc; |
| |
| @@ -360,12 +359,8 @@ int xscom_read(uint32_t partid, uint64_t pcb_addr, uint64_t *val) |
| return OPAL_PARAMETER; |
| } |
| |
| - /* |
| - * HW822317 requires locking. We use a recursive lock as error |
| - * conditions might cause printf's which might then try to take |
| - * the lock again |
| - */ |
| - need_unlock = lock_recursive(&xscom_lock); |
| + /* HW822317 requires us to do global locking */ |
| + lock(&xscom_lock); |
| |
| /* Direct vs indirect access */ |
| if (pcb_addr & XSCOM_ADDR_IND_FLAG) |
| @@ -374,8 +369,7 @@ int xscom_read(uint32_t partid, uint64_t pcb_addr, uint64_t *val) |
| rc = __xscom_read(gcid, pcb_addr & 0x7fffffff, val); |
| |
| /* Unlock it */ |
| - if (need_unlock) |
| - unlock(&xscom_lock); |
| + unlock(&xscom_lock); |
| return rc; |
| } |
| |
| @@ -383,7 +377,6 @@ opal_call(OPAL_XSCOM_READ, xscom_read, 3); |
| |
| int xscom_write(uint32_t partid, uint64_t pcb_addr, uint64_t val) |
| { |
| - bool need_unlock; |
| uint32_t gcid; |
| int rc; |
| |
| @@ -401,12 +394,8 @@ int xscom_write(uint32_t partid, uint64_t pcb_addr, uint64_t val) |
| return OPAL_PARAMETER; |
| } |
| |
| - /* |
| - * HW822317 requires locking. We use a recursive lock as error |
| - * conditions might cause printf's which might then try to take |
| - * the lock again |
| - */ |
| - need_unlock = lock_recursive(&xscom_lock); |
| + /* HW822317 requires us to do global locking */ |
| + lock(&xscom_lock); |
| |
| /* Direct vs indirect access */ |
| if (pcb_addr & XSCOM_ADDR_IND_FLAG) |
| @@ -415,8 +404,7 @@ int xscom_write(uint32_t partid, uint64_t pcb_addr, uint64_t val) |
| rc = __xscom_write(gcid, pcb_addr & 0x7fffffff, val); |
| |
| /* Unlock it */ |
| - if (need_unlock) |
| - unlock(&xscom_lock); |
| + unlock(&xscom_lock); |
| return rc; |
| } |
| opal_call(OPAL_XSCOM_WRITE, xscom_write, 3); |