amd/common/psp: Assume PSP command register already set up

Remove the frequent setting/restoring of the PSP's bus-mastering and
memory decoding settings.  It is up to the caller to ensure it is
already set properly.

Change-Id: I7e29a3935df94d16de90b28ff78449d23fe01666
Signed-off-by: Marshall Dawson <marshalldawson3rd@gmail.com>
Reviewed-on: https://review.coreboot.org/22846
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Marshall Dawson 2017-12-13 10:24:41 -07:00 committed by Martin Roth
parent 854d4dd9e2
commit 33c8773dfd
1 changed files with 16 additions and 35 deletions

View File

@ -122,56 +122,37 @@ static int wait_command(struct psp_mbox *mbox)
static int send_psp_command(u32 command, void *buffer)
{
u32 command_reg;
int status = 0;
struct psp_mbox *mbox = get_mbox_address();
if (!mbox)
return -PSPSTS_NOBASE;
command_reg = pci_read_config32(SOC_PSP_DEV, PCI_COMMAND);
pci_write_config32(SOC_PSP_DEV, PCI_COMMAND, command_reg |
PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
/* check for PSP error conditions */
if (rd_mbox_sts(mbox) & STATUS_HALT) {
status = -PSPSTS_HALTED;
goto exit;
}
if (rd_mbox_sts(mbox) & STATUS_RECOVERY) {
status = -PSPSTS_RECOVERY;
goto exit;
}
if (rd_mbox_sts(mbox) & STATUS_HALT)
return -PSPSTS_HALTED;
if (rd_mbox_sts(mbox) & STATUS_RECOVERY)
return -PSPSTS_RECOVERY;
/* PSP must be finished with init and ready to accept a command */
if (wait_initialized(mbox)) {
status = -PSPSTS_INIT_TIMEOUT;
goto exit;
}
if (wait_command(mbox)) {
status = -PSPSTS_CMD_TIMEOUT;
goto exit;
}
if (wait_initialized(mbox))
return -PSPSTS_INIT_TIMEOUT;
if (wait_command(mbox))
return -PSPSTS_CMD_TIMEOUT;
/* set address of command-response buffer and write command register */
wr_mbox_cmd_resp(mbox, buffer);
wr_mbox_cmd(mbox, command);
/* PSP clears command register when complete */
if (wait_command(mbox)) {
status = -PSPSTS_CMD_TIMEOUT;
goto exit;
}
if (wait_command(mbox))
return -PSPSTS_CMD_TIMEOUT;
/* check delivery status */
if (rd_mbox_sts(mbox) & (STATUS_ERROR | STATUS_TERMINATED)) {
status = -PSPSTS_SEND_ERROR;
goto exit;
}
exit:
/* restore command register to original value */
pci_write_config32(SOC_PSP_DEV, PCI_COMMAND, command_reg);
return status;
if (rd_mbox_sts(mbox) & (STATUS_ERROR | STATUS_TERMINATED))
return -PSPSTS_SEND_ERROR;
return 0;
}
/*