Commit f7b5bd72 authored by Shannon Nelson's avatar Shannon Nelson Committed by David S. Miller
Browse files

pds_core: check health in devcmd wait



Similar to what we do in the AdminQ, check for devcmd health
while waiting for an answer.

Signed-off-by: default avatarShannon Nelson <shannon.nelson@amd.com>
Reviewed-by: default avatarBrett Creeley <brett.creeley@amd.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8d6198a1
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -42,6 +42,8 @@ int pdsc_err_to_errno(enum pds_core_status_code code)
		return -ERANGE;
	case PDS_RC_BAD_ADDR:
		return -EFAULT;
	case PDS_RC_BAD_PCI:
		return -ENXIO;
	case PDS_RC_EOPCODE:
	case PDS_RC_EINTR:
	case PDS_RC_DEV_CMD:
@@ -62,7 +64,7 @@ bool pdsc_is_fw_running(struct pdsc *pdsc)
	/* Firmware is useful only if the running bit is set and
	 * fw_status != 0xff (bad PCI read)
	 */
	return (pdsc->fw_status != 0xff) &&
	return (pdsc->fw_status != PDS_RC_BAD_PCI) &&
		(pdsc->fw_status & PDS_CORE_FW_STS_F_RUNNING);
}

@@ -128,6 +130,7 @@ static int pdsc_devcmd_wait(struct pdsc *pdsc, u8 opcode, int max_seconds)
	unsigned long max_wait;
	unsigned long duration;
	int timeout = 0;
	bool running;
	int done = 0;
	int err = 0;
	int status;
@@ -136,6 +139,10 @@ static int pdsc_devcmd_wait(struct pdsc *pdsc, u8 opcode, int max_seconds)
	max_wait = start_time + (max_seconds * HZ);

	while (!done && !timeout) {
		running = pdsc_is_fw_running(pdsc);
		if (!running)
			break;

		done = pdsc_devcmd_done(pdsc);
		if (done)
			break;
@@ -152,7 +159,7 @@ static int pdsc_devcmd_wait(struct pdsc *pdsc, u8 opcode, int max_seconds)
		dev_dbg(dev, "DEVCMD %d %s after %ld secs\n",
			opcode, pdsc_devcmd_str(opcode), duration / HZ);

	if (!done || timeout) {
	if ((!done || timeout) && running) {
		dev_err(dev, "DEVCMD %d %s timeout, done %d timeout %d max_seconds=%d\n",
			opcode, pdsc_devcmd_str(opcode), done, timeout,
			max_seconds);
+1 −0
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@ enum pds_core_status_code {
	PDS_RC_EVFID	= 31,	/* VF ID does not exist */
	PDS_RC_BAD_FW	= 32,	/* FW file is invalid or corrupted */
	PDS_RC_ECLIENT	= 33,   /* No such client id */
	PDS_RC_BAD_PCI	= 255,  /* Broken PCI when reading status */
};

/**