Skip to content
Permalink
Zhou-Yanjie/Ad…
Switch branches/tags

Commits on Dec 17, 2021

  1. clocksource: Ingenic: Add SMP/SMT support for sysost driver.

    1.The OST in Ingenic XBurst®2 SoCs has a global timer and
      up to 16 event timers, add support for the event timers.
    2.Add compatible strings for the X1600 SoC, the X1830 SoC,
      the X2000 SoC, and the X2500 SoC.
    
    Signed-off-by: 周琰杰 (Zhou Yanjie) <zhouyanjie@wanyeetech.com>
    XBurst authored and intel-lab-lkp committed Dec 17, 2021
  2. dt-bindings: timer: Add bindings for new Ingenic SoCs.

    Add the OST bindings for the X1600 SoC, the X1830 SoC,
    the X2000 SoC and the X2500 SoC from Ingenic.
    
    Signed-off-by: 周琰杰 (Zhou Yanjie) <zhouyanjie@wanyeetech.com>
    XBurst authored and intel-lab-lkp committed Dec 17, 2021
  3. dt-bindings: timer: Remove unreasonable binding.

    On the hardware of X2000 SoC, the OST has been split into two parts,
    two 32bit timers for clockevent and one 64bit timer for clocksource
    (with different addresses), so it not appropriate to use only one
    "ingenic,x2000-ost", just remove it, "ingenic,x2000-ost32" and
    "ingenic,x2000-ost64" will be introduced in a later commit.
    
    Signed-off-by: 周琰杰 (Zhou Yanjie) <zhouyanjie@wanyeetech.com>
    XBurst authored and intel-lab-lkp committed Dec 17, 2021

Commits on Oct 24, 2021

  1. Merge tag 'timers-v5.16-rc1' into timers/core

    Pull timers update for v5.16 from Daniel Lezcano:
    
    - Fix redefined macro in the arc timer ()
    
    - Big cleanup for ARM arch timer clocksource in order to set the scene
      for ARMv8.6 and provide support for higher frequencies with longer
      roll up (Marc Zyngier)
    
    - Make arch dependant the Exynos MCT and Samsung PWM timers (Krzysztof
      Kozlowski)
    
    - Select the TIMER_OF option for the timer TI DM (Kees Cook)
    
    Link: https://lore.kernel.org/r/65693aaf-ab94-c9bb-a97b-a2bb77033a54@linaro.org
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Borislav Petkov committed Oct 24, 2021

Commits on Oct 21, 2021

  1. clocksource/drivers/timer-ti-dm: Select TIMER_OF

    When building OMAP_DM_TIMER without TIMER_OF, there are orphan sections
    due to the use of TIMER_OF_DELCARE() without CONFIG_TIMER_OF. Select
    CONFIG_TIMER_OF when enaling OMAP_DM_TIMER:
    
    arm-linux-gnueabi-ld: warning: orphan section `__timer_of_table' from `drivers/clocksource/timer-ti-dm-systimer.o' being placed in section `__timer_of_table'
    
    Reported-by: kernel test robot <lkp@intel.com>
    Link: https://lore.kernel.org/lkml/202108282255.tkdt4ani-lkp@intel.com/
    Cc: Tony Lindgren <tony@atomide.com>
    Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
    Cc: Keerthy <j-keerthy@ti.com>
    Cc: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
    Cc: Ladislav Michl <ladis@linux-mips.org>
    Cc: Grygorii Strashko <grygorii.strashko@ti.com>
    Cc: linux-omap@vger.kernel.org
    Fixes: 52762fb ("clocksource/drivers/timer-ti-dm: Add clockevent and clocksource support")
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Acked-by: Tony Lindgren <tony@atomide.com>
    Link: https://lore.kernel.org/r/20210828175747.3777891-1-keescook@chromium.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    kees authored and dlezcano committed Oct 21, 2021
  2. clocksource/drivers/exynosy: Depend on sub-architecture for Exynos MC…

    …T and Samsung PWM
    
    The Exynos MCT and Samsung PWM Timer clocksource drivers are not usable
    on anything else than Samsung Exynos, S3C or S5P SoC platforms.  These
    are integral parts of a SoC.  Even though the drivers are not user
    selectable, still document the hardware architecture explicitly with
    depends on ARCH_EXYNOS and others.  This also serves a purpose of
    documenting use-case, if someone ever wonders whether to select the
    driver for his platform.  No functional change, because drivers are
    already selected by the platform described in depends. We follow similar
    approach also for other SoC-specific drivers.
    
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
    Link: https://lore.kernel.org/r/20211021063500.39314-1-krzysztof.kozlowski@canonical.com
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    krzk authored and dlezcano committed Oct 21, 2021

