devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
To: Christophe RICARD
	<christophe.ricard-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: peterhuewe-Mmb7MZpHnFY@public.gmane.org,
	ashley-fm2HMyfA2y6tG0bUXCXiUA@public.gmane.org,
	tpmdd-yWjUBOtONefk1uMJSBkQmQ@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
	christophe-h.ricard-qxv4g6HH51o@public.gmane.org,
	jean-luc.blanc-qxv4g6HH51o@public.gmane.org
Subject: Re: [tpmdd-devel] [PATCH 11/16] tpm/tpm_i2c_stm_st33: Remove useless i2c read on interrupt registers
Date: Wed, 8 Oct 2014 11:11:40 -0600	[thread overview]
Message-ID: <20141008171140.GD4153@obsidianresearch.com> (raw)
In-Reply-To: <5434CD44.9090606-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

On Wed, Oct 08, 2014 at 07:36:04AM +0200, Christophe RICARD wrote:

> I believe this is completely 2 different things. The delay before the
> release locality is to make sure that the isr will be service before
> release_locality to guarantee
> that any pending interrupt are cleared while the locality is active.
> Here i just want to save 2 i2c transaction as only 1 write is enough
> to get the register change as effective.

I think I follow the interrupt changes a bit better now..

First of all, things are spread out too much, ie patch 10 makes the
actual ISR handler change but patch 13 corrects the locking bug
introduced in patch 10, and patch 7 switches to the threaded irq
required by patch 13 - this should all be in the same patch.

Second, I don't think switching to threaded IRQs and then using I2C
transactions in the handler is a great idea. I think you should follow
the pattern in the nuvoton driver:

The IRQ handler simply records the interrupt occured, triggers a WQ
and disables the IRQ:

static irqreturn_t i2c_nuvoton_int_handler(int dummy, void *dev_id)
{
	struct tpm_chip *chip = dev_id;
	struct priv_data *priv = chip->vendor.priv;

	priv->intrs++;
	wake_up(&chip->vendor.read_queue);
	disable_irq_nosync(chip->vendor.irq);
	return IRQ_HANDLED;
}

The ops explicitly enables the IRQ before sleeping waiting on the
output FIFO:

	if (chip->vendor.irq && queue) {
		s32 rc;
		struct priv_data *priv = chip->vendor.priv;
		unsigned int cur_intrs = priv->intrs;

		enable_irq(chip->vendor.irq);
		rc = wait_event_interruptible_timeout(*queue,
						      cur_intrs != priv->intrs,
						      timeout);
		if (rc > 0)
			return 0;

For your chip you might need to ack the IRQ before writing a new
command to the input FIFO.

1) This gets rid of the udelay, the IRQ doesn't do anything so any
   acks can be sequenced properly with the request_locality
2) This gets rid of the locking, the IRQ doesn't attempt to ack, and
   acks can be sequenced before any enable_irq

If your chip is sane like other TPMs the IRQ pin will only be asserted
while there is data pending in the out command FIFO, reading the FIFO
should naturally clear the IRQ and the acking process may be entirely
unnecessary and can be removed. If you have to ack via that weird
read/write sequence then it should always be done before submitting a
new command to the input fifo.

Jason
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2014-10-08 17:11 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-07 20:02 [PATCH 00/16] ST33 I2C TPM driver cleanup Christophe Ricard
     [not found] ` <1412712189-1234-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2014-10-07 20:02   ` [PATCH 01/16] tpm/tpm_i2c_stm_st33: Update Kconfig in order to be inline to other similar product Christophe Ricard
     [not found]     ` <1412712189-1234-2-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2014-10-07 21:40       ` [tpmdd-devel] " Jason Gunthorpe
2014-10-07 20:02   ` [PATCH 02/16] tpm/tpm_i2c_stm_st33: Fix few coding style error reported by scripts/checkpatch.pl Christophe Ricard
2014-10-07 20:02   ` [PATCH 03/16] tpm/tpm_i2c_stm_st33: Move tpm registers to tpm_i2c_stm_st33.c Christophe Ricard
2014-10-07 20:02   ` [PATCH 04/16] tpm/tpm_i2c_stm_st33: Add new tpm_stm_dev structure and remove tpm_i2c_buffer[0], [1] buffer Christophe Ricard
2014-10-07 20:02   ` [PATCH 05/16] tpm/tpm_i2c_stm_st33: Replace err/rc/ret by r for a function return code Christophe Ricard
2014-10-07 20:02   ` [PATCH 06/16] tpm/tpm_i2c_stm_st33: Replace tpm_st33_* function with tpm_stm_* Christophe Ricard
2014-10-07 20:03   ` [PATCH 07/16] tpm/tpm_i2c_stm_st33: Add devicetree structure Christophe Ricard
     [not found]     ` <1412712189-1234-8-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2014-10-07 22:30       ` [tpmdd-devel] " Jason Gunthorpe
     [not found]         ` <20141007223025.GE2366-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2014-10-08  5:47           ` Christophe RICARD
     [not found]             ` <5434D00E.7000602-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-10-08 16:29               ` Jason Gunthorpe
     [not found]                 ` <20141008162922.GC4153-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2014-10-08 20:41                   ` Christophe Henri RICARD
     [not found]                     ` <0B9F1C5B86169C4EA9D042C251022E4938EC504766-+EwDPpWUVoSRc5Omjj0epdBPR1lH4CV8@public.gmane.org>
2014-10-08 20:51                       ` Jason Gunthorpe
     [not found]                         ` <20141008205116.GA13867-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2014-10-08 21:14                           ` Christophe Henri RICARD
     [not found]                             ` <0B9F1C5B86169C4EA9D042C251022E4938EC50476E-+EwDPpWUVoSRc5Omjj0epdBPR1lH4CV8@public.gmane.org>
2014-10-08 21:37                               ` Jason Gunthorpe
2014-10-07 20:03   ` [PATCH 08/16] tpm: dts: st33zp24_i2c: Add DTS Documentation Christophe Ricard
2014-10-07 20:03   ` [PATCH 09/16] tpm/tpm_i2c_stm_st33: Few code cleanup Christophe Ricard
2014-10-07 20:03   ` [PATCH 10/16] tpm/tpm_i2c_stm_st33: Replace wait_for_serirq_timeout by wait_for_tpm_stat Christophe Ricard
     [not found]     ` <1412712189-1234-11-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2014-10-07 22:11       ` [tpmdd-devel] " Jason Gunthorpe
     [not found]         ` <20141007221146.GC2366-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2014-10-08  5:38           ` Christophe RICARD
     [not found]             ` <5434CDD6.4050200-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-10-08 16:26               ` Jason Gunthorpe
     [not found]                 ` <20141008162609.GA4153-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2014-10-08 20:26                   ` Christophe Henri RICARD
     [not found]                     ` <0B9F1C5B86169C4EA9D042C251022E4938EC504762-+EwDPpWUVoSRc5Omjj0epdBPR1lH4CV8@public.gmane.org>
