From: Daniel Lezcano <daniel.lezcano@linaro.org>
To: "Huang, Tao" <huangtao@rock-chips.com>,
Caesar Wang <wxt@rock-chips.com>,
Heiko Stuebner <heiko@sntech.de>
Cc: dianders@chromium.org, briannorris@google.com,
smbarber@google.com, linux-rockchip@lists.infradead.org,
Thomas Gleixner <tglx@linutronix.de>,
cf@rock-chips.com, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 4/5] clocksource: rockchip: add support for rk3399 SoC
Date: Tue, 31 May 2016 16:06:30 +0200 [thread overview]
Message-ID: <574D9A66.4090209@linaro.org> (raw)
In-Reply-To: <574D95AF.2020905@rock-chips.com>
On 05/31/2016 03:46 PM, Huang, Tao wrote:
> Hi Daniel:
> On 2016年05月31日 07:28, Daniel Lezcano wrote:
>> On 05/25/2016 11:50 AM, Caesar Wang wrote:
>>> From: Huang Tao <huangtao@rock-chips.com>
>>>
>>> The CONTROL register offset is different from old SoCs.
>>> For Linux driver, there are not functional changes at all.
>>> Let's call it v2.
>>>
>>> Signed-off-by: Huang Tao <huangtao@rock-chips.com>
>>> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
>>> Cc: Thomas Gleixner <tglx@linutronix.de>
>>> Cc: Heiko Stuebner <heiko@sntech.de>
>>> Tested-by: Jianqun Xu <jay.xu@rock-chips.com>
>>> Signed-off-by: Caesar Wang <wxt@rock-chips.com>
>>> ---
>>
>> That's hackish.
> Yes:( I blamed our IC guy.
>>
>> Please consider something like:
>>
>> diff --git a/drivers/clocksource/rockchip_timer.c
>> b/drivers/clocksource/rockchip_timer.c
>> index b991b28..b6ba6f9 100644
>> --- a/drivers/clocksource/rockchip_timer.c
>> +++ b/drivers/clocksource/rockchip_timer.c
>> @@ -19,7 +19,8 @@
>>
>> #define TIMER_LOAD_COUNT0 0x00
>> #define TIMER_LOAD_COUNT1 0x04
>> -#define TIMER_CONTROL_REG 0x10
>> +#define TIMER_CONTROL_REG3288 0x10
>> +#define TIMER_CONTROL_REG3399 0x1C
>> #define TIMER_INT_STATUS 0x18
>>
>> #define TIMER_DISABLE 0x0
>> @@ -31,6 +32,7 @@
>> struct bc_timer {
>> struct clock_event_device ce;
>> void __iomem *base;
>> + void __iomem *ctrl;
>> u32 freq;
>> };
>>
>> @@ -46,15 +48,20 @@ static inline void __iomem *rk_base(struct
>> clock_event_device *ce)
>> return rk_timer(ce)->base;
>> }
>>
>> +static inline void __iomem *rk_ctrl(struct clock_event_device *ce)
>> +{
>> + return rk_timer(ce)->ctrl;
>> +}
>> +
>> static inline void rk_timer_disable(struct clock_event_device *ce)
>> {
>> - writel_relaxed(TIMER_DISABLE, rk_base(ce) + TIMER_CONTROL_REG);
>> + writel_relaxed(TIMER_DISABLE, rk_ctrl(ce));
>> }
>>
>> static inline void rk_timer_enable(struct clock_event_device *ce, u32
>> flags)
>> {
>> writel_relaxed(TIMER_ENABLE | TIMER_INT_UNMASK | flags,
>> - rk_base(ce) + TIMER_CONTROL_REG);
>> + rk_ctrl(ce));
>> }
>>
>> static void rk_timer_update_counter(unsigned long cycles,
>> @@ -179,4 +186,18 @@ out_unmap:
>> iounmap(bc_timer.base);
>> }
>>
>> -CLOCKSOURCE_OF_DECLARE(rk_timer, "rockchip,rk3288-timer", rk_timer_init);
>> +static void __init rk3288_timer_init(struct device_node *np)
>> +{
>> + bc_timer.ctrl = TIMER_CONTROL_REG3288;
>> + rk_timer_init(np);
>> +}
>> +
>> +static void __init rk3399_timer_init(struct device_node *np)
>> +{
>> + bc_timer.ctrl = TIMER_CONTROL_REG3399;
>> + rk_timer_init(np);
>> +}
>> +
>> +
>> +CLOCKSOURCE_OF_DECLARE(rk_timer, "rockchip,rk3288-timer",
>> rk3288_timer_init);
>> +CLOCKSOURCE_OF_DECLARE(rk_timer, "rockchip,rk3399-timer",
>> rk3399_timer_init);
>>
>>
>
> I think you mean this patch otherwise compile will fail:
> @@ -19,7 +19,8 @@
>
> #define TIMER_LOAD_COUNT0 0x00
> #define TIMER_LOAD_COUNT1 0x04
> -#define TIMER_CONTROL_REG 0x10
> +#define TIMER_CONTROL_REG3288 0x10
> +#define TIMER_CONTROL_REG3399 0x1C
> #define TIMER_INT_STATUS 0x18
>
> #define TIMER_DISABLE 0x0
> @@ -31,6 +32,7 @@
> struct bc_timer {
> struct clock_event_device ce;
> void __iomem *base;
> + u32 ctrl;
> u32 freq;
> };
>
> @@ -46,15 +48,20 @@ static inline void __iomem *rk_base(struct
> clock_event_device *ce)
> return rk_timer(ce)->base;
> }
>
> +static inline void __iomem *rk_ctrl(struct clock_event_device *ce)
> +{
> + return rk_timer(ce)->base + rk_timer(ce)->ctrl;
You can do a small optimization by pre-computing 'ctrl' at init time, so
no need to do this addition each time.
> +}
> +
> static inline void rk_timer_disable(struct clock_event_device *ce)
> {
> - writel_relaxed(TIMER_DISABLE, rk_base(ce) + TIMER_CONTROL_REG);
> + writel_relaxed(TIMER_DISABLE, rk_ctrl(ce));
> }
>
> static inline void rk_timer_enable(struct clock_event_device *ce, u32
> flags)
> {
> writel_relaxed(TIMER_ENABLE | TIMER_INT_UNMASK | flags,
> - rk_base(ce) + TIMER_CONTROL_REG);
> + rk_ctrl(ce));
> }
>
> static void rk_timer_update_counter(unsigned long cycles,
> @@ -179,4 +186,19 @@ out_unmap:
> iounmap(bc_timer.base);
> }
>
> -CLOCKSOURCE_OF_DECLARE(rk_timer, "rockchip,rk3288-timer", rk_timer_init);
> +static void __init rk3288_timer_init(struct device_node *np)
> +{
> + bc_timer.ctrl = TIMER_CONTROL_REG3288;
> + rk_timer_init(np);
rk_timer_init(np);
bc_timer.ctrl = bc_timer.base + TIMER_CONTROL_REG3288;
> +}
> +
> +static void __init rk3399_timer_init(struct device_node *np)
> +{
> + bc_timer.ctrl = TIMER_CONTROL_REG3399;
> + rk_timer_init(np);
rk_timer_init(np);
bc_timer.ctrl = bc_timer.base + TIMER_CONTROL_REG3399;
> +}
> +
> +CLOCKSOURCE_OF_DECLARE(rk3288_timer, "rockchip,rk3288-timer",
> + rk3288_timer_init);
> +CLOCKSOURCE_OF_DECLARE(rk3399_timer, "rockchip,rk3399-timer",
> + rk3399_timer_init);
>
> This patch will give us a little lager text size. If we do disassemble,
> we can see additional LDR is called. I can accept this performance drop.
> So we will send new patches.
> BTW, the patch "clocksource: rockchip: remove unnecessary clear irq
> before request_irq" can drop if we use this patch.
--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
WARNING: multiple messages have this Message-ID (diff)
From: daniel.lezcano@linaro.org (Daniel Lezcano)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 4/5] clocksource: rockchip: add support for rk3399 SoC
Date: Tue, 31 May 2016 16:06:30 +0200 [thread overview]
Message-ID: <574D9A66.4090209@linaro.org> (raw)
In-Reply-To: <574D95AF.2020905@rock-chips.com>
On 05/31/2016 03:46 PM, Huang, Tao wrote:
> Hi Daniel:
> On 2016?05?31? 07:28, Daniel Lezcano wrote:
>> On 05/25/2016 11:50 AM, Caesar Wang wrote:
>>> From: Huang Tao <huangtao@rock-chips.com>
>>>
>>> The CONTROL register offset is different from old SoCs.
>>> For Linux driver, there are not functional changes at all.
>>> Let's call it v2.
>>>
>>> Signed-off-by: Huang Tao <huangtao@rock-chips.com>
>>> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
>>> Cc: Thomas Gleixner <tglx@linutronix.de>
>>> Cc: Heiko Stuebner <heiko@sntech.de>
>>> Tested-by: Jianqun Xu <jay.xu@rock-chips.com>
>>> Signed-off-by: Caesar Wang <wxt@rock-chips.com>
>>> ---
>>
>> That's hackish.
> Yes:( I blamed our IC guy.
>>
>> Please consider something like:
>>
>> diff --git a/drivers/clocksource/rockchip_timer.c
>> b/drivers/clocksource/rockchip_timer.c
>> index b991b28..b6ba6f9 100644
>> --- a/drivers/clocksource/rockchip_timer.c
>> +++ b/drivers/clocksource/rockchip_timer.c
>> @@ -19,7 +19,8 @@
>>
>> #define TIMER_LOAD_COUNT0 0x00
>> #define TIMER_LOAD_COUNT1 0x04
>> -#define TIMER_CONTROL_REG 0x10
>> +#define TIMER_CONTROL_REG3288 0x10
>> +#define TIMER_CONTROL_REG3399 0x1C
>> #define TIMER_INT_STATUS 0x18
>>
>> #define TIMER_DISABLE 0x0
>> @@ -31,6 +32,7 @@
>> struct bc_timer {
>> struct clock_event_device ce;
>> void __iomem *base;
>> + void __iomem *ctrl;
>> u32 freq;
>> };
>>
>> @@ -46,15 +48,20 @@ static inline void __iomem *rk_base(struct
>> clock_event_device *ce)
>> return rk_timer(ce)->base;
>> }
>>
>> +static inline void __iomem *rk_ctrl(struct clock_event_device *ce)
>> +{
>> + return rk_timer(ce)->ctrl;
>> +}
>> +
>> static inline void rk_timer_disable(struct clock_event_device *ce)
>> {
>> - writel_relaxed(TIMER_DISABLE, rk_base(ce) + TIMER_CONTROL_REG);
>> + writel_relaxed(TIMER_DISABLE, rk_ctrl(ce));
>> }
>>
>> static inline void rk_timer_enable(struct clock_event_device *ce, u32
>> flags)
>> {
>> writel_relaxed(TIMER_ENABLE | TIMER_INT_UNMASK | flags,
>> - rk_base(ce) + TIMER_CONTROL_REG);
>> + rk_ctrl(ce));
>> }
>>
>> static void rk_timer_update_counter(unsigned long cycles,
>> @@ -179,4 +186,18 @@ out_unmap:
>> iounmap(bc_timer.base);
>> }
>>
>> -CLOCKSOURCE_OF_DECLARE(rk_timer, "rockchip,rk3288-timer", rk_timer_init);
>> +static void __init rk3288_timer_init(struct device_node *np)
>> +{
>> + bc_timer.ctrl = TIMER_CONTROL_REG3288;
>> + rk_timer_init(np);
>> +}
>> +
>> +static void __init rk3399_timer_init(struct device_node *np)
>> +{
>> + bc_timer.ctrl = TIMER_CONTROL_REG3399;
>> + rk_timer_init(np);
>> +}
>> +
>> +
>> +CLOCKSOURCE_OF_DECLARE(rk_timer, "rockchip,rk3288-timer",
>> rk3288_timer_init);
>> +CLOCKSOURCE_OF_DECLARE(rk_timer, "rockchip,rk3399-timer",
>> rk3399_timer_init);
>>
>>
>
> I think you mean this patch otherwise compile will fail:
> @@ -19,7 +19,8 @@
>
> #define TIMER_LOAD_COUNT0 0x00
> #define TIMER_LOAD_COUNT1 0x04
> -#define TIMER_CONTROL_REG 0x10
> +#define TIMER_CONTROL_REG3288 0x10
> +#define TIMER_CONTROL_REG3399 0x1C
> #define TIMER_INT_STATUS 0x18
>
> #define TIMER_DISABLE 0x0
> @@ -31,6 +32,7 @@
> struct bc_timer {
> struct clock_event_device ce;
> void __iomem *base;
> + u32 ctrl;
> u32 freq;
> };
>
> @@ -46,15 +48,20 @@ static inline void __iomem *rk_base(struct
> clock_event_device *ce)
> return rk_timer(ce)->base;
> }
>
> +static inline void __iomem *rk_ctrl(struct clock_event_device *ce)
> +{
> + return rk_timer(ce)->base + rk_timer(ce)->ctrl;
You can do a small optimization by pre-computing 'ctrl' at init time, so
no need to do this addition each time.
> +}
> +
> static inline void rk_timer_disable(struct clock_event_device *ce)
> {
> - writel_relaxed(TIMER_DISABLE, rk_base(ce) + TIMER_CONTROL_REG);
> + writel_relaxed(TIMER_DISABLE, rk_ctrl(ce));
> }
>
> static inline void rk_timer_enable(struct clock_event_device *ce, u32
> flags)
> {
> writel_relaxed(TIMER_ENABLE | TIMER_INT_UNMASK | flags,
> - rk_base(ce) + TIMER_CONTROL_REG);
> + rk_ctrl(ce));
> }
>
> static void rk_timer_update_counter(unsigned long cycles,
> @@ -179,4 +186,19 @@ out_unmap:
> iounmap(bc_timer.base);
> }
>
> -CLOCKSOURCE_OF_DECLARE(rk_timer, "rockchip,rk3288-timer", rk_timer_init);
> +static void __init rk3288_timer_init(struct device_node *np)
> +{
> + bc_timer.ctrl = TIMER_CONTROL_REG3288;
> + rk_timer_init(np);
rk_timer_init(np);
bc_timer.ctrl = bc_timer.base + TIMER_CONTROL_REG3288;
> +}
> +
> +static void __init rk3399_timer_init(struct device_node *np)
> +{
> + bc_timer.ctrl = TIMER_CONTROL_REG3399;
> + rk_timer_init(np);
rk_timer_init(np);
bc_timer.ctrl = bc_timer.base + TIMER_CONTROL_REG3399;
> +}
> +
> +CLOCKSOURCE_OF_DECLARE(rk3288_timer, "rockchip,rk3288-timer",
> + rk3288_timer_init);
> +CLOCKSOURCE_OF_DECLARE(rk3399_timer, "rockchip,rk3399-timer",
> + rk3399_timer_init);
>
> This patch will give us a little lager text size. If we do disassemble,
> we can see additional LDR is called. I can accept this performance drop.
> So we will send new patches.
> BTW, the patch "clocksource: rockchip: remove unnecessary clear irq
> before request_irq" can drop if we use this patch.
--
<http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs
Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
next prev parent reply other threads:[~2016-05-31 14:06 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-25 9:49 [PATCH 0/5] clocksource: rockchip/timer: Support rktimer for rk3399 Caesar Wang
2016-05-25 9:49 ` Caesar Wang
2016-05-25 9:49 ` [PATCH 1/5] dt-bindings: document rk3399 rk-timer bindings Caesar Wang
2016-05-25 9:49 ` Caesar Wang
[not found] ` <1464169802-6033-2-git-send-email-wxt-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2016-05-25 19:11 ` Rob Herring
2016-05-25 19:11 ` Rob Herring
2016-05-25 19:11 ` Rob Herring
2016-05-25 9:49 ` [PATCH 2/5] clocksource: rockchip: remove unnecessary clear irq before request_irq Caesar Wang
2016-05-25 9:49 ` Caesar Wang
2016-05-30 23:09 ` Daniel Lezcano
2016-05-30 23:09 ` Daniel Lezcano
2016-05-31 17:03 ` Doug Anderson
2016-05-31 17:03 ` Doug Anderson
2016-06-01 2:30 ` Huang, Tao
2016-06-01 2:30 ` Huang, Tao
2016-06-01 2:36 ` Doug Anderson
2016-06-01 2:36 ` Doug Anderson
2016-05-25 9:50 ` [PATCH 3/5] clocksource: rockchip: add dynamic irq flag to the timer Caesar Wang
2016-05-25 9:50 ` Caesar Wang
2016-05-30 23:16 ` Daniel Lezcano
2016-05-30 23:16 ` Daniel Lezcano
[not found] ` <574CC9DE.1050501-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2016-05-31 13:45 ` Huang, Tao
2016-05-31 13:45 ` Huang, Tao
2016-05-31 13:45 ` Huang, Tao
2016-05-25 9:50 ` [PATCH 4/5] clocksource: rockchip: add support for rk3399 SoC Caesar Wang
2016-05-25 9:50 ` Caesar Wang
2016-05-30 23:28 ` Daniel Lezcano
2016-05-30 23:28 ` Daniel Lezcano
[not found] ` <574CCCB4.1030001-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2016-05-31 13:46 ` Huang, Tao
2016-05-31 13:46 ` Huang, Tao
2016-05-31 13:46 ` Huang, Tao
2016-05-31 14:06 ` Daniel Lezcano [this message]
2016-05-31 14:06 ` Daniel Lezcano
2016-06-01 1:58 ` Huang, Tao
2016-06-01 1:58 ` Huang, Tao
2016-06-01 6:16 ` Daniel Lezcano
2016-06-01 6:16 ` Daniel Lezcano
2016-05-25 9:50 ` [PATCH 5/5] ARM64: dts: rockchip: add rktimer device node for rk3399 Caesar Wang
2016-05-25 9:50 ` Caesar Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=574D9A66.4090209@linaro.org \
--to=daniel.lezcano@linaro.org \
--cc=briannorris@google.com \
--cc=cf@rock-chips.com \
--cc=dianders@chromium.org \
--cc=heiko@sntech.de \
--cc=huangtao@rock-chips.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=smbarber@google.com \
--cc=tglx@linutronix.de \
--cc=wxt@rock-chips.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.