All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/3] Locality support for tpm_crb
@ 2017-02-08 11:11 ` Jarkko Sakkinen
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Sakkinen @ 2017-02-08 11:11 UTC (permalink / raw)
  To: tpmdd-devel
  Cc: linux-security-module, Jerry Snitselaar, Jarkko Sakkinen,
	Jason Gunthorpe, open list

The tpm_crb driver should follow the policy of reserving and
relinquishing the locality it uses when multiple localities are used,
like when TXT is another locality.

[This is a resend of v3 as this has been asked from me for a few times
 now and there wasn't anything obvious to fix.]

Jarkko Sakkinen (3):
  tpm_crb: map locality registers
  tpm_crb: encapsulate crb_wait_for_reg_32
  tpm_crb: request and relinquish locality 0

 drivers/char/tpm/tpm_crb.c | 185 +++++++++++++++++++++++++++++++++------------
 1 file changed, 137 insertions(+), 48 deletions(-)

-- 
v2: 
added sanity check for start address of the control area
v3:
do locality request/relinquish as part of send/recv
check priv->regs_h before using it
just assing the base address to regs_h instead of using crb_map_res
2.9.3

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v3 0/3] Locality support for tpm_crb
@ 2017-02-08 11:11 ` Jarkko Sakkinen
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Sakkinen @ 2017-02-08 11:11 UTC (permalink / raw)
  To: tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
  Cc: linux-security-module-u79uwXL29TY76Z2rM5mHXA, Jerry Snitselaar,
	open list

The tpm_crb driver should follow the policy of reserving and
relinquishing the locality it uses when multiple localities are used,
like when TXT is another locality.

