projects
/
cascardo
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tpm_crb: fix incorrect values of cmdReady and goIdle bits
[cascardo/linux.git]
/
drivers
/
char
/
tpm
/
tpm_crb.c
diff --git
a/drivers/char/tpm/tpm_crb.c
b/drivers/char/tpm/tpm_crb.c
index
018c382
..
7f602dc
100644
(file)
--- a/
drivers/char/tpm/tpm_crb.c
+++ b/
drivers/char/tpm/tpm_crb.c
@@
-34,14
+34,14
@@
enum crb_defaults {
CRB_ACPI_START_INDEX = 1,
};
CRB_ACPI_START_INDEX = 1,
};
-enum crb_c
a_request
{
- CRB_C
A_REQ_GO_IDLE
= BIT(0),
- CRB_C
A_REQ_CMD_READY
= BIT(1),
+enum crb_c
trl_req
{
+ CRB_C
TRL_REQ_CMD_READY
= BIT(0),
+ CRB_C
TRL_REQ_GO_IDLE
= BIT(1),
};
};
-enum crb_c
a_statu
s {
- CRB_C
A_STS_ERROR
= BIT(0),
- CRB_C
A_STS_TPM_IDLE
= BIT(1),
+enum crb_c
trl_st
s {
+ CRB_C
TRL_STS_ERROR
= BIT(0),
+ CRB_C
TRL_STS_TPM_IDLE
= BIT(1),
};
enum crb_start {
};
enum crb_start {
@@
-67,7
+67,7
@@
struct crb_control_area {
} __packed;
enum crb_status {
} __packed;
enum crb_status {
- CRB_
STS_COMPLETE
= BIT(0),
+ CRB_
DRV_STS_COMPLETE
= BIT(0),
};
enum crb_flags {
};
enum crb_flags {
@@
-92,7
+92,7
@@
static u8 crb_status(struct tpm_chip *chip)
if ((ioread32(&priv->cca->start) & CRB_START_INVOKE) !=
CRB_START_INVOKE)
if ((ioread32(&priv->cca->start) & CRB_START_INVOKE) !=
CRB_START_INVOKE)
- sts |= CRB_STS_COMPLETE;
+ sts |= CRB_
DRV_
STS_COMPLETE;
return sts;
}
return sts;
}
@@
-106,7
+106,7
@@
static int crb_recv(struct tpm_chip *chip, u8 *buf, size_t count)
if (count < 6)
return -EIO;
if (count < 6)
return -EIO;
- if (ioread32(&priv->cca->sts) & CRB_C
A
_STS_ERROR)
+ if (ioread32(&priv->cca->sts) & CRB_C
TRL
_STS_ERROR)
return -EIO;
memcpy_fromio(buf, priv->rsp, 6);
return -EIO;
memcpy_fromio(buf, priv->rsp, 6);
@@
-142,6
+142,11
@@
static int crb_send(struct tpm_chip *chip, u8 *buf, size_t len)
struct crb_priv *priv = dev_get_drvdata(&chip->dev);
int rc = 0;
struct crb_priv *priv = dev_get_drvdata(&chip->dev);
int rc = 0;
+ /* Zero the cancel register so that the next command will not get
+ * canceled.
+ */
+ iowrite32(0, &priv->cca->cancel);
+
if (len > ioread32(&priv->cca->cmd_size)) {
dev_err(&chip->dev,
"invalid command count value %x %zx\n",
if (len > ioread32(&priv->cca->cmd_size)) {
dev_err(&chip->dev,
"invalid command count value %x %zx\n",
@@
-170,13
+175,8
@@
static void crb_cancel(struct tpm_chip *chip)
iowrite32(cpu_to_le32(CRB_CANCEL_INVOKE), &priv->cca->cancel);
iowrite32(cpu_to_le32(CRB_CANCEL_INVOKE), &priv->cca->cancel);
- /* Make sure that cmd is populated before issuing cancel. */
- wmb();
-
if ((priv->flags & CRB_FL_ACPI_START) && crb_do_acpi_start(chip))
dev_err(&chip->dev, "ACPI Start failed\n");
if ((priv->flags & CRB_FL_ACPI_START) && crb_do_acpi_start(chip))
dev_err(&chip->dev, "ACPI Start failed\n");
-
- iowrite32(0, &priv->cca->cancel);
}
static bool crb_req_canceled(struct tpm_chip *chip, u8 status)
}
static bool crb_req_canceled(struct tpm_chip *chip, u8 status)
@@
-194,8
+194,8
@@
static const struct tpm_class_ops tpm_crb = {
.send = crb_send,
.cancel = crb_cancel,
.req_canceled = crb_req_canceled,
.send = crb_send,
.cancel = crb_cancel,
.req_canceled = crb_req_canceled,
- .req_complete_mask = CRB_STS_COMPLETE,
- .req_complete_val = CRB_STS_COMPLETE,
+ .req_complete_mask = CRB_
DRV_
STS_COMPLETE,
+ .req_complete_val = CRB_
DRV_
STS_COMPLETE,
};
static int crb_init(struct acpi_device *device, struct crb_priv *priv)
};
static int crb_init(struct acpi_device *device, struct crb_priv *priv)