[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <alpine.DEB.2.02.1307060153110.32106@ionos.tec.linutronix.de>
Date: Sat, 6 Jul 2013 02:12:24 +0200 (CEST)
From: Thomas Gleixner <tglx@...utronix.de>
To: Heiko Stübner <heiko@...ech.de>
cc: John Stultz <john.stultz@...aro.org>,
Jamie Iles <jamie@...ieiles.com>,
Dinh Nguyen <dinguyen@...era.com>,
Grant Likely <grant.likely@...aro.org>,
linux-arm-kernel@...ts.infradead.org,
Rob Herring <rob.herring@...xeda.com>,
devicetree-discuss@...ts.ozlabs.org, linux-kernel@...r.kernel.org,
Arnd Bergmann <arnd@...db.de>, Olof Johansson <olof@...om.net>,
Ulrich Prinz <ulrich.prinz@...glemail.com>
Subject: Re: [PATCH 9/9] clocksource: dw_apb_timer: special variant for
rockchip rk3188 timers
On Sat, 6 Jul 2013, Heiko Stübner wrote:
> + if (of_device_is_compatible(np, "rockchip,rk3188-dw-apb-timer-osc"))
> + *quirks |= APBTMR_QUIRK_64BIT_COUNTER | APBTMR_QUIRK_NO_EOI |
> + APBTMR_QUIRK_INVERSE_INTMASK |
> + APBTMR_QUIRK_INVERSE_PERIODIC;
Brilliant. Next time we add
> + if (of_device_is_compatible(np, "rockchip,rk3188-dw-apb-timer-osc2"))
> + *quirks |= APBTMR_QUIRK_64BIT_COUNTER | APBTMR_QUIRK_NO_EOI |
> + APBTMR_QUIRK_INVERSE_INTMASK |
> + APBTMR_QUIRK_INVERSE_PERIODIC | MORE_NONSENSE;
Plus the extra conditionals all over the place
and a week later
> + if (of_device_is_compatible(np, "rockchip,rk3188-dw-apb-timer-osc3"))
> + *quirks |= ALLNONSENSE;
This has nothing to do with QUIRKS at all. QUIRKS are our last resort
when we cannot deal with the problem in a sane way.
In this case this is simply the wrong aproach.
We can deal with it in a sane way as I pointed out before and handle
it as simple properties of the IP block. We have all mechanisms in
place to handle such properties, device tree, platform data, static
init structures. It's all there and we really do not need to plaster
the code with random QUIRK conditionals.
Did you ever consider the runtime penalty of this? Probably not,
otherwise you would have spent time on speeding up that code by
caching frequently accessed registers instead of reading them back
over and over for no reason.
Thanks,
tglx
Powered by blists - more mailing lists