From: J. William Campbell <jwilliamcampbell@comcast.net>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v1 (WIP) 00/16] [Timer]API Rewrite
Date: Fri, 15 Jul 2011 14:03:58 -0700 [thread overview]
Message-ID: <4E20AB3E.7030803@comcast.net> (raw)
In-Reply-To: <20110715183435.5123317A3205@gemini.denx.de>
On 7/15/2011 11:34 AM, Wolfgang Denk wrote:
> Dear "J. William Campbell",
>
> In message<4E208227.6010903@comcast.net> you wrote:
>> If the I2C protocol must be available before interrupts are
>> available, then udelay must be used. In the above examples, there are
>> some loops in i2c and spi that appear to be waiting a full second. I
>> assume they are using udelay because the get_timer feature is not yet
>> available to them. I also assume that the example in common/usb.c uses
> No, this is usually not the case. This long delay is the error case,
> which most probably will never happen. For the normal case, you want
> a tight spinning loop that introduces as little additional delay as
> possible.
Hi All,
I understand why one would want to use udelay in those cases
where there are other conditions that should cause the loop to exit.
However, in the 16 examples you cited, 7 of those usages are for delays
of multiple milliseconds with no tests or escape conditions included. I
therefore pointed out that I assume that it was being done that way (as
opposed to using get_timer) because this code would be executed
"early", before get_timer was available.
>> True, although I expect you will find the statement "on all the other
>> architectures" to be false. Many other architectures, yes, all, no.
>> These other architectures just don't have spi or I2C yet, or if they do,
>> they don't use it "early".
> Are you aware of another architecture that cannot provide
> sub-microsecond timer resolution? Which is it?
No, but I am aware of some that do not provide udelay at all until
after interrupts are enabled and the get_timer interface is available.
Several ARM implementations have this property. There are one or two
others (SPARC) that are similar as I recall. There were also some that
called reset_timer, which would mess up nested timing loops, but this
has already been fixed. There also quite a few udelay implementations
that do not actually provide 1 ?s resolution. For instance, the first
thing that happens in arm720t/interrupts.c __udelay is that the input
microseconds is divided by 1000 and the remainder discarded. A
udelay(10) won't work so well here. The lh7a40x/timer.c uses a 508 kHz
clock, so delays are accurate to at best 2 ?s. There are other examples.
For instance, I am pretty sure some u-boot based CPUs use a 32kHz clock
as the timebase for udelay. The resolution in that case is 30 ?s, which
would be a problem for your example code. I am sure further digging will
reveal other resolution issues.
These udelay issues would need fixing if all u-boot options are to work
"out of the box". In some cases of low resolution, the fix is not easy,
or maybe not even possible. However, this problem has not prevented the
use of u-boot on these CPUs. It does mean that some things do not work
"out of the box", and these non-compliant udelays should be fixed
wherever practical. In any case, this shouldn't stop progress on
get_timer and the delay_at_least (or whatever it ends up being called)
function being adopted. That is independent of the udelay issues. udelay
must be implemented in a "compliant" manner, which may or may not use
the same hardware as get_timer() does. It certainly can't use the same
code (although some ARM version in effect do, resulting in a
non-compliant, low resolution udelay).
It might be interesting to utilize something like "jiffies" for the loop
delays that are looking for error exits. In those cases, the error case
should be infrequent. It may not matter that the total delay is quite a
bit longer than the user requested, as long as it isn't vastly shorter.
If a 10 ?sec delay became a 30 ?sec delay inside the loop examples where
we expect to exit due to another cause, it probably wouldn't matter
much. It would matter a lot though if the delay were setting a baud rate
on a "bit-banged" output, so jiffies may not be worth it. I put it out
there for consideration, as it is easier to produce than a udelay that
has a guaranteed low absolute error.
Best Regards,
Bill Campbell
>
> Best regards,
>
> Wolfgang Denk
>
next prev parent reply other threads:[~2011-07-15 21:03 UTC|newest]
Thread overview: 110+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-28 11:40 [U-Boot] [PATCH v1 (WIP) 00/16] [Timer]API Rewrite Graeme Russ
2011-06-28 11:40 ` [U-Boot] [PATCH v1 (WIP) 01/16] [Timer]Fix misuse of ARM *timer_masked() functions outside arch/arm Graeme Russ
2011-06-28 12:35 ` Andreas Bießmann
2011-07-11 21:57 ` Wolfgang Denk
2011-07-14 17:01 ` Albert ARIBAUD
2011-07-14 19:50 ` Wolfgang Denk
2011-07-14 23:24 ` Graeme Russ
2011-07-15 6:31 ` Wolfgang Denk
2011-07-15 7:00 ` Graeme Russ
2011-07-15 12:16 ` [U-Boot] [PATCH v2 1/7]Timer: Fix " Graeme Russ
2011-07-16 8:40 ` Albert ARIBAUD
2011-07-16 8:59 ` Graeme Russ
2011-07-16 9:12 ` Albert ARIBAUD
2011-07-16 9:31 ` [U-Boot] [PATCH v3 " Graeme Russ
2011-07-16 9:58 ` Albert ARIBAUD
2011-06-28 11:40 ` [U-Boot] [PATCH v1 (WIP) 02/16] [Timer]Remove calls to set_timer outside arch/ Graeme Russ
2011-07-11 21:58 ` Wolfgang Denk
2011-07-15 12:17 ` [U-Boot] [PATCH v2 2/7]Timer: Remove " Graeme Russ
2011-07-16 9:33 ` [U-Boot] [PATCH v3 " Graeme Russ
2011-07-26 12:52 ` Wolfgang Denk
2011-06-28 11:40 ` [U-Boot] [PATCH v1 (WIP) 03/16] [Timer]Remove calls to set_timer in arch/ Graeme Russ
2011-07-11 21:59 ` Wolfgang Denk
2011-07-15 12:18 ` [U-Boot] [PATCH v2 3/7]Timer: Remove set_timer completely Graeme Russ
2011-07-16 9:34 ` [U-Boot] [PATCH v3 " Graeme Russ
2011-07-26 12:52 ` Wolfgang Denk
2011-06-28 11:40 ` [U-Boot] [PATCH v1 (WIP) 04/16] [Timer]Allow reset_timer() only for Nios2 Graeme Russ
2011-07-11 22:01 ` Wolfgang Denk
2011-07-15 12:18 ` [U-Boot] [PATCH v2 4/7]Timer: Allow reset_timer() only for systems with low resolution timers Graeme Russ
2011-07-16 9:35 ` [U-Boot] [PATCH v3 " Graeme Russ
2011-07-26 12:53 ` Wolfgang Denk
2011-06-28 11:40 ` [U-Boot] [PATCH v1 (WIP) 05/16] [Timer]Remove reset_timer() for non-Nios2 arches Graeme Russ
2011-07-11 22:02 ` Wolfgang Denk
2011-07-15 0:01 ` Graeme Russ
2011-07-15 12:19 ` [U-Boot] [PATCH v2 5/7]Timer: Remove " Graeme Russ
2011-07-16 9:36 ` [U-Boot] [PATCH v3 " Graeme Russ
2011-07-26 12:53 ` Wolfgang Denk
2011-08-19 21:24 ` Mike Frysinger
2011-08-19 22:55 ` Graeme Russ
2011-08-19 23:12 ` Mike Frysinger
2011-09-28 19:24 ` Wolfgang Denk
2011-06-28 11:40 ` [U-Boot] [PATCH v1 (WIP) 06/16] [Timer]Fix at91rm9200/spi.c timer usage Graeme Russ
2011-06-28 12:30 ` Andreas Bießmann
2011-07-15 12:20 ` [U-Boot] [PATCH v2 6/7]Timer: Fix " Graeme Russ
2011-07-16 9:37 ` [U-Boot] [PATCH v3 " Graeme Russ
2011-07-26 12:54 ` Wolfgang Denk
2011-06-28 11:41 ` [U-Boot] [PATCH v1 (WIP) 07/16] [Timer]Remove reset_timer_masked() Graeme Russ
2011-07-11 22:04 ` Wolfgang Denk
2011-07-15 12:21 ` [U-Boot] [PATCH v2 7/7]Timer: Remove reset_timer_masked() Graeme Russ
2011-07-16 9:38 ` [U-Boot] [PATCH v3 " Graeme Russ
2011-07-26 12:54 ` Wolfgang Denk
2011-06-28 11:41 ` [U-Boot] [PATCH v1 (WIP) 08/16] [Timer]Create new userland timer API Graeme Russ
2011-06-29 4:31 ` Simon Glass
2011-06-29 4:36 ` Graeme Russ
2011-06-29 4:48 ` Simon Glass
2011-07-11 22:05 ` Wolfgang Denk
2011-07-11 22:32 ` Graeme Russ
2011-06-28 11:41 ` [U-Boot] [PATCH v1 (WIP) 09/16] [Timer]Replace get_timer() usage in drivers/block/ Graeme Russ
2011-06-29 4:40 ` Simon Glass
2011-06-29 5:06 ` Reinhard Meyer
2011-06-29 5:19 ` Graeme Russ
2011-06-29 5:30 ` Simon Glass
2011-06-29 5:38 ` Graeme Russ
2011-06-28 11:41 ` [U-Boot] [PATCH v1 (WIP) 10/16] [Timer]Replace get_timer() usage in driver/mtd and driver/block Graeme Russ
2011-06-28 11:41 ` [U-Boot] [PATCH v1 (WIP) 11/16] [Timer]Remove reset_timer() completely Graeme Russ
2011-06-28 11:41 ` [U-Boot] [PATCH v1 (WIP) 12/16] [Timer]Replace get_timer() usage in drivers/ Graeme Russ
2011-06-28 12:36 ` Vitaly Kuzmichev
2011-06-28 23:03 ` Graeme Russ
2011-06-28 11:41 ` [U-Boot] [PATCH v1 (WIP) 13/16] [Timer]Replace get_timer() usage in net/ Graeme Russ
2011-06-28 11:41 ` [U-Boot] [PATCH v1 (WIP) 14/16] [Timer]Replace get_timer() usage in common/ Graeme Russ
2011-06-28 11:41 ` [U-Boot] [PATCH v1 (WIP) 15/16] [Timer]Replace get_timer() usage in board/ Graeme Russ
2011-06-28 11:41 ` [U-Boot] [PATCH v1 (WIP) 16/16] [Timer]Replace get_timer() usage in arch/ Graeme Russ
2011-06-29 4:45 ` Simon Glass
2011-06-29 4:51 ` Graeme Russ
2011-06-29 5:15 ` Mike Frysinger
2011-06-29 5:26 ` Mike Frysinger
2011-06-29 5:29 ` Graeme Russ
2011-06-29 4:54 ` [U-Boot] [PATCH v1 (WIP) 00/16] [Timer]API Rewrite Graeme Russ
2011-06-29 5:08 ` Mike Frysinger
2011-06-29 5:20 ` Graeme Russ
2011-07-08 0:25 ` Graeme Russ
2011-07-09 6:01 ` Albert ARIBAUD
2011-07-11 21:56 ` Wolfgang Denk
2011-07-11 22:49 ` Graeme Russ
2011-07-11 23:36 ` Graeme Russ
2011-07-12 2:17 ` Graeme Russ
2011-07-12 8:49 ` Wolfgang Denk
2011-07-12 10:36 ` Graeme Russ
2011-07-12 13:10 ` Wolfgang Denk
2011-07-12 15:23 ` Scott McNutt
2011-07-12 17:27 ` J. William Campbell
2011-07-13 0:29 ` Graeme Russ
2011-07-14 19:30 ` Wolfgang Denk
2011-07-17 1:51 ` Graeme Russ
2011-07-12 14:30 ` J. William Campbell
2011-07-12 16:08 ` Reinhard Meyer
2011-07-13 0:33 ` Graeme Russ
2011-07-13 1:20 ` J. William Campbell
2011-07-14 19:41 ` Wolfgang Denk
2011-07-14 23:52 ` J. William Campbell
2011-07-15 7:17 ` Wolfgang Denk
2011-07-15 18:08 ` J. William Campbell
2011-07-15 18:34 ` Wolfgang Denk
2011-07-15 21:03 ` J. William Campbell [this message]
2011-07-16 14:11 ` Graeme Russ
2011-07-15 12:15 ` [U-Boot] [PATCH v2 0/7]Timer: Simplify API Graeme Russ
2011-07-15 13:08 ` Graeme Russ
2011-07-16 8:36 ` Albert ARIBAUD
2011-07-16 9:01 ` Graeme Russ
2011-07-16 9:13 ` Albert ARIBAUD
2011-07-16 9:32 ` Wolfgang Denk
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=4E20AB3E.7030803@comcast.net \
--to=jwilliamcampbell@comcast.net \
--cc=u-boot@lists.denx.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