- /* Status field in command-response buffer is updated by PSP */ - status = READ_ONCE(req->hdr.status); + if (req) { + /* Status field in command-response buffer is updated by PSP */ + status = READ_ONCE(req->hdr.status); + } else { + status = psp_smn_read(PSP_MBOX_CMD_OFFSET, &status); + status &= ~PSP_MBOX_FIELDS_READY; + } The value of the mbox cmd register is getting clobbered by the return value from psp_smn_read. This can cause bus arbitration to fail as the driver will think it can grab the bus when it's actually in use by the PSP.