linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
To: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>,
	tpmdd-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org
Cc: "Martin Wilck" <Martin.Wilck@ts.fujitsu.com>,
	"Peter Huewe" <peterhuewe@gmx.de>,
	"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Subject: [PATCH v3 4/7] tpm_tis: Use devm_ioremap_resource
Date: Thu, 17 Dec 2015 11:23:17 -0700	[thread overview]
Message-ID: <1450376600-6970-5-git-send-email-jgunthorpe@obsidianresearch.com> (raw)
In-Reply-To: <1450376600-6970-1-git-send-email-jgunthorpe@obsidianresearch.com>

This does a request_resource under the covers which means tis holds a
lock on the memory range it is using so other drivers cannot grab it.
When doing probing it is important to ensure that other drivers are
not using the same range before tis starts touching it.

To do this flow the actual struct resource from the device right
through to devm_ioremap_resource. This ensures all the proper resource
meta-data is carried down.

Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Tested-by: Wilck, Martin <martin.wilck@ts.fujitsu.com>
Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
---
 drivers/char/tpm/tpm_tis.c | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
index b2b31f5418ca..856fb35e574c 100644
--- a/drivers/char/tpm/tpm_tis.c
+++ b/drivers/char/tpm/tpm_tis.c
@@ -67,8 +67,7 @@ enum tis_defaults {
 };
 
 struct tpm_info {
-	unsigned long start;
-	unsigned long len;
+	struct resource res;
 	/* irq > 0 means: use irq $irq;
 	 * irq = 0 means: autoprobe for an irq;
 	 * irq = -1 means: no irq support
@@ -77,8 +76,11 @@ struct tpm_info {
 };
 
 static struct tpm_info tis_default_info = {
-	.start = TIS_MEM_BASE,
-	.len = TIS_MEM_LEN,
+	.res = {
+		.start = TIS_MEM_BASE,
+		.end = TIS_MEM_BASE + TIS_MEM_LEN - 1,
+		.flags = IORESOURCE_MEM,
+	},
 	.irq = 0,
 };
 
@@ -692,7 +694,7 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
 	chip->acpi_dev_handle = acpi_dev_handle;
 #endif
 
-	chip->vendor.iobase = devm_ioremap(dev, tpm_info->start, tpm_info->len);
+	chip->vendor.iobase = devm_ioremap_resource(dev, &tpm_info->res);
 	if (!chip->vendor.iobase)
 		return -EIO;
 
@@ -875,9 +877,12 @@ static int tpm_tis_pnp_init(struct pnp_dev *pnp_dev,
 {
 	struct tpm_info tpm_info = {};
 	acpi_handle acpi_dev_handle = NULL;
+	struct resource *res;
 
-	tpm_info.start = pnp_mem_start(pnp_dev, 0);
-	tpm_info.len = pnp_mem_len(pnp_dev, 0);
+	res = pnp_get_resource(pnp_dev, IORESOURCE_MEM, 0);
+	if (!res)
+		return -ENODEV;
+	tpm_info.res = *res;
 
 	if (pnp_irq_valid(pnp_dev, 0))
 		tpm_info.irq = pnp_irq(pnp_dev, 0);
@@ -940,12 +945,10 @@ static int tpm_check_resource(struct acpi_resource *ares, void *data)
 	struct tpm_info *tpm_info = (struct tpm_info *) data;
 	struct resource res;
 
-	if (acpi_dev_resource_interrupt(ares, 0, &res)) {
+	if (acpi_dev_resource_interrupt(ares, 0, &res))
 		tpm_info->irq = res.start;
-	} else if (acpi_dev_resource_memory(ares, &res)) {
-		tpm_info->start = res.start;
-		tpm_info->len = resource_size(&res);
-	}
+	else if (acpi_dev_resource_memory(ares, &res))
+		tpm_info->res = res;
 
 	return 1;
 }
@@ -978,7 +981,7 @@ static int tpm_tis_acpi_init(struct acpi_device *acpi_dev)
 
 	acpi_dev_free_resource_list(&resources);
 
-	if (tpm_info.start == 0 && tpm_info.len == 0) {
+	if (resource_type(&tpm_info.res) != IORESOURCE_MEM) {
 		dev_err(&acpi_dev->dev,
 			FW_BUG "TPM2 ACPI table does not define a memory resource\n");
 		return -EINVAL;
-- 
2.1.4


  parent reply	other threads:[~2015-12-17 18:24 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-17 18:23 [PATCH v3 0/7] tpm_tis: Clean up force module parameter Jason Gunthorpe
2015-12-17 18:23 ` [PATCH v3 1/7] tpm_crb: Use the common ACPI definition of struct acpi_tpm2 Jason Gunthorpe
2016-01-03 17:09   ` Jarkko Sakkinen
2016-01-04 18:23     ` Jason Gunthorpe
2016-01-04 18:49       ` Jarkko Sakkinen
2015-12-17 18:23 ` [PATCH v3 2/7] tpm_tis: Disable interrupt auto probing on a per-device basis Jason Gunthorpe
2016-01-03 17:20   ` Jarkko Sakkinen
2016-01-04 18:24     ` Jason Gunthorpe
2016-01-04 18:32       ` Jarkko Sakkinen
2015-12-17 18:23 ` [PATCH v3 3/7] tpm_tis: Do not fall back to a hardcoded address for TPM2 Jason Gunthorpe
2015-12-18  9:34   ` Jarkko Sakkinen
2015-12-18 16:51     ` Jason Gunthorpe
2015-12-20 12:34       ` Jarkko Sakkinen
2015-12-17 18:23 ` Jason Gunthorpe [this message]
2016-01-03 17:23   ` [PATCH v3 4/7] tpm_tis: Use devm_ioremap_resource Jarkko Sakkinen
2015-12-17 18:23 ` [PATCH v3 5/7] tpm_tis: Clean up the force=1 module parameter Jason Gunthorpe
2016-01-03 17:26   ` Jarkko Sakkinen
2016-01-04 18:27     ` Jason Gunthorpe
2015-12-17 18:23 ` [PATCH v3 6/7] tpm_crb: Drop le32_to_cpu(ioread32(..)) Jason Gunthorpe
2016-01-03 17:28   ` Jarkko Sakkinen
2015-12-17 18:23 ` [PATCH v3 7/7] tpm_crb: Use devm_ioremap_resource Jason Gunthorpe
2016-01-03 17:32   ` Jarkko Sakkinen
2016-01-04 18:30     ` Jason Gunthorpe
2016-01-04 19:43       ` Jarkko Sakkinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1450376600-6970-5-git-send-email-jgunthorpe@obsidianresearch.com \
    --to=jgunthorpe@obsidianresearch.com \
    --cc=Martin.Wilck@ts.fujitsu.com \
    --cc=jarkko.sakkinen@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterhuewe@gmx.de \
    --cc=tpmdd-devel@lists.sourceforge.net \
    --cc=u.kleine-koenig@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).