From: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
To: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Cc: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>,
tpmdd-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org,
Martin Wilck <Martin.Wilck@ts.fujitsu.com>,
Peter Huewe <peterhuewe@gmx.de>
Subject: Re: [PATCH v2 2/3] tpm_tis: Use devm_ioremap_resource
Date: Tue, 1 Dec 2015 20:22:40 +0100 [thread overview]
Message-ID: <20151201192240.GE5072@pengutronix.de> (raw)
In-Reply-To: <1448996309-15220-3-git-send-email-jgunthorpe@obsidianresearch.com>
Hello,
On Tue, Dec 01, 2015 at 11:58:28AM -0700, Jason Gunthorpe wrote:
> 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>
> ---
> drivers/char/tpm/tpm_tis.c | 29 +++++++++++++++++------------
> 1 file changed, 17 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
> index 0a2d94f3d679..1032855c46b2 100644
> --- a/drivers/char/tpm/tpm_tis.c
> +++ b/drivers/char/tpm/tpm_tis.c
> @@ -67,14 +67,16 @@ enum tis_defaults {
> };
>
> struct tpm_info {
> - unsigned long start;
> - unsigned long len;
> + struct resource res;
> int irq;
> };
>
> 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,
> };
>
> @@ -716,7 +718,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;
>
> @@ -899,9 +901,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;
> + memcpy(&tpm_info.res, res, sizeof(*res));
I think you can do
tpm_info.res = res;
here, which IMHO reads nicer and maybe is even more efficient (I don't
know much about x86).
> if (pnp_irq_valid(pnp_dev, 0))
> tpm_info.irq = pnp_irq(pnp_dev, 0);
> @@ -964,12 +969,9 @@ 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);
> - }
> + acpi_dev_resource_memory(ares, &tpm_info->res);
>
> return 1;
> }
> @@ -992,6 +994,9 @@ static int tpm_tis_acpi_init(struct acpi_device *acpi_dev)
>
> acpi_dev_free_resource_list(&resources);
>
> + if (resource_size(&tpm_info.res) == 0)
> + return -ENODEV;
> +
Does this result in an error message from the upper layers?
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
next prev parent reply other threads:[~2015-12-01 19:22 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-01 18:58 [PATCH v2 0/3] tpm_tis: Clean up force module parameter Jason Gunthorpe
2015-12-01 18:58 ` [PATCH v2 1/3] tpm_tis: Disable interrupt auto probing on a per-device basis Jason Gunthorpe
2015-12-01 19:19 ` Uwe Kleine-König
2015-12-01 19:36 ` Jason Gunthorpe
2015-12-01 18:58 ` [PATCH v2 2/3] tpm_tis: Use devm_ioremap_resource Jason Gunthorpe
2015-12-01 19:22 ` Uwe Kleine-König [this message]
2015-12-01 19:44 ` Jason Gunthorpe
2015-12-01 19:52 ` Uwe Kleine-König
2015-12-01 20:46 ` Jason Gunthorpe
2015-12-01 18:58 ` [PATCH v2 3/3] tpm_tis: Clean up the force=1 module parameter Jason Gunthorpe
2015-12-01 19:33 ` Uwe Kleine-König
2015-12-01 19:51 ` Jason Gunthorpe
2015-12-01 21:14 ` [PATCH v2 0/3] tpm_tis: Clean up force " Jarkko Sakkinen
2015-12-01 21:33 ` Jarkko Sakkinen
2015-12-01 22:22 ` Jason Gunthorpe
2015-12-02 1:15 ` Peter Huewe
2015-12-02 8:14 ` Jarkko Sakkinen
2015-12-02 9:02 ` Peter Huewe
2015-12-02 8:11 ` Jarkko Sakkinen
2015-12-02 8:21 ` Uwe Kleine-König
2015-12-02 16:53 ` Greg Kroah-Hartman
2015-12-02 16:59 ` Uwe Kleine-König
2015-12-03 8:51 ` [PATCH v3] base/platform: fix binding for drivers without probe callback martin.wilck
2015-12-03 9:00 ` Uwe Kleine-König
2015-12-03 9:34 ` [tpmdd-devel] " Jarkko Sakkinen
2015-12-02 18:27 ` [PATCH v2 0/3] tpm_tis: Clean up force module parameter Jason Gunthorpe
2015-12-02 19:11 ` [tpmdd-devel] " Jason Gunthorpe
2015-12-03 6:00 ` Jarkko Sakkinen
2015-12-03 18:19 ` Jason Gunthorpe
2015-12-06 4:02 ` Jarkko Sakkinen
2015-12-06 4:15 ` Jarkko Sakkinen
2015-12-06 4:20 ` Jarkko Sakkinen
2015-12-07 6:15 ` Jason Gunthorpe
2015-12-07 8:06 ` Wilck, Martin
2015-12-07 8:56 ` Jarkko Sakkinen
2015-12-07 9:52 ` Wilck, Martin
2015-12-07 10:16 ` Jarkko Sakkinen
2015-12-03 8:30 ` Wilck, Martin
2015-12-03 17:00 ` Jason Gunthorpe
2015-12-04 8:39 ` Wilck, Martin
2015-12-04 9:10 ` Wilck, Martin
2015-12-04 18:09 ` Jason Gunthorpe
2015-12-07 9:59 ` Wilck, Martin
2015-12-07 17:35 ` Jason Gunthorpe
2015-12-03 5:58 ` Jarkko Sakkinen
2015-12-02 12:34 ` Wilck, Martin
2015-12-02 18:11 ` Jason Gunthorpe
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=20151201192240.GE5072@pengutronix.de \
--to=u.kleine-koenig@pengutronix.de \
--cc=Martin.Wilck@ts.fujitsu.com \
--cc=jarkko.sakkinen@linux.intel.com \
--cc=jgunthorpe@obsidianresearch.com \
--cc=linux-kernel@vger.kernel.org \
--cc=peterhuewe@gmx.de \
--cc=tpmdd-devel@lists.sourceforge.net \
/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 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.