From: Reinhard Meyer <u-boot@emk-elektronik.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] Timer implementations
Date: Tue, 26 Oct 2010 15:33:38 +0200 [thread overview]
Message-ID: <4CC6D8B2.1070408@emk-elektronik.de> (raw)
In-Reply-To: <20101026130541.C3F0B152451@gemini.denx.de>
Dear Wolfgang Denk,
>> Then the define CONFIG_SYS_HZ should not be in every <board>.h since that
>> suggests that a board developer has some freedom there...
>
> Agreed - there are historical reasons this has ever been changable at
> all.
>
>> and MOST IMPORTANT that some implementations of udelay() might
>> call reset_timer() and therefore break an outer timeout loop !!!
>
> Such implementations are inherently broken and need to be fixed.
Found such in arm926ejs/omap... But then, that timer is multiple-broken:
relocation broken (uses static data), returns 32 a bit value in get_ticks(),
returns CONFIG_SYS_HZ in get_tbclk() instead of the rate get_ticks()
increments...
PXA:
void udelay_masked (unsigned long usec)
{
unsigned long long tmp;
ulong tmo;
tmo = us_to_tick(usec);
tmp = get_ticks() + tmo; /* get current timestamp */
while (get_ticks() < tmp)
/* loop till event _OR FOREVER is tmp happens to be > 32 bit_ */
/*NOP*/;
}
unsigned long long get_ticks(void)
{
return readl(OSCR);
}
- not any better :( -- its the same code that AT91 had before I fixed it.
>
>> It is also open if reset_timer() does actually reset the hardware timer
>> (e.g. tbu/tbl at PPC) - which would be messing up any time difference
>> calculation using get_ticks() - or does emulate that by remembering
>> the hardware value and subtracting it later in every subsequent
>> get_timer() call?
>
> This is an implementation detail.
IF we require that get_ticks() and get_timer() shall not interfere with
each other and IF both are based on the same hardware timer only the
second method is available (same if the hardware timer is not easyly
resettable).
>> 2. get_ticks() and friends operate at a higher rate (tbu/tbl for PPC).
>> Since they are defined as having 64 bits they MUST not wrap at 32 bits,
>> i.e. if the hardware provides only 32 bits, the upper 32 bits must be
>> emulated by software.
>
> Right.
>
>> Otherwise we have to document that get_ticks() cannot be used to get
>> 64 bit time differences.
>
> No. Such an implementation is broken and needs fixing.
Original AT91 timer.c was like that, and I think other ARMs where this was
copied around should be looked at... I don't know when get_timer() became
64 bits, but it seems that some implementations just did change the return
type: uint64 get_timer(void) {return (uint64)timer_val_32;}
>
>> If you really closely look at the various implementations of those
>> timers, you will easyly see the wide variations implemented there.
>
> Yes, I am aware of this :-(
I will start beautifying the AT91 timer - its already quite there,
except for a possible timer wrap problem in udelay() after a few billion
years :)
Best Regards,
Reinhard
next prev parent reply other threads:[~2010-10-26 13:33 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-26 1:02 [U-Boot] [PATCH v2] mmc: omap: timeout counter fix Nishanth Menon
2010-10-26 1:14 ` Reinhard Meyer
2010-10-26 1:18 ` Nishanth Menon
2010-10-26 5:29 ` Wolfgang Denk
2010-10-26 5:28 ` Wolfgang Denk
2010-10-26 5:34 ` Ghorai, Sukumar
2010-10-26 13:58 ` Nishanth Menon
2010-10-26 5:43 ` Reinhard Meyer
2010-10-26 5:48 ` Wolfgang Denk
2010-10-26 6:01 ` Reinhard Meyer
2010-10-26 7:00 ` [U-Boot] Timer implementations (was: Re: [PATCH v2] mmc: omap: timeout counter fix) Reinhard Meyer
2010-10-26 7:41 ` Wolfgang Denk
2010-10-26 7:57 ` [U-Boot] Timer implementations Reinhard Meyer
2010-10-26 9:33 ` Wolfgang Denk
2010-10-26 10:18 ` Reinhard Meyer
2010-10-26 13:05 ` Wolfgang Denk
2010-10-26 13:33 ` Reinhard Meyer [this message]
2010-10-26 21:19 ` J. William Campbell
2010-10-28 6:02 ` Reinhard Meyer
2010-11-01 13:47 ` J. William Campbell
2010-11-01 20:01 ` Reinhard Meyer
2010-11-01 20:15 ` Wolfgang Denk
2010-10-26 15:11 ` Nishanth Menon
2010-10-26 15:17 ` Wolfgang Denk
2010-10-26 15:22 ` Nishanth Menon
2010-10-26 16:26 ` Wolfgang Denk
2010-10-26 18:36 ` Reinhard Meyer
2010-10-26 7:03 ` [U-Boot] [PATCH v2] mmc: omap: timeout counter fix J. William Campbell
2010-10-26 7:36 ` Wolfgang Denk
2010-10-26 7:48 ` Reinhard Meyer
2010-10-26 4:36 ` Wolfgang Denk
2010-10-26 5:26 ` Ghorai, Sukumar
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=4CC6D8B2.1070408@emk-elektronik.de \
--to=u-boot@emk-elektronik.de \
--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