From: balbi@ti.com (Felipe Balbi)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 04/17] i2c: omap: simplify omap_i2c_ack_stat()
Date: Thu, 14 Jun 2012 14:45:50 +0300 [thread overview]
Message-ID: <20120614114546.GP13602@arwen.pp.htv.fi> (raw)
In-Reply-To: <20120614111333.GA31187@n2100.arm.linux.org.uk>
Hi,
On Thu, Jun 14, 2012 at 12:13:33PM +0100, Russell King - ARM Linux wrote:
> On Thu, Jun 14, 2012 at 01:20:37PM +0300, Felipe Balbi wrote:
> > stat & BIT(1) is the same as BIT(1), so let's
> > simplify things a bit by removing "stat &" from
> > all omap_i2c_ack_stat() calls.
>
> This doesn't feel right, and the explanation is definitely wrong.
>
> "stat & BIT(1)" is not the same as "BIT(1)" _unless_ you're saying that
> stat always has BIT(1) already set. Can you guarantee that in this code?
> If so, how?
>
> What happens if you read the status register, and it has bit 1 clear.
> immediately after the read, the status register bit 1 becomes set, and
> then you write bit 1 set (because you've dropped the stat & BIT(1) from
> the code.)
>
> Is it not going to acknowledge that bit-1-set but because you haven't
> read it, you're going to miss that event?
>
> This feels like a buggy change to me.
I fail to see that situation would happen with this driver. See what it
does (extremely simplified):
if (stat & NACK) {
...
omap_i2c_ack_stat(dev, stat & NACK);
}
if (stat & RDR) {
...
omap_i2c_ack_stat(dev, stat & RDR);
}
and so on. The tricky place is only WRT errata handling, for example:
if (*stat & (NACK | AL)) {
omap_i2c_ack_stat(dev, *stat & (XRDY | XDR));
...
}
but in this case, the errata says we must clear XRDY and XDR if that
errata triggers, so if they just got enabled or not, it doesn't matter.
Another tricky place is RDR | RRDY (likewise for XDR | XRDY):
if (stat & (RDR | RRDY)) {
...
omap_i2c_ack_stat(dev, stat & (RDR | RRDY));
}
again here there will be no issues because those IRQs never fire
simultaneously and one will only after after we have handled the
previous, that's because the same FIFO is used anyway and we won't shift
data into FIFO until we tell the IP "hey, I'm done with the FIFO, you
can shift more data". Right ?
--
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120614/db62ffcb/attachment-0001.sig>
next prev parent reply other threads:[~2012-06-14 11:45 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-14 10:20 [PATCH 00/17] Big OMAP I2C Cleanup Felipe Balbi
2012-06-14 10:20 ` [PATCH 01/17] i2c: omap: simplify num_bytes handling Felipe Balbi
2012-06-14 10:33 ` Shilimkar, Santosh
2012-06-14 10:20 ` [PATCH 02/17] i2c: omap: decrease indentation level on data handling Felipe Balbi
2012-06-14 10:41 ` Shilimkar, Santosh
2012-06-14 10:40 ` Felipe Balbi
2012-06-14 10:20 ` [PATCH 03/17] i2c: omap: add blank lines Felipe Balbi
2012-06-14 10:43 ` Shilimkar, Santosh
2012-06-14 10:20 ` [PATCH 04/17] i2c: omap: simplify omap_i2c_ack_stat() Felipe Balbi
2012-06-14 10:45 ` Shilimkar, Santosh
2012-06-14 11:13 ` Russell King - ARM Linux
2012-06-14 11:45 ` Felipe Balbi [this message]
2012-06-14 10:20 ` [PATCH 05/17] i2c: omap: split out [XR]DR and [XR]RDY Felipe Balbi
2012-06-14 10:20 ` [PATCH 06/17] i2c: omap: improve 1p153 errata handling Felipe Balbi
2012-06-14 11:01 ` Shilimkar, Santosh
2012-06-14 11:17 ` Russell King - ARM Linux
2012-06-14 11:48 ` Felipe Balbi
2012-06-14 10:20 ` [PATCH 07/17] i2c: omap: re-factor receive/transmit data loop Felipe Balbi
2012-06-14 10:20 ` [PATCH 08/17] i2c: omap: switch over to do {} while loop Felipe Balbi
2012-06-14 11:03 ` Shilimkar, Santosh
2012-06-14 11:05 ` Felipe Balbi
2012-06-14 10:20 ` [PATCH 09/17] i2c: omap: ack IRQ in parts Felipe Balbi
2012-06-14 11:11 ` Shilimkar, Santosh
2012-06-14 11:46 ` Felipe Balbi
2012-06-14 11:20 ` Russell King - ARM Linux
2012-06-14 11:47 ` Felipe Balbi
2012-06-14 10:20 ` [PATCH 10/17] i2c: omap: get rid of the "complete" label Felipe Balbi
2012-06-14 10:20 ` [PATCH 11/17] i2c: omap: switch to devm_* API Felipe Balbi
2012-06-14 10:20 ` [PATCH 12/17] i2c: omap: switch to platform_get_irq() Felipe Balbi
2012-06-14 10:20 ` [PATCH 13/17] i2c: omap: bus: add a receiver flag Felipe Balbi
2012-06-14 10:20 ` [PATCH 14/17] i2c: omap: simplify errata check Felipe Balbi
2012-06-14 10:20 ` [PATCH 15/17] i2c: omap: always return IRQ_HANDLED Felipe Balbi
2012-06-14 11:18 ` Shilimkar, Santosh
2012-06-14 11:23 ` Russell King - ARM Linux
2012-06-14 11:25 ` Shilimkar, Santosh
2012-06-14 10:20 ` [PATCH 16/17] i2c: omap: simplify IRQ exit path Felipe Balbi
2012-06-14 10:20 ` [PATCH 17/17] i2c: omap: resize fifos before each message Felipe Balbi
2012-06-14 11:23 ` [PATCH 00/17] Big OMAP I2C Cleanup Shilimkar, Santosh
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=20120614114546.GP13602@arwen.pp.htv.fi \
--to=balbi@ti.com \
--cc=linux-arm-kernel@lists.infradead.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).