From: t-kristo@ti.com (Tero Kristo)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv5 2/6] ARM: OMAP3 PM: Move IO Daisychain function to omap3 prm file
Date: Mon, 12 Mar 2012 11:19:08 +0200 [thread overview]
Message-ID: <1331543948.2116.259.camel@sokoban> (raw)
In-Reply-To: <4F5D8EBA.3060602@ti.com>
On Mon, 2012-03-12 at 11:20 +0530, Rajendra Nayak wrote:
> On Saturday 10 March 2012 06:10 AM, Paul Walmsley wrote:
> > cc Rajendra
> >
> > Hi Tero,
> >
> > a few comments:
> >
> > On Tue, 6 Mar 2012, Tero Kristo wrote:
> >
> > ...
> >
> >> +/* OMAP3 Daisychain enable sequence */
> >> +void omap3_trigger_io_chain(void)
> >> +{
> >> + int i = 0;
> >> +
> >> + omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
> >> + PM_WKEN);
> >> + /* Do a readback to assure write has been done */
> >> + omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN);
> >
> > Looks like this barrier shouldn't be needed? The write is immediately
> > followed by another read from the same IP block.
I think you are right here, this can be dropped.
> >
> >> +
> >> + omap_test_timeout(omap2_prm_read_mod_reg(WKUP_MOD, PM_WKST)&
> >> + OMAP3430_ST_IO_CHAIN_MASK,
> >> + MAX_IOPAD_LATCH_TIME, i);
> >> +
> >> + omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
> >> + PM_WKEN);
> >> +
> >> + omap2_prm_set_mod_reg_bits(OMAP3430_ST_IO_CHAIN_MASK, WKUP_MOD,
> >> + PM_WKST);
> >> +
> >> + omap2_prm_read_mod_reg(WKUP_MOD, PM_WKST);
> >> +}
> >
> > I see that you removed the second timeout test from this code, but not
> > from the OMAP4 version. Any reason why? Seems like if the second timeout
> > can be removed from one, then it can also be removed from the other?
>
> Actually FWIK, its nteeded in both OMAP3 and OMAP4. The OMAP3
> documentation does no mention about it. but that is just bad
> documentation.
Both documentation and actual functionality appears to be different for
OMAP3 / OMAP4. The status bit on OMAP3 is read / write, and writing 1 to
it clears it. On OMAP4, it is read only and both values 0 / 1 indicate
something has happened. On OMAP3 the bit must be cleared by writing 1 to
it, otherwise it remains high indefinitely and will break all the
subsequent trigger calls. Also, clearing EN_IO_CHAIN on OMAP3 does not
appear to trigger any activity that would change the status of
ST_IO_CHAIN, so there is nothing to poll at the end.
Here is a sample trace I just generated for the trigger on OMAP3:
[ 7.707824] omap3_trigger_io_chain(1): PM_WKST=00000000
[ 7.707855] omap3_trigger_io_chain(2): PM_WKST=00000000
[ 7.707855] omap3_trigger_io_chain(3): PM_WKST=00010000
[ 7.707885] omap3_trigger_io_chain(4): PM_WKST=00000000
[ 7.707977] omap3_trigger_io_chain(5): PM_WKST=00000000
1 = enter trigger function
2 = just after enabling io chain
3 = just after first poll loop
4 = just after clear of io status and disabling of io chain
5 = after udelay(100) from last event (you can see the status bit never
raises)
So, you can see that there is no change in the status bit between 4...5,
so there is no point for polling anything there. I even tried changing
the clear of IO status and disabling of IO chain to see if it had any
impact on this result but no. The main point is that we must clear the
status bit at #4, and thus polling for it to change at #5 makes no
sense. We just need to force the register writes to PRCM by doing some
access to the IP block.
Looking at similar trace on omap4:
[ 8.097503] omap4_trigger_io_chain(1): IO=00010020
[ 8.097503] omap4_trigger_io_chain(2): IO=00010320
[ 8.097534] omap4_trigger_io_chain(3): IO=00010320
[ 8.097534] omap4_trigger_io_chain(4): IO=00010020
[ 8.097534] omap4_trigger_io_chain(5): IO=00010020
1 = enter function
2 = just after enabling WUCLK_CTRL
3 = just after poll
4 = just after disabling WUCLK_CTRL
5 = just after poll
Well, the status bit follows the state of the WUCLK_CTRL, but there is
no time to actually poll the registers it seems, their state has already
changed when the value from first read arrives back as the register
access itself is so slow. But... we are not manually clearing the status
bit, thus polling kind of makes sense (and it might make more sense if
some future version of PRCM would allow faster register access.)
I also did both of these tests by caching the register values to memory
(no immediate printks to avoid delays) but the results are still the
same.
-Tero
next prev parent reply other threads:[~2012-03-12 9:19 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-06 15:11 [PATCHv5 0/6] ARM: OMAP3+: IO daisy chain support fixes Tero Kristo
2012-03-06 15:11 ` [PATCHv5 1/6] ARM: OMAP3 PM: correct enable/disable of daisy io chain Tero Kristo
2012-03-10 3:48 ` Paul Walmsley
2012-03-06 15:11 ` [PATCHv5 2/6] ARM: OMAP3 PM: Move IO Daisychain function to omap3 prm file Tero Kristo
2012-03-06 15:57 ` Nishanth Menon
2012-03-06 16:05 ` Tero Kristo
2012-03-10 0:40 ` Paul Walmsley
2012-03-12 5:50 ` Rajendra Nayak
2012-03-12 9:19 ` Tero Kristo [this message]
2012-03-12 10:15 ` Rajendra Nayak
2012-03-10 3:50 ` Paul Walmsley
2012-03-06 15:11 ` [PATCHv5 3/6] ARM: OMAP4 PM: Add IO Daisychain support Tero Kristo
2012-03-10 3:59 ` Paul Walmsley
2012-03-12 5:52 ` Rajendra Nayak
2012-03-12 6:10 ` Rajendra Nayak
2012-03-12 6:51 ` Paul Walmsley
2012-03-06 15:11 ` [PATCHv5 4/6] ARM: OMAP3+: PRM: Enable IO wake up Tero Kristo
2012-03-10 4:00 ` Paul Walmsley
2012-03-06 15:11 ` [PATCHv5 5/6] ARM: OMAP3PLUS PM: Add IO Daisychain support via hwmod mux Tero Kristo
2012-03-10 4:01 ` Paul Walmsley
2012-06-22 11:45 ` Rajendra Nayak
2012-06-22 18:39 ` Paul Walmsley
2012-03-06 15:11 ` [PATCHv5 6/6] ARM: OMAP3 PM: Remove IO Daisychain control from cpuidle Tero Kristo
2012-03-10 4:02 ` Paul Walmsley
2012-03-10 4:05 ` [PATCHv5 0/6] ARM: OMAP3+: IO daisy chain support fixes Paul Walmsley
2012-03-12 5:53 ` Rajendra Nayak
2012-03-12 10:00 ` Tero Kristo
2012-03-12 10:13 ` Paul Walmsley
2012-03-10 21:29 ` Paul Walmsley
2012-03-12 5:55 ` Rajendra Nayak
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=1331543948.2116.259.camel@sokoban \
--to=t-kristo@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).