* [PATCH v2] rockchip: timer: add OF_PLATDATA support for dw-apb-timer
@ 2022-01-05 2:15 Johan Jonker
2022-01-05 14:03 ` Simon Glass
0 siblings, 1 reply; 5+ messages in thread
From: Johan Jonker @ 2022-01-05 2:15 UTC (permalink / raw)
To: kever.yang; +Cc: sjg, philipp.tomsich, marex, u-boot
The Rockchip rk3066 SoC has 3 dw-apb-timer nodes.
U-boot is compiled with OF_PLATDATA TPL/SPL options,
so add OF_PLATDATA support for the dw-apb-timer.
Also change driver name to be able to compile with
U-boot scripts. No reset OF_PLATDATA support was added,
because the rk3066 nodes don't need/have them.
Signed-off-by: Johan Jonker <jbx6244@gmail.com>
---
Changed V2:
replace if (IS_ENABLED(OF_REAL)) by #if CONFIG_IS_ENABLED(OF_REAL)
---
drivers/timer/dw-apb-timer.c | 30 +++++++++++++++++++++++++-----
1 file changed, 25 insertions(+), 5 deletions(-)
diff --git a/drivers/timer/dw-apb-timer.c b/drivers/timer/dw-apb-timer.c
index 9aed5dd2..9ba8695f 100644
--- a/drivers/timer/dw-apb-timer.c
+++ b/drivers/timer/dw-apb-timer.c
@@ -8,6 +8,7 @@
#include <common.h>
#include <dm.h>
#include <clk.h>
+#include <dt-structs.h>
#include <malloc.h>
#include <reset.h>
#include <timer.h>
@@ -25,6 +26,12 @@ struct dw_apb_timer_priv {
struct reset_ctl_bulk resets;
};
+struct dw_apb_timer_plat {
+#if CONFIG_IS_ENABLED(OF_PLATDATA)
+ struct dtd_snps_dw_apb_timer dtplat;
+#endif
+};
+
static u64 dw_apb_timer_get_count(struct udevice *dev)
{
struct dw_apb_timer_priv *priv = dev_get_priv(dev);
@@ -43,7 +50,18 @@ static int dw_apb_timer_probe(struct udevice *dev)
struct dw_apb_timer_priv *priv = dev_get_priv(dev);
struct clk clk;
int ret;
+#if CONFIG_IS_ENABLED(OF_PLATDATA)
+ struct dw_apb_timer_plat *plat = dev_get_plat(dev);
+ struct dtd_snps_dw_apb_timer *dtplat = &plat->dtplat;
+ priv->regs = dtplat->reg[0];
+
+ ret = clk_get_by_phandle(dev, &dtplat->clocks[0], &clk);
+ if (ret < 0)
+ return ret;
+
+ uc_priv->clock_rate = dtplat->clock_frequency;
+#else
ret = reset_get_bulk(dev, &priv->resets);
if (ret)
dev_warn(dev, "Can't get reset: %d\n", ret);
@@ -57,7 +75,7 @@ static int dw_apb_timer_probe(struct udevice *dev)
uc_priv->clock_rate = clk_get_rate(&clk);
clk_free(&clk);
-
+#endif
/* init timer */
writel(0xffffffff, priv->regs + DW_APB_LOAD_VAL);
writel(0xffffffff, priv->regs + DW_APB_CURR_VAL);
@@ -68,10 +86,11 @@ static int dw_apb_timer_probe(struct udevice *dev)
static int dw_apb_timer_of_to_plat(struct udevice *dev)
{
+#if CONFIG_IS_ENABLED(OF_REAL)
struct dw_apb_timer_priv *priv = dev_get_priv(dev);
priv->regs = dev_read_addr(dev);
-
+#endif
return 0;
}
@@ -91,13 +110,14 @@ static const struct udevice_id dw_apb_timer_ids[] = {
{}
};
-U_BOOT_DRIVER(dw_apb_timer) = {
- .name = "dw_apb_timer",
+U_BOOT_DRIVER(snps_dw_apb_timer) = {
+ .name = "snps_dw_apb_timer",
.id = UCLASS_TIMER,
.ops = &dw_apb_timer_ops,
.probe = dw_apb_timer_probe,
.of_match = dw_apb_timer_ids,
- .of_to_plat = dw_apb_timer_of_to_plat,
+ .of_to_plat = dw_apb_timer_of_to_plat,
.remove = dw_apb_timer_remove,
.priv_auto = sizeof(struct dw_apb_timer_priv),
+ .plat_auto = sizeof(struct dw_apb_timer_plat),
};
--
2.20.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2] rockchip: timer: add OF_PLATDATA support for dw-apb-timer
2022-01-05 2:15 [PATCH v2] rockchip: timer: add OF_PLATDATA support for dw-apb-timer Johan Jonker
@ 2022-01-05 14:03 ` Simon Glass
2022-01-05 16:40 ` Johan Jonker
0 siblings, 1 reply; 5+ messages in thread
From: Simon Glass @ 2022-01-05 14:03 UTC (permalink / raw)
To: Johan Jonker
Cc: Kever Yang, Philipp Tomsich, Marek Vasut, U-Boot Mailing List
Hi Johan,
On Tue, 4 Jan 2022 at 19:15, Johan Jonker <jbx6244@gmail.com> wrote:
>
> The Rockchip rk3066 SoC has 3 dw-apb-timer nodes.
> U-boot is compiled with OF_PLATDATA TPL/SPL options,
> so add OF_PLATDATA support for the dw-apb-timer.
> Also change driver name to be able to compile with
> U-boot scripts. No reset OF_PLATDATA support was added,
> because the rk3066 nodes don't need/have them.
>
> Signed-off-by: Johan Jonker <jbx6244@gmail.com>
> ---
>
> Changed V2:
> replace if (IS_ENABLED(OF_REAL)) by #if CONFIG_IS_ENABLED(OF_REAL)
> ---
> drivers/timer/dw-apb-timer.c | 30 +++++++++++++++++++++++++-----
> 1 file changed, 25 insertions(+), 5 deletions(-)
>
This seems OK but you have included unrelated changes (whitespace)
which should go in a separate patch.
Can you use if() instead of #if for the CONFIG_IS_ENABLED(OF_REAL) ?
Regards,
Simon
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] rockchip: timer: add OF_PLATDATA support for dw-apb-timer
2022-01-05 14:03 ` Simon Glass
@ 2022-01-05 16:40 ` Johan Jonker
2022-01-05 20:19 ` Johan Jonker
2022-01-06 7:06 ` Simon Glass
0 siblings, 2 replies; 5+ messages in thread
From: Johan Jonker @ 2022-01-05 16:40 UTC (permalink / raw)
To: Simon Glass; +Cc: Kever Yang, Philipp Tomsich, Marek Vasut, U-Boot Mailing List
Hi Simon,
Thanks you for your comments.
Shown below are the objdump results of the full U-boot binary
dw_apb_timer_of_to_plat() function.
Same goes for the dw_apb_timer_probe() function.
With if (IS_ENABLED(OF_REAL)) I don't get a useful timer result (boot
hangs after timer probe, because in full U-boot the reg value isn't
correct defined. Part of the init probe is missing.
Could you try it yourself?
Please advise what options we have.
Kind regards,
Johan Jonker
==========================================================================
Patch version 1 with if (IS_ENABLED(OF_REAL)) {}:
arm-linux-gnueabihf-objdump -d drivers/timer/dw-apb-timer.o >
../dw-apb-timer-20220105-v1.asm
00000000 <dw_apb_timer_of_to_plat>:
0: 2000 movs r0, #0
2: 4770 bx lr
arm-linux-gnueabihf-objdump -d spl/drivers/timer/dw-apb-timer.o >
../dw-apb-timer-20220105-spl-v1.asm
arm-linux-gnueabihf-objdump -d tpl/drivers/timer/dw-apb-timer.o >
../dw-apb-timer-20220105-tpl-v1.asm
==========================================================================
patch version 2 with #if CONFIG_IS_ENABLED(OF_REAL):
arm-linux-gnueabihf-objdump -d drivers/timer/dw-apb-timer.o > ../dw-apb-
timer-20220105-v2.asm
00000000 <dw_apb_timer_of_to_plat>:
0: b538 push {r3, r4, r5, lr}
2: 4605 mov r5, r0
4: f7ff fffe bl 0 <dev_get_priv>
8: 4604 mov r4, r0
a: 4628 mov r0, r5
c: f7ff fffe bl 0 <devfdt_get_addr>
10: 6020 str r0, [r4, #0]
12: 2000 movs r0, #0
14: bd38 pop {r3, r4, r5, pc}
arm-linux-gnueabihf-objdump -d spl/drivers/timer/dw-apb-timer.o >
../dw-apb-timer-20220105-spl-v2.asm
arm-linux-gnueabihf-objdump -d tpl/drivers/timer/dw-apb-timer.o >
../dw-apb-timer-20220105-tpl-v2.asm
===========================================================================
On 1/5/22 3:03 PM, Simon Glass wrote:
> Hi Johan,
>
> On Tue, 4 Jan 2022 at 19:15, Johan Jonker <jbx6244@gmail.com> wrote:
>>
>> The Rockchip rk3066 SoC has 3 dw-apb-timer nodes.
>> U-boot is compiled with OF_PLATDATA TPL/SPL options,
>> so add OF_PLATDATA support for the dw-apb-timer.
>> Also change driver name to be able to compile with
>> U-boot scripts. No reset OF_PLATDATA support was added,
>> because the rk3066 nodes don't need/have them.
>>
>> Signed-off-by: Johan Jonker <jbx6244@gmail.com>
>> ---
>>
>> Changed V2:
>> replace if (IS_ENABLED(OF_REAL)) by #if CONFIG_IS_ENABLED(OF_REAL)
>> ---
>> drivers/timer/dw-apb-timer.c | 30 +++++++++++++++++++++++++-----
>> 1 file changed, 25 insertions(+), 5 deletions(-)
>>
>
> This seems OK but you have included unrelated changes (whitespace)
> which should go in a separate patch.
OK
With whitespace did you mean this or something else?
- .of_to_plat = dw_apb_timer_of_to_plat,
+ .of_to_plat = dw_apb_timer_of_to_plat,
>
> Can you use if() instead of #if for the CONFIG_IS_ENABLED(OF_REAL) ?
See comments above.
Currently not it seems.
>
> Regards,
> Simon
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] rockchip: timer: add OF_PLATDATA support for dw-apb-timer
2022-01-05 16:40 ` Johan Jonker
@ 2022-01-05 20:19 ` Johan Jonker
2022-01-06 7:06 ` Simon Glass
1 sibling, 0 replies; 5+ messages in thread
From: Johan Jonker @ 2022-01-05 20:19 UTC (permalink / raw)
To: Simon Glass; +Cc: Kever Yang, Philipp Tomsich, Marek Vasut, U-Boot Mailing List
Hi,
In addition of the previous message, when I compile with the opposite of
OF_REAL (= !OF_PLATDATA) it generates an error in SPL.
Like to know why OF_REAL doesn't work.
For these couple of extra lines to increase build coverage inside does
it matter a lot by adding another messy set of #if ....
Let me know if that's OK to leave it as it is for version 3 with extra
white space patch.
Kind regards,
Johan Jonker
static int dw_apb_timer_of_to_plat(struct udevice *dev)
{
if (!IS_ENABLED(OF_PLATDATA)) {
struct dw_apb_timer_priv *priv = dev_get_priv(dev);
priv->regs = dev_read_addr(dev);
}
return 0;
}
arm-linux-gnueabihf-ld.bfd: drivers/timer/dw-apb-timer.o: in function
`dw_apb_timer_of_to_plat':
/drivers/timer/dw-apb-timer.c:95: undefined reference to `dev_read_addr'
arm-linux-gnueabihf-ld.bfd: drivers/timer/dw-apb-timer.o: in function
`dw_apb_timer_probe':
/drivers/timer/dw-apb-timer.c:73: undefined reference to `clk_get_by_index'
make[1]: *** [scripts/Makefile.spl:509: spl/u-boot-spl] Error 1
make: *** [Makefile:2011: spl/u-boot-spl] Error 2
On 1/5/22 5:40 PM, Johan Jonker wrote:
> Hi Simon,
>
> Thanks you for your comments.
> Shown below are the objdump results of the full U-boot binary
> dw_apb_timer_of_to_plat() function.
> Same goes for the dw_apb_timer_probe() function.
> With if (IS_ENABLED(OF_REAL)) I don't get a useful timer result (boot
> hangs after timer probe, because in full U-boot the reg value isn't
> correct defined. Part of the init probe is missing.
>
> Could you try it yourself?
> Please advise what options we have.
>
> Kind regards,
>
> Johan Jonker
>
> ==========================================================================
> Patch version 1 with if (IS_ENABLED(OF_REAL)) {}:
>
> arm-linux-gnueabihf-objdump -d drivers/timer/dw-apb-timer.o >
> ../dw-apb-timer-20220105-v1.asm
>
>
> 00000000 <dw_apb_timer_of_to_plat>:
> 0: 2000 movs r0, #0
> 2: 4770 bx lr
>
> arm-linux-gnueabihf-objdump -d spl/drivers/timer/dw-apb-timer.o >
> ../dw-apb-timer-20220105-spl-v1.asm
> arm-linux-gnueabihf-objdump -d tpl/drivers/timer/dw-apb-timer.o >
> ../dw-apb-timer-20220105-tpl-v1.asm
> ==========================================================================
> patch version 2 with #if CONFIG_IS_ENABLED(OF_REAL):
>
> arm-linux-gnueabihf-objdump -d drivers/timer/dw-apb-timer.o > ../dw-apb-
> timer-20220105-v2.asm
>
> 00000000 <dw_apb_timer_of_to_plat>:
> 0: b538 push {r3, r4, r5, lr}
> 2: 4605 mov r5, r0
> 4: f7ff fffe bl 0 <dev_get_priv>
> 8: 4604 mov r4, r0
> a: 4628 mov r0, r5
> c: f7ff fffe bl 0 <devfdt_get_addr>
> 10: 6020 str r0, [r4, #0]
> 12: 2000 movs r0, #0
> 14: bd38 pop {r3, r4, r5, pc}
>
> arm-linux-gnueabihf-objdump -d spl/drivers/timer/dw-apb-timer.o >
> ../dw-apb-timer-20220105-spl-v2.asm
> arm-linux-gnueabihf-objdump -d tpl/drivers/timer/dw-apb-timer.o >
> ../dw-apb-timer-20220105-tpl-v2.asm
>
> ===========================================================================
>
> On 1/5/22 3:03 PM, Simon Glass wrote:
>> Hi Johan,
>>
>> On Tue, 4 Jan 2022 at 19:15, Johan Jonker <jbx6244@gmail.com> wrote:
>>>
>>> The Rockchip rk3066 SoC has 3 dw-apb-timer nodes.
>>> U-boot is compiled with OF_PLATDATA TPL/SPL options,
>>> so add OF_PLATDATA support for the dw-apb-timer.
>>> Also change driver name to be able to compile with
>>> U-boot scripts. No reset OF_PLATDATA support was added,
>>> because the rk3066 nodes don't need/have them.
>>>
>>> Signed-off-by: Johan Jonker <jbx6244@gmail.com>
>>> ---
>>>
>>> Changed V2:
>>> replace if (IS_ENABLED(OF_REAL)) by #if CONFIG_IS_ENABLED(OF_REAL)
>>> ---
>>> drivers/timer/dw-apb-timer.c | 30 +++++++++++++++++++++++++-----
>>> 1 file changed, 25 insertions(+), 5 deletions(-)
>>>
>>
>> This seems OK but you have included unrelated changes (whitespace)
>> which should go in a separate patch.
>
> OK
> With whitespace did you mean this or something else?
>
> - .of_to_plat = dw_apb_timer_of_to_plat,
> + .of_to_plat = dw_apb_timer_of_to_plat,
>
>>
>> Can you use if() instead of #if for the CONFIG_IS_ENABLED(OF_REAL) ?
>
> See comments above.
> Currently not it seems.
>
>>
>> Regards,
>> Simon
>>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] rockchip: timer: add OF_PLATDATA support for dw-apb-timer
2022-01-05 16:40 ` Johan Jonker
2022-01-05 20:19 ` Johan Jonker
@ 2022-01-06 7:06 ` Simon Glass
1 sibling, 0 replies; 5+ messages in thread
From: Simon Glass @ 2022-01-06 7:06 UTC (permalink / raw)
To: Johan Jonker
Cc: Kever Yang, Philipp Tomsich, Marek Vasut, U-Boot Mailing List
Hi Johan,
On Wed, 5 Jan 2022 at 09:40, Johan Jonker <jbx6244@gmail.com> wrote:
>
> Hi Simon,
>
> Thanks you for your comments.
> Shown below are the objdump results of the full U-boot binary
> dw_apb_timer_of_to_plat() function.
> Same goes for the dw_apb_timer_probe() function.
> With if (IS_ENABLED(OF_REAL)) I don't get a useful timer result (boot
You need CONFIG_IS_ENABLED(OF_REAL)
(please could you avoid top posting?)
Regards,
Simon
> hangs after timer probe, because in full U-boot the reg value isn't
> correct defined. Part of the init probe is missing.
>
> Could you try it yourself?
> Please advise what options we have.
>
> Kind regards,
>
> Johan Jonker
>
> ==========================================================================
> Patch version 1 with if (IS_ENABLED(OF_REAL)) {}:
>
> arm-linux-gnueabihf-objdump -d drivers/timer/dw-apb-timer.o >
> ../dw-apb-timer-20220105-v1.asm
>
>
> 00000000 <dw_apb_timer_of_to_plat>:
> 0: 2000 movs r0, #0
> 2: 4770 bx lr
>
> arm-linux-gnueabihf-objdump -d spl/drivers/timer/dw-apb-timer.o >
> ../dw-apb-timer-20220105-spl-v1.asm
> arm-linux-gnueabihf-objdump -d tpl/drivers/timer/dw-apb-timer.o >
> ../dw-apb-timer-20220105-tpl-v1.asm
> ==========================================================================
> patch version 2 with #if CONFIG_IS_ENABLED(OF_REAL):
>
> arm-linux-gnueabihf-objdump -d drivers/timer/dw-apb-timer.o > ../dw-apb-
> timer-20220105-v2.asm
>
> 00000000 <dw_apb_timer_of_to_plat>:
> 0: b538 push {r3, r4, r5, lr}
> 2: 4605 mov r5, r0
> 4: f7ff fffe bl 0 <dev_get_priv>
> 8: 4604 mov r4, r0
> a: 4628 mov r0, r5
> c: f7ff fffe bl 0 <devfdt_get_addr>
> 10: 6020 str r0, [r4, #0]
> 12: 2000 movs r0, #0
> 14: bd38 pop {r3, r4, r5, pc}
>
> arm-linux-gnueabihf-objdump -d spl/drivers/timer/dw-apb-timer.o >
> ../dw-apb-timer-20220105-spl-v2.asm
> arm-linux-gnueabihf-objdump -d tpl/drivers/timer/dw-apb-timer.o >
> ../dw-apb-timer-20220105-tpl-v2.asm
>
> ===========================================================================
>
> On 1/5/22 3:03 PM, Simon Glass wrote:
> > Hi Johan,
> >
> > On Tue, 4 Jan 2022 at 19:15, Johan Jonker <jbx6244@gmail.com> wrote:
> >>
> >> The Rockchip rk3066 SoC has 3 dw-apb-timer nodes.
> >> U-boot is compiled with OF_PLATDATA TPL/SPL options,
> >> so add OF_PLATDATA support for the dw-apb-timer.
> >> Also change driver name to be able to compile with
> >> U-boot scripts. No reset OF_PLATDATA support was added,
> >> because the rk3066 nodes don't need/have them.
> >>
> >> Signed-off-by: Johan Jonker <jbx6244@gmail.com>
> >> ---
> >>
> >> Changed V2:
> >> replace if (IS_ENABLED(OF_REAL)) by #if CONFIG_IS_ENABLED(OF_REAL)
> >> ---
> >> drivers/timer/dw-apb-timer.c | 30 +++++++++++++++++++++++++-----
> >> 1 file changed, 25 insertions(+), 5 deletions(-)
> >>
> >
> > This seems OK but you have included unrelated changes (whitespace)
> > which should go in a separate patch.
>
> OK
> With whitespace did you mean this or something else?
>
> - .of_to_plat = dw_apb_timer_of_to_plat,
> + .of_to_plat = dw_apb_timer_of_to_plat,
>
> >
> > Can you use if() instead of #if for the CONFIG_IS_ENABLED(OF_REAL) ?
>
> See comments above.
> Currently not it seems.
>
> >
> > Regards,
> > Simon
> >
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-01-06 7:06 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-05 2:15 [PATCH v2] rockchip: timer: add OF_PLATDATA support for dw-apb-timer Johan Jonker
2022-01-05 14:03 ` Simon Glass
2022-01-05 16:40 ` Johan Jonker
2022-01-05 20:19 ` Johan Jonker
2022-01-06 7:06 ` Simon Glass
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.