[This is a resend of v3 as this has been asked from me for a few times
 now and there wasn't anything obvious to fix.]

Jarkko Sakkinen (3):
  tpm_crb: map locality registers
  tpm_crb: encapsulate crb_wait_for_reg_32
  tpm_crb: request and relinquish locality 0

 drivers/char/tpm/tpm_crb.c | 185 +++++++++++++++++++++++++++++++++------------
 1 file changed, 137 insertions(+), 48 deletions(-)

-- 
v2: 
added sanity check for start address of the control area
v3:
do locality request/relinquish as part of send/recv
check priv->regs_h before using it
just assing the base address to regs_h instead of using crb_map_res
2.9.3


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v3 1/3] tpm_crb: map locality registers
@ 2017-02-08 11:11   ` Jarkko Sakkinen
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Sakkinen @ 2017-02-08 11:11 UTC (permalink / raw)
  To: tpmdd-devel
  Cc: linux-security-module, Jerry Snitselaar, Jarkko Sakkinen,
	Peter Huewe, Marcel Selhorst, Jason Gunthorpe, open list

In order to provide access to locality registers, this commits adds
mapping of the head of the CRB registers, which are located right
before the control area.

Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
---
 drivers/char/tpm/tpm_crb.c | 89 +++++++++++++++++++++++++++++-----------------
 1 file changed, 57 insertions(+), 32 deletions(-)

diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
index 717b6b4..80b9759 100644
--- a/drivers/char/tpm/tpm_crb.c
+++ b/drivers/char/tpm/tpm_crb.c
@@ -52,18 +52,28 @@ enum crb_cancel {
 	CRB_CANCEL_INVOKE	= BIT(0),
 };
 
-struct crb_control_area {
-	u32 req;
-	u32 sts;
-	u32 cancel;
-	u32 start;
-	u32 int_enable;
-	u32 int_sts;
-	u32 cmd_size;
-	u32 cmd_pa_low;
-	u32 cmd_pa_high;
-	u32 rsp_size;
-	u64 rsp_pa;
+struct crb_regs_head {
+	u32 loc_state;
+	u32 reserved1;
+	u32 loc_ctrl;
+	u32 loc_sts;
+	u8 reserved2[32];
+	u64 intf_id;
+	u64 ctrl_ext;
+} __packed;
+
+struct crb_regs_tail {
+	u32 ctrl_req;
+	u32 ctrl_sts;
+	u32 ctrl_cancel;
+	u32 ctrl_start;
+	u32 ctrl_int_enable;
+	u32 ctrl_int_sts;
+	u32 ctrl_cmd_size;
+	u32 ctrl_cmd_pa_low;
+	u32 ctrl_cmd_pa_high;
+	u32 ctrl_rsp_size;
+	u64 ctrl_rsp_pa;
 } __packed;
 
 enum crb_status {
@@ -78,7 +88,8 @@ enum crb_flags {
 struct crb_priv {
 	unsigned int flags;
 	void __iomem *iobase;
-	struct crb_control_area __iomem *cca;
+	struct crb_regs_head __iomem *regs_h;
+	struct crb_regs_tail __iomem *regs_t;
 	u8 __iomem *cmd;
 	u8 __iomem *rsp;
 	u32 cmd_size;
@@ -104,7 +115,7 @@ static int __maybe_unused crb_go_idle(struct device *dev, struct crb_priv *priv)
 	if (priv->flags & CRB_FL_ACPI_START)
 		return 0;
 
-	iowrite32(CRB_CTRL_REQ_GO_IDLE, &priv->cca->req);
+	iowrite32(CRB_CTRL_REQ_GO_IDLE, &priv->regs_t->ctrl_req);
 	/* we don't really care when this settles */
 
 	return 0;
@@ -128,21 +139,23 @@ static int __maybe_unused crb_cmd_ready(struct device *dev,
 					struct crb_priv *priv)
 {
 	ktime_t stop, start;
+	u32 req;
 
 	if (priv->flags & CRB_FL_ACPI_START)
 		return 0;
 
-	iowrite32(CRB_CTRL_REQ_CMD_READY, &priv->cca->req);
+	iowrite32(CRB_CTRL_REQ_CMD_READY, &priv->regs_t->ctrl_req);
 
 	start = ktime_get();
 	stop = ktime_add(start, ms_to_ktime(TPM2_TIMEOUT_C));
 	do {
-		if (!(ioread32(&priv->cca->req) & CRB_CTRL_REQ_CMD_READY))
+		req = ioread32(&priv->regs_t->ctrl_req);
+		if (!(req & CRB_CTRL_REQ_CMD_READY))
 			return 0;
 		usleep_range(50, 100);
 	} while (ktime_before(ktime_get(), stop));
 
-	if (ioread32(&priv->cca->req) & CRB_CTRL_REQ_CMD_READY) {
+	if (ioread32(&priv->regs_t->ctrl_req) & CRB_CTRL_REQ_CMD_READY) {
 		dev_warn(dev, "cmdReady timed out\n");
 		return -ETIME;
 	}
@@ -155,7 +168,7 @@ static u8 crb_status(struct tpm_chip *chip)
 	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
 	u8 sts = 0;
 
-	if ((ioread32(&priv->cca->start) & CRB_START_INVOKE) !=
+	if ((ioread32(&priv->regs_t->ctrl_start) & CRB_START_INVOKE) !=
 	    CRB_START_INVOKE)
 		sts |= CRB_DRV_STS_COMPLETE;
 
@@ -171,7 +184,7 @@ static int crb_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 	if (count < 6)
 		return -EIO;
 
-	if (ioread32(&priv->cca->sts) & CRB_CTRL_STS_ERROR)
+	if (ioread32(&priv->regs_t->ctrl_sts) & CRB_CTRL_STS_ERROR)
 		return -EIO;
 
 	memcpy_fromio(buf, priv->rsp, 6);
@@ -210,7 +223,7 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, size_t len)
 	/* Zero the cancel register so that the next command will not get
 	 * canceled.
 	 */
-	iowrite32(0, &priv->cca->cancel);
+	iowrite32(0, &priv->regs_t->ctrl_cancel);
 
 	if (len > priv->cmd_size) {
 		dev_err(&chip->dev, "invalid command count value %zd %d\n",
@@ -224,7 +237,7 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, size_t len)
 	wmb();
 
 	if (priv->flags & CRB_FL_CRB_START)
-		iowrite32(CRB_START_INVOKE, &priv->cca->start);
+		iowrite32(CRB_START_INVOKE, &priv->regs_t->ctrl_start);
 
 	if (priv->flags & CRB_FL_ACPI_START)
 		rc = crb_do_acpi_start(chip);
@@ -236,7 +249,7 @@ static void crb_cancel(struct tpm_chip *chip)
 {
 	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
 
-	iowrite32(CRB_CANCEL_INVOKE, &priv->cca->cancel);
+	iowrite32(CRB_CANCEL_INVOKE, &priv->regs_t->ctrl_cancel);
 
 	if ((priv->flags & CRB_FL_ACPI_START) && crb_do_acpi_start(chip))
 		dev_err(&chip->dev, "ACPI Start failed\n");
@@ -245,7 +258,7 @@ static void crb_cancel(struct tpm_chip *chip)
 static bool crb_req_canceled(struct tpm_chip *chip, u8 status)
 {
 	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
-	u32 cancel = ioread32(&priv->cca->cancel);
+	u32 cancel = ioread32(&priv->regs_t->ctrl_cancel);
 
 	return (cancel & CRB_CANCEL_INVOKE) == CRB_CANCEL_INVOKE;
 }
@@ -322,10 +335,22 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
 	if (IS_ERR(priv->iobase))
 		return PTR_ERR(priv->iobase);
 
-	priv->cca = crb_map_res(dev, priv, &io_res, buf->control_address,
-				sizeof(struct crb_control_area));
-	if (IS_ERR(priv->cca))
-		return PTR_ERR(priv->cca);
+	/* The ACPI IO region starts at the head area and continues to include
+	 * the control area, as one nice sane region except for some older
+	 * stuff that puts the control area outside the ACPI IO region.
+	 */
+	if (!(priv->flags & CRB_FL_ACPI_START)) {
+		if (buf->control_address == io_res.start +
+		    sizeof(*priv->regs_h))
+			priv->regs_h = priv->iobase;
+		else
+			dev_warn(dev, FW_BUG "Bad ACPI memory layout");
+	}
+
+	priv->regs_t = crb_map_res(dev, priv, &io_res, buf->control_address,
+				   sizeof(struct crb_regs_tail));
+	if (IS_ERR(priv->regs_t))
+		return PTR_ERR(priv->regs_t);
 
 	/*
 	 * PTT HW bug w/a: wake up the device to access
@@ -335,10 +360,10 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
 	if (ret)
 		return ret;
 
-	pa_high = ioread32(&priv->cca->cmd_pa_high);
-	pa_low  = ioread32(&priv->cca->cmd_pa_low);
+	pa_high = ioread32(&priv->regs_t->ctrl_cmd_pa_high);
+	pa_low  = ioread32(&priv->regs_t->ctrl_cmd_pa_low);
 	cmd_pa = ((u64)pa_high << 32) | pa_low;
-	cmd_size = ioread32(&priv->cca->cmd_size);
+	cmd_size = ioread32(&priv->regs_t->ctrl_cmd_size);
 
 	dev_dbg(dev, "cmd_hi = %X cmd_low = %X cmd_size %X\n",
 		pa_high, pa_low, cmd_size);
@@ -349,9 +374,9 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
 		goto out;
 	}
 
-	memcpy_fromio(&rsp_pa, &priv->cca->rsp_pa, 8);
+	memcpy_fromio(&rsp_pa, &priv->regs_t->ctrl_rsp_pa, 8);
 	rsp_pa = le64_to_cpu(rsp_pa);
-	rsp_size = ioread32(&priv->cca->rsp_size);
+	rsp_size = ioread32(&priv->regs_t->ctrl_rsp_size);
 
 	if (cmd_pa != rsp_pa) {
 		priv->rsp = crb_map_res(dev, priv, &io_res, rsp_pa, rsp_size);
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v3 1/3] tpm_crb: map locality registers
@ 2017-02-08 11:11   ` Jarkko Sakkinen
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Sakkinen @ 2017-02-08 11:11 UTC (permalink / raw)
  To: tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
  Cc: Jerry Snitselaar, open list,
	linux-security-module-u79uwXL29TY76Z2rM5mHXA

In order to provide access to locality registers, this commits adds
mapping of the head of the CRB registers, which are located right
before the control area.

Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
---
 drivers/char/tpm/tpm_crb.c | 89 +++++++++++++++++++++++++++++-----------------
 1 file changed, 57 insertions(+), 32 deletions(-)

diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
index 717b6b4..80b9759 100644
--- a/drivers/char/tpm/tpm_crb.c
+++ b/drivers/char/tpm/tpm_crb.c
@@ -52,18 +52,28 @@ enum crb_cancel {
 	CRB_CANCEL_INVOKE	= BIT(0),
 };
 
