|
54 | 54 |
|
55 | 55 | static unsigned arch_timers_present __initdata;
|
56 | 56 |
|
57 |
| -static void __iomem *arch_counter_base __ro_after_init; |
58 |
| - |
59 | 57 | struct arch_timer {
|
60 | 58 | void __iomem *base;
|
61 | 59 | struct clock_event_device evt;
|
62 | 60 | };
|
63 | 61 |
|
| 62 | +static struct arch_timer *arch_timer_mem __ro_after_init; |
| 63 | + |
64 | 64 | #define to_arch_timer(e) container_of(e, struct arch_timer, evt)
|
65 | 65 |
|
66 | 66 | static u32 arch_timer_rate __ro_after_init;
|
@@ -973,9 +973,9 @@ static u64 arch_counter_get_cntvct_mem(void)
|
973 | 973 | u32 vct_lo, vct_hi, tmp_hi;
|
974 | 974 |
|
975 | 975 | do {
|
976 |
| - vct_hi = readl_relaxed(arch_counter_base + CNTVCT_HI); |
977 |
| - vct_lo = readl_relaxed(arch_counter_base + CNTVCT_LO); |
978 |
| - tmp_hi = readl_relaxed(arch_counter_base + CNTVCT_HI); |
| 976 | + vct_hi = readl_relaxed(arch_timer_mem->base + CNTVCT_HI); |
| 977 | + vct_lo = readl_relaxed(arch_timer_mem->base + CNTVCT_LO); |
| 978 | + tmp_hi = readl_relaxed(arch_timer_mem->base + CNTVCT_HI); |
979 | 979 | } while (vct_hi != tmp_hi);
|
980 | 980 |
|
981 | 981 | return ((u64) vct_hi << 32) | vct_lo;
|
@@ -1166,25 +1166,25 @@ static int __init arch_timer_mem_register(void __iomem *base, unsigned int irq)
|
1166 | 1166 | {
|
1167 | 1167 | int ret;
|
1168 | 1168 | irq_handler_t func;
|
1169 |
| - struct arch_timer *t; |
1170 | 1169 |
|
1171 |
| - t = kzalloc(sizeof(*t), GFP_KERNEL); |
1172 |
| - if (!t) |
| 1170 | + arch_timer_mem = kzalloc(sizeof(*arch_timer_mem), GFP_KERNEL); |
| 1171 | + if (!arch_timer_mem) |
1173 | 1172 | return -ENOMEM;
|
1174 | 1173 |
|
1175 |
| - t->base = base; |
1176 |
| - t->evt.irq = irq; |
1177 |
| - __arch_timer_setup(ARCH_TIMER_TYPE_MEM, &t->evt); |
| 1174 | + arch_timer_mem->base = base; |
| 1175 | + arch_timer_mem->evt.irq = irq; |
| 1176 | + __arch_timer_setup(ARCH_TIMER_TYPE_MEM, &arch_timer_mem->evt); |
1178 | 1177 |
|
1179 | 1178 | if (arch_timer_mem_use_virtual)
|
1180 | 1179 | func = arch_timer_handler_virt_mem;
|
1181 | 1180 | else
|
1182 | 1181 | func = arch_timer_handler_phys_mem;
|
1183 | 1182 |
|
1184 |
| - ret = request_irq(irq, func, IRQF_TIMER, "arch_mem_timer", &t->evt); |
| 1183 | + ret = request_irq(irq, func, IRQF_TIMER, "arch_mem_timer", &arch_timer_mem->evt); |
1185 | 1184 | if (ret) {
|
1186 | 1185 | pr_err("Failed to request mem timer irq\n");
|
1187 |
| - kfree(t); |
| 1186 | + kfree(arch_timer_mem); |
| 1187 | + arch_timer_mem = NULL; |
1188 | 1188 | }
|
1189 | 1189 |
|
1190 | 1190 | return ret;
|
@@ -1442,7 +1442,6 @@ arch_timer_mem_frame_register(struct arch_timer_mem_frame *frame)
|
1442 | 1442 | return ret;
|
1443 | 1443 | }
|
1444 | 1444 |
|
1445 |
| - arch_counter_base = base; |
1446 | 1445 | arch_timers_present |= ARCH_TIMER_TYPE_MEM;
|
1447 | 1446 |
|
1448 | 1447 | return 0;
|
|
0 commit comments