drivers/clocksource/timer-rda.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
From: Enlin Mu <enlin.mu@unisoc.com>
The current system log timestamp accuracy is tick, which can not
meet the usage requirements and needs to reach nanoseconds.
Therefore, the sched_clock_register funciton needs to be add.
Signed-off-by: Enlin Mu <enlin.mu@unisoc.com>
---
drivers/clocksource/timer-rda.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/clocksource/timer-rda.c b/drivers/clocksource/timer-rda.c
index fd1199c189bf..0be8e05970e2 100644
--- a/drivers/clocksource/timer-rda.c
+++ b/drivers/clocksource/timer-rda.c
@@ -13,6 +13,7 @@
#include <linux/init.h>
#include <linux/interrupt.h>
+#include <linux/sched_clock.h>
#include "timer-of.h"
@@ -153,7 +154,7 @@ static struct timer_of rda_ostimer_of = {
},
};
-static u64 rda_hwtimer_read(struct clocksource *cs)
+static u64 rda_hwtimer_clocksource_read(void)
{
void __iomem *base = timer_of_base(&rda_ostimer_of);
u32 lo, hi;
@@ -167,6 +168,11 @@ static u64 rda_hwtimer_read(struct clocksource *cs)
return ((u64)hi << 32) | lo;
}
+static u64 rda_hwtimer_read(struct clocksource *cs)
+{
+ return rda_hwtimer_clocksource_read();
+}
+
static struct clocksource rda_hwtimer_clocksource = {
.name = "rda-timer",
.rating = 400,
@@ -185,6 +191,7 @@ static int __init rda_timer_init(struct device_node *np)
return ret;
clocksource_register_hz(&rda_hwtimer_clocksource, rate);
+ sched_clock_register(rda_hwtimer_clocksource_read, 64, rate);
clockevents_config_and_register(&rda_ostimer_of.clkevt, rate,
0x2, UINT_MAX);
--
2.39.5
On Fri, Nov 07, 2025 at 02:33:47PM +0800, Enlin Mu wrote:
> From: Enlin Mu <enlin.mu@unisoc.com>
>
> The current system log timestamp accuracy is tick, which can not
> meet the usage requirements and needs to reach nanoseconds.
Which 'usage requirement' you are referring here?
> Therefore, the sched_clock_register funciton needs to be add.
>
> Signed-off-by: Enlin Mu <enlin.mu@unisoc.com>
But I'm happy to see a patch from Unisoc for RDA Micro SoC :)
- Mani
> ---
> drivers/clocksource/timer-rda.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/clocksource/timer-rda.c b/drivers/clocksource/timer-rda.c
> index fd1199c189bf..0be8e05970e2 100644
> --- a/drivers/clocksource/timer-rda.c
> +++ b/drivers/clocksource/timer-rda.c
> @@ -13,6 +13,7 @@
>
> #include <linux/init.h>
> #include <linux/interrupt.h>
> +#include <linux/sched_clock.h>
>
> #include "timer-of.h"
>
> @@ -153,7 +154,7 @@ static struct timer_of rda_ostimer_of = {
> },
> };
>
> -static u64 rda_hwtimer_read(struct clocksource *cs)
> +static u64 rda_hwtimer_clocksource_read(void)
> {
> void __iomem *base = timer_of_base(&rda_ostimer_of);
> u32 lo, hi;
> @@ -167,6 +168,11 @@ static u64 rda_hwtimer_read(struct clocksource *cs)
> return ((u64)hi << 32) | lo;
> }
>
> +static u64 rda_hwtimer_read(struct clocksource *cs)
> +{
> + return rda_hwtimer_clocksource_read();
> +}
> +
> static struct clocksource rda_hwtimer_clocksource = {
> .name = "rda-timer",
> .rating = 400,
> @@ -185,6 +191,7 @@ static int __init rda_timer_init(struct device_node *np)
> return ret;
>
> clocksource_register_hz(&rda_hwtimer_clocksource, rate);
> + sched_clock_register(rda_hwtimer_clocksource_read, 64, rate);
>
> clockevents_config_and_register(&rda_ostimer_of.clkevt, rate,
> 0x2, UINT_MAX);
> --
> 2.39.5
>
--
மணிவண்ணன் சதாசிவம்
On 2025/11/17 17:36, Manivannan Sadhasivam wrote:
> On Fri, Nov 07, 2025 at 02:33:47PM +0800, Enlin Mu wrote:
>> From: Enlin Mu <enlin.mu@unisoc.com>
>>
>> The current system log timestamp accuracy is tick, which can not
>> meet the usage requirements and needs to reach nanoseconds.
>
> Which 'usage requirement' you are referring here?
Hi Mani
When using this chip,the timestamp accuracy of the kernel log is tick,
which makes it difficult to analyze some system exceptions.
Therefore, it is neccessary to adujst the accuracy of the sched_clock
function.
>
>> Therefore, the sched_clock_register funciton needs to be add.
>>
>> Signed-off-by: Enlin Mu <enlin.mu@unisoc.com>
>
> But I'm happy to see a patch from Unisoc for RDA Micro SoC :)
>
> - Mani
>
>> ---
>> drivers/clocksource/timer-rda.c | 9 ++++++++-
>> 1 file changed, 8 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/clocksource/timer-rda.c b/drivers/clocksource/timer-rda.c
>> index fd1199c189bf..0be8e05970e2 100644
>> --- a/drivers/clocksource/timer-rda.c
>> +++ b/drivers/clocksource/timer-rda.c
>> @@ -13,6 +13,7 @@
>>
>> #include <linux/init.h>
>> #include <linux/interrupt.h>
>> +#include <linux/sched_clock.h>
>>
>> #include "timer-of.h"
>>
>> @@ -153,7 +154,7 @@ static struct timer_of rda_ostimer_of = {
>> },
>> };
>>
>> -static u64 rda_hwtimer_read(struct clocksource *cs)
>> +static u64 rda_hwtimer_clocksource_read(void)
>> {
>> void __iomem *base = timer_of_base(&rda_ostimer_of);
>> u32 lo, hi;
>> @@ -167,6 +168,11 @@ static u64 rda_hwtimer_read(struct clocksource *cs)
>> return ((u64)hi << 32) | lo;
>> }
>>
>> +static u64 rda_hwtimer_read(struct clocksource *cs)
>> +{
>> + return rda_hwtimer_clocksource_read();
>> +}
>> +
>> static struct clocksource rda_hwtimer_clocksource = {
>> .name = "rda-timer",
>> .rating = 400,
>> @@ -185,6 +191,7 @@ static int __init rda_timer_init(struct device_node *np)
>> return ret;
>>
>> clocksource_register_hz(&rda_hwtimer_clocksource, rate);
>> + sched_clock_register(rda_hwtimer_clocksource_read, 64, rate);
>>
>> clockevents_config_and_register(&rda_ostimer_of.clkevt, rate,
>> 0x2, UINT_MAX);
>> --
>> 2.39.5
>>
>
Hi Everyone
Who can help review this patch?
thanks
On 2025/11/7 14:33, Enlin Mu wrote:
> From: Enlin Mu <enlin.mu@unisoc.com>
>
> The current system log timestamp accuracy is tick, which can not
> meet the usage requirements and needs to reach nanoseconds.
> Therefore, the sched_clock_register funciton needs to be add.
>
> Signed-off-by: Enlin Mu <enlin.mu@unisoc.com>
> ---
> drivers/clocksource/timer-rda.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/clocksource/timer-rda.c b/drivers/clocksource/timer-rda.c
> index fd1199c189bf..0be8e05970e2 100644
> --- a/drivers/clocksource/timer-rda.c
> +++ b/drivers/clocksource/timer-rda.c
> @@ -13,6 +13,7 @@
>
> #include <linux/init.h>
> #include <linux/interrupt.h>
> +#include <linux/sched_clock.h>
>
> #include "timer-of.h"
>
> @@ -153,7 +154,7 @@ static struct timer_of rda_ostimer_of = {
> },
> };
>
> -static u64 rda_hwtimer_read(struct clocksource *cs)
> +static u64 rda_hwtimer_clocksource_read(void)
> {
> void __iomem *base = timer_of_base(&rda_ostimer_of);
> u32 lo, hi;
> @@ -167,6 +168,11 @@ static u64 rda_hwtimer_read(struct clocksource *cs)
> return ((u64)hi << 32) | lo;
> }
>
> +static u64 rda_hwtimer_read(struct clocksource *cs)
> +{
> + return rda_hwtimer_clocksource_read();
> +}
> +
> static struct clocksource rda_hwtimer_clocksource = {
> .name = "rda-timer",
> .rating = 400,
> @@ -185,6 +191,7 @@ static int __init rda_timer_init(struct device_node *np)
> return ret;
>
> clocksource_register_hz(&rda_hwtimer_clocksource, rate);
> + sched_clock_register(rda_hwtimer_clocksource_read, 64, rate);
>
> clockevents_config_and_register(&rda_ostimer_of.clkevt, rate,
> 0x2, UINT_MAX);
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: 627f3f3716a3591f5e6a6bd124c95eef85444080
Gitweb: https://git.kernel.org/tip/627f3f3716a3591f5e6a6bd124c95eef85444080
Author: Enlin Mu <enlin.mu@unisoc.com>
AuthorDate: Fri, 07 Nov 2025 14:33:47 +08:00
Committer: Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Wed, 26 Nov 2025 11:25:11 +01:00
clocksource/drivers/rda: Add sched_clock_register for RDA8810PL SoC
The current system log timestamp accuracy is tick based, which can not
meet the usage requirements and needs to reach nanoseconds.
Therefore, the sched_clock_register function needs to be added.
[ dlezcano: Fixed typos ]
Signed-off-by: Enlin Mu <enlin.mu@unisoc.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Link: https://patch.msgid.link/20251107063347.3692-1-enlin.mu@linux.dev
---
drivers/clocksource/timer-rda.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/clocksource/timer-rda.c b/drivers/clocksource/timer-rda.c
index fd1199c..0be8e05 100644
--- a/drivers/clocksource/timer-rda.c
+++ b/drivers/clocksource/timer-rda.c
@@ -13,6 +13,7 @@
#include <linux/init.h>
#include <linux/interrupt.h>
+#include <linux/sched_clock.h>
#include "timer-of.h"
@@ -153,7 +154,7 @@ static struct timer_of rda_ostimer_of = {
},
};
-static u64 rda_hwtimer_read(struct clocksource *cs)
+static u64 rda_hwtimer_clocksource_read(void)
{
void __iomem *base = timer_of_base(&rda_ostimer_of);
u32 lo, hi;
@@ -167,6 +168,11 @@ static u64 rda_hwtimer_read(struct clocksource *cs)
return ((u64)hi << 32) | lo;
}
+static u64 rda_hwtimer_read(struct clocksource *cs)
+{
+ return rda_hwtimer_clocksource_read();
+}
+
static struct clocksource rda_hwtimer_clocksource = {
.name = "rda-timer",
.rating = 400,
@@ -185,6 +191,7 @@ static int __init rda_timer_init(struct device_node *np)
return ret;
clocksource_register_hz(&rda_hwtimer_clocksource, rate);
+ sched_clock_register(rda_hwtimer_clocksource_read, 64, rate);
clockevents_config_and_register(&rda_ostimer_of.clkevt, rate,
0x2, UINT_MAX);
© 2016 - 2025 Red Hat, Inc.