Commits on Oct 19, 2021

  1. Merge branch 'timers/drivers/armv8.6_arch_timer' into timers/drivers/…

    …next
    
    The branch is a stable branch shared with ARM maintainers for the
    first 13th patches of the series:
    
    It is based on v5.14-rc3.
    
    As stated by the changelog:
    
    " [... ] enabling ARMv8.6 support for timer subsystem, and was prompted by a
    discussion with Oliver around the fact that an ARMv8.6 implementation
    must have a 1GHz counter, which leads to a number of things to break
    in the timer code:
    
    - the counter rollover can come pretty quickly as we only advertise a
      56bit counter,
    - the maximum timer delta can be remarkably small, as we use the
      countdown interface which is limited to 32bit...
    
    Thankfully, there is a way out: we can compute the minimal width of
    the counter based on the guarantees that the architecture gives us,
    and we can use the 64bit comparator interface instead of the countdown
    to program the timer.
    
    Finally, we start making use of the ARMv8.6 ECV features by switching
    accesses to the counters to a self-synchronising register, removing
    the need for an ISB. Hopefully, implementations will *not* just stick
    an invisible ISB there...
    
    A side effect of the switch to CVAL is that XGene-1 breaks. I have
    added a workaround to keep it alive.
    
    I have added Oliver's original patch[0] to the series and tweaked a
    couple of things. Blame me if I broke anything.
    
    The whole things has been tested on Juno (sysreg + MMIO timers),
    XGene-1 (broken sysreg timers), FVP (FEAT_ECV, CNT*CTSS_EL0).
    "
    
    Link: https://lore.kernel.org/r/20211017124225.3018098-1-maz@kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    dlezcano committed Oct 19, 2021

Commits on Oct 18, 2021

  1. clocksource/drivers/arch_arm_timer: Move workaround synchronisation a…

    …round
    
    We currently handle synchronisation when workarounds are enabled
    by having an ISB in the __arch_counter_get_cnt?ct_stable() helpers.
    
    While this works, this prevents us from relaxing this synchronisation.
    
    Instead, move it closer to the point where the synchronisation is
    actually needed. Further patches will subsequently relax this.
    
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20211017124225.3018098-14-maz@kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Marc Zyngier authored and dlezcano committed Oct 18, 2021
  2. clocksource/drivers/arm_arch_timer: Fix masking for high freq counters

    Unfortunately, the architecture provides no means to determine the bit
    width of the system counter. However, we do know the following from the
    specification:
    
     - the system counter is at least 56 bits wide
     - Roll-over time of not less than 40 years
    
    To date, the arch timer driver has depended on the first property,
    assuming any system counter to be 56 bits wide and masking off the rest.
    However, combining a narrow clocksource mask with a high frequency
    counter could result in prematurely wrapping the system counter by a
    significant margin. For example, a 56 bit wide, 1GHz system counter
    would wrap in a mere 2.28 years!
    
    This is a problem for two reasons: v8.6+ implementations are required to
    provide a 64 bit, 1GHz system counter. Furthermore, before v8.6,
    implementers may select a counter frequency of their choosing.
    
    Fix the issue by deriving a valid clock mask based on the second
    property from above. Set the floor at 56 bits, since we know no system
    counter is narrower than that.
    
    [maz: fixed width computation not to lose the last bit, added
          max delta generation for the timer]
    
    Suggested-by: Marc Zyngier <maz@kernel.org>
    Signed-off-by: Oliver Upton <oupton@google.com>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20210807191428.3488948-1-oupton@google.com
    Link: https://lore.kernel.org/r/20211017124225.3018098-13-maz@kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    oupton authored and dlezcano committed Oct 18, 2021

