From mboxrd@z Thu Jan 1 00:00:00 1970 From: Scott Wood Date: Tue, 20 May 2008 10:24:04 -0500 Subject: [U-Boot-Users] [PATCH] Make sleep shell command is reliablefor all architectures In-Reply-To: <1211295950.3617.17.camel@mcmullan-linux.cifs.lab.netapp.com> References: <20080520142358.5B6CD247A5@gemini.denx.de> <1211295950.3617.17.camel@mcmullan-linux.cifs.lab.netapp.com> Message-ID: <4832ED14.702@freescale.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de McMullan, Jason wrote: > On Tue, 2008-05-20 at 16:23 +0200, Wolfgang Denk wrote: >> Well, even if this happens, it should not cause get_timer() to show >> such problems. get_timer() returns an "unsigned long" and is counting >> in milliseconds, so a wrap-around should take about 50 days. > > Yes, but get_timer() is not guaranteed to return 0 to MAX_ULONG, as > far as I can tell. > > On MIPS (even after my CFG_HZ patch), get_timer() will only return > 0 to 14316 on a 300MHZ machine, as the 32-bit MIPS tick timer that > forms the MIPS time base wraps to 0 after 14.316 seconds. > >> I tend to reject this patch because I think we should fix the cause >> of the problems rather than the symptoms - there are more areas in >> the code that rely on sane behaviour of the get_timer() functione. > > Well, then we've got a big problem on MIPS. This can be fixed by maintaining the upper bits of the timebase in software, as long we can guarantee that get_timer() is called at least once per wraparound. That is, remember the last value, and if the new value is less than the old value, increment the upper word. -Scott