[PATCH V2] clocksource/drivers/rda: Add sched_clock_register for RDA8810PL SoC

Enlin Mu posted 1 patch 1 month, 1 week ago
drivers/clocksource/timer-rda.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
[PATCH V2] clocksource/drivers/rda: Add sched_clock_register for RDA8810PL SoC
Posted by Enlin Mu 1 month, 1 week ago
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
Re: [PATCH V2] clocksource/drivers/rda: Add sched_clock_register for RDA8810PL SoC
Posted by Manivannan Sadhasivam 1 month ago
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
> 

-- 
மணிவண்ணன் சதாசிவம்
Re: [PATCH V2] clocksource/drivers/rda: Add sched_clock_register for RDA8810PL SoC
Posted by enlin.mu 1 month ago

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
>>
>
Re: [PATCH V2] clocksource/drivers/rda: Add sched_clock_register for RDA8810PL SoC
Posted by enlin.mu 1 month ago
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);
[tip: timers/clocksource] clocksource/drivers/rda: Add sched_clock_register for RDA8810PL SoC
Posted by tip-bot2 for Enlin Mu 3 weeks, 2 days ago
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);