Skip to content

Commit 41e79b1

Browse files
tmlinddlezcano
authored andcommitted
clocksource/drivers/timer-ti-dm: Move inline functions to driver for am6
The __omap_dm_timer_* inline functions in the header are no longer needed outside the driver, and the header ifdefs prevent the driver working for ARCH_K3. Let's move the inline functions to the driver and drop the ifdefs and drop the unused functions __omap_dm_timer_override_errata() and __omap_dm_timer_load_start(). Cc: Keerthy <[email protected]> Cc: Nishanth Menon <[email protected]> Cc: Vignesh Raghavendra <[email protected]> Signed-off-by: Tony Lindgren <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Daniel Lezcano <[email protected]>
1 parent aa84506 commit 41e79b1

File tree

2 files changed

+115
-144
lines changed

2 files changed

+115
-144
lines changed

drivers/clocksource/timer-ti-dm.c

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,121 @@ enum {
4444
REQUEST_BY_NODE,
4545
};
4646

47+
static inline u32 __omap_dm_timer_read(struct omap_dm_timer *timer, u32 reg,
48+
int posted)
49+
{
50+
if (posted)
51+
while (readl_relaxed(timer->pend) & (reg >> WPSHIFT))
52+
cpu_relax();
53+
54+
return readl_relaxed(timer->func_base + (reg & 0xff));
55+
}
56+
57+
static inline void __omap_dm_timer_write(struct omap_dm_timer *timer,
58+
u32 reg, u32 val, int posted)
59+
{
60+
if (posted)
61+
while (readl_relaxed(timer->pend) & (reg >> WPSHIFT))
62+
cpu_relax();
63+
64+
writel_relaxed(val, timer->func_base + (reg & 0xff));
65+
}
66+
67+
static inline void __omap_dm_timer_init_regs(struct omap_dm_timer *timer)
68+
{
69+
u32 tidr;
70+
71+
/* Assume v1 ip if bits [31:16] are zero */
72+
tidr = readl_relaxed(timer->io_base);
73+
if (!(tidr >> 16)) {
74+
timer->revision = 1;
75+
timer->irq_stat = timer->io_base + OMAP_TIMER_V1_STAT_OFFSET;
76+
timer->irq_ena = timer->io_base + OMAP_TIMER_V1_INT_EN_OFFSET;
77+
timer->irq_dis = timer->io_base + OMAP_TIMER_V1_INT_EN_OFFSET;
78+
timer->pend = timer->io_base + _OMAP_TIMER_WRITE_PEND_OFFSET;
79+
timer->func_base = timer->io_base;
80+
} else {
81+
timer->revision = 2;
82+
timer->irq_stat = timer->io_base + OMAP_TIMER_V2_IRQSTATUS;
83+
timer->irq_ena = timer->io_base + OMAP_TIMER_V2_IRQENABLE_SET;
84+
timer->irq_dis = timer->io_base + OMAP_TIMER_V2_IRQENABLE_CLR;
85+
timer->pend = timer->io_base +
86+
_OMAP_TIMER_WRITE_PEND_OFFSET +
87+
OMAP_TIMER_V2_FUNC_OFFSET;
88+
timer->func_base = timer->io_base + OMAP_TIMER_V2_FUNC_OFFSET;
89+
}
90+
}
91+
92+
/*
93+
* __omap_dm_timer_enable_posted - enables write posted mode
94+
* @timer: pointer to timer instance handle
95+
*
96+
* Enables the write posted mode for the timer. When posted mode is enabled
97+
* writes to certain timer registers are immediately acknowledged by the
98+
* internal bus and hence prevents stalling the CPU waiting for the write to
99+
* complete. Enabling this feature can improve performance for writing to the
100+
* timer registers.
101+
*/
102+
static inline void __omap_dm_timer_enable_posted(struct omap_dm_timer *timer)
103+
{
104+
if (timer->posted)
105+
return;
106+
107+
if (timer->errata & OMAP_TIMER_ERRATA_I103_I767) {
108+
timer->posted = OMAP_TIMER_NONPOSTED;
109+
__omap_dm_timer_write(timer, OMAP_TIMER_IF_CTRL_REG, 0, 0);
110+
return;
111+
}
112+
113+
__omap_dm_timer_write(timer, OMAP_TIMER_IF_CTRL_REG,
114+
OMAP_TIMER_CTRL_POSTED, 0);
115+
timer->context.tsicr = OMAP_TIMER_CTRL_POSTED;
116+
timer->posted = OMAP_TIMER_POSTED;
117+
}
118+
119+
static inline void __omap_dm_timer_stop(struct omap_dm_timer *timer,
120+
int posted, unsigned long rate)
121+
{
122+
u32 l;
123+
124+
l = __omap_dm_timer_read(timer, OMAP_TIMER_CTRL_REG, posted);
125+
if (l & OMAP_TIMER_CTRL_ST) {
126+
l &= ~0x1;
127+
__omap_dm_timer_write(timer, OMAP_TIMER_CTRL_REG, l, posted);
128+
#ifdef CONFIG_ARCH_OMAP2PLUS
129+
/* Readback to make sure write has completed */
130+
__omap_dm_timer_read(timer, OMAP_TIMER_CTRL_REG, posted);
131+
/*
132+
* Wait for functional clock period x 3.5 to make sure that
133+
* timer is stopped
134+
*/
135+
udelay(3500000 / rate + 1);
136+
#endif
137+
}
138+
139+
/* Ack possibly pending interrupt */
140+
writel_relaxed(OMAP_TIMER_INT_OVERFLOW, timer->irq_stat);
141+
}
142+
143+
static inline void __omap_dm_timer_int_enable(struct omap_dm_timer *timer,
144+
unsigned int value)
145+
{
146+
writel_relaxed(value, timer->irq_ena);
147+
__omap_dm_timer_write(timer, OMAP_TIMER_WAKEUP_EN_REG, value, 0);
148+
}
149+
150+
static inline unsigned int
151+
__omap_dm_timer_read_counter(struct omap_dm_timer *timer, int posted)
152+
{
153+
return __omap_dm_timer_read(timer, OMAP_TIMER_COUNTER_REG, posted);
154+
}
155+
156+
static inline void __omap_dm_timer_write_status(struct omap_dm_timer *timer,
157+
unsigned int value)
158+
{
159+
writel_relaxed(value, timer->irq_stat);
160+
}
161+
47162
/**
48163
* omap_dm_timer_read_reg - read timer registers in posted and non-posted mode
49164
* @timer: timer pointer over which read operation to perform

include/clocksource/timer-ti-dm.h

Lines changed: 0 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -247,148 +247,4 @@ int omap_dm_timers_active(void);
247247
#define OMAP_TIMER_TICK_INT_MASK_COUNT_REG \
248248
(_OMAP_TIMER_TICK_INT_MASK_COUNT_OFFSET | (WP_TOWR << WPSHIFT))
249249

250-
/*
251-
* The below are inlined to optimize code size for system timers. Other code
252-
* should not need these at all.
253-
*/
254-
#if defined(CONFIG_ARCH_OMAP1) || defined(CONFIG_ARCH_OMAP2PLUS)
255-
static inline u32 __omap_dm_timer_read(struct omap_dm_timer *timer, u32 reg,
256-
int posted)
257-
{
258-
if (posted)
259-
while (readl_relaxed(timer->pend) & (reg >> WPSHIFT))
260-
cpu_relax();
261-
262-
return readl_relaxed(timer->func_base + (reg & 0xff));
263-
}
264-
265-
static inline void __omap_dm_timer_write(struct omap_dm_timer *timer,
266-
u32 reg, u32 val, int posted)
267-
{
268-
if (posted)
269-
while (readl_relaxed(timer->pend) & (reg >> WPSHIFT))
270-
cpu_relax();
271-
272-
writel_relaxed(val, timer->func_base + (reg & 0xff));
273-
}
274-
275-
static inline void __omap_dm_timer_init_regs(struct omap_dm_timer *timer)
276-
{
277-
u32 tidr;
278-
279-
/* Assume v1 ip if bits [31:16] are zero */
280-
tidr = readl_relaxed(timer->io_base);
281-
if (!(tidr >> 16)) {
282-
timer->revision = 1;
283-
timer->irq_stat = timer->io_base + OMAP_TIMER_V1_STAT_OFFSET;
284-
timer->irq_ena = timer->io_base + OMAP_TIMER_V1_INT_EN_OFFSET;
285-
timer->irq_dis = timer->io_base + OMAP_TIMER_V1_INT_EN_OFFSET;
286-
timer->pend = timer->io_base + _OMAP_TIMER_WRITE_PEND_OFFSET;
287-
timer->func_base = timer->io_base;
288-
} else {
289-
timer->revision = 2;
290-
timer->irq_stat = timer->io_base + OMAP_TIMER_V2_IRQSTATUS;
291-
timer->irq_ena = timer->io_base + OMAP_TIMER_V2_IRQENABLE_SET;
292-
timer->irq_dis = timer->io_base + OMAP_TIMER_V2_IRQENABLE_CLR;
293-
timer->pend = timer->io_base +
294-
_OMAP_TIMER_WRITE_PEND_OFFSET +
295-
OMAP_TIMER_V2_FUNC_OFFSET;
296-
timer->func_base = timer->io_base + OMAP_TIMER_V2_FUNC_OFFSET;
297-
}
298-
}
299-
300-
/*
301-
* __omap_dm_timer_enable_posted - enables write posted mode
302-
* @timer: pointer to timer instance handle
303-
*
304-
* Enables the write posted mode for the timer. When posted mode is enabled
305-
* writes to certain timer registers are immediately acknowledged by the
306-
* internal bus and hence prevents stalling the CPU waiting for the write to
307-
* complete. Enabling this feature can improve performance for writing to the
308-
* timer registers.
309-
*/
310-
static inline void __omap_dm_timer_enable_posted(struct omap_dm_timer *timer)
311-
{
312-
if (timer->posted)
313-
return;
314-
315-
if (timer->errata & OMAP_TIMER_ERRATA_I103_I767) {
316-
timer->posted = OMAP_TIMER_NONPOSTED;
317-
__omap_dm_timer_write(timer, OMAP_TIMER_IF_CTRL_REG, 0, 0);
318-
return;
319-
}
320-
321-
__omap_dm_timer_write(timer, OMAP_TIMER_IF_CTRL_REG,
322-
OMAP_TIMER_CTRL_POSTED, 0);
323-
timer->context.tsicr = OMAP_TIMER_CTRL_POSTED;
324-
timer->posted = OMAP_TIMER_POSTED;
325-
}
326-
327-
/**
328-
* __omap_dm_timer_override_errata - override errata flags for a timer
329-
* @timer: pointer to timer handle
330-
* @errata: errata flags to be ignored
331-
*
332-
* For a given timer, override a timer errata by clearing the flags
333-
* specified by the errata argument. A specific erratum should only be
334-
* overridden for a timer if the timer is used in such a way the erratum
335-
* has no impact.
336-
*/
337-
static inline void __omap_dm_timer_override_errata(struct omap_dm_timer *timer,
338-
u32 errata)
339-
{
340-
timer->errata &= ~errata;
341-
}
342-
343-
static inline void __omap_dm_timer_stop(struct omap_dm_timer *timer,
344-
int posted, unsigned long rate)
345-
{
346-
u32 l;
347-
348-
l = __omap_dm_timer_read(timer, OMAP_TIMER_CTRL_REG, posted);
349-
if (l & OMAP_TIMER_CTRL_ST) {
350-
l &= ~0x1;
351-
__omap_dm_timer_write(timer, OMAP_TIMER_CTRL_REG, l, posted);
352-
#ifdef CONFIG_ARCH_OMAP2PLUS
353-
/* Readback to make sure write has completed */
354-
__omap_dm_timer_read(timer, OMAP_TIMER_CTRL_REG, posted);
355-
/*
356-
* Wait for functional clock period x 3.5 to make sure that
357-
* timer is stopped
358-
*/
359-
udelay(3500000 / rate + 1);
360-
#endif
361-
}
362-
363-
/* Ack possibly pending interrupt */
364-
writel_relaxed(OMAP_TIMER_INT_OVERFLOW, timer->irq_stat);
365-
}
366-
367-
static inline void __omap_dm_timer_load_start(struct omap_dm_timer *timer,
368-
u32 ctrl, unsigned int load,
369-
int posted)
370-
{
371-
__omap_dm_timer_write(timer, OMAP_TIMER_COUNTER_REG, load, posted);
372-
__omap_dm_timer_write(timer, OMAP_TIMER_CTRL_REG, ctrl, posted);
373-
}
374-
375-
static inline void __omap_dm_timer_int_enable(struct omap_dm_timer *timer,
376-
unsigned int value)
377-
{
378-
writel_relaxed(value, timer->irq_ena);
379-
__omap_dm_timer_write(timer, OMAP_TIMER_WAKEUP_EN_REG, value, 0);
380-
}
381-
382-
static inline unsigned int
383-
__omap_dm_timer_read_counter(struct omap_dm_timer *timer, int posted)
384-
{
385-
return __omap_dm_timer_read(timer, OMAP_TIMER_COUNTER_REG, posted);
386-
}
387-
388-
static inline void __omap_dm_timer_write_status(struct omap_dm_timer *timer,
389-
unsigned int value)
390-
{
391-
writel_relaxed(value, timer->irq_stat);
392-
}
393-
#endif /* CONFIG_ARCH_OMAP1 || CONFIG_ARCH_OMAP2PLUS */
394250
#endif /* __CLOCKSOURCE_DMTIMER_H */

0 commit comments

Comments
 (0)