cpufreq: imx6q: Move speed grading check to cpufreq driver
Subsystems (4)
Fabio Estevam
reviewerPATCH v3 1/1 cpufreq: imx6q: Move speed grading check to cpufreq driver
From: Fabio Estevam <[email protected]>
On some i.MX6 SoCs (like i.MX6SL, i.MX6SX and i.MX6UL) that do not have speed grading check, opp table will not be created in platform code, so cpufreq driver prints the following error message:
cpu cpu0: dev_pm_opp_get_opp_count: OPP table not found (-19)
However, this is not really an error in this case because the imx6q-cpufreq driver first calls dev_pm_opp_get_opp_count() and if it fails, it means that platform code does not provide OPP and then dev_pm_opp_of_add_table() will be called.
In order to avoid such confusing error message, move the speed grading check from platform code to the imx6q-cpufreq driver.
This way the imx6q-cpufreq no longer has to check whether OPP table is supplied by platform code.
Tested on a i.MX6Q and i.MX6UL based boards.
---
Previous discussion on this topic:
https://patchwork.kernel.org/patch/9295059/
Changes since v2:
- Fixed a typo in the commit log (missed SL) - Otavio
- Remove __init anotation from imx6q_opp_check_speed_grading() Changes since v1:
- Remove unneeded has_speed_grading() function.
arch/arm/mach-imx/mach-imx6q.c | 88 +---------------------------------------- drivers/cpufreq/imx6q-cpufreq.c | 85 +++++++++++++++++++++++++++++---------- 2 files changed, 67 insertions(+), 106 deletions(-)
arch/arm/mach-imx/mach-imx6q.c +2 -86
@@ -286,88 +286,6 @@ static void __init imx6q_init_machine(void)imx6q_axi_init (); } -#define OCOTP_CFG3 0x440 -#define OCOTP_CFG3_SPEED_SHIFT 16 -#define OCOTP_CFG3_SPEED_1P2GHZ 0x3 -#define OCOTP_CFG3_SPEED_996MHZ 0x2 -#define OCOTP_CFG3_SPEED_852MHZ 0x1 - -static void __init imx6q_opp_check_speed_grading (struct device *cpu_dev) -{ -struct device_node *np; -void __iomem *base; -u32 val; - - np =of_find_compatible_node (NULL ,NULL ,"fsl,imx6q-ocotp" ); -if (!np) { -pr_warn ("failed to find ocotp node\n" ); -return ; - } - - base =of_iomap (np,0 ); -if (!base) { -pr_warn ("failed to map ocotp\n" ); - goto put_node; - } - -/* -* SPEED_GRADING[1:0] defines the max speed of ARM: -* 2b'11: 1200000000Hz; -* 2b'10: 996000000Hz; -* 2b'01: 852000000Hz; -- i.MX6Q Only, exclusive with 996MHz. -* 2b'00: 792000000Hz; -* We need to set the max speed of ARM according to fuse map. -*/ - val =readl_relaxed (base +OCOTP_CFG3 ); - val >>=OCOTP_CFG3_SPEED_SHIFT ; - val &=0x3 ; - -if ((val !=OCOTP_CFG3_SPEED_1P2GHZ ) &&cpu_is_imx6q ()) -if (dev_pm_opp_disable (cpu_dev,1200000000 )) -pr_warn ("failed to disable 1.2 GHz OPP\n" ); -if (val <OCOTP_CFG3_SPEED_996MHZ ) -if (dev_pm_opp_disable (cpu_dev,996000000 )) -pr_warn ("failed to disable 996 MHz OPP\n" ); -if (cpu_is_imx6q ()) { -if (val !=OCOTP_CFG3_SPEED_852MHZ ) -if (dev_pm_opp_disable (cpu_dev,852000000 )) -pr_warn ("failed to disable 852 MHz OPP\n" ); - } -iounmap (base); -put_node: -of_node_put (np); -} - -static void __init imx6q_opp_init (void ) -{ -struct device_node *np; -struct device *cpu_dev =get_cpu_device (0 ); - -if (!cpu_dev) { -pr_warn ("failed to get cpu0 device\n" ); -return ; - } - np =of_node_get (cpu_dev->of_node); -if (!np) { -pr_warn ("failed to find cpu0 node\n" ); -return ; - } - -if (dev_pm_opp_of_add_table (cpu_dev)) { -pr_warn ("failed to init OPP table\n" ); - goto put_node; - } - -imx6q_opp_check_speed_grading (cpu_dev); - -put_node: -of_node_put (np); -} - -static struct platform_device imx6q_cpufreq_pdev = { - .name ="imx6q-cpufreq" , -}; -static void __init imx6q_init_late (void ) {/*
@@ -377,10 +295,8 @@ static void __init imx6q_init_late(void)if (imx_get_soc_revision () >IMX_CHIP_REVISION_1_1 )imx6q_cpuidle_init (); -if (IS_ENABLED (CONFIG_ARM_IMX6Q_CPUFREQ )) { -imx6q_opp_init (); -platform_device_register (&imx6q_cpufreq_pdev); - } +if (IS_ENABLED (CONFIG_ARM_IMX6Q_CPUFREQ )) +platform_device_register_simple ("imx6q-cpufreq" ,-1 ,NULL ,0 ); }static void __init imx6q_map_io (void )
drivers/cpufreq/imx6q-cpufreq.c +65 -20
105 lines not on this page · raw message
Signature · 1 line
2.7.4
Viresh Kumar
maintainerPATCH v3 1/1 cpufreq: imx6q: Move speed grading check to cpufreq driver
Quoted 26 lines · Fabio Estevam
From: Fabio Estevam <[email protected]>
On some i.MX6 SoCs (like i.MX6SL, i.MX6SX and i.MX6UL) that do not have speed grading check, opp table will not be created in platform code, so cpufreq driver prints the following error message:
cpu cpu0:
dev_pm_opp_get_opp_count: OPP table not found (-19)However, this is not really an error in this case because the imx6q-cpufreq driver first calls
dev_pm_opp_get_opp_count()and if it fails, it means that platform code does not provide OPP and thendev_pm_opp_of_add_table()will be called.In order to avoid such confusing error message, move the speed grading check from platform code to the imx6q-cpufreq driver.
This way the imx6q-cpufreq no longer has to check whether OPP table is supplied by platform code.
Tested on a i.MX6Q and i.MX6UL based boards.
Signed-off-by Fabio Estevam <[email protected]>---
Previous discussion on this topic:
https://patchwork.kernel.org/patch/9295059/
Quoted 5 lines
Changes since v2:
- Fixed a typo in the commit log (missed SL) - Otavio
- Remove__initanotation fromimx6q_opp_check_speed_grading()Changes since v1:
- Remove unneededhas_speed_grading()function.
Looks fine to me.
@Shawn: Can you please let us know if you are fine with it?
Signature · 1 line
viresh
PATCH v3 1/1 cpufreq: imx6q: Move speed grading check to cpufreq driver
Quoted 33 lines · Viresh Kumar
Quoted 26 lines · Fabio Estevam
From: Fabio Estevam <[email protected]>
On some i.MX6 SoCs (like i.MX6SL, i.MX6SX and i.MX6UL) that do not have speed grading check, opp table will not be created in platform code, so cpufreq driver prints the following error message:
cpu cpu0:
dev_pm_opp_get_opp_count: OPP table not found (-19)However, this is not really an error in this case because the imx6q-cpufreq driver first calls
dev_pm_opp_get_opp_count()and if it fails, it means that platform code does not provide OPP and thendev_pm_opp_of_add_table()will be called.In order to avoid such confusing error message, move the speed grading check from platform code to the imx6q-cpufreq driver.
This way the imx6q-cpufreq no longer has to check whether OPP table is supplied by platform code.
Tested on a i.MX6Q and i.MX6UL based boards.
Signed-off-by Fabio Estevam <[email protected]>---
Previous discussion on this topic:
https://patchwork.kernel.org/patch/9295059/Quoted 5 lines
Changes since v2:
- Fixed a typo in the commit log (missed SL) - Otavio
- Remove__initanotation fromimx6q_opp_check_speed_grading()Changes since v1:
- Remove unneededhas_speed_grading()function.
Quoted 3 lines
Looks fine to me.
@Shawn: Can you please let us know if you are fine with it?
Fabio Estevam
reviewerPATCH v3 1/1 cpufreq: imx6q: Move speed grading check to cpufreq driver
Hi Viresh,
Quoted 5 lines · Shawn Guo
Quoted 3 lines
Looks fine to me.
@Shawn: Can you please let us know if you are fine with it?
Acked-by Shawn Guo <[email protected]>
Will this one go through your tree?
Thanks
PATCH v3 1/1 cpufreq: imx6q: Move speed grading check to cpufreq driver
Quoted 11 lines · CEST Fabio Estevam
Hi Viresh,
Quoted 5 lines · Shawn Guo
Quoted 3 lines
Looks fine to me.
@Shawn: Can you please let us know if you are fine with it?
Acked-by Shawn Guo <[email protected]>Will this one go through your tree?
No, it won't.
It could go in via the PM tree (which covers cpufreq), but I'd prefer it to go in via arm-soc.
Thanks,
Rafael
Fabio Estevam
reviewerPATCH v3 1/1 cpufreq: imx6q: Move speed grading check to cpufreq driver
Quoted 2 lines · Rafael J. Wysocki
It could go in via the PM tree (which covers cpufreq), but I'd prefer it to go in via arm-soc.
Sounds good for me. In this case I think Shawn will apply it.
Thanks
PATCH v3 1/1 cpufreq: imx6q: Move speed grading check to cpufreq driver
Quoted 6 lines · Fabio Estevam
Quoted 2 lines · Rafael J. Wysocki
It could go in via the PM tree (which covers cpufreq), but I'd prefer it to go in via arm-soc.
Sounds good for me. In this case I think Shawn will apply it.
Okay, applied to imx/soc branch, thanks.
Shawn