Commits on Oct 17, 2021

  1. clocksource/drivers/arm_arch_timer: Drop unnecessary ISB on CVAL prog…

    …ramming
    
    Switching from TVAL to CVAL has a small drawback: we need an ISB
    before reading the counter. We cannot get rid of it, but we can
    instead remove the one that comes just after writing to CVAL.
    
    This reduces the number of ISBs from 3 to 2 when programming
    the timer.
    
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20211017124225.3018098-12-maz@kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Marc Zyngier authored and dlezcano committed Oct 17, 2021
  2. clocksource/drivers/arm_arch_timer: Remove any trace of the TVAL prog…

    …ramming interface
    
    TVAL usage is now long gone, get rid of the leftovers.
    
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20211017124225.3018098-11-maz@kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Marc Zyngier authored and dlezcano committed Oct 17, 2021
  3. clocksource/drivers/arm_arch_timer: Work around broken CVAL implement…

    …ations
    
    The Applied Micro XGene-1 SoC has a busted implementation of the
    CVAL register: it looks like it is based on TVAL instead of the
    other way around. The net effect of this implementation blunder
    is that the maximum deadline you can program in the timer is
    32bit wide.
    
    Use a MIDR check to notice the broken CPU, and reduce the width
    of the timer to 32bit.
    
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20211017124225.3018098-10-maz@kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Marc Zyngier authored and dlezcano committed Oct 17, 2021
  4. clocksource/drivers/arm_arch_timer: Advertise 56bit timer to the core…

    … code
    
    Proudly tell the code code that we have a timer able to handle
    56 bits deltas.
    
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20211017124225.3018098-9-maz@kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Marc Zyngier authored and dlezcano committed Oct 17, 2021
  5. clocksource/drivers/arm_arch_timer: Move MMIO timer programming over …

    …to CVAL
    
    Similarily to the sysreg-based timer, move the MMIO over to using
    the CVAL registers instead of TVAL. Note that there is no warranty
    that the 64bit MMIO access will be atomic, but the timer is always
    disabled at the point where we program CVAL.
    
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20211017124225.3018098-8-maz@kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Marc Zyngier authored and dlezcano committed Oct 17, 2021
  6. clocksource/drivers/arm_arch_timer: Fix MMIO base address vs callback…

    … ordering issue
    
    The MMIO timer base address gets published after we have registered
    the callbacks and the interrupt handler, which is... a bit dangerous.
    
    Fix this by moving the base address publication to the point where
    we register the timer, and expose a pointer to the timer structure
    itself rather than a naked value.
    
    Reviewed-by: Oliver Upton <oupton@google.com>
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20211017124225.3018098-7-maz@kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Marc Zyngier authored and dlezcano committed Oct 17, 2021
  7. clocksource/drivers/arm_arch_timer: Move drop _tval from erratum func…

    …tion names
    
    The '_tval' name in the erratum handling function names doesn't
    make much sense anymore (and they were using CVAL the first place).
    
    Drop the _tval tag.
    
    Reviewed-by: Oliver Upton <oupton@google.com>
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Tested-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20211017124225.3018098-6-maz@kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Marc Zyngier authored and dlezcano committed Oct 17, 2021
  8. clocksource/drivers/arm_arch_timer: Move system register timer progra…

    …mming over to CVAL
    
    In order to cope better with high frequency counters, move the
    programming of the timers from the countdown timer (TVAL) over
    to the comparator (CVAL).
    
    The programming model is slightly different, as we now need to
    read the current counter value to have an absolute deadline
    instead of a relative one.
    
    There is a small overhead to this change, which we will address
    in the following patches.
    
    Reviewed-by: Oliver Upton <oupton@google.com>
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Tested-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20211017124225.3018098-5-maz@kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Marc Zyngier authored and dlezcano committed Oct 17, 2021
  9. clocksource/drivers/arm_arch_timer: Extend write side of timer regist…

    …er accessors to u64
    
    The various accessors for the timer sysreg and MMIO registers are
    currently hardwired to 32bit. However, we are about to introduce
    the use of the CVAL registers, which require a 64bit access.
    
    Upgrade the write side of the accessors to take a 64bit value
    (the read side is left untouched as we don't plan to ever read
    back any of these registers).
    
    No functional change expected.
    
    Reviewed-by: Oliver Upton <oupton@google.com>
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Tested-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20211017124225.3018098-4-maz@kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Marc Zyngier authored and dlezcano committed Oct 17, 2021
  10. clocksource/drivers/arm_arch_timer: Drop CNT*_TVAL read accessors

    The arch timer driver never reads the various TVAL registers, only
    writes to them. It is thus pointless to provide accessors
    for them and to implement errata workarounds.
    
    Drop these read-side accessors, and add a couple of BUG() statements
    for the time being. These statements will be removed further down
    the line.
    
    Reviewed-by: Oliver Upton <oupton@google.com>
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Tested-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20211017124225.3018098-3-maz@kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Marc Zyngier authored and dlezcano committed Oct 17, 2021
  11. clocksource/arm_arch_timer: Add build-time guards for unhandled regis…

    …ter accesses
    
    As we are about to change the registers that are used by the driver,
    start by adding build-time checks to ensure that we always handle
    all registers and access modes.
    
    Suggested-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20211017124225.3018098-2-maz@kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Marc Zyngier authored and dlezcano committed Oct 17, 2021

