Needless intialization, that constant is 0 anyway, so this field will
just get zeroed implicitly.

Well you can state this because you took a look to the clockevent
implementation internals. What's happening if they change this value ?
I know it won't happen but it's cleaner anyway. I prefer leave it
alone if you don't mind.

+ /*
+ * The same applies to performance counter interrupts. But with the
+ * above we now know that the reason we got here must be a timer
+ * interrupt. Being the paranoiacs we are we check anyway.
+ */
+ if (!r2 || (read_c0_cause() & (1 << 30))) {
+ evt = &__get_cpu_var(cp0_clock_events);

I'd think 'evt' should be declared in this block too, not at the
function level.

Erm, do we need this function at all after we have separate setups
for clock source/event? Just move all the override checks there.

Well I would say no. setup_cp0_clockevent() is normally called only
once by board init code. Whereas setup_cp0_clockevent() can be called
several times in SMP. Thus we can have several cp0 counters with
different frequencies. It was Ralf's requierement.
Maybe I should rename setup_cp0_clockevent() into
setup_cp0_clockevent_per_cpu() ?

Yeah. Actually it was said that this function should be rewritten in
order to be called by any platform code. Until this, I added 2
parameters to this function and killed 2 global function pointers.
Actually it should be part of a separate patch but until it got
written I leave this joystick code.

+
+ /*
+ * The performance counter overflow irq may be shared with the
+ * hpt interrupt. In that case this handler will be called
+ * during a hpt interrupt.
+ */
+ irqreturn_t (*perf_handler)(int irq, void *dev_id);

The only issue is that the platform code may have no idea what it
should be... I think we need to stick to the old approach here.

+};

... this would leave us with only IRQ field and eliminate the need
for this structure.

I think this structure allow us to gather all information needed by
cp0 timer 'driver' in one place. They're all one place and thus easy
for a board to see what they need to setup in order to use cp0 timer.