-struct crb_control_area {
-	u32 req;
-	u32 sts;
-	u32 cancel;
-	u32 start;
-	u32 int_enable;
-	u32 int_sts;
-	u32 cmd_size;
-	u32 cmd_pa_low;
-	u32 cmd_pa_high;
-	u32 rsp_size;
-	u64 rsp_pa;
+struct crb_regs_head {
+	u32 loc_state;
+	u32 reserved1;
+	u32 loc_ctrl;
+	u32 loc_sts;
+	u8 reserved2[32];
+	u64 intf_id;
+	u64 ctrl_ext;
+} __packed;
+
+struct crb_regs_tail {
+	u32 ctrl_req;
+	u32 ctrl_sts;
+	u32 ctrl_cancel;
+	u32 ctrl_start;
+	u32 ctrl_int_enable;
+	u32 ctrl_int_sts;
+	u32 ctrl_cmd_size;
+	u32 ctrl_cmd_pa_low;
+	u32 ctrl_cmd_pa_high;
+	u32 ctrl_rsp_size;
+	u64 ctrl_rsp_pa;
 } __packed;
 
 enum crb_status {
@@ -78,7 +88,8 @@ enum crb_flags {
 struct crb_priv {
 	unsigned int flags;
 	void __iomem *iobase;
-	struct crb_control_area __iomem *cca;
+	struct crb_regs_head __iomem *regs_h;
+	struct crb_regs_tail __iomem *regs_t;
 	u8 __iomem *cmd;
 	u8 __iomem *rsp;
 	u32 cmd_size;
@@ -104,7 +115,7 @@ static int __maybe_unused crb_go_idle(struct device *dev, struct crb_priv *priv)
 	if (priv->flags & CRB_FL_ACPI_START)
 		return 0;
 
-	iowrite32(CRB_CTRL_REQ_GO_IDLE, &priv->cca->req);
+	iowrite32(CRB_CTRL_REQ_GO_IDLE, &priv->regs_t->ctrl_req);
 	/* we don't really care when this settles */
 
 	return 0;
@@ -128,21 +139,23 @@ static int __maybe_unused crb_cmd_ready(struct device *dev,
 					struct crb_priv *priv)
 {
 	ktime_t stop, start;
+	u32 req;
 
 	if (priv->flags & CRB_FL_ACPI_START)
 		return 0;
 
-	iowrite32(CRB_CTRL_REQ_CMD_READY, &priv->cca->req);
+	iowrite32(CRB_CTRL_REQ_CMD_READY, &priv->regs_t->ctrl_req);
 
 	start = ktime_get();
 	stop = ktime_add(start, ms_to_ktime(TPM2_TIMEOUT_C));
 	do {
-		if (!(ioread32(&priv->cca->req) & CRB_CTRL_REQ_CMD_READY))
+		req = ioread32(&priv->regs_t->ctrl_req);
+		if (!(req & CRB_CTRL_REQ_CMD_READY))
 			return 0;
 		usleep_range(50, 100);
 	} while (ktime_before(ktime_get(), stop));
 
-	if (ioread32(&priv->cca->req) & CRB_CTRL_REQ_CMD_READY) {
+	if (ioread32(&priv->regs_t->ctrl_req) & CRB_CTRL_REQ_CMD_READY) {
 		dev_warn(dev, "cmdReady timed out\n");
 		return -ETIME;
 	}
@@ -155,7 +168,7 @@ static u8 crb_status(struct tpm_chip *chip)
 	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
 	u8 sts = 0;
 
-	if ((ioread32(&priv->cca->start) & CRB_START_INVOKE) !=
+	if ((ioread32(&priv->regs_t->ctrl_start) & CRB_START_INVOKE) !=
 	    CRB_START_INVOKE)
 		sts |= CRB_DRV_STS_COMPLETE;
 
@@ -171,7 +184,7 @@ static int crb_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 	if (count < 6)
 		return -EIO;
 
-	if (ioread32(&priv->cca->sts) & CRB_CTRL_STS_ERROR)
+	if (ioread32(&priv->regs_t->ctrl_sts) & CRB_CTRL_STS_ERROR)
 		return -EIO;
 
 	memcpy_fromio(buf, priv->rsp, 6);
@@ -210,7 +223,7 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, size_t len)
 	/* Zero the cancel register so that the next command will not get
 	 * canceled.
 	 */
-	iowrite32(0, &priv->cca->cancel);
+	iowrite32(0, &priv->regs_t->ctrl_cancel);
 
 	if (len > priv->cmd_size) {
 		dev_err(&chip->dev, "invalid command count value %zd %d\n",
@@ -224,7 +237,7 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, size_t len)
 	wmb();
 
 	if (priv->flags & CRB_FL_CRB_START)
-		iowrite32(CRB_START_INVOKE, &priv->cca->start);
+		iowrite32(CRB_START_INVOKE, &priv->regs_t->ctrl_start);
 
 	if (priv->flags & CRB_FL_ACPI_START)
 		rc = crb_do_acpi_start(chip);
@@ -236,7 +249,7 @@ static void crb_cancel(struct tpm_chip *chip)
 {
 	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
 
-	iowrite32(CRB_CANCEL_INVOKE, &priv->cca->cancel);
+	iowrite32(CRB_CANCEL_INVOKE, &priv->regs_t->ctrl_cancel);
 
 	if ((priv->flags & CRB_FL_ACPI_START) && crb_do_acpi_start(chip))
 		dev_err(&chip->dev, "ACPI Start failed\n");
@@ -245,7 +258,7 @@ static void crb_cancel(struct tpm_chip *chip)
 static bool crb_req_canceled(struct tpm_chip *chip, u8 status)
 {
 	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
-	u32 cancel = ioread32(&priv->cca->cancel);
+	u32 cancel = ioread32(&priv->regs_t->ctrl_cancel);
 
 	return (cancel & CRB_CANCEL_INVOKE) == CRB_CANCEL_INVOKE;
 }
@@ -322,10 +335,22 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
 	if (IS_ERR(priv->iobase))
 		return PTR_ERR(priv->iobase);
 
-	priv->cca = crb_map_res(dev, priv, &io_res, buf->control_address,
-				sizeof(struct crb_control_area));
-	if (IS_ERR(priv->cca))
-		return PTR_ERR(priv->cca);
+	/* The ACPI IO region starts at the head area and continues to include
+	 * the control area, as one nice sane region except for some older
+	 * stuff that puts the control area outside the ACPI IO region.
+	 */
+	if (!(priv->flags & CRB_FL_ACPI_START)) {
+		if (buf->control_address == io_res.start +
+		    sizeof(*priv->regs_h))
+			priv->regs_h = priv->iobase;
+		else
+			dev_warn(dev, FW_BUG "Bad ACPI memory layout");
+	}
+
+	priv->regs_t = crb_map_res(dev, priv, &io_res, buf->control_address,
+				   sizeof(struct crb_regs_tail));
+	if (IS_ERR(priv->regs_t))
+		return PTR_ERR(priv->regs_t);
 
 	/*
 	 * PTT HW bug w/a: wake up the device to access
@@ -335,10 +360,10 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
 	if (ret)
 		return ret;
 
-	pa_high = ioread32(&priv->cca->cmd_pa_high);
-	pa_low  = ioread32(&priv->cca->cmd_pa_low);
+	pa_high = ioread32(&priv->regs_t->ctrl_cmd_pa_high);
+	pa_low  = ioread32(&priv->regs_t->ctrl_cmd_pa_low);
 	cmd_pa = ((u64)pa_high << 32) | pa_low;
-	cmd_size = ioread32(&priv->cca->cmd_size);
+	cmd_size = ioread32(&priv->regs_t->ctrl_cmd_size);
 
 	dev_dbg(dev, "cmd_hi = %X cmd_low = %X cmd_size %X\n",
 		pa_high, pa_low, cmd_size);
@@ -349,9 +374,9 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
 		goto out;
 	}
 
-	memcpy_fromio(&rsp_pa, &priv->cca->rsp_pa, 8);
+	memcpy_fromio(&rsp_pa, &priv->regs_t->ctrl_rsp_pa, 8);
 	rsp_pa = le64_to_cpu(rsp_pa);
-	rsp_size = ioread32(&priv->cca->rsp_size);
+	rsp_size = ioread32(&priv->regs_t->ctrl_rsp_size);
 
 	if (cmd_pa != rsp_pa) {
 		priv->rsp = crb_map_res(dev, priv, &io_res, rsp_pa, rsp_size);
-- 
2.9.3


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v3 2/3] tpm_crb: encapsulate crb_wait_for_reg_32
@ 2017-02-08 11:11   ` Jarkko Sakkinen
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Sakkinen @ 2017-02-08 11:11 UTC (permalink / raw)
  To: tpmdd-devel
  Cc: linux-security-module, Jerry Snitselaar, Jarkko Sakkinen,
	Peter Huewe, Marcel Selhorst, Jason Gunthorpe, open list

Encapsulated crb_wait_for_reg32() so that state changes in other CRB
registers than TPM_CRB_CTRL_REQ_x can be waited.

Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
---
 drivers/char/tpm/tpm_crb.c | 37 +++++++++++++++++++++++--------------
 1 file changed, 23 insertions(+), 14 deletions(-)

diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
index 80b9759..853bd7b 100644
--- a/drivers/char/tpm/tpm_crb.c
+++ b/drivers/char/tpm/tpm_crb.c
@@ -121,6 +121,25 @@ static int __maybe_unused crb_go_idle(struct device *dev, struct crb_priv *priv)
 	return 0;
 }
 
+static bool crb_wait_for_reg_32(u32 __iomem *reg, u32 mask, u32 value,
+				unsigned long timeout)
+{
+	ktime_t start;
+	ktime_t stop;
+
+	start = ktime_get();
+	stop = ktime_add(start, ms_to_ktime(timeout));
+
+	do {
+		if ((ioread32(reg) & mask) == value)
+			return true;
+
+		usleep_range(50, 100);
+	} while (ktime_before(ktime_get(), stop));
+
+	return false;
+}
+
 /**
  * crb_cmd_ready - request tpm crb device to enter ready state
  *
@@ -138,24 +157,14 @@ static int __maybe_unused crb_go_idle(struct device *dev, struct crb_priv *priv)
 static int __maybe_unused crb_cmd_ready(struct device *dev,
 					struct crb_priv *priv)
 {
-	ktime_t stop, start;
-	u32 req;
-
 	if (priv->flags & CRB_FL_ACPI_START)
 		return 0;
 
 	iowrite32(CRB_CTRL_REQ_CMD_READY, &priv->regs_t->ctrl_req);
-
-	start = ktime_get();
-	stop = ktime_add(start, ms_to_ktime(TPM2_TIMEOUT_C));
-	do {
-		req = ioread32(&priv->regs_t->ctrl_req);
-		if (!(req & CRB_CTRL_REQ_CMD_READY))
-			return 0;
-		usleep_range(50, 100);
-	} while (ktime_before(ktime_get(), stop));
-
-	if (ioread32(&priv->regs_t->ctrl_req) & CRB_CTRL_REQ_CMD_READY) {
+	if (!crb_wait_for_reg_32(&priv->regs_t->ctrl_req,
+				 CRB_CTRL_REQ_CMD_READY /* mask */,
+				 0, /* value */
+				 TPM2_TIMEOUT_C)) {
 		dev_warn(dev, "cmdReady timed out\n");
 		return -ETIME;
 	}
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v3 2/3] tpm_crb: encapsulate crb_wait_for_reg_32
@ 2017-02-08 11:11   ` Jarkko Sakkinen
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Sakkinen @ 2017-02-08 11:11 UTC (permalink / raw)
  To: tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
  Cc: Jerry Snitselaar, open list,
	linux-security-module-u79uwXL29TY76Z2rM5mHXA

Encapsulated crb_wait_for_reg32() so that state changes in other CRB
registers than TPM_CRB_CTRL_REQ_x can be waited.

Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
---
 drivers/char/tpm/tpm_crb.c | 37 +++++++++++++++++++++++--------------
 1 file changed, 23 insertions(+), 14 deletions(-)

diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
index 80b9759..853bd7b 100644
--- a/drivers/char/tpm/tpm_crb.c
+++ b/drivers/char/tpm/tpm_crb.c
@@ -121,6 +121,25 @@ static int __maybe_unused crb_go_idle(struct device *dev, struct crb_priv *priv)
 	return 0;
 }
 
+static bool crb_wait_for_reg_32(u32 __iomem *reg, u32 mask, u32 value,
+				unsigned long timeout)
+{
+	ktime_t start;
+	ktime_t stop;
+
+	start = ktime_get();
+	stop = ktime_add(start, ms_to_ktime(timeout));
+
+	do {
+		if ((ioread32(reg) & mask) == value)
+			return true;
+
+		usleep_range(50, 100);
+	} while (ktime_before(ktime_get(), stop));
+
+	return false;
+}
+
 /**
  * crb_cmd_ready - request tpm crb device to enter ready state
  *
@@ -138,24 +157,14 @@ static int __maybe_unused crb_go_idle(struct device *dev, struct crb_priv *priv)
 static int __maybe_unused crb_cmd_ready(struct device *dev,
 					struct crb_priv *priv)
 {
-	ktime_t stop, start;
-	u32 req;
-
 	if (priv->flags & CRB_FL_ACPI_START)
 		return 0;
 
 	iowrite32(CRB_CTRL_REQ_CMD_READY, &priv->regs_t->ctrl_req);
-
-	start = ktime_get();
-	stop = ktime_add(start, ms_to_ktime(TPM2_TIMEOUT_C));
-	do {
-		req = ioread32(&priv->regs_t->ctrl_req);
-		if (!(req & CRB_CTRL_REQ_CMD_READY))
-			return 0;
-		usleep_range(50, 100);
-	} while (ktime_before(ktime_get(), stop));
-
-	if (ioread32(&priv->regs_t->ctrl_req) & CRB_CTRL_REQ_CMD_READY) {
+	if (!crb_wait_for_reg_32(&priv->regs_t->ctrl_req,
+				 CRB_CTRL_REQ_CMD_READY /* mask */,
+				 0, /* value */
+				 TPM2_TIMEOUT_C)) {
 		dev_warn(dev, "cmdReady timed out\n");
 		return -ETIME;
 	}
-- 
2.9.3


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v3 3/3] tpm_crb: request and relinquish locality 0
@ 2017-02-08 11:11   ` Jarkko Sakkinen
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Sakkinen @ 2017-02-08 11:11 UTC (permalink / raw)
  To: tpmdd-devel
  Cc: linux-security-module, Jerry Snitselaar, Jarkko Sakkinen,
	Peter Huewe, Marcel Selhorst, Jason Gunthorpe, open list

Request and relinquish locality for the driver use in order to be a
better citizen in a multi locality environment like TXT.

Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
---
 drivers/char/tpm/tpm_crb.c | 73 ++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 64 insertions(+), 9 deletions(-)

diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
index 853bd7b..96f661a 100644
--- a/drivers/char/tpm/tpm_crb.c
+++ b/drivers/char/tpm/tpm_crb.c
@@ -34,6 +34,15 @@ enum crb_defaults {
 	CRB_ACPI_START_INDEX = 1,
 };
 
+enum crb_loc_ctrl {
+	CRB_LOC_CTRL_REQUEST_ACCESS	= BIT(0),
+	CRB_LOC_CTRL_RELINQUISH		= BIT(1),
+};
+
+enum crb_loc_state {
+	CRB_LOC_STATE_LOC_ASSIGNED	= BIT(1),
+};
+
 enum crb_ctrl_req {
 	CRB_CTRL_REQ_CMD_READY	= BIT(0),
 	CRB_CTRL_REQ_GO_IDLE	= BIT(1),
@@ -165,13 +174,42 @@ static int __maybe_unused crb_cmd_ready(struct device *dev,
 				 CRB_CTRL_REQ_CMD_READY /* mask */,
 				 0, /* value */
 				 TPM2_TIMEOUT_C)) {
-		dev_warn(dev, "cmdReady timed out\n");
+		dev_warn(dev, "TPM_CRB_CTRL_REQ_x.cmdReady timed out\n");
+		return -ETIME;
+	}
+
+	return 0;
+}
+
+static int crb_request_locality(struct tpm_chip *chip)
+{
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
+
+	if (!priv->regs_h)
+		return 0;
+
+	iowrite32(CRB_LOC_CTRL_REQUEST_ACCESS, &priv->regs_h->loc_ctrl);
+	if (!crb_wait_for_reg_32(&priv->regs_h->loc_state,
+				 CRB_LOC_STATE_LOC_ASSIGNED, /* mask */
+				 CRB_LOC_STATE_LOC_ASSIGNED, /* value */
+				 TPM2_TIMEOUT_C)) {
+		dev_warn(&chip->dev, "TPM_LOC_STATE_x.requestAccess timed out\n");
 		return -ETIME;
 	}
 
 	return 0;
 }
 
+static void crb_relinquish_locality(struct tpm_chip *chip)
+{
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
+
+	if (!priv->regs_h)
+		return;
+
+	iowrite32(CRB_LOC_CTRL_RELINQUISH, &priv->regs_h->loc_ctrl);
+}
+
 static u8 crb_status(struct tpm_chip *chip)
 {
 	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
@@ -188,23 +226,33 @@ static int crb_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
 	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
 	unsigned int expected;
+	int rc;
 
 	/* sanity check */
 	if (count < 6)
 		return -EIO;
 
-	if (ioread32(&priv->regs_t->ctrl_sts) & CRB_CTRL_STS_ERROR)
-		return -EIO;
+	rc = crb_request_locality(chip);
+	if (rc)
+		return rc;
+
+	if (ioread32(&priv->regs_t->ctrl_sts) & CRB_CTRL_STS_ERROR) {
+		rc = -EIO;
+		goto out;
+	}
 
 	memcpy_fromio(buf, priv->rsp, 6);
 	expected = be32_to_cpup((__be32 *) &buf[2]);
-
-	if (expected > count)
-		return -EIO;
+	if (expected > count) {
+		rc = -EIO;
+		goto out;
+	}
 
 	memcpy_fromio(&buf[6], &priv->rsp[6], expected - 6);
 
-	return expected;
+out:
+	crb_relinquish_locality(chip);
+	return rc ? rc : expected;
 }
 
 static int crb_do_acpi_start(struct tpm_chip *chip)
@@ -227,7 +275,11 @@ static int crb_do_acpi_start(struct tpm_chip *chip)
 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;
+	int rc;
+
+	rc = crb_request_locality(chip);
+	if (rc)
+		return rc;
 
 	/* Zero the cancel register so that the next command will not get
 	 * canceled.
@@ -237,7 +289,8 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, size_t len)
 	if (len > priv->cmd_size) {
 		dev_err(&chip->dev, "invalid command count value %zd %d\n",
 			len, priv->cmd_size);
-		return -E2BIG;
+		rc = -E2BIG;
+		goto out;
 	}
 
 	memcpy_toio(priv->cmd, buf, len);
@@ -251,6 +304,8 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, size_t len)
 	if (priv->flags & CRB_FL_ACPI_START)
 		rc = crb_do_acpi_start(chip);
 
+out:
+	crb_relinquish_locality(chip);
 	return rc;
 }
 
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v3 3/3] tpm_crb: request and relinquish locality 0
@ 2017-02-08 11:11   ` Jarkko Sakkinen
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Sakkinen @ 2017-02-08 11:11 UTC (permalink / raw)
  To: tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
  Cc: Jerry Snitselaar, open list,
	linux-security-module-u79uwXL29TY76Z2rM5mHXA

Request and relinquish locality for the driver use in order to be a
better citizen in a multi locality environment like TXT.

Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
---
 drivers/char/tpm/tpm_crb.c | 73 ++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 64 insertions(+), 9 deletions(-)

diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
index 853bd7b..96f661a 100644
--- a/drivers/char/tpm/tpm_crb.c
+++ b/drivers/char/tpm/tpm_crb.c
@@ -34,6 +34,15 @@ enum crb_defaults {
 	CRB_ACPI_START_INDEX = 1,
 };
 
+enum crb_loc_ctrl {
+	CRB_LOC_CTRL_REQUEST_ACCESS	= BIT(0),
+	CRB_LOC_CTRL_RELINQUISH		= BIT(1),
+};
+
+enum crb_loc_state {
+	CRB_LOC_STATE_LOC_ASSIGNED	= BIT(1),
+};
+
 enum crb_ctrl_req {
 	CRB_CTRL_REQ_CMD_READY	= BIT(0),
 	CRB_CTRL_REQ_GO_IDLE	= BIT(1),
@@ -165,13 +174,42 @@ static int __maybe_unused crb_cmd_ready(struct device *dev,
 				 CRB_CTRL_REQ_CMD_READY /* mask */,
 				 0, /* value */
 				 TPM2_TIMEOUT_C)) {
-		dev_warn(dev, "cmdReady timed out\n");
+		dev_warn(dev, "TPM_CRB_CTRL_REQ_x.cmdReady timed out\n");
+		return -ETIME;
+	}
+
+	return 0;
+}
+
+static int crb_request_locality(struct tpm_chip *chip)
+{
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
+
+	if (!priv->regs_h)
+		return 0;
+
+	iowrite32(CRB_LOC_CTRL_REQUEST_ACCESS, &priv->regs_h->loc_ctrl);
+	if (!crb_wait_for_reg_32(&priv->regs_h->loc_state,
+				 CRB_LOC_STATE_LOC_ASSIGNED, /* mask */
+				 CRB_LOC_STATE_LOC_ASSIGNED, /* value */
+				 TPM2_TIMEOUT_C)) {
+		dev_warn(&chip->dev, "TPM_LOC_STATE_x.requestAccess timed out\n");
 		return -ETIME;
 	}
 
 	return 0;
 }
 
+static void crb_relinquish_locality(struct tpm_chip *chip)
+{
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
+
+	if (!priv->regs_h)
+		return;
+
+	iowrite32(CRB_LOC_CTRL_RELINQUISH, &priv->regs_h->loc_ctrl);
+}
+
 static u8 crb_status(struct tpm_chip *chip)
 {
 	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
@@ -188,23 +226,33 @@ static int crb_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
 	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
 	unsigned int expected;
+	int rc;
 
 	/* sanity check */
 	if (count < 6)
 		return -EIO;
 
-	if (ioread32(&priv->regs_t->ctrl_sts) & CRB_CTRL_STS_ERROR)
-		return -EIO;
+	rc = crb_request_locality(chip);
+	if (rc)
+		return rc;
+
+	if (ioread32(&priv->regs_t->ctrl_sts) & CRB_CTRL_STS_ERROR) {
+		rc = -EIO;
+		goto out;
+	}
 
 	memcpy_fromio(buf, priv->rsp, 6);
 	expected = be32_to_cpup((__be32 *) &buf[2]);
-
-	if (expected > count)
-		return -EIO;
+	if (expected > count) {
+		rc = -EIO;
+		goto out;
+	}
 
 	memcpy_fromio(&buf[6], &priv->rsp[6], expected - 6);
 
-	return expected;
+out:
+	crb_relinquish_locality(chip);
+	return rc ? rc : expected;
 }
 
 static int crb_do_acpi_start(struct tpm_chip *chip)
@@ -227,7 +275,11 @@ static int crb_do_acpi_start(struct tpm_chip *chip)
 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;
+	int rc;
+
+	rc = crb_request_locality(chip);
+	if (rc)
+		return rc;
 
 	/* Zero the cancel register so that the next command will not get
 	 * canceled.
@@ -237,7 +289,8 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, size_t len)
 	if (len > priv->cmd_size) {
 		dev_err(&chip->dev, "invalid command count value %zd %d\n",
 			len, priv->cmd_size);
-		return -E2BIG;
+		rc = -E2BIG;
+		goto out;
 	}
 
 	memcpy_toio(priv->cmd, buf, len);
@@ -251,6 +304,8 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, size_t len)
 	if (priv->flags & CRB_FL_ACPI_START)
 		rc = crb_do_acpi_start(chip);
 
+out:
+	crb_relinquish_locality(chip);
 	return rc;
 }
 
-- 
2.9.3


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 0/3] Locality support for tpm_crb
  2017-02-08 11:11 ` Jarkko Sakkinen
                   ` (3 preceding siblings ...)
  (?)
@ 2017-03-04  1:27 ` Jerry Snitselaar
  2017-03-06 15:35   ` Jarkko Sakkinen
  2017-03-07 10:41     ` Jarkko Sakkinen
  -1 siblings, 2 replies; 18+ messages in thread
From: Jerry Snitselaar @ 2017-03-04  1:27 UTC (permalink / raw)
  To: Jarkko Sakkinen
  Cc: tpmdd-devel, linux-security-module, Jason Gunthorpe, open list


Jarkko Sakkinen @ 2017-02-08 11:11 GMT:

> The tpm_crb driver should follow the policy of reserving and
> relinquishing the locality it uses when multiple localities are used,
> like when TXT is another locality.
>
> [This is a resend of v3 as this has been asked from me for a few times
>  now and there wasn't anything obvious to fix.]
>
> Jarkko Sakkinen (3):
>   tpm_crb: map locality registers
>   tpm_crb: encapsulate crb_wait_for_reg_32
>   tpm_crb: request and relinquish locality 0
>
>  drivers/char/tpm/tpm_crb.c | 185 +++++++++++++++++++++++++++++++++------------
>  1 file changed, 137 insertions(+), 48 deletions(-)

Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 0/3] Locality support for tpm_crb
  2017-03-04  1:27 ` [PATCH v3 0/3] Locality support for tpm_crb Jerry Snitselaar
@ 2017-03-06 15:35   ` Jarkko Sakkinen
  2017-03-07 16:41       ` Wei, Gang
  2017-03-07 10:41     ` Jarkko Sakkinen
  1 sibling, 1 reply; 18+ messages in thread
From: Jarkko Sakkinen @ 2017-03-06 15:35 UTC (permalink / raw)
  To: Jerry Snitselaar, gang.wei
  Cc: tpmdd-devel, linux-security-module, Jason Gunthorpe, open list

On Fri, Mar 03, 2017 at 06:27:19PM -0700, Jerry Snitselaar wrote:
> 
> Jarkko Sakkinen @ 2017-02-08 11:11 GMT:
> 
> > The tpm_crb driver should follow the policy of reserving and
> > relinquishing the locality it uses when multiple localities are used,
> > like when TXT is another locality.
> >
> > [This is a resend of v3 as this has been asked from me for a few times
> >  now and there wasn't anything obvious to fix.]
> >
> > Jarkko Sakkinen (3):
> >   tpm_crb: map locality registers
> >   tpm_crb: encapsulate crb_wait_for_reg_32
> >   tpm_crb: request and relinquish locality 0
> >
> >  drivers/char/tpm/tpm_crb.c | 185 +++++++++++++++++++++++++++++++++------------
> >  1 file changed, 137 insertions(+), 48 deletions(-)
> 
> Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>

Jimmy, can you give these patches Tested-by? I remember that
you said that they are working for you.

/Jarkko

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 0/3] Locality support for tpm_crb
@ 2017-03-07 10:41     ` Jarkko Sakkinen
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Sakkinen @ 2017-03-07 10:41 UTC (permalink / raw)
  To: Jerry Snitselaar
  Cc: tpmdd-devel, linux-security-module, Jason Gunthorpe, open list

On Fri, Mar 03, 2017 at 06:27:19PM -0700, Jerry Snitselaar wrote:
> 
> Jarkko Sakkinen @ 2017-02-08 11:11 GMT:
> 
> > The tpm_crb driver should follow the policy of reserving and
> > relinquishing the locality it uses when multiple localities are used,
> > like when TXT is another locality.
> >
> > [This is a resend of v3 as this has been asked from me for a few times
> >  now and there wasn't anything obvious to fix.]
> >
> > Jarkko Sakkinen (3):
> >   tpm_crb: map locality registers
> >   tpm_crb: encapsulate crb_wait_for_reg_32
> >   tpm_crb: request and relinquish locality 0
> >
> >  drivers/char/tpm/tpm_crb.c | 185 +++++++++++++++++++++++++++++++++------------
> >  1 file changed, 137 insertions(+), 48 deletions(-)
> 
> Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>

I decided to push these to my tree and linux-next as I've fixed
reported issues from v2 to get coverage.

/Jarkko

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 0/3] Locality support for tpm_crb
@ 2017-03-07 10:41     ` Jarkko Sakkinen
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Sakkinen @ 2017-03-07 10:41 UTC (permalink / raw)
  To: Jerry Snitselaar
  Cc: linux-security-module-u79uwXL29TY76Z2rM5mHXA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, open list

On Fri, Mar 03, 2017 at 06:27:19PM -0700, Jerry Snitselaar wrote:
> 
> Jarkko Sakkinen @ 2017-02-08 11:11 GMT:
> 
> > The tpm_crb driver should follow the policy of reserving and
> > relinquishing the locality it uses when multiple localities are used,
> > like when TXT is another locality.
> >
> > [This is a resend of v3 as this has been asked from me for a few times
> >  now and there wasn't anything obvious to fix.]
> >
> > Jarkko Sakkinen (3):
> >   tpm_crb: map locality registers
> >   tpm_crb: encapsulate crb_wait_for_reg_32
> >   tpm_crb: request and relinquish locality 0
> >
> >  drivers/char/tpm/tpm_crb.c | 185 +++++++++++++++++++++++++++++++++------------
> >  1 file changed, 137 insertions(+), 48 deletions(-)
> 
> Reviewed-by: Jerry Snitselaar <jsnitsel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>

I decided to push these to my tree and linux-next as I've fixed
reported issues from v2 to get coverage.

/Jarkko

------------------------------------------------------------------------------
Announcing the Oxford Dictionaries API! The API offers world-renowned
dictionary content that is easy and intuitive to access. Sign up for an
account today to start using our lexical data to power your apps and
projects. Get started today and enter our developer competition.
http://sdm.link/oxford

^ permalink raw reply	[flat|nested] 18+ messages in thread

* RE: [PATCH v3 0/3] Locality support for tpm_crb
@ 2017-03-07 16:41       ` Wei, Gang
  0 siblings, 0 replies; 18+ messages in thread
From: Wei, Gang @ 2017-03-07 16:41 UTC (permalink / raw)
  To: Jarkko Sakkinen, Jerry Snitselaar
  Cc: tpmdd-devel, linux-security-module, Jason Gunthorpe, open list

On Mon, Mar 06, 2017 at 11:35 PM +0800, Jarkko Sakkinen wrote:
> On Fri, Mar 03, 2017 at 06:27:19PM -0700, Jerry Snitselaar wrote:
> >
> > Jarkko Sakkinen @ 2017-02-08 11:11 GMT:
> >
> > > The tpm_crb driver should follow the policy of reserving and
> > > relinquishing the locality it uses when multiple localities are
> used,
> > > like when TXT is another locality.
> > >
> > > [This is a resend of v3 as this has been asked from me for a few
> times
> > >  now and there wasn't anything obvious to fix.]
> > >
> > > Jarkko Sakkinen (3):
> > >   tpm_crb: map locality registers
> > >   tpm_crb: encapsulate crb_wait_for_reg_32
> > >   tpm_crb: request and relinquish locality 0
> > >
> > >  drivers/char/tpm/tpm_crb.c | 185
> +++++++++++++++++++++++++++++++++------------
> > >  1 file changed, 137 insertions(+), 48 deletions(-)
> >
> > Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
> 
> Jimmy, can you give these patches Tested-by? I remember that
> you said that they are working for you.

Sure. They did work for me.

Jimmy

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 0/3] Locality support for tpm_crb
@ 2017-03-07 16:41       ` Wei, Gang
  0 siblings, 0 replies; 18+ messages in thread
From: Wei, Gang @ 2017-03-07 16:41 UTC (permalink / raw)
  To: Jarkko Sakkinen, Jerry Snitselaar
  Cc: linux-security-module-u79uwXL29TY76Z2rM5mHXA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, open list

On Mon, Mar 06, 2017 at 11:35 PM +0800, Jarkko Sakkinen wrote:
> On Fri, Mar 03, 2017 at 06:27:19PM -0700, Jerry Snitselaar wrote:
> >
> > Jarkko Sakkinen @ 2017-02-08 11:11 GMT:
> >
> > > The tpm_crb driver should follow the policy of reserving and
> > > relinquishing the locality it uses when multiple localities are
> used,
> > > like when TXT is another locality.
> > >
> > > [This is a resend of v3 as this has been asked from me for a few
> times
> > >  now and there wasn't anything obvious to fix.]
> > >
> > > Jarkko Sakkinen (3):
> > >   tpm_crb: map locality registers
> > >   tpm_crb: encapsulate crb_wait_for_reg_32
> > >   tpm_crb: request and relinquish locality 0
> > >
> > >  drivers/char/tpm/tpm_crb.c | 185
> +++++++++++++++++++++++++++++++++------------
> > >  1 file changed, 137 insertions(+), 48 deletions(-)
> >
> > Reviewed-by: Jerry Snitselaar <jsnitsel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> 
> Jimmy, can you give these patches Tested-by? I remember that
> you said that they are working for you.

Sure. They did work for me.

Jimmy

------------------------------------------------------------------------------
Announcing the Oxford Dictionaries API! The API offers world-renowned
dictionary content that is easy and intuitive to access. Sign up for an
account today to start using our lexical data to power your apps and
projects. Get started today and enter our developer competition.
http://sdm.link/oxford

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 0/3] Locality support for tpm_crb
@ 2017-03-07 18:31         ` Jarkko Sakkinen
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Sakkinen @ 2017-03-07 18:31 UTC (permalink / raw)
  To: Wei, Gang
  Cc: Jerry Snitselaar, tpmdd-devel, linux-security-module,
	Jason Gunthorpe, open list

On Tue, Mar 07, 2017 at 04:41:04PM +0000, Wei, Gang wrote:
> On Mon, Mar 06, 2017 at 11:35 PM +0800, Jarkko Sakkinen wrote:
> > On Fri, Mar 03, 2017 at 06:27:19PM -0700, Jerry Snitselaar wrote:
> > >
> > > Jarkko Sakkinen @ 2017-02-08 11:11 GMT:
> > >
> > > > The tpm_crb driver should follow the policy of reserving and
> > > > relinquishing the locality it uses when multiple localities are
> > used,
> > > > like when TXT is another locality.
> > > >
> > > > [This is a resend of v3 as this has been asked from me for a few
> > times
> > > >  now and there wasn't anything obvious to fix.]
> > > >
> > > > Jarkko Sakkinen (3):
> > > >   tpm_crb: map locality registers
> > > >   tpm_crb: encapsulate crb_wait_for_reg_32
> > > >   tpm_crb: request and relinquish locality 0
> > > >
> > > >  drivers/char/tpm/tpm_crb.c | 185
> > +++++++++++++++++++++++++++++++++------------
> > > >  1 file changed, 137 insertions(+), 48 deletions(-)
> > >
> > > Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
> > 
> > Jimmy, can you give these patches Tested-by? I remember that
> > you said that they are working for you.
> 
> Sure. They did work for me.
> 
> Jimmy

Thank you!

/Jarkko

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 0/3] Locality support for tpm_crb
@ 2017-03-07 18:31         ` Jarkko Sakkinen
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Sakkinen @ 2017-03-07 18:31 UTC (permalink / raw)
  To: Wei, Gang
  Cc: Jerry Snitselaar, linux-security-module-u79uwXL29TY76Z2rM5mHXA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, open list

On Tue, Mar 07, 2017 at 04:41:04PM +0000, Wei, Gang wrote:
> On Mon, Mar 06, 2017 at 11:35 PM +0800, Jarkko Sakkinen wrote:
> > On Fri, Mar 03, 2017 at 06:27:19PM -0700, Jerry Snitselaar wrote:
> > >
> > > Jarkko Sakkinen @ 2017-02-08 11:11 GMT:
> > >
> > > > The tpm_crb driver should follow the policy of reserving and
> > > > relinquishing the locality it uses when multiple localities are
> > used,
> > > > like when TXT is another locality.
> > > >
> > > > [This is a resend of v3 as this has been asked from me for a few
> > times
> > > >  now and there wasn't anything obvious to fix.]
> > > >
> > > > Jarkko Sakkinen (3):
> > > >   tpm_crb: map locality registers
> > > >   tpm_crb: encapsulate crb_wait_for_reg_32
> > > >   tpm_crb: request and relinquish locality 0
> > > >
> > > >  drivers/char/tpm/tpm_crb.c | 185
> > +++++++++++++++++++++++++++++++++------------
> > > >  1 file changed, 137 insertions(+), 48 deletions(-)
> > >
> > > Reviewed-by: Jerry Snitselaar <jsnitsel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> > 
> > Jimmy, can you give these patches Tested-by? I remember that
> > you said that they are working for you.
> 
> Sure. They did work for me.
> 
> Jimmy

Thank you!

/Jarkko

------------------------------------------------------------------------------
Announcing the Oxford Dictionaries API! The API offers world-renowned
dictionary content that is easy and intuitive to access. Sign up for an
account today to start using our lexical data to power your apps and
projects. Get started today and enter our developer competition.
http://sdm.link/oxford

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v3 0/3] Locality support for tpm_crb
@ 2016-12-07 11:49 ` Jarkko Sakkinen
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Sakkinen @ 2016-12-07 11:49 UTC (permalink / raw)
  To: Peter Huewe
  Cc: linux-security-module, Jarkko Sakkinen, Jason Gunthorpe,
	open list, moderated list:TPM DEVICE DRIVER

The tpm_crb driver should follow the policy of reserving and
relinquishing the locality it uses when multiple localities are used,
like when TXT is another locality.

Jarkko Sakkinen (3):
  tpm_crb: map locality registers
  tpm_crb: encapsulate crb_wait_for_reg_32
  tpm_crb: request and relinquish locality 0

 drivers/char/tpm/tpm_crb.c | 185 +++++++++++++++++++++++++++++++++------------
 1 file changed, 137 insertions(+), 48 deletions(-)

-- 
v2: 
added sanity check for start address of the control area
v3:
do locality request/relinquish as part of send/recv
check priv->regs_h before using it
just assing the base address to regs_h instead of using crb_map_res
2.9.3

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v3 0/3] Locality support for tpm_crb
@ 2016-12-07 11:49 ` Jarkko Sakkinen
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Sakkinen @ 2016-12-07 11:49 UTC (permalink / raw)
  To: Peter Huewe
  Cc: linux-security-module, Jarkko Sakkinen, Jason Gunthorpe,
	open list, moderated list:TPM DEVICE DRIVER

The tpm_crb driver should follow the policy of reserving and
relinquishing the locality it uses when multiple localities are used,
like when TXT is another locality.

Jarkko Sakkinen (3):
  tpm_crb: map locality registers
  tpm_crb: encapsulate crb_wait_for_reg_32
  tpm_crb: request and relinquish locality 0

 drivers/char/tpm/tpm_crb.c | 185 +++++++++++++++++++++++++++++++++------------
 1 file changed, 137 insertions(+), 48 deletions(-)

-- 
v2: 
added sanity check for start address of the control area
v3:
do locality request/relinquish as part of send/recv
check priv->regs_h before using it
just assing the base address to regs_h instead of using crb_map_res
2.9.3


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2017-03-07 18:35 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-08 11:11 [PATCH v3 0/3] Locality support for tpm_crb Jarkko Sakkinen
2017-02-08 11:11 ` Jarkko Sakkinen
2017-02-08 11:11 ` [PATCH v3 1/3] tpm_crb: map locality registers Jarkko Sakkinen
2017-02-08 11:11   ` Jarkko Sakkinen
2017-02-08 11:11 ` [PATCH v3 2/3] tpm_crb: encapsulate crb_wait_for_reg_32 Jarkko Sakkinen
2017-02-08 11:11   ` Jarkko Sakkinen
2017-02-08 11:11 ` [PATCH v3 3/3] tpm_crb: request and relinquish locality 0 Jarkko Sakkinen
2017-02-08 11:11   ` Jarkko Sakkinen
2017-03-04  1:27 ` [PATCH v3 0/3] Locality support for tpm_crb Jerry Snitselaar
2017-03-06 15:35   ` Jarkko Sakkinen
2017-03-07 16:41     ` Wei, Gang
2017-03-07 16:41       ` Wei, Gang
2017-03-07 18:31       ` Jarkko Sakkinen
2017-03-07 18:31         ` Jarkko Sakkinen
2017-03-07 10:41   ` Jarkko Sakkinen
2017-03-07 10:41     ` Jarkko Sakkinen
  -- strict thread matches above, loose matches on Subject: below --
2016-12-07 11:49 Jarkko Sakkinen
2016-12-07 11:49 ` Jarkko Sakkinen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.