Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 70fe8217 authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

Merge branch 'clockevents/fixes' of git://git.linaro.org/people/dlezcano/linux into timers/urgent

 * Hide event stream Kconfig option for the arch_arm_timer for ARM=n
 * Fix a missing a clk_put in case the registering of the sh_mtu[2] drivers fails.
 * Reuse clockevents_config_and_register for the at91rm9200_time timer
parents 4be77398 77f7ce9a
Loading
Loading
Loading
Loading
+2 −5
Original line number Original line Diff line number Diff line
@@ -174,7 +174,6 @@ clkevt32k_next_event(unsigned long delta, struct clock_event_device *dev)
static struct clock_event_device clkevt = {
static struct clock_event_device clkevt = {
	.name		= "at91_tick",
	.name		= "at91_tick",
	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
	.shift		= 32,
	.rating		= 150,
	.rating		= 150,
	.set_next_event	= clkevt32k_next_event,
	.set_next_event	= clkevt32k_next_event,
	.set_mode	= clkevt32k_mode,
	.set_mode	= clkevt32k_mode,
@@ -265,11 +264,9 @@ void __init at91rm9200_timer_init(void)
	at91_st_write(AT91_ST_RTMR, 1);
	at91_st_write(AT91_ST_RTMR, 1);


	/* Setup timer clockevent, with minimum of two ticks (important!!) */
	/* Setup timer clockevent, with minimum of two ticks (important!!) */
	clkevt.mult = div_sc(AT91_SLOW_CLOCK, NSEC_PER_SEC, clkevt.shift);
	clkevt.max_delta_ns = clockevent_delta2ns(AT91_ST_ALMV, &clkevt);
	clkevt.min_delta_ns = clockevent_delta2ns(2, &clkevt) + 1;
	clkevt.cpumask = cpumask_of(0);
	clkevt.cpumask = cpumask_of(0);
	clockevents_register_device(&clkevt);
	clockevents_config_and_register(&clkevt, AT91_SLOW_CLOCK,
					2, AT91_ST_ALMV);


	/* register clocksource */
	/* register clocksource */
	clocksource_register_hz(&clk32k, AT91_SLOW_CLOCK);
	clocksource_register_hz(&clk32k, AT91_SLOW_CLOCK);
+1 −0
Original line number Original line Diff line number Diff line
@@ -87,6 +87,7 @@ config ARM_ARCH_TIMER
config ARM_ARCH_TIMER_EVTSTREAM
config ARM_ARCH_TIMER_EVTSTREAM
	bool "Support for ARM architected timer event stream generation"
	bool "Support for ARM architected timer event stream generation"
	default y if ARM_ARCH_TIMER
	default y if ARM_ARCH_TIMER
	depends on ARM_ARCH_TIMER
	help
	help
	  This option enables support for event stream generation based on
	  This option enables support for event stream generation based on
	  the ARM architected timer. It is used for waking up CPUs executing
	  the ARM architected timer. It is used for waking up CPUs executing
+14 −2
Original line number Original line Diff line number Diff line
@@ -313,8 +313,20 @@ static int sh_mtu2_setup(struct sh_mtu2_priv *p, struct platform_device *pdev)
		goto err1;
		goto err1;
	}
	}


	return sh_mtu2_register(p, (char *)dev_name(&p->pdev->dev),
	ret = clk_prepare(p->clk);
	if (ret < 0)
		goto err2;

	ret = sh_mtu2_register(p, (char *)dev_name(&p->pdev->dev),
			       cfg->clockevent_rating);
			       cfg->clockevent_rating);
	if (ret < 0)
		goto err3;

	return 0;
 err3:
	clk_unprepare(p->clk);
 err2:
	clk_put(p->clk);
 err1:
 err1:
	iounmap(p->mapbase);
	iounmap(p->mapbase);
 err0:
 err0:
+17 −3
Original line number Original line Diff line number Diff line
@@ -472,12 +472,26 @@ static int sh_tmu_setup(struct sh_tmu_priv *p, struct platform_device *pdev)
		ret = PTR_ERR(p->clk);
		ret = PTR_ERR(p->clk);
		goto err1;
		goto err1;
	}
	}

	ret = clk_prepare(p->clk);
	if (ret < 0)
		goto err2;

	p->cs_enabled = false;
	p->cs_enabled = false;
	p->enable_count = 0;
	p->enable_count = 0;


	return sh_tmu_register(p, (char *)dev_name(&p->pdev->dev),
	ret = sh_tmu_register(p, (char *)dev_name(&p->pdev->dev),
			      cfg->clockevent_rating,
			      cfg->clockevent_rating,
			      cfg->clocksource_rating);
			      cfg->clocksource_rating);
	if (ret < 0)
		goto err3;

	return 0;

 err3:
	clk_unprepare(p->clk);
 err2:
	clk_put(p->clk);
 err1:
 err1:
	iounmap(p->mapbase);
	iounmap(p->mapbase);
 err0:
 err0: