Fix potential merge conflict for dw_apb_timer_of
cover Fix potential merge conflict for dw_apb_timer_of
From: Dinh Nguyen <[email protected]>
Hi Arnd/Olof,
Because of the following patch series that is currently in arm-soc/for-next:
10021488997317d1121505a7ac659124c058efed clocksource: dw_apb_timer_of: use clocksource_of_init 1b4eca0f634be2a99f2baa6c29dfd183590ead3f clocksource: dw_apb_timer_of: select DW_APB_TIMER a8b447f2bbbba737ff4478f498d7f83c75a9461b clocksource: dw_apb_timer_of: add clock-handling a1198f83407ae3421f3f58355a0f296d5ea6249c clocksource: dw_apb_timer_of: enable the use the clocksource as sched clock
there will be a merge conflict with:
55a68c23e0a675b2b8ac2656fd6edbf98b78e4c6 dw_apb_timer_of.c: Remove parts that were picoxcell-specific
that is currently in John Stultz's tree fortglx/3.11/time.
The following 2 patches will eliminate the need for the patch in John Stultz's tree. If there is to be merge of the 2 trees, then the patch:
dw_apb_timer_of.c: Remove parts that were picoxcell-specific
can be removed from John's tree to avoid a merge-conflict.
Based on arm-soc/for-next:
PATCH[1/2] - Rename "dw-apb-timer-osc" and "dw-apb-timer-sp" bindings to just "dw-apb-timer"
PATCH[2/2] - Fix user/system reporting by fixing read_sched_clock()
Thanks,
Dinh
Dinh Nguyen (2):
ARM: dts: Change dw-apb-timer-osc and dw-apb-timer-sp to just
dw-apb-timer
clocksource: dw_apb_timer_of: Fix read_sched_clock
Documentation/devicetree/bindings/rtc/dw-apb.txt | 21 +++------------------ arch/arm/boot/dts/socfpga.dtsi | 12 ++++++++---- drivers/clocksource/dw_apb_timer_of.c | 7 +++---- 3 files changed, 14 insertions(+), 26 deletions(-)
Signature · 1 line
1.7.9.5
PATCH 1/2 ARM: dts: Change dw-apb-timer-osc and dw-apb-timer-sp to just dw-apb-timer
From: Dinh Nguyen <[email protected]>
"dw-apb-timer-osc" and "dw-apb-timer-sp" are the same implementation of the DW APB timer, just fed by different clocks.
--- Documentation/devicetree/bindings/rtc/dw-apb.txt | 21 +++------------------ arch/arm/boot/dts/socfpga.dtsi | 12 ++++++++---- 2 files changed, 11 insertions(+), 22 deletions(-)
Documentation/devicetree/bindings/rtc/dw-apb.txt +3 -18
@@ -1,7 +1,7 @@ * Designware APB timer Required properties: -- compatible: "snps,dw-apb-timer-sp" or "snps,dw-apb-timer-osc" +- compatible: "snps,dw-apb-timer" - reg: physical base address of the controller and length of memory mapped region. - interrupts: IRQ line for the timer.
@@ -20,23 +20,8 @@ systems may use one. Example: - - timer1: timer at ffc09000 { - compatible = "snps,dw-apb-timer-sp"; - interrupts = <0 168 4>; - clock-frequency = <200000000>; - reg = <0xffc09000 0x1000>; - }; - - timer2: timer at ffd00000 { - compatible = "snps,dw-apb-timer-osc"; - interrupts = <0 169 4>; - clock-frequency = <200000000>; - reg = <0xffd00000 0x1000>; - }; - - timer3: timer at ffe00000 { - compatible = "snps,dw-apb-timer-osc"; + timer1: timer at ffe00000 { + compatible = "snps,dw-apb-timer"; interrupts = <0 170 4>; reg = <0xffe00000 0x1000>; clocks = <&timer_clk>, <&timer_pclk>;
arch/arm/boot/dts/socfpga.dtsi +8 -4
@@ -476,27 +476,31 @@ }; timer0: timer0 at ffc08000 { - compatible = "snps,dw-apb-timer-sp"; + compatible = "snps,dw-apb-timer"; interrupts = <0 167 4>; reg = <0xffc08000 0x1000>; + clocks = <&osc>; }; timer1: timer1 at ffc09000 { - compatible = "snps,dw-apb-timer-sp"; + compatible = "snps,dw-apb-timer"; interrupts = <0 168 4>; reg = <0xffc09000 0x1000>; + clocks = <&osc>; }; timer2: timer2 at ffd00000 { - compatible = "snps,dw-apb-timer-osc"; + compatible = "snps,dw-apb-timer"; interrupts = <0 169 4>; reg = <0xffd00000 0x1000>; + clocks = <&l4_sp_clk>; }; timer3: timer3 at ffd01000 { - compatible = "snps,dw-apb-timer-osc"; + compatible = "snps,dw-apb-timer"; interrupts = <0 170 4>; reg = <0xffd01000 0x1000>; + clocks = <&l4_sp_clk>; }; uart0: serial0 at ffc02000 {
Signature · 1 line
1.7.9.5
PATCH 1/2 ARM: dts: Change dw-apb-timer-osc and dw-apb-timer-sp to just dw-apb-timer
Quoted 8 lines · dinguyen at altera.com
arch/arm/boot/dts/socfpga.dtsi +1
-1@@ -476,27 +476,31 @@ }; timer0: timer0 at ffc08000 { - compatible = "snps,dw-apb-timer-sp"; + compatible = "snps,dw-apb-timer"; interrupts = <0 167 4>; reg = <0xffc08000 0x1000>;
arch/arm/boot/dts/socfpga.dtsi line 490
Quoted 10 lines
arch/arm/boot/dts/socfpga.dtsi +3
-1+ clocks = <&osc>; }; timer1: timer1 at ffc09000 { - compatible = "snps,dw-apb-timer-sp"; + compatible = "snps,dw-apb-timer"; interrupts = <0 168 4>; reg = <0xffc09000 0x1000>; + clocks = <&osc>; };
I think it would make sense to fix the device name as well, they should all be named "timer", not "timer0", so I would add
- timer0: timer0 at ffc08000 {
+ timer0: timer at ffc08000 {
for all the timers in the dts file here.
Arnd
PATCH 2/2 clocksource: dw_apb_timer_of: Fix read_sched_clock
In reply to dinguyen at altera.comFrom: Dinh Nguyen <[email protected]>
The read_sched_clock should return the ~value because the clock is a countdown implementation. read_sched_clock() should be the same as __apbt_read_clocksource().
If a separate timer for the sched_clock exist, then read_sched_clock() will return an incorrect value. The (sched_io_base + 0x4) needs to be in the function for both cases.
Also, remove the use of "dw-apb-timer-sp" and "dw-apb-timer-osc" since they are the same DW clock.
--- drivers/clocksource/dw_apb_timer_of.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/clocksource/dw_apb_timer_of.c +3 -4
@@ -104,18 +104,17 @@ static void add_clocksource(struct device_node *source_timer)* timer is found. sched_io_base then points to the current_value * register of the clocksource timer. */ - sched_io_base = iobase +0x04 ; + sched_io_base = iobase; sched_rate = rate; }static u32 read_sched_clock (void ) { -return __raw_readl (sched_io_base); +return ~__raw_readl (sched_io_base +0x4 ); }static const struct of_device_id sptimer_ids[]__initconst = { { .compatible ="picochip,pc3x2-rtc" }, - { .compatible ="snps,dw-apb-timer-sp" }, {/* Sentinel */ }, };
@@ -155,4 +154,4 @@ static void __init dw_apb_timer_init(struct device_node *timer) num_called++; }CLOCKSOURCE_OF_DECLARE (pc3x2_timer,"picochip,pc3x2-timer" , dw_apb_timer_init); -CLOCKSOURCE_OF_DECLARE (apb_timer,"snps,dw-apb-timer-osc" , dw_apb_timer_init); +CLOCKSOURCE_OF_DECLARE (apb_timer,"snps,dw-apb-timer" , dw_apb_timer_init);
Signature · 1 line
1.7.9.5
PATCH 2/2 clocksource: dw_apb_timer_of: Fix read_sched_clock
Hi Dinh,
Quoted 9 lines · dinguyen at altera.com
From: Dinh Nguyen <[email protected]>
The
read_sched_clockshould return the ~value because the clock is a countdown implementation.read_sched_clock()should be the same as__apbt_read_clocksource().If a separate timer for the
sched_clockexist, thenread_sched_clock()will return an incorrect value. The (sched_io_base+0x4) needs to be in the function for both cases.
Actually the old behaviour is correct for picoxcell as we're using the DesignWare RTC rather than the counter block and the RTC does count upwards, but your change will work as we'll start using the regular timers anyway.
Looks good to me though.
for the series.
Jamie
cover Fix potential merge conflict for dw_apb_timer_of
In reply to dinguyen at altera.comQuoted 11 lines · dinguyen at altera.com
From: Dinh Nguyen <[email protected]>
Hi Arnd/Olof,
Because of the following patch series that is currently in arm-soc/for-next:
10021488997317d1121505a7ac659124c058efedclocksource:dw_apb_timer_of: useclocksource_of_init1b4eca0f634be2a99f2baa6c29dfd183590ead3fclocksource:dw_apb_timer_of: selectDW_APB_TIMERa8b447f2bbbba737ff4478f498d7f83c75a9461bclocksource:dw_apb_timer_of: add clock-handlinga1198f83407ae3421f3f58355a0f296d5ea6249cclocksource:dw_apb_timer_of: enable the use the clocksource as sched clock
Quoted 5 lines
there will be a merge conflict with:
55a68c23e0a675b2b8ac2656fd6edbf98b78e4c6dw_apb_timer_of.c: Remove parts that were picoxcell-specificthat is currently in John Stultz's tree fortglx/3.11/time.
:( That one is also in Thomas' tip/timers/core already.
Quoted 6 lines
The following 2 patches will eliminate the need for the patch in John Stultz's tree. If there is to be merge of the 2 trees, then the patch:
dw_apb_timer_of.c: Remove parts that were picoxcell-specific
Quoted 7 lines
can be removed from John's tree to avoid a merge-conflict.
Based on arm-soc/for-next:
PATCH[1/2] - Rename "dw-apb-timer-osc" and "dw-apb-timer-sp" bindings to just "dw-apb-timer"
PATCH[2/2] - Fix user/system reporting by fixingread_sched_clock()
Pavel/Jamie: Can you take a look at these too and make sure these cover what you were doing.
So Dinh, just to get this right, you're wanting me to revert "Remove parts that were picoxcell-specific" and apply your two changes to my tree?
The other 4 patches above are then fine to go in via arm-soc? Or do I need to merge those in too?
thanks
-john
cover Fix potential merge conflict for dw_apb_timer_of
Hi John,
Quoted 42 lines · John Stultz
Quoted 16 lines · dinguyen at altera.com
From: Dinh Nguyen <[email protected]>
Hi Arnd/Olof,
Because of the following patch series that is currently in arm-soc/for-next:
10021488997317d1121505a7ac659124c058efedclocksource:dw_apb_timer_of:
useclocksource_of_init1b4eca0f634be2a99f2baa6c29dfd183590ead3fclocksource:dw_apb_timer_of:
selectDW_APB_TIMERa8b447f2bbbba737ff4478f498d7f83c75a9461bclocksource:dw_apb_timer_of:
add clock-handlinga1198f83407ae3421f3f58355a0f296d5ea6249cclocksource:dw_apb_timer_of:
enable the use the clocksource as sched clockQuoted 6 lines
there will be a merge conflict with:
55a68c23e0a675b2b8ac2656fd6edbf98b78e4c6dw_apb_timer_of.c: Remove parts that were picoxcell-specificthat is currently in John Stultz's tree fortglx/3.11/time.
:( That one is also in Thomas' tip/timers/core already.
Quoted 6 lines
The following 2 patches will eliminate the need for the patch in John Stultz's tree. If there is to be merge of the 2 trees, then the patch:
dw_apb_timer_of.c: Remove parts that were picoxcell-specificQuoted 8 lines
can be removed from John's tree to avoid a merge-conflict.
Based on arm-soc/for-next:
PATCH[1/2] - Rename "dw-apb-timer-osc" and "dw-apb-timer-sp" bindings to just
"dw-apb-timer"
PATCH[2/2] - Fix user/system reporting by fixingread_sched_clock()
Quoted 6 lines
Pavel/Jamie: Can you take a look at these too and make sure these cover what you were doing.
So Dinh, just to get this right, you're wanting me to revert "Remove parts that were picoxcell-specific" and apply your two changes to my tree?
Yes, revert the "Remove parts that were picoxcell-specific". My 2 patches were not based on your tree, so I don't think they can be applied there. It was based on the arm-soc with the 4 patches in it.
Quoted 3 lines
The other 4 patches above are then fine to go in via arm-soc? Or do I need to merge those in too?
The 4 patches are fine in arm-soc. But I'll let Arnd, Olof and yourself decide on what's best. I just know that Pavel's patch will conflict with the 4 that are in arm-soc.
Dinh
Quoted 4 lines
thanks
-john
cover Fix potential merge conflict for dw_apb_timer_of
In reply to John StultzHi!
Quoted 8 lines
Quoted 8 lines
The following 2 patches will eliminate the need for the patch in John Stultz's tree. If there is to be merge of the 2 trees, then the patch:
dw_apb_timer_of.c: Remove parts that were picoxcell-specificcan be removed from John's tree to avoid a merge-conflict.
Quoted 7 lines
Quoted 5 lines
Based on arm-soc/for-next:
PATCH[1/2] - Rename "dw-apb-timer-osc" and "dw-apb-timer-sp" bindings to just "dw-apb-timer"
PATCH[2/2] - Fix user/system reporting by fixingread_sched_clock()Pavel/Jamie: Can you take a look at these too and make sure these cover what you were doing.
[It seems like Heiko St?bner was not aware of patches in the clock tree, so did pretty much equivalent patch.]
Dinh's changes look good to me, but
[PATCH v2 4/4] clocksource: dw_apb_timer_of: use clocksource_of_init
does not exactly look nice: (I'm sorry I did not see original series, before it was merged to -soc.). The function counts number of times it was called, and behaves differently in each case. It is not very traditional kernel code at the very least.
+static int num_called;
+static void __init dw_apb_timer_init(struct device_node *timer)
{
- struct device_node *event_timer, *source_timer;
-
- event_timer = of_find_matching_node(NULL, osctimer_ids);
- if (!event_timer)
- panic("No timer for clockevent");
- add_clockevent(event_timer);
-
- source_timer = of_find_matching_node(event_timer,osctimer_ids);
- if (!source_timer)
- panic("No timer for clocksource");
- add_clocksource(source_timer);
-
- of_node_put(source_timer);
+ switch (num_called) {
+ case 0:
+ pr_debug("%s: found clockevent timer\n", __func__);
+ add_clockevent(timer);
+ of_node_put(timer);
+ break;
+ case 1:
+ pr_debug("%s: found clocksource timer\n", __func__);
+ add_clocksource(timer);
+ of_node_put(timer);
+ init_sched_clock();
+ break;+ default:
+ break;
+ }
- init_sched_clock();
+ num_called++;
}
Heiko, can you take a look at John Stultz tree? We modified this area already... I understand you only have one timer on your silicon?
Would perhaps parameter on dw_apb_timer_init telling it what to do be better solution? I don't like the "num_called" variable too much...
Thanks,
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
cover Fix potential merge conflict for dw_apb_timer_of
Hi Pavel,
Am Dienstag, 18. Juni 2013, 17:02:44 schrieb Pavel Machek:
Quoted 16 lines
Hi!
Quoted 14 lines
Quoted 13 lines
The following 2 patches will eliminate the need for the patch in John Stultz's tree. If there is to be merge of the 2 trees, then the patch:
dw_apb_timer_of.c: Remove parts that were picoxcell-specificcan be removed from John's tree to avoid a merge-conflict.
Based on arm-soc/for-next:
PATCH[1/2] - Rename "dw-apb-timer-osc" and "dw-apb-timer-sp" bindings to just "dw-apb-timer"
PATCH[2/2] - Fix user/system reporting by fixingread_sched_clock()
Quoted 5 lines
Quoted 2 lines
Pavel/Jamie: Can you take a look at these too and make sure these cover what you were doing.
[It seems like Heiko St?bner was not aware of patches in the clock tree, so did pretty much equivalent patch.]
Correct ... I was going after what was in linux-next and the tip.git [which I also only saw recently at all] does not seem to be part of it.
Quoted 46 lines
Dinh's changes look good to me, but
[PATCH v2 4/4] clocksource:
dw_apb_timer_of: useclocksource_of_initdoes not exactly look nice: (I'm sorry I did not see original series, before it was merged to -soc.). The function counts number of times it was called, and behaves differently in each case. It is not very traditional kernel code at the very least.
(quoted diff) +2
-8+static int num_called; +static void __init dw_apb_timer_init(struct device_node *timer) { - struct device_node *event_timer, *source_timer; - - event_timer = of_find_matching_node(NULL, osctimer_ids); - if (!event_timer) - panic("No timer for clockevent"); - add_clockevent(event_timer); - - source_timer = of_find_matching_node(event_timer,
osctimer_ids);(quoted diff) +16
-6- if (!source_timer) - panic("No timer for clocksource"); - add_clocksource(source_timer); - - of_node_put(source_timer); + switch (num_called) { + case 0: + pr_debug("%s: found clockevent timer\n", __func__); + add_clockevent(timer); + of_node_put(timer); + break; + case 1: + pr_debug("%s: found clocksource timer\n", __func__); + add_clocksource(timer); + of_node_put(timer); + init_sched_clock(); + break; + default: + break; + } - init_sched_clock(); + num_called++; }
Quoted 2 lines
Heiko, can you take a look at John Stultz tree? We modified this area already... I understand you only have one timer on your silicon?
nope, my silicon has actually three timers of this type (all of them of the "snps,dw-apb-timer-osc" type ... which did change it seems).
But the clocksource also needs to provide the sched_clock on it.
Due to the multiple matching I came up with the numbering, because the of- clocksource must match the timer ips multiple times and needs to use one as clockevent and one as clocksource.
Quoted 2 lines
Would perhaps parameter on
dw_apb_timer_inittelling it what to do be better solution? I don't like the "num_called" variable too much...
The problem I see is, how do you want to distinguish between the timer used as clockevent and the one used as clocksource. The ip blocks are the same, so the dt binding must also be the same, as it only describes the hardware.
And theCLOCKSOURCE_OF_DECLARE(apb_timer, "snps,dw-apb-timer-osc", dw_apb_timer_init); of course also matches against all the timer nodes in the dt.
Heiko
cover Fix potential merge conflict for dw_apb_timer_of
Am Dienstag, 18. Juni 2013, 17:38:35 schrieb Heiko St?bner:
Quoted 72 lines
Hi Pavel,
Am Dienstag, 18. Juni 2013, 17:02:44 schrieb Pavel Machek:
Quoted 16 lines
Hi!
Quoted 14 lines
Quoted 13 lines
The following 2 patches will eliminate the need for the patch in John Stultz's tree. If there is to be merge of the 2 trees, then the patch:
dw_apb_timer_of.c: Remove parts that were picoxcell-specificcan be removed from John's tree to avoid a merge-conflict.
Based on arm-soc/for-next:
PATCH[1/2] - Rename "dw-apb-timer-osc" and "dw-apb-timer-sp" bindings to just "dw-apb-timer"
PATCH[2/2] - Fix user/system reporting by fixingread_sched_clock()Quoted 5 lines
Quoted 2 lines
Pavel/Jamie: Can you take a look at these too and make sure these cover what you were doing.
[It seems like Heiko St?bner was not aware of patches in the clock tree, so did pretty much equivalent patch.]
Correct ... I was going after what was in linux-next and the tip.git [which I also only saw recently at all] does not seem to be part of it.
Quoted 44 lines
Dinh's changes look good to me, but
[PATCH v2 4/4] clocksource:
dw_apb_timer_of: useclocksource_of_initdoes not exactly look nice: (I'm sorry I did not see original series, before it was merged to -soc.). The function counts number of times it was called, and behaves differently in each case. It is not very traditional kernel code at the very least.
(quoted diff) +2
-8+static int num_called; +static void __init dw_apb_timer_init(struct device_node *timer) { - struct device_node *event_timer, *source_timer; - - event_timer = of_find_matching_node(NULL, osctimer_ids); - if (!event_timer) - panic("No timer for clockevent"); - add_clockevent(event_timer); - - source_timer = of_find_matching_node(event_timer,
osctimer_ids);(quoted diff) +15
-5- if (!source_timer) - panic("No timer for clocksource"); - add_clocksource(source_timer); - - of_node_put(source_timer); + switch (num_called) { + case 0: + pr_debug("%s: found clockevent timer\n", __func__); + add_clockevent(timer); + of_node_put(timer); + break; + case 1: + pr_debug("%s: found clocksource timer\n", __func__); + add_clocksource(timer); + of_node_put(timer); + init_sched_clock(); + break; + default: + break; + }
Quoted 7 lines
Quoted 7 lines
(quoted diff) +1
-1- init_sched_clock(); + num_called++; }Heiko, can you take a look at John Stultz tree? We modified this area already... I understand you only have one timer on your silicon?
also it seems like not being able to use the apb_timer as sched_clock will hurt my platform too.
I've tried to use the arm_arch_timer, but when the arch_timer_get_cntfrq() function gets called, I only get an "undefined instruction" Oops for the executed asm in there.
As there is no manual available for the SoC, I can only guess that it doesn't contain such a component. This is fueled additionally by the PPI part of the gic only having 3 interrupt sources [there is small excerpt of the soc-manual floating around that contains this information], with one already being the twd interrupt, while the arm_arch_timer seems to require 4 itself.
Therefore it would cool, if we could keep the sched_clock functionality (provided by the clocksource timer) around somehow.
Heiko
Quoted 21 lines
nope, my silicon has actually three timers of this type (all of them of the "snps,dw-apb-timer-osc" type ... which did change it seems).
But the clocksource also needs to provide the
sched_clockon it.Due to the multiple matching I came up with the numbering, because the of- clocksource must match the timer ips multiple times and needs to use one as clockevent and one as clocksource.
Quoted 2 lines
Would perhaps parameter on
dw_apb_timer_inittelling it what to do be better solution? I don't like the "num_called" variable too much...The problem I see is, how do you want to distinguish between the timer used as clockevent and the one used as clocksource. The ip blocks are the same, so the dt binding must also be the same, as it only describes the hardware.
And the
CLOCKSOURCE_OF_DECLARE(apb_timer, "snps,dw-apb-timer-osc", dw_apb_timer_init); of course also matches against all the timer nodes in the dt.
cover Fix potential merge conflict for dw_apb_timer_of
Quoted 84 lines · Heiko St?bner
Am Dienstag, 18. Juni 2013, 17:38:35 schrieb Heiko St?bner:
Quoted 69 lines
Hi Pavel,
Am Dienstag, 18. Juni 2013, 17:02:44 schrieb Pavel Machek:
Quoted 12 lines
Hi!
Quoted 10 lines
Quoted 10 lines
The following 2 patches will eliminate the need for the patch in John Stultz's tree. If there is to be merge of the 2 trees, then the patch:
dw_apb_timer_of.c: Remove parts that were picoxcell-specificcan be removed from John's tree to avoid a merge-conflict.
Based on arm-soc/for-next:
Quoted 7 lines
Quoted 5 lines
Quoted 3 lines
PATCH[1/2] - Rename "dw-apb-timer-osc" and "dw-apb-timer-sp" bindings to just "dw-apb-timer"
PATCH[2/2] - Fix user/system reporting by fixingread_sched_clock()Pavel/Jamie: Can you take a look at these too and make sure these cover what you were doing.
[It seems like Heiko St?bner was not aware of patches in the clock tree, so did pretty much equivalent patch.]
Correct ... I was going after what was in linux-next and the tip.git [which I also only saw recently at all] does not seem to be part of it.
Quoted 44 lines
Dinh's changes look good to me, but
[PATCH v2 4/4] clocksource:
dw_apb_timer_of: useclocksource_of_initdoes not exactly look nice: (I'm sorry I did not see original series, before it was merged to -soc.). The function counts number of times it was called, and behaves differently in each case. It is not very traditional kernel code at the very least.
(quoted diff) +2
-8+static int num_called; +static void __init dw_apb_timer_init(struct device_node *timer) { - struct device_node *event_timer, *source_timer; - - event_timer = of_find_matching_node(NULL, osctimer_ids); - if (!event_timer) - panic("No timer for clockevent"); - add_clockevent(event_timer); - - source_timer = of_find_matching_node(event_timer,
osctimer_ids);(quoted diff) +15
-5- if (!source_timer) - panic("No timer for clocksource"); - add_clocksource(source_timer); - - of_node_put(source_timer); + switch (num_called) { + case 0: + pr_debug("%s: found clockevent timer\n", __func__); + add_clockevent(timer); + of_node_put(timer); + break; + case 1: + pr_debug("%s: found clocksource timer\n", __func__); + add_clocksource(timer); + of_node_put(timer); + init_sched_clock(); + break; + default: + break; + }Quoted 7 lines
Quoted 7 lines
(quoted diff) +1
-1- init_sched_clock(); + num_called++; }Heiko, can you take a look at John Stultz tree? We modified this area already... I understand you only have one timer on your silicon?
also it seems like not being able to use the
apb_timerassched_clockwill hurt my platform too.I've tried to use the
arm_arch_timer, but when thearch_timer_get_cntfrq()function gets called, I only get an "undefined instruction" Oops for the executed asm in there.
Quoted 8 lines
As there is no manual available for the SoC, I can only guess that it doesn't contain such a component. This is fueled additionally by the PPI part of the gic only having 3 interrupt sources [there is small excerpt of the soc-manual floating around that contains this information], with one already being the twd interrupt, while the
arm_arch_timerseems to require 4 itself.Therefore it would cool, if we could keep the
sched_clockfunctionality (provided by the clocksource timer) around somehow.
So whats the plan now?
I'm feeling likely to revert "dw_apb_timer_of.c: Remove parts that were picoxcell-specific" in my tree and leave the rest of the wreckage to the arm-soc folks to sort out (either getting the fix in or reverting the lot and trying again for 3.12), unless we get some agreed upon path forward sorted quickly here.
thanks
-john
cover Fix potential merge conflict for dw_apb_timer_of
Quoted 107 lines · John Stultz
Quoted 102 lines · Heiko St?bner
Am Dienstag, 18. Juni 2013, 17:38:35 schrieb Heiko St?bner:
Quoted 75 lines
Hi Pavel,
Am Dienstag, 18. Juni 2013, 17:02:44 schrieb Pavel Machek:
Quoted 17 lines
Hi!
Quoted 14 lines
Quoted 13 lines
The following 2 patches will eliminate the need for the patch in John Stultz's tree. If there is to be merge of the 2 trees, then the patch:
dw_apb_timer_of.c: Remove parts that were picoxcell-specificcan be removed from John's tree to avoid a merge-conflict.
Based on arm-soc/for-next:
PATCH[1/2] - Rename "dw-apb-timer-osc" and "dw-apb-timer-sp" bindings to just "dw-apb-timer"
PATCH[2/2] - Fix user/system reporting by fixingread_sched_clock()Quoted 5 lines
Quoted 2 lines
Pavel/Jamie: Can you take a look at these too and make sure these cover what you were doing.
[It seems like Heiko St?bner was not aware of patches in the clock tree, so did pretty much equivalent patch.]
Correct ... I was going after what was in linux-next and the tip.git [which
I also only saw recently at all] does not seem to be part of it.Quoted 44 lines
Dinh's changes look good to me, but
[PATCH v2 4/4] clocksource:
dw_apb_timer_of: useclocksource_of_initdoes not exactly look nice: (I'm sorry I did not see original series, before it was merged to -soc.). The function counts number of times it was called, and behaves differently in each case. It is not very traditional kernel code at the very least.
(quoted diff) +2
-8+static int num_called; +static void __init dw_apb_timer_init(struct device_node *timer) { - struct device_node *event_timer, *source_timer; - - event_timer = of_find_matching_node(NULL, osctimer_ids); - if (!event_timer) - panic("No timer for clockevent"); - add_clockevent(event_timer); - - source_timer = of_find_matching_node(event_timer,
osctimer_ids);(quoted diff) +15
-5- if (!source_timer) - panic("No timer for clocksource"); - add_clocksource(source_timer); - - of_node_put(source_timer); + switch (num_called) { + case 0: + pr_debug("%s: found clockevent timer\n", __func__); + add_clockevent(timer); + of_node_put(timer); + break; + case 1: + pr_debug("%s: found clocksource timer\n", __func__); + add_clocksource(timer); + of_node_put(timer); + init_sched_clock(); + break; + default: + break; + }Quoted 7 lines
Quoted 7 lines
(quoted diff) +1
-1- init_sched_clock(); + num_called++; }Heiko, can you take a look at John Stultz tree? We modified this area already... I understand you only have one timer on your silicon?
also it seems like not being able to use the
apb_timerassched_clockwill hurt my platform too.I've tried to use the
arm_arch_timer, but when thearch_timer_get_cntfrq()function gets called, I only get an "undefined instruction" Oops for the executed asm in there.As there is no manual available for the SoC, I can only guess that it doesn't
contain such a component. This is fueled additionally by the PPI part of the
gic only having 3 interrupt sources [there is small excerpt of the soc-manual
floating around that contains this information], with one already being the
twd interrupt, while thearm_arch_timerseems to require 4 itself.Quoted 2 lines
Therefore it would cool, if we could keep the
sched_clockfunctionality (provided by the clocksource timer) around somehow.
Quoted 7 lines
So whats the plan now?
I'm feeling likely to revert "
dw_apb_timer_of.c: Remove parts that were picoxcell-specific" in my tree and leave the rest of the wreckage to the arm-soc folks to sort out (either getting the fix in or reverting the lot and trying again for 3.12), unless we get some agreed upon path forward sorted quickly here.
It was bad timing that linux-next was down for a week right around the time of all of this, but not much we can do about in hindsight.
I'd be OK with reverting on your side and revisiting for 3.12. Arnd is doing arm-soc merges for a bit so it's up to him if he wants to try merging it without conflicts on our side.
-Olof