Message ID | 20240828062459.1853837-1-chenhuacai@loongson.cn (mailing list archive) |
---|---|
State | New |
Delegated to: | viresh kumar |
Headers | show |
Series | cpufreq: loongson3: Use raw_smp_processor_id() in do_service_request() | expand |
On Wed, 2024-08-28 at 14:24 +0800, Huacai Chen wrote: > Use raw_smp_processor_id() instead of plain smp_processor_id() in > do_service_request(), otherwise we may get some errors with the driver > enabled: > > BUG: using smp_processor_id() in preemptible [00000000] code: (udev- > worker)/208 > caller is loongson3_cpufreq_probe+0x5c/0x250 [loongson3_cpufreq] > > Reported-by: Xi Ruoyao <xry111@xry111.site> > Tested-by: Binbin Zhou <zhoubinbin@loongson.cn> > Signed-off-by: Huacai Chen <chenhuacai@loongson.cn> Tested-by: Xi Ruoyao <xry111@xry111.site> After this patch the BUG() message is gone, but I still get [ 6.610357] loongson3_cpufreq loongson3_cpufreq: probe with driver loongson3_cpufreq failed with error -1 -1 is EPERM and there are several "return -EPERM;" in the code. Not sure which one. Do I need to modify some firmware setting to make it work? FWIW I'm building it as a module. Should I try building it as a part of vmlinux? > --- > drivers/cpufreq/loongson3_cpufreq.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/cpufreq/loongson3_cpufreq.c > b/drivers/cpufreq/loongson3_cpufreq.c > index 5f79b6de127c..6b5e6798d9a2 100644 > --- a/drivers/cpufreq/loongson3_cpufreq.c > +++ b/drivers/cpufreq/loongson3_cpufreq.c > @@ -176,7 +176,7 @@ static DEFINE_PER_CPU(struct loongson3_freq_data > *, freq_data); > static inline int do_service_request(u32 id, u32 info, u32 cmd, u32 > val, u32 extra) > { > int retries; > - unsigned int cpu = smp_processor_id(); > + unsigned int cpu = raw_smp_processor_id(); > unsigned int package = cpu_data[cpu].package; > union smc_message msg, last; >
On Wed, Aug 28, 2024 at 7:59 PM Xi Ruoyao <xry111@xry111.site> wrote: > > On Wed, 2024-08-28 at 14:24 +0800, Huacai Chen wrote: > > Use raw_smp_processor_id() instead of plain smp_processor_id() in > > do_service_request(), otherwise we may get some errors with the driver > > enabled: > > > > BUG: using smp_processor_id() in preemptible [00000000] code: (udev- > > worker)/208 > > caller is loongson3_cpufreq_probe+0x5c/0x250 [loongson3_cpufreq] > > > > Reported-by: Xi Ruoyao <xry111@xry111.site> > > Tested-by: Binbin Zhou <zhoubinbin@loongson.cn> > > Signed-off-by: Huacai Chen <chenhuacai@loongson.cn> > > Tested-by: Xi Ruoyao <xry111@xry111.site> > > After this patch the BUG() message is gone, but I still get > > [ 6.610357] loongson3_cpufreq loongson3_cpufreq: probe with driver loongson3_cpufreq failed with error -1 > > -1 is EPERM and there are several "return -EPERM;" in the code. Not > sure which one. > > Do I need to modify some firmware setting to make it work? You should update your firmware. > > FWIW I'm building it as a module. Should I try building it as a part of > vmlinux? No need. Huacai > > > --- > > drivers/cpufreq/loongson3_cpufreq.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/cpufreq/loongson3_cpufreq.c > > b/drivers/cpufreq/loongson3_cpufreq.c > > index 5f79b6de127c..6b5e6798d9a2 100644 > > --- a/drivers/cpufreq/loongson3_cpufreq.c > > +++ b/drivers/cpufreq/loongson3_cpufreq.c > > @@ -176,7 +176,7 @@ static DEFINE_PER_CPU(struct loongson3_freq_data > > *, freq_data); > > static inline int do_service_request(u32 id, u32 info, u32 cmd, u32 > > val, u32 extra) > > { > > int retries; > > - unsigned int cpu = smp_processor_id(); > > + unsigned int cpu = raw_smp_processor_id(); > > unsigned int package = cpu_data[cpu].package; > > union smc_message msg, last; > > > > -- > Xi Ruoyao <xry111@xry111.site> > School of Aerospace Science and Technology, Xidian University >
On Wed, 2024-08-28 at 21:55 +0800, Huacai Chen wrote: > > Do I need to modify some firmware setting to make it work? > You should update your firmware. I've already updated to UDK2018-3A6000- 7A2000_EVB_V4.0.05756_prestable2405_0523dbg.fd on a XA61200 before trying CPUFreq. And I also tried enabling DVFS in the firmware setting, and disabling the overclocking. Both didn't work.
On Thu, Aug 29, 2024 at 3:33 PM Xi Ruoyao <xry111@xry111.site> wrote: > > On Wed, 2024-08-28 at 21:55 +0800, Huacai Chen wrote: > > > Do I need to modify some firmware setting to make it work? > > You should update your firmware. > > I've already updated to UDK2018-3A6000- > 7A2000_EVB_V4.0.05756_prestable2405_0523dbg.fd on a XA61200 before > trying CPUFreq. > > And I also tried enabling DVFS in the firmware setting, and disabling > the overclocking. Both didn't work. Hmm, current firmware with DVFS can only cooperate with the old CPUFreq driver in old-world kernels. New firmware which can cooperate with the upstream CPUFreq driver hasn't been released yet. Huacai > > -- > Xi Ruoyao <xry111@xry111.site> > School of Aerospace Science and Technology, Xidian University
On 28-08-24, 14:24, Huacai Chen wrote: > Use raw_smp_processor_id() instead of plain smp_processor_id() in > do_service_request(), otherwise we may get some errors with the driver > enabled: > > BUG: using smp_processor_id() in preemptible [00000000] code: (udev-worker)/208 > caller is loongson3_cpufreq_probe+0x5c/0x250 [loongson3_cpufreq] > > Reported-by: Xi Ruoyao <xry111@xry111.site> > Tested-by: Binbin Zhou <zhoubinbin@loongson.cn> > Signed-off-by: Huacai Chen <chenhuacai@loongson.cn> > --- > drivers/cpufreq/loongson3_cpufreq.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Applied. Thanks.
diff --git a/drivers/cpufreq/loongson3_cpufreq.c b/drivers/cpufreq/loongson3_cpufreq.c index 5f79b6de127c..6b5e6798d9a2 100644 --- a/drivers/cpufreq/loongson3_cpufreq.c +++ b/drivers/cpufreq/loongson3_cpufreq.c @@ -176,7 +176,7 @@ static DEFINE_PER_CPU(struct loongson3_freq_data *, freq_data); static inline int do_service_request(u32 id, u32 info, u32 cmd, u32 val, u32 extra) { int retries; - unsigned int cpu = smp_processor_id(); + unsigned int cpu = raw_smp_processor_id(); unsigned int package = cpu_data[cpu].package; union smc_message msg, last;