[Skiboot] [PATCH-RESEND] capi: Disable CAPP virtual machines

Vaibhav Jain vaibhav at linux.vnet.ibm.com
Thu Jan 18 15:09:43 AEDT 2018

When exercising more than one CAPI accelerators simultaneously in
cache coherency mode, the verification team is seeing a deadlock. To
fix this a workaround of disabling CAPP virtual machines is
suggested. These 'virtual machines' let PSL queue multiple CAPP
commands for servicing by CAPP there by increasing
throughput. Below is the error scenario described by the h/w team:

" With virtual machines enabled we had a deadlock scenario where with 2
or more CAPI's in a system you could get in a deadlock scenario due to
cast-outs that are required break the deadlock (evict lines that
another CAPI is requesting) get stuck in the virtual machine queue by
a command ahead of it that is being retried by the same scenario in
the other CAPI. "

So this patch updates CAPP APC Master Powerbus control
register during CAPP init to also set Bit(12) that disables CAPP
virtual machines. This forces processing of CAPP commands from PSL one
at a time and thereby preventing above mentioned deadlock scenario.

Signed-off-by: Vaibhav Jain <vaibhav at linux.vnet.ibm.com>
Resend -> Updated the patch description with more info CAPP virtual
       	  machines and the error scenario.
 hw/phb4.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/hw/phb4.c b/hw/phb4.c
index ff912e1f..8e660b66 100644
--- a/hw/phb4.c
+++ b/hw/phb4.c
@@ -3581,6 +3581,7 @@ static void phb4_init_capp_regs(struct phb4 *p, uint32_t capp_eng)
 	xscom_read(p->chip_id, APC_MASTER_PB_CTRL + offset, &reg);
 	reg |= PPC_BIT(0); /* enable cResp exam */
 	reg |= PPC_BIT(3); /* disable vg not sys */
+	reg |= PPC_BIT(12);/* HW417025: disable capp virtual machines */
 	if (p->rev == PHB4_REV_NIMBUS_DD10) {
 		reg |= PPC_BIT(1);
 	} else {

More information about the Skiboot mailing list