Commits on Oct 16, 2021

  1. clocksource/drivers/arc_timer: Eliminate redefined macro error

    In drivers/clocksource/, 3 drivers use "TIMER_CTRL_IE" with 3 different
    values.  Two of them (mps2-timer.c and timer-sp804.c/timer-sp.h) are
    localized and left unmodifed.
    
    One of them uses a shared header file (<soc/arc/timers.h>), which is
    what is causing the "redefined" warnings, so change the macro name in
    that driver only. Also change the TIMER_CTRL_NH macro name.
    Both macro names are prefixed with "ARC_" to reduce the likelihood
    of future name collisions.
    
    In file included from ../drivers/clocksource/timer-sp804.c:24:
    ../drivers/clocksource/timer-sp.h:25: error: "TIMER_CTRL_IE" redefined [-Werror]
       25 | #define TIMER_CTRL_IE           (1 << 5)        /*   VR */
    ../include/soc/arc/timers.h:20: note: this is the location of the previous definition
       20 | #define TIMER_CTRL_IE           (1 << 0) /* Interrupt when Count reaches limit */
    
    Fixes: b26c2e3 ("ARC: breakout timer include code into separate header")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Cc: Vineet Gupta <vgupta@kernel.org>
    Cc: linux-snps-arc@lists.infradead.org
    Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Shahab Vahedi <Shahab.Vahedi@synopsys.com>
    Acked-by: Vineet Gupta <vgupta@kernel.org>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/20210924020825.20317-1-rdunlap@infradead.org
    rddunlap authored and dlezcano committed Oct 16, 2021

Commits on Aug 28, 2021

  1. clocksource: Make clocksource watchdog test safe for slow-HZ systems

    The clocksource watchdog test sets a local JIFFIES_SHIFT macro and assumes
    that HZ is >= 100. For smaller HZ values this shift value is too large and
    causes undefined behaviour.
    
    Move the HZ-based definitions of JIFFIES_SHIFT from kernel/time/jiffies.c
    to kernel/time/tick-internal.h so the clocksource watchdog test can utilize
    them, which makes it work correctly with all HZ values.
    
    [ tglx: Resolved conflicts and massaged changelog ]
    
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/lkml/20210812000133.GA402890@paulmck-ThinkPad-P17-Gen-1/
    paulmckrcu authored and Thomas Gleixner committed Aug 28, 2021

Commits on Aug 26, 2021

  1. Merge tag 'timers-v5.15' of https://git.linaro.org/people/daniel.lezc…

    …ano/linux into timers/core
    
    Pull timer driver updates from Daniel Lezcano:
    
     - Prioritize the ARM architected timer on Exynos platform when the
       architecture is ARM64 (Will Deacon)
    
     - Mark the Exynos timer as a per CPU timer (Will Deacon)
    
     - DT conversion to yaml for the rockchip platform (Ezequiel Garcia)
    
     - Fix IRQ setup if there are two channels on the sh_cmt timer (Phong
       Hoang)
    
     - Use bitfield helper macros in the Ingenic timer (Zhou Yanjie)
    
     - Clear any pending interrupt to prevent an abort of the suspend on
       the Mediatek platform (Fengquan Chen)
    
     - Add DT bindings for new Ingenic SoCs (Zhou Yanjie)
    
    Link: https://lore.kernel.org/r/c14ad27a-b1c6-6043-0f5e-71dd984bb4ba@linaro.org
    Thomas Gleixner committed Aug 26, 2021

Commits on Aug 21, 2021

  1. dt-bindings: timer: Add ABIs for new Ingenic SoCs

    1.Add OST_CLK_EVENT_TIMER for new XBurst®1 SoCs.
    2.Add OST_CLK_EVENT_TIMER0 to OST_CLK_EVENT_TIMER15 for new XBurst®2 SoCs.
    
    Signed-off-by: 周琰杰 (Zhou Yanjie) <zhouyanjie@wanyeetech.com>
    Acked-by: Rob Herring <robh@kernel.org>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/1626370605-120775-1-git-send-email-zhouyanjie@wanyeetech.com
    XBurst authored and dlezcano committed Aug 21, 2021

