Subject: mdelay() from board_setup() [is default value for loops_per_jiffy way off?]

From: Clem Taylor <[email-masked]>
Date: Wed, 20 Apr 2005 13:50:10 -0400

Hi,

I'm working on a linux port for a custom Au1550 based board. Inside of
board_setup() I need to wait for some hardware to power up. So, I
called mdelay(), but it seems to wait for far too short a time. It
seems that loops_per_jiffy still has the default value (4096) in
board_setup(), the computed value is more like 245248. So, what is the
proper way to spin wait this early in the startup process? Also, isn't
the default value for loops_per_jiffy off by quite a bit? I'm running
the Au1550 at 492MHz, so that would make the default value good for a
~8MHz processor?

                               --Clem

---

From: Pete Popov <[email-masked]>
Date: Wed, 20 Apr 2005 10:58:58 -0700

> the Au1550 at 492MHz, so that would make the default value good for a

It's too early in board_setup() to use the standard delay routines. You can't 
use those until after calibrate_delay() runs. To do precise delays in 
board_setup, you'll have to do something yourself where you read the cp0 timer 
periodically and wait a certain amount of time.

Pete

---

From: Ralf Baechle <[email-masked]>
Date: Wed, 20 Apr 2005 19:07:20 +0100

On Wed, Apr 20, 2005 at 10:58:58AM -0700, Pete Popov wrote:

> It's too early in board_setup() to use the standard delay routines. You 
> can't use those until after calibrate_delay() runs. To do precise delays in 
> board_setup, you'll have to do something yourself where you read the cp0 
> timer periodically and wait a certain amount of time.

And make sure not to be trapped by wrap-arounds of that counter.  Also it
doesn't count the same speed on all processors ...

  Ralf