06 Jun, 2017

1 commit


15 Jan, 2017

1 commit

  • Currently, mdelay() and udelay() are declared in include/common.h,
    while ndelay() in include/linux/compat.h. It would be nice to
    collect them into include/linux/delay.h like Linux.

    While we are here, fix the ndelay() implementation; I used the
    DIV_ROUND_UP() instead of (x)/1000 because it must wait *longer*
    than the given period of time.

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Simon Glass

    Masahiro Yamada
     

26 Feb, 2016

1 commit

  • In some cases the timer must be accessible before driver model is active.
    Examples include when using CONFIG_TRACE to trace U-Boot's execution before
    driver model is set up. Enable this option to use an early timer. These
    functions must be supported by your timer driver: timer_early_get_count()
    and timer_early_get_rate().

    Signed-off-by: Simon Glass

    Simon Glass
     

21 Jan, 2016

1 commit


01 Dec, 2015

1 commit

  • There are timers with a 64-bit counter value but current timer
    uclass driver assumes a 32-bit one. Modify timer_get_count()
    to ask timer driver to always return a 64-bit counter value,
    and provide an inline helper function timer_conv_64() to handle
    the 32-bit/64-bit conversion automatically.

    Signed-off-by: Bin Meng
    Acked-by: Simon Glass
    Signed-off-by: Simon Glass

    Bin Meng
     

23 Oct, 2015

1 commit


27 Oct, 2014

1 commit

  • Unfortunately 'unsigned long long' and 'uint64_t' are not necessarily
    compatible on 64-bit machines. Use the correct typedef instead of
    writing the supposed type out in full.

    Signed-off-by: Simon Glass

    Simon Glass
     

24 Oct, 2014

1 commit

  • CONFIG_SYS_HZ is always defined as 1000 in config_fallbacks.h
    (but some boards still have redundant definitions).

    This commit moves the definition and the document in README to
    Kconfig. Since lib/Kconfig can assure that CONFIG_SYS_HZ is 1000,
    the sanity check in lib/time.c should be removed.

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Marek Vasut

    Masahiro Yamada
     

22 Jul, 2014

1 commit

  • As I initially suspected overflow in time handling, I took a detailed
    look at lib/time.c. This adds comments about units being used, reduces
    amount of type casting being done, and makes __udelay() always wait at
    least one tick. (Current code could do no delaying at all for short
    delays).

    Signed-off-by: Pavel Machek

    Pavel Machek
     

25 Jan, 2014

1 commit

  • If timer_init() is made a weak stub function, then it allows us to
    remove several empty timer_init functions for those boards that
    already have a timer initialized when u-boot starts. Architectures
    that use the timer framework may also remove the need for timer.c.

    Signed-off-by: Darwin Rambo
    Reviewed-by: Tim Kryger

    Darwin Rambo
     

13 Dec, 2013