Commits on Aug 14, 2021

  1. clocksource/drivers/fttmr010: Pass around less pointers

    Just pass bool flags from the different initcalls and use the
    flags to set the right pointers. This results in less pointers
    passed around in init.
    
    Cc: Cédric Le Goater <clg@kaod.org>
    Cc: Joel Stanley <joel@jms.id.au>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/20210724224424.2085404-1-linus.walleij@linaro.org
    linusw authored and dlezcano committed Aug 14, 2021
  2. clocksource/drivers/mediatek: Optimize systimer irq clear flow on shu…

    …tdown
    
    mtk_syst_clkevt_shutdown is called after irq disabled in suspend flow,
    clear any pending systimer irq when shutdown to avoid suspend aborted
    due to timer irq pending
    
    Also as for systimer in mediatek socs, there must be firstly enable
    timer before clear systimer irq
    
    Fixes: e3af677("clocksource/drivers/timer-mediatek: Add support for system timer")
    Signed-off-by: Fengquan Chen <fengquan.chen@mediatek.com>
    Tested-by: Hsin-Yi Wang <hsinyi@chromium.org>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/1617960162-1988-2-git-send-email-Fengquan.Chen@mediatek.com
    mtk23002 authored and dlezcano committed Aug 14, 2021
  3. clocksource/drivers/ingenic: Use bitfield macro helpers

    Use "FIELD_GET()" and "FIELD_PREP()" to simplify the code.
    
    [dlezcano] : Changed title
    
    Signed-off-by: 周琰杰 (Zhou Yanjie) <zhouyanjie@wanyeetech.com>
    Reviewed-by: Paul Cercueil <paul@crapouillou.net>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/1627638188-116163-1-git-send-email-zhouyanjie@wanyeetech.com
    XBurst authored and dlezcano committed Aug 14, 2021

Commits on Aug 13, 2021

  1. clocksource/drivers/sh_cmt: Fix wrong setting if don't request IRQ fo…

    …r clock source channel
    
    If CMT instance has at least two channels, one channel will be used
    as a clock source and another one used as a clock event device.
    In that case, IRQ is not requested for clock source channel so
    sh_cmt_clock_event_program_verify() might work incorrectly.
    Besides, when a channel is only used for clock source, don't need to
    re-set the next match_value since it should be maximum timeout as
    it still is.
    
    On the other hand, due to no IRQ, total_cycles is not counted up
    when reaches compare match time (timer counter resets to zero),
    so sh_cmt_clocksource_read() returns unexpected value.
    Therefore, use 64-bit clocksoure's mask for 32-bit or 16-bit variants
    will also lead to wrong delta calculation. Hence, this mask should
    correspond to timer counter width, and above function just returns
    the raw value of timer counter register.
    
    Fixes: bfa76bb ("clocksource: sh_cmt: Request IRQ for clock event device only")
    Fixes: 37e7742 ("clocksource/drivers/sh_cmt: Fix clocksource width for 32-bit machines")
    Signed-off-by: Phong Hoang <phong.hoang.wz@renesas.com>
    Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/20210422123443.73334-1-niklas.soderlund+renesas@ragnatech.se
    h2phong authored and dlezcano committed Aug 13, 2021
  2. dt-bindings: timer: convert rockchip,rk-timer.txt to YAML

    Convert Rockchip Timer dt-bindings to YAML.
    
    Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/20210506111136.3941-4-ezequiel@collabora.com
    ezequielgarcia authored and dlezcano committed Aug 13, 2021
  3. clocksource/drivers/exynos_mct: Mark MCT device as CLOCK_EVT_FEAT_PERCPU

    The "mct_tick" is a per-cpu clockevents device. Set the
    CLOCK_EVT_FEAT_PERCPU feature to prevent e.g. mct_tick0 being unsafely
    designated as the global broadcast timer and instead treat the device as
    a per-cpu wakeup timer.
    
    Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
    Signed-off-by: Will Deacon <will@kernel.org>
    Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
    Reviewed-by: Chanwoo Choi <cw00.choi@samsung.com>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/20210608154341.10794-3-will@kernel.org
    willdeacon authored and dlezcano committed Aug 13, 2021
  4. clocksource/drivers/exynos_mct: Prioritise Arm arch timer on arm64

    All arm64 CPUs feature an architected timer, which offers a relatively
    low-latency interface to a per-cpu clocksource and timer. For the most
    part, using this interface is a no-brainer, with the exception of SoCs
    where it cannot be used to wake up from deep idle state (i.e.
    CLOCK_EVT_FEAT_C3STOP is set).
    
    On the contrary, the Exynos MCT is extremely slow to access yet can be
    used as a wakeup source. In preparation for using the Exynos MCT as a
    potential wakeup timer for the Arm architected timer, reduce its ratings
    so that the architected timer is preferred.
    
    This effectively reverts the decision made in 6282edb
    ("clocksource/drivers/exynos_mct: Increase priority over ARM arch timer")
    for arm64, as the reasoning for the original change was to work around
    a 32-bit SoC design.
    
    Cc: Marek Szyprowski <m.szyprowski@samsung.com>
    Cc: Krzysztof Kozlowski <krzk@kernel.org>
    Cc: Chanwoo Choi <cw00.choi@samsung.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Will Deacon <will@kernel.org>
    Tested-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> # exynos-5422
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/20210608154341.10794-2-will@kernel.org
    willdeacon authored and dlezcano committed Aug 13, 2021

