From: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] [PATCH] [resend] mips: Support to set CFG_HZ to 1000, consistent with other architectures
Date: Wed, 21 May 2008 12:53:01 +0900 [thread overview]
Message-ID: <48339C9D.5040800@necel.com> (raw)
In-Reply-To: <20080520185822.8B9C86545F@mcmullan-linux.hq.netapp.com>
Hi Jason,
I don't look closely yet, but find some comments below:
Jason McMullan wrote:
> ---
> include/configs/dbau1x00.h | 3 ++-
> include/configs/gth2.h | 3 ++-
> include/configs/incaip.h | 3 ++-
> include/configs/pb1x00.h | 3 ++-
> include/configs/purple.h | 3 ++-
> include/configs/qemu-mips.h | 3 ++-
> include/configs/tb0229.h | 3 ++-
Ok.
> diff --git a/lib_mips/time.c b/lib_mips/time.c
> index cd8dc72..4807f1a 100644
> --- a/lib_mips/time.c
> +++ b/lib_mips/time.c
> @@ -23,23 +23,57 @@
>
> #include <common.h>
>
> +/* CFG_MIPS_CLOCK is the number of ticks per second of the MIPS C0 Clock timer.
> + *
> + * For most implementations, this is the same as the CPU speed in HZ
> + * divided by 2. Some embedded MIPS implementations may use a /4
> + * or /1 divider, so see your CPU reference manual for specific details.
> + */
> +#ifndef CFG_MIPS_CLOCK
> +#error CFG_MIPS_CLOCK must be set in the board configuration file
> +#endif
>
> +static struct {
> + uint32_t lo;
> + uint32_t hi;
> +} mips_ticks; /* Last number of ticks seen */
See below.
> +/* Input is in CFG_HZ ticks */
> static inline void mips_compare_set(u32 v)
> {
> + v *= (CFG_MIPS_CLOCK / CFG_HZ);
> asm volatile ("mtc0 %0, $11" : : "r" (v));
> }
I tend to remove these mips_{count,compare}_{get,set} functions because
they can be (and should be) replaced {read,write}_32bit_ cp0_register,
IMO.
And I want to handle (CFG_MIPS_CLOCK/CFG_HZ) stuffs or something like
that at udelay() side.
> +/* Returns CFG_HZ ticks
> + *
> + * NOTE: This must be called at least once every
> + * few seconds to be reliable.
> + */
> static inline u32 mips_count_get(void)
> {
> u32 count;
>
> asm volatile ("mfc0 %0, $9" : "=r" (count) :);
> +
> + /* Handle 32-bit timer overflow */
> + if (count < mips_ticks.lo) {
> + mips_ticks.hi++;
> + }
> + mips_ticks.lo = count;
> + count =(mips_ticks.lo / (CFG_MIPS_CLOCK / CFG_HZ)) +
> + (mips_ticks.hi * (0x100000000ULL / (CFG_MIPS_CLOCK / CFG_HZ)));
> +
> return count;
> }
I disagree with having this structure. Basic strategy for MIPS COUNT/
COMPARE handling is, let them overflow (os should I say wrap-around) as
they are. All we need is the Delta, not the numbers of overflows.
> @@ -75,7 +109,7 @@ void udelay (unsigned long usec)
> ulong tmo;
> ulong start = get_timer(0);
>
> - tmo = usec * (CFG_HZ / 1000000);
> + tmo = usec * CFG_HZ / 1000;
> while ((ulong)((mips_count_get() - start)) < tmo)
> /*NOP*/;
> }
Again, what is needed is `the Delta' between CP0.COUNT(Previous) and
CP0.COUNT(Current). This can be always achieved by
delta = COUNT(Curr) - COUNT(Prev)
regardless of COUNT value. Even if `(u32)0x00010000 - (u32)0xFFFFFFFF',
it works.
I'll look around until this weekend. Sorry for inconvinience, and thank
you for working on this.
Shinya
next prev parent reply other threads:[~2008-05-21 3:53 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-20 16:24 [U-Boot-Users] [PATCH] [resend] mips: Support to set CFG_HZ to 1000, consistent with other architectures Jason McMullan
2008-05-21 3:53 ` Shinya Kuribayashi [this message]
2008-05-21 15:32 ` Scott Wood
2008-05-24 12:58 ` [U-Boot-Users] [PATCH 1/3][MIPS] lib_mips/time.c: Replace CP0 access functions with existing macros Shinya Kuribayashi
2008-05-24 12:59 ` [U-Boot-Users] [PATCH 2/3][MIPS] lib_mips/time.c: Fix udelay Shinya Kuribayashi
2008-05-24 13:02 ` [U-Boot-Users] [PATCH 3/3][MIPS] lib_mips/time.c: Fix improper use of CFG_HZ and timer routines Shinya Kuribayashi
2008-05-24 19:59 ` Wolfgang Denk
2008-05-25 2:04 ` Shinya Kuribayashi
2008-05-25 8:15 ` Wolfgang Denk
2008-05-25 13:45 ` Shinya Kuribayashi
2008-05-25 15:18 ` Wolfgang Denk
2008-05-31 6:12 ` Shinya Kuribayashi
2008-05-31 6:17 ` Shinya Kuribayashi
2008-05-31 14:40 ` [U-Boot-Users] [PATCH 3/3 v2][MIPS] lib_mips/time.c: Fix CP0 count register usage " Shinya Kuribayashi
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=48339C9D.5040800@necel.com \
--to=shinya.kuribayashi@necel.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.