1 commit

  • Commit 8dfafdde88eb ("Introduce common timer functions") created a
    common definition of usec_to_tick() which had a couple problems:

    static unsigned long long usec_to_tick(unsigned long usec)
    {
    uint64_t tick = usec * get_tbclk();

    That likely overflows.

    usec *= get_tbclk();

    That was an attempt to fix it by performing the multiply after the
    promotion of usec to 64-bit, but was applied to the wrong variable,
    which was never used.

    This patch fixes these issues. A user-visible symptom of the problem was
    the e.g. "dhcp zImage" using an ASIX USB Ethernet dongle would print:

    Waiting for Ethernet connection... unable to connect.

    ... with no delay before "unable to connect". There are likely other
    symptoms.

    Signed-off-by: Stephen Warren
    Acked-by: Rob Herring

    Stephen Warren
     

11 Nov, 2013

1 commit

  • Commit 8dfafdde88eb3e71d5569846396ae67a91017232 introduced
    new gcc warnings on MIPS64:

    time.c: In function 'tick_to_time':
    time.c:59:2: warning: comparison of distinct pointer types lacks a cast [enabled by default]
    time.c:59:2: warning: passing argument 1 of '__div64_32' from incompatible pointer type [enabled by default]
    In file included from time.c:10:0:
    ./u-boot-mips/include/div64.h:22:17: note: expected 'uint64_t *' but argument is of type 'long long unsigned int *'
    time.c: In function 'usec_to_tick':
    time.c:76:2: warning: comparison of distinct pointer types lacks a cast [enabled by default]
    time.c:76:2: warning: passing argument 1 of '__div64_32' from incompatible pointer type [enabled by default]
    In file included from time.c:10:0:
    ./u-boot-mips/include/div64.h:22:17: note: expected 'uint64_t *' but argument is of type 'long long unsigned int *'

    Signed-off-by: Daniel Schwierzeck

    Daniel Schwierzeck
     

09 Nov, 2013

1 commit


05 Nov, 2013

2 commits

  • Many platforms duplicate pretty much the same timer code yet they all have
    a 32-bit freerunning counter register. Create a common implementation that
    minimally requires 2 or 3 defines to add timer support:

    CONFIG_SYS_TIMER_RATE - Clock rate of the timer counter
    CONFIG_SYS_TIMER_COUNTER - Address of 32-bit counter
    CONFIG_SYS_TIMER_COUNTS_DOWN - Define if counter counts down

    All functions are weak or ifdef'ed so they can still be overriden by any
    platform.

    Signed-off-by: Rob Herring

    Rob Herring
     
  • According to the README, CONFIG_SYS_HZ must be 1000 and most platforms
    follow that. In preparation to remove CONFIG_SYS_HZ from all these
    platforms, provide a common definition. The platforms which use a value
    other than 1000 will get build warning now. These configs are:

    include/configs/M5271EVB.h:#define CONFIG_SYS_HZ 1000000
    include/configs/balloon3.h:#define CONFIG_SYS_HZ 3250000 /* Timer @ 3250000 Hz */
    include/configs/idmr.h:#define CONFIG_SYS_HZ (50000000 / 64)
    include/configs/mini2440.h:#define CONFIG_SYS_HZ 1562500
    include/configs/mx1ads.h:#define CONFIG_SYS_HZ 3686400
    include/configs/omap3_zoom2.h:#define CONFIG_SYS_HZ ((V_SCLK) / (2 << CONFIG_SYS_PTV))
    include/configs/omap730p2.h:#define CONFIG_SYS_HZ ((CONFIG_SYS_CLK_FREQ)/(2 << CONFIG_SYS_PTV))
    include/configs/palmld.h:#define CONFIG_SYS_HZ 3250000 /* Timer @ 3250000 Hz */
    include/configs/palmtc.h:#define CONFIG_SYS_HZ 3686400 /* Timer @ 3686400 Hz */
    include/configs/rsk7203.h:#define CONFIG_SYS_HZ (CONFIG_SYS_CLK_FREQ / CMT_CLK_DIVIDER)
    include/configs/rsk7264.h:#define CONFIG_SYS_HZ (CONFIG_SYS_CLK_FREQ / CMT_CLK_DIVIDER)
    include/configs/rsk7269.h:#define CONFIG_SYS_HZ (CONFIG_SYS_CLK_FREQ / CMT_CLK_DIVIDER)
    include/configs/scb9328.h:#define CONFIG_SYS_HZ 3686400 /* incrementer freq: 3.6864 MHz */
    include/configs/versatile.h:#define CONFIG_SYS_HZ (1000000 / 256)
    include/configs/zipitz2.h:#define CONFIG_SYS_HZ 3250000 /* Timer @ 3250000 Hz */

    Signed-off-by: Rob Herring

    Rob Herring
     

24 Jul, 2013

1 commit


11 Apr, 2012

1 commit

  • The standalone example does not have get_timer() defined, so we cannot
    rely on it being available.

    Move the timer function into boootstage.c to avoid this problem.

    This corrects a build breakage for the standalone example on some boards.

    Signed-off-by: Simon Glass
    Acked-by: Matthias Fuchs

    Simon Glass
     

19 Mar, 2012

1 commit

  • Define timer_get_boot_us() which returns the number of microseconds
    since boot. If undefined then we use get_timer() * 1000.

    We can fit this in a 32-bit register which keeps everyone happy on
    the efficiency side. It will wrap around after about an hour. If we
    are still looking at it after an hour then we had better not be
    timing the boot.

    Signed-off-by: Simon Glass

    Simon Glass
     

22 Oct, 2011

1 commit


13 Apr, 2010

1 commit

  • Now that the other architecture-specific lib directories have been
    moved out of the top-level directory there's not much reason to have the
    '_generic' suffix on the common lib directory.

    Signed-off-by: Peter Tyser

    Peter Tyser