Commits on Aug 12, 2021

  1. hrtimer: Unbreak hrtimer_force_reprogram()

    Since the recent consoliation of reprogramming functions,
    hrtimer_force_reprogram() is affected by a check whether the new expiry
    time is past the current expiry time.
    
    This breaks the NOHZ logic as that relies on the fact that the tick hrtimer
    is moved into the future. That means cpu_base->expires_next becomes stale
    and subsequent reprogramming attempts fail as well until the situation is
    cleaned up by an hrtimer interrupts.
    
    For some yet unknown reason this leads to a complete stall, so for now
    partially revert the offending commit to a known working state. The root
    cause for the stall is still investigated and will be fixed in a subsequent
    commit.
    
    Fixes: b14bca9 ("hrtimer: Consolidate reprogramming code")
    Reported-by: Mike Galbraith <efault@gmx.de>
    Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Tested-by: Mike Galbraith <efault@gmx.de>
    Link: https://lore.kernel.org/r/8735recskh.ffs@tglx
    Thomas Gleixner committed Aug 12, 2021
  2. hrtimer: Use raw_cpu_ptr() in clock_was_set()

    clock_was_set() can be invoked from preemptible context. Use raw_cpu_ptr()
    to check whether high resolution mode is active or not. It does not matter
    whether the task migrates after acquiring the pointer.
    
    Fixes: e71a415 ("hrtimer: Force clock_was_set() handling for the HIGHRES=n, NOHZ=y case")
    Reported-by: Mike Galbraith <efault@gmx.de>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/r/875ywacsmb.ffs@tglx
    Thomas Gleixner committed Aug 12, 2021

Commits on Aug 10, 2021

  1. hrtimer: Avoid more SMP function calls in clock_was_set()

    By unconditionally updating the offsets there are more indicators
    whether the SMP function calls on clock_was_set() can be avoided:
    
      - When the offset update already happened on the remote CPU then the
        remote update attempt will yield the same seqeuence number and no
        IPI is required.
    
      - When the remote CPU is currently handling hrtimer_interrupt(). In
        that case the remote CPU will reevaluate the timer bases before
        reprogramming anyway, so nothing to do.
    
      - After updating it can be checked whether the first expiring timer in
        the affected clock bases moves before the first expiring (softirq)
        timer of the CPU. If that's not the case then sending the IPI is not
        required.
    
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/r/20210713135158.887322464@linutronix.de
    Thomas Gleixner committed Aug 10, 2021
  2. hrtimer: Avoid unnecessary SMP function calls in clock_was_set()

    Setting of clocks triggers an unconditional SMP function call on all online
    CPUs to reprogram the clock event device.
    
    However, only some clocks have their offsets updated and therefore
    potentially require a reprogram. That's CLOCK_REALTIME and CLOCK_TAI and in
    the case of resume (delayed sleep time injection) also CLOCK_BOOTTIME.
    
    Instead of sending an IPI unconditionally, check each per CPU hrtimer base
    whether it has active timers in the affected clock bases which are
    indicated by the caller in the @Bases argument of clock_was_set().
    
    If that's not the case, skip the IPI and update the offsets remotely which
    ensures that any subsequently armed timers on the affected clocks are
    evaluated with the correct offsets.
    
    [ tglx: Adopted to the new bases argument, removed the softirq_active
      	check, added comment, fixed up stale comment ]
    
    Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/r/20210713135158.787536542@linutronix.de
    matosatti authored and Thomas Gleixner committed Aug 10, 2021
Older