Commit 4fbbed78 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'timers-core-2024-01-21' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull timer updates from Thomas Gleixner:
 "Updates for time and clocksources:

   - A fix for the idle and iowait time accounting vs CPU hotplug.

     The time is reset on CPU hotplug which makes the accumulated
     systemwide time jump backwards.

   - Assorted fixes and improvements for clocksource/event drivers"

* tag 'timers-core-2024-01-21' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  tick-sched: Fix idle and iowait sleeptime accounting vs CPU hotplug
  clocksource/drivers/ep93xx: Fix error handling during probe
  clocksource/drivers/cadence-ttc: Fix some kernel-doc warnings
  clocksource/drivers/timer-ti-dm: Fix make W=n kerneldoc warnings
  clocksource/timer-riscv: Add riscv_clock_shutdown callback
  dt-bindings: timer: Add StarFive JH8100 clint
  dt-bindings: timer: thead,c900-aclint-mtimer: separate mtime and mtimecmp regs
parents 7b297a5c 71fee48f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ properties:
              - sifive,fu540-c000-clint # SiFive FU540
              - starfive,jh7100-clint   # StarFive JH7100
              - starfive,jh7110-clint   # StarFive JH7110
              - starfive,jh8100-clint   # StarFive JH8100
          - const: sifive,clint0        # SiFive CLINT v0 IP block
      - items:
          - enum:
+8 −1
Original line number Diff line number Diff line
@@ -17,7 +17,12 @@ properties:
      - const: thead,c900-aclint-mtimer

  reg:
    maxItems: 1
    items:
      - description: MTIMECMP Registers

  reg-names:
    items:
      - const: mtimecmp

  interrupts-extended:
    minItems: 1
@@ -28,6 +33,7 @@ additionalProperties: false
required:
  - compatible
  - reg
  - reg-names
  - interrupts-extended

examples:
@@ -39,5 +45,6 @@ examples:
                            <&cpu3intc 7>,
                            <&cpu4intc 7>;
      reg = <0xac000000 0x00010000>;
      reg-names = "mtimecmp";
    };
...
+16 −6
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@
 * @base_addr:	Base address of timer
 * @freq:	Timer input clock frequency
 * @clk:	Associated clock source
 * @clk_rate_change_nb	Notifier block for clock rate changes
 * @clk_rate_change_nb:	Notifier block for clock rate changes
 */
struct ttc_timer {
	void __iomem *base_addr;
@@ -134,7 +134,7 @@ static void ttc_set_interval(struct ttc_timer *timer,
 * @irq:	IRQ number of the Timer
 * @dev_id:	void pointer to the ttc_timer instance
 *
 * returns: Always IRQ_HANDLED - success
 * Returns: Always IRQ_HANDLED - success
 **/
static irqreturn_t ttc_clock_event_interrupt(int irq, void *dev_id)
{
@@ -151,8 +151,9 @@ static irqreturn_t ttc_clock_event_interrupt(int irq, void *dev_id)

/**
 * __ttc_clocksource_read - Reads the timer counter register
 * @cs: &clocksource to read from
 *
 * returns: Current timer counter register value
 * Returns: Current timer counter register value
 **/
static u64 __ttc_clocksource_read(struct clocksource *cs)
{
@@ -173,7 +174,7 @@ static u64 notrace ttc_sched_clock_read(void)
 * @cycles:	Timer interval ticks
 * @evt:	Address of clock event instance
 *
 * returns: Always 0 - success
 * Returns: Always %0 - success
 **/
static int ttc_set_next_event(unsigned long cycles,
					struct clock_event_device *evt)
@@ -186,9 +187,12 @@ static int ttc_set_next_event(unsigned long cycles,
}

/**
 * ttc_set_{shutdown|oneshot|periodic} - Sets the state of timer
 *
 * ttc_shutdown - Sets the state of timer
 * @evt:	Address of clock event instance
 *
 * Used for shutdown or oneshot.
 *
 * Returns: Always %0 - success
 **/
static int ttc_shutdown(struct clock_event_device *evt)
{
@@ -202,6 +206,12 @@ static int ttc_shutdown(struct clock_event_device *evt)
	return 0;
}

/**
 * ttc_set_periodic - Sets the state of timer
 * @evt:	Address of clock event instance
 *
 * Returns: Always %0 - success
 */
static int ttc_set_periodic(struct clock_event_device *evt)
{
	struct ttc_timer_clockevent *ttce = to_ttc_timer_clkevent(evt);
+2 −3
Original line number Diff line number Diff line
@@ -155,9 +155,8 @@ static int __init ep93xx_timer_of_init(struct device_node *np)
	ep93xx_tcu = tcu;

	irq = irq_of_parse_and_map(np, 0);
	if (irq == 0)
		irq = -EINVAL;
	if (irq < 0) {
	if (!irq) {
		ret = -EINVAL;
		pr_err("EP93XX Timer Can't parse IRQ %d", irq);
		goto out_free;
	}
+7 −0
Original line number Diff line number Diff line
@@ -61,12 +61,19 @@ static int riscv_clock_next_event(unsigned long delta,
	return 0;
}

static int riscv_clock_shutdown(struct clock_event_device *evt)
{
	riscv_clock_event_stop();
	return 0;
}

static unsigned int riscv_clock_event_irq;
static DEFINE_PER_CPU(struct clock_event_device, riscv_clock_event) = {
	.name			= "riscv_timer_clockevent",
	.features		= CLOCK_EVT_FEAT_ONESHOT,
	.rating			= 100,
	.set_next_event		= riscv_clock_next_event,
	.set_state_shutdown	= riscv_clock_shutdown,
};

/*
Loading