Amend r357367 by using register values from the TPM datasheet.
As Ian Lepore noted, writing ~1 to a register might have a completely different effect than doing a regular read-modify-write operation. Follow the TCG_PC_Client_Platform_TPM_Profile_PTP_2.0_r1.03_v22 datasheet instead, and use the actual values mentioned there: (uint32_t)1 to cancel the command, (uint32_t)0 to clear the field. MFC after: 3 days
This commit is contained in:
parent
7739d92766
commit
5cc422a222
@ -70,7 +70,8 @@ __FBSDID("$FreeBSD$");
|
||||
#define TPM_CRB_CTRL_STS_ERR_BIT BIT(0)
|
||||
#define TPM_CRB_CTRL_STS_IDLE_BIT BIT(1)
|
||||
|
||||
#define TPM_CRB_CTRL_CANCEL_CMD BIT(0)
|
||||
#define TPM_CRB_CTRL_CANCEL_CMD 0x1
|
||||
#define TPM_CRB_CTRL_CANCEL_CLEAR 0x0
|
||||
|
||||
#define TPM_CRB_CTRL_START_CMD BIT(0)
|
||||
|
||||
@ -298,7 +299,7 @@ tpmcrb_cancel_cmd(struct tpm_sc *sc)
|
||||
return (false);
|
||||
}
|
||||
|
||||
WR4(sc, TPM_CRB_CTRL_CANCEL, ~TPM_CRB_CTRL_CANCEL_CMD);
|
||||
WR4(sc, TPM_CRB_CTRL_CANCEL, TPM_CRB_CTRL_CANCEL_CLEAR;
|
||||
return (true);
|
||||
}
|
||||
|
||||
@ -330,7 +331,7 @@ tpmcrb_transmit(struct tpm_sc *sc, size_t length)
|
||||
return (EIO);
|
||||
}
|
||||
/* Clear cancellation bit */
|
||||
WR4(sc, TPM_CRB_CTRL_CANCEL, ~TPM_CRB_CTRL_CANCEL_CMD);
|
||||
WR4(sc, TPM_CRB_CTRL_CANCEL, TPM_CRB_CTRL_CANCEL_CLEAR;
|
||||
|
||||
/* Switch device to idle state if necessary */
|
||||
if (!(RD4(sc, TPM_CRB_CTRL_STS) & TPM_CRB_CTRL_STS_IDLE_BIT)) {
|
||||
|
Loading…
Reference in New Issue
Block a user