clocksource/drivers/tegra: Remove duplicated use of per_cpu_ptr
authorDmitry Osipenko <digetx@gmail.com>
Tue, 18 Jun 2019 14:03:52 +0000 (17:03 +0300)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Tue, 25 Jun 2019 17:49:18 +0000 (19:49 +0200)
It was left unnoticed by accident, which means that the code could be
cleaned up a tad more.

Acked-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Acked-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
drivers/clocksource/timer-tegra.c

index 880ba67..f172a57 100644 (file)
@@ -218,6 +218,19 @@ static inline unsigned int tegra_irq_idx_for_cpu(int cpu, bool tegra20)
        return TIMER10_IRQ_IDX + cpu;
 }
 
+static inline unsigned long tegra_rate_for_timer(struct timer_of *to,
+                                                bool tegra20)
+{
+       /*
+        * TIMER1-9 are fixed to 1MHz, TIMER10-13 are running off the
+        * parent clock.
+        */
+       if (tegra20)
+               return 1000000;
+
+       return timer_of_rate(to);
+}
+
 static int __init tegra_init_timer(struct device_node *np, bool tegra20,
                                   int rating)
 {
@@ -270,32 +283,27 @@ static int __init tegra_init_timer(struct device_node *np, bool tegra20,
 
        for_each_possible_cpu(cpu) {
                struct timer_of *cpu_to = per_cpu_ptr(&tegra_to, cpu);
+               unsigned long flags = IRQF_TIMER | IRQF_NOBALANCING;
+               unsigned long rate = tegra_rate_for_timer(to, tegra20);
                unsigned int base = tegra_base_for_cpu(cpu, tegra20);
                unsigned int idx = tegra_irq_idx_for_cpu(cpu, tegra20);
+               unsigned int irq = irq_of_parse_and_map(np, idx);
 
-               /*
-                * TIMER1-9 are fixed to 1MHz, TIMER10-13 are running off the
-                * parent clock.
-                */
-               if (tegra20)
-                       cpu_to->of_clk.rate = 1000000;
-               else
-                       cpu_to->of_clk.rate = timer_of_rate(to);
-
-               cpu_to = per_cpu_ptr(&tegra_to, cpu);
-               cpu_to->of_base.base = timer_reg_base + base;
-               cpu_to->clkevt.rating = rating;
-               cpu_to->clkevt.cpumask = cpumask_of(cpu);
-               cpu_to->clkevt.irq = irq_of_parse_and_map(np, idx);
-               if (!cpu_to->clkevt.irq) {
+               if (!irq) {
                        pr_err("failed to map irq for cpu%d\n", cpu);
                        ret = -EINVAL;
                        goto out_irq;
                }
 
+               cpu_to->clkevt.irq = irq;
+               cpu_to->clkevt.rating = rating;
+               cpu_to->clkevt.cpumask = cpumask_of(cpu);
+               cpu_to->of_base.base = timer_reg_base + base;
+               cpu_to->of_clk.rate = rate;
+
                irq_set_status_flags(cpu_to->clkevt.irq, IRQ_NOAUTOEN);
-               ret = request_irq(cpu_to->clkevt.irq, tegra_timer_isr,
-                                 IRQF_TIMER | IRQF_NOBALANCING,
+
+               ret = request_irq(cpu_to->clkevt.irq, tegra_timer_isr, flags,
                                  cpu_to->clkevt.name, &cpu_to->clkevt);
                if (ret) {
                        pr_err("failed to set up irq for cpu%d: %d\n",