2014-10-08 20:41                       ` Jason Gunthorpe
2014-10-07 20:03   ` [PATCH 11/16] tpm/tpm_i2c_stm_st33: Remove useless i2c read on interrupt registers Christophe Ricard
     [not found]     ` <1412712189-1234-12-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2014-10-07 22:09       ` [tpmdd-devel] " Jason Gunthorpe
     [not found]         ` <20141007220917.GC10616-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2014-10-08  5:36           ` Christophe RICARD
     [not found]             ` <5434CD44.9090606-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-10-08 17:11               ` Jason Gunthorpe [this message]
     [not found]                 ` <20141008171140.GD4153-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2014-10-09 17:35                   ` Christophe Henri RICARD
     [not found]                     ` <0B9F1C5B86169C4EA9D042C251022E4938EC504B46-+EwDPpWUVoSRc5Omjj0epdBPR1lH4CV8@public.gmane.org>
2014-10-09 18:20                       ` Jason Gunthorpe
2014-10-07 20:03   ` [PATCH 12/16] tpm/tpm_i2c_stm_st33: Change License header to have up to date address information Christophe Ricard
2014-10-07 20:03   ` [PATCH 13/16] tpm/tpm_i2c_stm_st33: Add tpm_lock mutex for safe irq management Christophe Ricard
     [not found]     ` <1412712189-1234-14-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2014-10-07 21:56       ` [tpmdd-devel] " Jason Gunthorpe
     [not found]         ` <20141007215630.GB2366-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2014-10-08  5:21           ` Christophe RICARD
2014-10-07 20:03   ` [PATCH 14/16] tpm/tpm_i2c_stm_st33: Fix potential bug in tpm_stm_i2c_send Christophe Ricard
     [not found]     ` <1412712189-1234-15-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2014-10-07 22:04       ` [tpmdd-devel] " Jason Gunthorpe
     [not found]         ` <20141007220425.GB10616-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2014-10-08  5:31           ` Christophe RICARD
     [not found]             ` <CALD+uuxM2018GrkDL+6fUbWijYTRYbqB-YFNQRkCj=ZEkPkgng@mail.gmail.com>
     [not found]               ` <CALD+uuxM2018GrkDL+6fUbWijYTRYbqB-YFNQRkCj=ZEkPkgng-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-10-08 16:27                 ` Jason Gunthorpe
2014-10-07 20:03   ` [PATCH 15/16] tpm/tpm_i2c_stm_st33: Add delay before release_locality to make sure irq are cleared Christophe Ricard
     [not found]     ` <1412712189-1234-16-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2014-10-07 21:56       ` [tpmdd-devel] " Jason Gunthorpe
2014-10-07 20:03   ` [PATCH 16/16] tpm: Increment driver version to 1.2.1 Christophe Ricard
2014-10-07 20:30   ` [PATCH 00/16] ST33 I2C TPM driver cleanup Peter Hüwe
2014-10-07 22:25   ` [tpmdd-devel] " Jason Gunthorpe
     [not found]     ` <20141007222525.GD2366-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2014-10-08  5:45       ` Christophe RICARD

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=20141008171140.GD4153@obsidianresearch.com \
    --to=jgunthorpe-epgobjl8dl3ta4ec/59zmfatqe2ktcn/@public.gmane.org \
    --cc=ashley-fm2HMyfA2y6tG0bUXCXiUA@public.gmane.org \
    --cc=christophe-h.ricard-qxv4g6HH51o@public.gmane.org \
    --cc=christophe.ricard-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=jean-luc.blanc-qxv4g6HH51o@public.gmane.org \
    --cc=peterhuewe-Mmb7MZpHnFY@public.gmane.org \
    --cc=tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    --cc=tpmdd-yWjUBOtONefk1uMJSBkQmQ@public.gmane.org \
    /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).