ipq806x: refresh new and changed patches

Refresh patches to remove fuzz

Tested-by: Stefan Lippers-Hollmann <s.l-h@gmx.de> [nbg6817/ipq8065]
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
This commit is contained in:
Ansuel Smith 2019-12-16 20:26:25 +01:00 committed by Petr Štetiar
parent 62a4e4b319
commit c8086c7d2d
9 changed files with 497 additions and 213 deletions

View File

@ -12,8 +12,6 @@ Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
drivers/cpufreq/qcom-cpufreq-kryo.c | 2 +- drivers/cpufreq/qcom-cpufreq-kryo.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/cpufreq/qcom-cpufreq-kryo.c b/drivers/cpufreq/qcom-cpufreq-kryo.c
index 2a3675c24032b..1c8583cc06a2a 100644
--- a/drivers/cpufreq/qcom-cpufreq-kryo.c --- a/drivers/cpufreq/qcom-cpufreq-kryo.c
+++ b/drivers/cpufreq/qcom-cpufreq-kryo.c +++ b/drivers/cpufreq/qcom-cpufreq-kryo.c
@@ -42,7 +42,7 @@ enum _msm8996_version { @@ -42,7 +42,7 @@ enum _msm8996_version {

View File

@ -25,11 +25,9 @@ Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
4 files changed, 78 insertions(+), 54 deletions(-) 4 files changed, 78 insertions(+), 54 deletions(-)
rename drivers/cpufreq/{qcom-cpufreq-kryo.c => qcom-cpufreq-nvmem.c} (69%) rename drivers/cpufreq/{qcom-cpufreq-kryo.c => qcom-cpufreq-nvmem.c} (69%)
diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm
index 56c31a78c6920..b1aa485a28dde 100644
--- a/drivers/cpufreq/Kconfig.arm --- a/drivers/cpufreq/Kconfig.arm
+++ b/drivers/cpufreq/Kconfig.arm +++ b/drivers/cpufreq/Kconfig.arm
@@ -120,8 +120,8 @@ config ARM_OMAP2PLUS_CPUFREQ @@ -110,8 +110,8 @@ config ARM_OMAP2PLUS_CPUFREQ
depends on ARCH_OMAP2PLUS depends on ARCH_OMAP2PLUS
default ARCH_OMAP2PLUS default ARCH_OMAP2PLUS
@ -40,11 +38,9 @@ index 56c31a78c6920..b1aa485a28dde 100644
depends on ARM64 depends on ARM64
depends on QCOM_QFPROM depends on QCOM_QFPROM
depends on QCOM_SMEM depends on QCOM_SMEM
diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile
index 5a6c70d26c985..8572a918aa755 100644
--- a/drivers/cpufreq/Makefile --- a/drivers/cpufreq/Makefile
+++ b/drivers/cpufreq/Makefile +++ b/drivers/cpufreq/Makefile
@@ -64,7 +64,7 @@ obj-$(CONFIG_MACH_MVEBU_V7) += mvebu-cpufreq.o @@ -64,7 +64,7 @@ obj-$(CONFIG_MACH_MVEBU_V7) += mvebu-cp
obj-$(CONFIG_ARM_OMAP2PLUS_CPUFREQ) += omap-cpufreq.o obj-$(CONFIG_ARM_OMAP2PLUS_CPUFREQ) += omap-cpufreq.o
obj-$(CONFIG_ARM_PXA2xx_CPUFREQ) += pxa2xx-cpufreq.o obj-$(CONFIG_ARM_PXA2xx_CPUFREQ) += pxa2xx-cpufreq.o
obj-$(CONFIG_PXA3xx) += pxa3xx-cpufreq.o obj-$(CONFIG_PXA3xx) += pxa3xx-cpufreq.o
@ -53,55 +49,344 @@ index 5a6c70d26c985..8572a918aa755 100644
obj-$(CONFIG_ARM_S3C2410_CPUFREQ) += s3c2410-cpufreq.o obj-$(CONFIG_ARM_S3C2410_CPUFREQ) += s3c2410-cpufreq.o
obj-$(CONFIG_ARM_S3C2412_CPUFREQ) += s3c2412-cpufreq.o obj-$(CONFIG_ARM_S3C2412_CPUFREQ) += s3c2412-cpufreq.o
obj-$(CONFIG_ARM_S3C2416_CPUFREQ) += s3c2416-cpufreq.o obj-$(CONFIG_ARM_S3C2416_CPUFREQ) += s3c2416-cpufreq.o
diff --git a/drivers/cpufreq/qcom-cpufreq-kryo.c b/drivers/cpufreq/qcom-cpufreq-nvmem.c
similarity index 69%
rename from drivers/cpufreq/qcom-cpufreq-kryo.c
rename to drivers/cpufreq/qcom-cpufreq-nvmem.c
index dd64dcf89c74c..fd08120768af2 100644
--- a/drivers/cpufreq/qcom-cpufreq-kryo.c --- a/drivers/cpufreq/qcom-cpufreq-kryo.c
+++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c +++ /dev/null
@@ -9,7 +9,7 @@ @@ -1,249 +0,0 @@
* based on the silicon variant in use. Qualcomm Process Voltage Scaling Tables -// SPDX-License-Identifier: GPL-2.0
* defines the voltage and frequency value based on the msm-id in SMEM -/*
* and speedbin blown in the efuse combination. - * Copyright (c) 2018, The Linux Foundation. All rights reserved.
- */
-
-/*
- * In Certain QCOM SoCs like apq8096 and msm8996 that have KRYO processors,
- * the CPU frequency subset and voltage value of each OPP varies
- * based on the silicon variant in use. Qualcomm Process Voltage Scaling Tables
- * defines the voltage and frequency value based on the msm-id in SMEM
- * and speedbin blown in the efuse combination.
- * The qcom-cpufreq-kryo driver reads the msm-id and efuse value from the SoC - * The qcom-cpufreq-kryo driver reads the msm-id and efuse value from the SoC
+ * The qcom-cpufreq-nvmem driver reads the msm-id and efuse value from the SoC - * to provide the OPP framework with required information.
* to provide the OPP framework with required information. - * This is used to determine the voltage and frequency value for each OPP of
* This is used to determine the voltage and frequency value for each OPP of - * operating-points-v2 table when it is parsed by the OPP framework.
* operating-points-v2 table when it is parsed by the OPP framework. - */
@@ -22,6 +22,7 @@ -
#include <linux/module.h> -#include <linux/cpu.h>
#include <linux/nvmem-consumer.h> -#include <linux/err.h>
#include <linux/of.h> -#include <linux/init.h>
+#include <linux/of_device.h> -#include <linux/kernel.h>
#include <linux/platform_device.h> -#include <linux/module.h>
#include <linux/pm_opp.h> -#include <linux/nvmem-consumer.h>
#include <linux/slab.h> -#include <linux/of.h>
@@ -42,9 +43,9 @@ enum _msm8996_version { -#include <linux/platform_device.h>
NUM_OF_MSM8996_VERSIONS, -#include <linux/pm_opp.h>
}; -#include <linux/slab.h>
-#include <linux/soc/qcom/smem.h>
-
-#define MSM_ID_SMEM 137
-
-enum _msm_id {
- MSM8996V3 = 0xF6ul,
- APQ8096V3 = 0x123ul,
- MSM8996SG = 0x131ul,
- APQ8096SG = 0x138ul,
-};
-
-enum _msm8996_version {
- MSM8996_V3,
- MSM8996_SG,
- NUM_OF_MSM8996_VERSIONS,
-};
-
-static struct platform_device *cpufreq_dt_pdev, *kryo_cpufreq_pdev; -static struct platform_device *cpufreq_dt_pdev, *kryo_cpufreq_pdev;
+static struct platform_device *cpufreq_dt_pdev, *cpufreq_pdev; -
-static enum _msm8996_version qcom_cpufreq_kryo_get_msm_id(void) -static enum _msm8996_version qcom_cpufreq_kryo_get_msm_id(void)
+static enum _msm8996_version qcom_cpufreq_get_msm_id(void) -{
{ - size_t len;
size_t len; - u32 *msm_id;
u32 *msm_id; - enum _msm8996_version version;
@@ -73,28 +74,62 @@ static enum _msm8996_version qcom_cpufreq_kryo_get_msm_id(void) -
return version; - msm_id = qcom_smem_get(QCOM_SMEM_HOST_ANY, MSM_ID_SMEM, &len);
} - if (IS_ERR(msm_id))
- return NUM_OF_MSM8996_VERSIONS;
-
- /* The first 4 bytes are format, next to them is the actual msm-id */
- msm_id++;
-
- switch ((enum _msm_id)*msm_id) {
- case MSM8996V3:
- case APQ8096V3:
- version = MSM8996_V3;
- break;
- case MSM8996SG:
- case APQ8096SG:
- version = MSM8996_SG;
- break;
- default:
- version = NUM_OF_MSM8996_VERSIONS;
- }
-
- return version;
-}
-
-static int qcom_cpufreq_kryo_probe(struct platform_device *pdev) -static int qcom_cpufreq_kryo_probe(struct platform_device *pdev)
-{
- struct opp_table **opp_tables;
- enum _msm8996_version msm8996_version;
- struct nvmem_cell *speedbin_nvmem;
- struct device_node *np;
- struct device *cpu_dev;
- unsigned cpu;
- u8 *speedbin;
- u32 versions;
- size_t len;
- int ret;
-
- cpu_dev = get_cpu_device(0);
- if (!cpu_dev)
- return -ENODEV;
-
- msm8996_version = qcom_cpufreq_kryo_get_msm_id();
- if (NUM_OF_MSM8996_VERSIONS == msm8996_version) {
- dev_err(cpu_dev, "Not Snapdragon 820/821!");
- return -ENODEV;
- }
-
- np = dev_pm_opp_of_get_opp_desc_node(cpu_dev);
- if (!np)
- return -ENOENT;
-
- ret = of_device_is_compatible(np, "operating-points-v2-kryo-cpu");
- if (!ret) {
- of_node_put(np);
- return -ENOENT;
- }
-
- speedbin_nvmem = of_nvmem_cell_get(np, NULL);
- of_node_put(np);
- if (IS_ERR(speedbin_nvmem)) {
- if (PTR_ERR(speedbin_nvmem) != -EPROBE_DEFER)
- dev_err(cpu_dev, "Could not get nvmem cell: %ld\n",
- PTR_ERR(speedbin_nvmem));
- return PTR_ERR(speedbin_nvmem);
- }
-
- speedbin = nvmem_cell_read(speedbin_nvmem, &len);
- nvmem_cell_put(speedbin_nvmem);
- if (IS_ERR(speedbin))
- return PTR_ERR(speedbin);
-
- switch (msm8996_version) {
- case MSM8996_V3:
- versions = 1 << (unsigned int)(*speedbin);
- break;
- case MSM8996_SG:
- versions = 1 << ((unsigned int)(*speedbin) + 4);
- break;
- default:
- BUG();
- break;
- }
- kfree(speedbin);
-
- opp_tables = kcalloc(num_possible_cpus(), sizeof(*opp_tables), GFP_KERNEL);
- if (!opp_tables)
- return -ENOMEM;
-
- for_each_possible_cpu(cpu) {
- cpu_dev = get_cpu_device(cpu);
- if (NULL == cpu_dev) {
- ret = -ENODEV;
- goto free_opp;
- }
-
- opp_tables[cpu] = dev_pm_opp_set_supported_hw(cpu_dev,
- &versions, 1);
- if (IS_ERR(opp_tables[cpu])) {
- ret = PTR_ERR(opp_tables[cpu]);
- dev_err(cpu_dev, "Failed to set supported hardware\n");
- goto free_opp;
- }
- }
-
- cpufreq_dt_pdev = platform_device_register_simple("cpufreq-dt", -1,
- NULL, 0);
- if (!IS_ERR(cpufreq_dt_pdev)) {
- platform_set_drvdata(pdev, opp_tables);
- return 0;
- }
-
- ret = PTR_ERR(cpufreq_dt_pdev);
- dev_err(cpu_dev, "Failed to register platform device\n");
-
-free_opp:
- for_each_possible_cpu(cpu) {
- if (IS_ERR_OR_NULL(opp_tables[cpu]))
- break;
- dev_pm_opp_put_supported_hw(opp_tables[cpu]);
- }
- kfree(opp_tables);
-
- return ret;
-}
-
-static int qcom_cpufreq_kryo_remove(struct platform_device *pdev)
-{
- struct opp_table **opp_tables = platform_get_drvdata(pdev);
- unsigned int cpu;
-
- platform_device_unregister(cpufreq_dt_pdev);
-
- for_each_possible_cpu(cpu)
- dev_pm_opp_put_supported_hw(opp_tables[cpu]);
-
- kfree(opp_tables);
-
- return 0;
-}
-
-static struct platform_driver qcom_cpufreq_kryo_driver = {
- .probe = qcom_cpufreq_kryo_probe,
- .remove = qcom_cpufreq_kryo_remove,
- .driver = {
- .name = "qcom-cpufreq-kryo",
- },
-};
-
-static const struct of_device_id qcom_cpufreq_kryo_match_list[] __initconst = {
- { .compatible = "qcom,apq8096", },
- { .compatible = "qcom,msm8996", },
- {}
-};
-
-/*
- * Since the driver depends on smem and nvmem drivers, which may
- * return EPROBE_DEFER, all the real activity is done in the probe,
- * which may be defered as well. The init here is only registering
- * the driver and the platform device.
- */
-static int __init qcom_cpufreq_kryo_init(void)
-{
- struct device_node *np = of_find_node_by_path("/");
- const struct of_device_id *match;
- int ret;
-
- if (!np)
- return -ENODEV;
-
- match = of_match_node(qcom_cpufreq_kryo_match_list, np);
- of_node_put(np);
- if (!match)
- return -ENODEV;
-
- ret = platform_driver_register(&qcom_cpufreq_kryo_driver);
- if (unlikely(ret < 0))
- return ret;
-
- kryo_cpufreq_pdev = platform_device_register_simple(
- "qcom-cpufreq-kryo", -1, NULL, 0);
- ret = PTR_ERR_OR_ZERO(kryo_cpufreq_pdev);
- if (0 == ret)
- return 0;
-
- platform_driver_unregister(&qcom_cpufreq_kryo_driver);
- return ret;
-}
-module_init(qcom_cpufreq_kryo_init);
-
-static void __exit qcom_cpufreq_kryo_exit(void)
-{
- platform_device_unregister(kryo_cpufreq_pdev);
- platform_driver_unregister(&qcom_cpufreq_kryo_driver);
-}
-module_exit(qcom_cpufreq_kryo_exit);
-
-MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Kryo CPUfreq driver");
-MODULE_LICENSE("GPL v2");
--- /dev/null
+++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c
@@ -0,0 +1,273 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2018, The Linux Foundation. All rights reserved.
+ */
+
+/*
+ * In Certain QCOM SoCs like apq8096 and msm8996 that have KRYO processors,
+ * the CPU frequency subset and voltage value of each OPP varies
+ * based on the silicon variant in use. Qualcomm Process Voltage Scaling Tables
+ * defines the voltage and frequency value based on the msm-id in SMEM
+ * and speedbin blown in the efuse combination.
+ * The qcom-cpufreq-nvmem driver reads the msm-id and efuse value from the SoC
+ * to provide the OPP framework with required information.
+ * This is used to determine the voltage and frequency value for each OPP of
+ * operating-points-v2 table when it is parsed by the OPP framework.
+ */
+
+#include <linux/cpu.h>
+#include <linux/err.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/nvmem-consumer.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <linux/pm_opp.h>
+#include <linux/slab.h>
+#include <linux/soc/qcom/smem.h>
+
+#define MSM_ID_SMEM 137
+
+enum _msm_id {
+ MSM8996V3 = 0xF6ul,
+ APQ8096V3 = 0x123ul,
+ MSM8996SG = 0x131ul,
+ APQ8096SG = 0x138ul,
+};
+
+enum _msm8996_version {
+ MSM8996_V3,
+ MSM8996_SG,
+ NUM_OF_MSM8996_VERSIONS,
+};
+
+static struct platform_device *cpufreq_dt_pdev, *cpufreq_pdev;
+
+static enum _msm8996_version qcom_cpufreq_get_msm_id(void)
+{
+ size_t len;
+ u32 *msm_id;
+ enum _msm8996_version version;
+
+ msm_id = qcom_smem_get(QCOM_SMEM_HOST_ANY, MSM_ID_SMEM, &len);
+ if (IS_ERR(msm_id))
+ return NUM_OF_MSM8996_VERSIONS;
+
+ /* The first 4 bytes are format, next to them is the actual msm-id */
+ msm_id++;
+
+ switch ((enum _msm_id)*msm_id) {
+ case MSM8996V3:
+ case APQ8096V3:
+ version = MSM8996_V3;
+ break;
+ case MSM8996SG:
+ case APQ8096SG:
+ version = MSM8996_SG;
+ break;
+ default:
+ version = NUM_OF_MSM8996_VERSIONS;
+ }
+
+ return version;
+}
+
+static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev, +static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev,
+ struct nvmem_cell *speedbin_nvmem, + struct nvmem_cell *speedbin_nvmem,
+ u32 *versions) + u32 *versions)
{ +{
- struct opp_table **opp_tables;
+ size_t len; + size_t len;
+ u8 *speedbin; + u8 *speedbin;
enum _msm8996_version msm8996_version; + enum _msm8996_version msm8996_version;
+ +
+ msm8996_version = qcom_cpufreq_get_msm_id(); + msm8996_version = qcom_cpufreq_get_msm_id();
+ if (NUM_OF_MSM8996_VERSIONS == msm8996_version) { + if (NUM_OF_MSM8996_VERSIONS == msm8996_version) {
@ -135,147 +420,160 @@ index dd64dcf89c74c..fd08120768af2 100644
+ int (*get_version)(struct device *cpu_dev, + int (*get_version)(struct device *cpu_dev,
+ struct nvmem_cell *speedbin_nvmem, + struct nvmem_cell *speedbin_nvmem,
+ u32 *versions); + u32 *versions);
struct nvmem_cell *speedbin_nvmem; + struct nvmem_cell *speedbin_nvmem;
struct device_node *np; + struct device_node *np;
struct device *cpu_dev; + struct device *cpu_dev;
unsigned cpu; + unsigned cpu;
- u8 *speedbin; + u32 versions;
u32 versions;
- size_t len;
+ const struct of_device_id *match; + const struct of_device_id *match;
int ret; + int ret;
+
cpu_dev = get_cpu_device(0); + cpu_dev = get_cpu_device(0);
if (!cpu_dev) + if (!cpu_dev)
return -ENODEV; + return -ENODEV;
+
- msm8996_version = qcom_cpufreq_kryo_get_msm_id();
- if (NUM_OF_MSM8996_VERSIONS == msm8996_version) {
- dev_err(cpu_dev, "Not Snapdragon 820/821!");
+ match = pdev->dev.platform_data; + match = pdev->dev.platform_data;
+ get_version = match->data; + get_version = match->data;
+ if (!get_version) + if (!get_version)
return -ENODEV; + return -ENODEV;
- } +
+ np = dev_pm_opp_of_get_opp_desc_node(cpu_dev);
np = dev_pm_opp_of_get_opp_desc_node(cpu_dev); + if (!np)
if (!np) + return -ENOENT;
@@ -115,23 +150,10 @@ static int qcom_cpufreq_kryo_probe(struct platform_device *pdev) +
return PTR_ERR(speedbin_nvmem); + ret = of_device_is_compatible(np, "operating-points-v2-kryo-cpu");
} + if (!ret) {
+ of_node_put(np);
- speedbin = nvmem_cell_read(speedbin_nvmem, &len); + return -ENOENT;
+ }
+
+ speedbin_nvmem = of_nvmem_cell_get(np, NULL);
+ of_node_put(np);
+ if (IS_ERR(speedbin_nvmem)) {
+ if (PTR_ERR(speedbin_nvmem) != -EPROBE_DEFER)
+ dev_err(cpu_dev, "Could not get nvmem cell: %ld\n",
+ PTR_ERR(speedbin_nvmem));
+ return PTR_ERR(speedbin_nvmem);
+ }
+
+ ret = get_version(cpu_dev, speedbin_nvmem, &versions); + ret = get_version(cpu_dev, speedbin_nvmem, &versions);
nvmem_cell_put(speedbin_nvmem); + nvmem_cell_put(speedbin_nvmem);
- if (IS_ERR(speedbin))
- return PTR_ERR(speedbin);
-
- switch (msm8996_version) {
- case MSM8996_V3:
- versions = 1 << (unsigned int)(*speedbin);
- break;
- case MSM8996_SG:
- versions = 1 << ((unsigned int)(*speedbin) + 4);
- break;
- default:
- BUG();
- break;
- }
- kfree(speedbin);
+ if (ret) + if (ret)
+ return ret; + return ret;
+
opp_tables = kcalloc(num_possible_cpus(), sizeof(*opp_tables), GFP_KERNEL); + opp_tables = kcalloc(num_possible_cpus(), sizeof(*opp_tables), GFP_KERNEL);
if (!opp_tables) + if (!opp_tables)
@@ -174,7 +196,7 @@ static int qcom_cpufreq_kryo_probe(struct platform_device *pdev) + return -ENOMEM;
return ret; +
} + for_each_possible_cpu(cpu) {
+ cpu_dev = get_cpu_device(cpu);
-static int qcom_cpufreq_kryo_remove(struct platform_device *pdev) + if (NULL == cpu_dev) {
+ ret = -ENODEV;
+ goto free_opp;
+ }
+
+ opp_tables[cpu] = dev_pm_opp_set_supported_hw(cpu_dev,
+ &versions, 1);
+ if (IS_ERR(opp_tables[cpu])) {
+ ret = PTR_ERR(opp_tables[cpu]);
+ dev_err(cpu_dev, "Failed to set supported hardware\n");
+ goto free_opp;
+ }
+ }
+
+ cpufreq_dt_pdev = platform_device_register_simple("cpufreq-dt", -1,
+ NULL, 0);
+ if (!IS_ERR(cpufreq_dt_pdev)) {
+ platform_set_drvdata(pdev, opp_tables);
+ return 0;
+ }
+
+ ret = PTR_ERR(cpufreq_dt_pdev);
+ dev_err(cpu_dev, "Failed to register platform device\n");
+
+free_opp:
+ for_each_possible_cpu(cpu) {
+ if (IS_ERR_OR_NULL(opp_tables[cpu]))
+ break;
+ dev_pm_opp_put_supported_hw(opp_tables[cpu]);
+ }
+ kfree(opp_tables);
+
+ return ret;
+}
+
+static int qcom_cpufreq_remove(struct platform_device *pdev) +static int qcom_cpufreq_remove(struct platform_device *pdev)
{ +{
struct opp_table **opp_tables = platform_get_drvdata(pdev); + struct opp_table **opp_tables = platform_get_drvdata(pdev);
unsigned int cpu; + unsigned int cpu;
@@ -189,18 +211,20 @@ static int qcom_cpufreq_kryo_remove(struct platform_device *pdev) +
return 0; + platform_device_unregister(cpufreq_dt_pdev);
} +
+ for_each_possible_cpu(cpu)
-static struct platform_driver qcom_cpufreq_kryo_driver = { + dev_pm_opp_put_supported_hw(opp_tables[cpu]);
- .probe = qcom_cpufreq_kryo_probe, +
- .remove = qcom_cpufreq_kryo_remove, + kfree(opp_tables);
+
+ return 0;
+}
+
+static struct platform_driver qcom_cpufreq_driver = { +static struct platform_driver qcom_cpufreq_driver = {
+ .probe = qcom_cpufreq_probe, + .probe = qcom_cpufreq_probe,
+ .remove = qcom_cpufreq_remove, + .remove = qcom_cpufreq_remove,
.driver = { + .driver = {
- .name = "qcom-cpufreq-kryo",
+ .name = "qcom-cpufreq-nvmem", + .name = "qcom-cpufreq-nvmem",
}, + },
}; +};
+
-static const struct of_device_id qcom_cpufreq_kryo_match_list[] __initconst = {
- { .compatible = "qcom,apq8096", },
- { .compatible = "qcom,msm8996", },
- {}
+static const struct of_device_id qcom_cpufreq_match_list[] __initconst = { +static const struct of_device_id qcom_cpufreq_match_list[] __initconst = {
+ { .compatible = "qcom,apq8096", + { .compatible = "qcom,apq8096",
+ .data = qcom_cpufreq_kryo_name_version }, + .data = qcom_cpufreq_kryo_name_version },
+ { .compatible = "qcom,msm8996", + { .compatible = "qcom,msm8996",
+ .data = qcom_cpufreq_kryo_name_version }, + .data = qcom_cpufreq_kryo_name_version },
+ {}, + {},
}; +};
+
/* +/*
@@ -209,7 +233,7 @@ static const struct of_device_id qcom_cpufreq_kryo_match_list[] __initconst = { + * Since the driver depends on smem and nvmem drivers, which may
* which may be defered as well. The init here is only registering + * return EPROBE_DEFER, all the real activity is done in the probe,
* the driver and the platform device. + * which may be defered as well. The init here is only registering
*/ + * the driver and the platform device.
-static int __init qcom_cpufreq_kryo_init(void) + */
+static int __init qcom_cpufreq_init(void) +static int __init qcom_cpufreq_init(void)
{ +{
struct device_node *np = of_find_node_by_path("/"); + struct device_node *np = of_find_node_by_path("/");
const struct of_device_id *match; + const struct of_device_id *match;
@@ -218,32 +242,32 @@ static int __init qcom_cpufreq_kryo_init(void) + int ret;
if (!np) +
return -ENODEV; + if (!np)
+ return -ENODEV;
- match = of_match_node(qcom_cpufreq_kryo_match_list, np); +
+ match = of_match_node(qcom_cpufreq_match_list, np); + match = of_match_node(qcom_cpufreq_match_list, np);
of_node_put(np); + of_node_put(np);
if (!match) + if (!match)
return -ENODEV; + return -ENODEV;
+
- ret = platform_driver_register(&qcom_cpufreq_kryo_driver);
+ ret = platform_driver_register(&qcom_cpufreq_driver); + ret = platform_driver_register(&qcom_cpufreq_driver);
if (unlikely(ret < 0)) + if (unlikely(ret < 0))
return ret; + return ret;
+
- kryo_cpufreq_pdev = platform_device_register_simple(
- "qcom-cpufreq-kryo", -1, NULL, 0);
- ret = PTR_ERR_OR_ZERO(kryo_cpufreq_pdev);
+ cpufreq_pdev = platform_device_register_data(NULL, "qcom-cpufreq-nvmem", + cpufreq_pdev = platform_device_register_data(NULL, "qcom-cpufreq-nvmem",
+ -1, match, sizeof(*match)); + -1, match, sizeof(*match));
+ ret = PTR_ERR_OR_ZERO(cpufreq_pdev); + ret = PTR_ERR_OR_ZERO(cpufreq_pdev);
if (0 == ret) + if (0 == ret)
return 0; + return 0;
+
- platform_driver_unregister(&qcom_cpufreq_kryo_driver);
+ platform_driver_unregister(&qcom_cpufreq_driver); + platform_driver_unregister(&qcom_cpufreq_driver);
return ret; + return ret;
} +}
-module_init(qcom_cpufreq_kryo_init);
+module_init(qcom_cpufreq_init); +module_init(qcom_cpufreq_init);
+
-static void __exit qcom_cpufreq_kryo_exit(void)
+static void __exit qcom_cpufreq_exit(void) +static void __exit qcom_cpufreq_exit(void)
{ +{
- platform_device_unregister(kryo_cpufreq_pdev);
- platform_driver_unregister(&qcom_cpufreq_kryo_driver);
+ platform_device_unregister(cpufreq_pdev); + platform_device_unregister(cpufreq_pdev);
+ platform_driver_unregister(&qcom_cpufreq_driver); + platform_driver_unregister(&qcom_cpufreq_driver);
} +}
-module_exit(qcom_cpufreq_kryo_exit);
+module_exit(qcom_cpufreq_exit); +module_exit(qcom_cpufreq_exit);
+
-MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Kryo CPUfreq driver");
+MODULE_DESCRIPTION("Qualcomm Technologies, Inc. CPUfreq driver"); +MODULE_DESCRIPTION("Qualcomm Technologies, Inc. CPUfreq driver");
MODULE_LICENSE("GPL v2"); +MODULE_LICENSE("GPL v2");

View File

@ -20,8 +20,6 @@ Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
drivers/cpufreq/qcom-cpufreq-nvmem.c | 123 +++++++++++++++++---------- drivers/cpufreq/qcom-cpufreq-nvmem.c | 123 +++++++++++++++++----------
1 file changed, 79 insertions(+), 44 deletions(-) 1 file changed, 79 insertions(+), 44 deletions(-)
diff --git a/drivers/cpufreq/qcom-cpufreq-nvmem.c b/drivers/cpufreq/qcom-cpufreq-nvmem.c
index fd08120768af2..2d798a1685c5d 100644
--- a/drivers/cpufreq/qcom-cpufreq-nvmem.c --- a/drivers/cpufreq/qcom-cpufreq-nvmem.c
+++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c +++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c
@@ -43,6 +43,20 @@ enum _msm8996_version { @@ -43,6 +43,20 @@ enum _msm8996_version {
@ -45,7 +43,7 @@ index fd08120768af2..2d798a1685c5d 100644
static struct platform_device *cpufreq_dt_pdev, *cpufreq_pdev; static struct platform_device *cpufreq_dt_pdev, *cpufreq_pdev;
static enum _msm8996_version qcom_cpufreq_get_msm_id(void) static enum _msm8996_version qcom_cpufreq_get_msm_id(void)
@@ -76,7 +90,7 @@ static enum _msm8996_version qcom_cpufreq_get_msm_id(void) @@ -76,7 +90,7 @@ static enum _msm8996_version qcom_cpufre
static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev, static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev,
struct nvmem_cell *speedbin_nvmem, struct nvmem_cell *speedbin_nvmem,
@ -54,7 +52,7 @@ index fd08120768af2..2d798a1685c5d 100644
{ {
size_t len; size_t len;
u8 *speedbin; u8 *speedbin;
@@ -94,10 +108,10 @@ static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev, @@ -94,10 +108,10 @@ static int qcom_cpufreq_kryo_name_versio
switch (msm8996_version) { switch (msm8996_version) {
case MSM8996_V3: case MSM8996_V3:
@ -67,7 +65,7 @@ index fd08120768af2..2d798a1685c5d 100644
break; break;
default: default:
BUG(); BUG();
@@ -108,17 +122,17 @@ static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev, @@ -108,17 +122,17 @@ static int qcom_cpufreq_kryo_name_versio
return 0; return 0;
} }
@ -90,7 +88,7 @@ index fd08120768af2..2d798a1685c5d 100644
const struct of_device_id *match; const struct of_device_id *match;
int ret; int ret;
@@ -126,11 +140,6 @@ static int qcom_cpufreq_probe(struct platform_device *pdev) @@ -126,11 +140,6 @@ static int qcom_cpufreq_probe(struct pla
if (!cpu_dev) if (!cpu_dev)
return -ENODEV; return -ENODEV;
@ -102,7 +100,7 @@ index fd08120768af2..2d798a1685c5d 100644
np = dev_pm_opp_of_get_opp_desc_node(cpu_dev); np = dev_pm_opp_of_get_opp_desc_node(cpu_dev);
if (!np) if (!np)
return -ENOENT; return -ENOENT;
@@ -141,23 +150,43 @@ static int qcom_cpufreq_probe(struct platform_device *pdev) @@ -141,23 +150,43 @@ static int qcom_cpufreq_probe(struct pla
return -ENOENT; return -ENOENT;
} }
@ -160,7 +158,7 @@ index fd08120768af2..2d798a1685c5d 100644
for_each_possible_cpu(cpu) { for_each_possible_cpu(cpu) {
cpu_dev = get_cpu_device(cpu); cpu_dev = get_cpu_device(cpu);
@@ -166,19 +195,23 @@ static int qcom_cpufreq_probe(struct platform_device *pdev) @@ -166,19 +195,23 @@ static int qcom_cpufreq_probe(struct pla
goto free_opp; goto free_opp;
} }
@ -191,7 +189,7 @@ index fd08120768af2..2d798a1685c5d 100644
return 0; return 0;
} }
@@ -187,26 +220,30 @@ static int qcom_cpufreq_probe(struct platform_device *pdev) @@ -187,26 +220,30 @@ static int qcom_cpufreq_probe(struct pla
free_opp: free_opp:
for_each_possible_cpu(cpu) { for_each_possible_cpu(cpu) {
@ -228,7 +226,7 @@ index fd08120768af2..2d798a1685c5d 100644
return 0; return 0;
} }
@@ -220,10 +257,8 @@ static struct platform_driver qcom_cpufreq_driver = { @@ -220,10 +257,8 @@ static struct platform_driver qcom_cpufr
}; };
static const struct of_device_id qcom_cpufreq_match_list[] __initconst = { static const struct of_device_id qcom_cpufreq_match_list[] __initconst = {

View File

@ -39,11 +39,9 @@ Signed-off-by: Sricharan R <sricharan@codeaurora.org>
# - nvmem-cells: A phandle pointing to a nvmem-cells node representing the # - nvmem-cells: A phandle pointing to a nvmem-cells node representing the
# efuse registers that has information about the # efuse registers that has information about the
# speedbin that is used to select the right frequency/voltage # speedbin that is used to select the right frequency/voltage
diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm
index 13fbd97..497ae89 100644
--- a/drivers/cpufreq/Kconfig.arm --- a/drivers/cpufreq/Kconfig.arm
+++ b/drivers/cpufreq/Kconfig.arm +++ b/drivers/cpufreq/Kconfig.arm
@@ -126,7 +126,7 @@ config ARM_OMAP2PLUS_CPUFREQ @@ -112,7 +112,7 @@ config ARM_OMAP2PLUS_CPUFREQ
config ARM_QCOM_CPUFREQ_NVMEM config ARM_QCOM_CPUFREQ_NVMEM
tristate "Qualcomm nvmem based CPUFreq" tristate "Qualcomm nvmem based CPUFreq"
@ -52,11 +50,9 @@ index 13fbd97..497ae89 100644
depends on QCOM_QFPROM depends on QCOM_QFPROM
depends on QCOM_SMEM depends on QCOM_SMEM
select PM_OPP select PM_OPP
diff --git a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c
index fe14c57..917cdc2 100644
--- a/drivers/cpufreq/cpufreq-dt-platdev.c --- a/drivers/cpufreq/cpufreq-dt-platdev.c
+++ b/drivers/cpufreq/cpufreq-dt-platdev.c +++ b/drivers/cpufreq/cpufreq-dt-platdev.c
@@ -128,6 +128,11 @@ @@ -128,6 +128,11 @@ static const struct of_device_id blackli
{ .compatible = "ti,am43", }, { .compatible = "ti,am43", },
{ .compatible = "ti,dra7", }, { .compatible = "ti,dra7", },
@ -68,11 +64,9 @@ index fe14c57..917cdc2 100644
{ } { }
}; };
diff --git a/drivers/cpufreq/qcom-cpufreq-nvmem.c b/drivers/cpufreq/qcom-cpufreq-nvmem.c
index 0ad8e5b..5f2add0 100644
--- a/drivers/cpufreq/qcom-cpufreq-nvmem.c --- a/drivers/cpufreq/qcom-cpufreq-nvmem.c
+++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c +++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c
@@ -48,17 +48,92 @@ @@ -48,17 +48,92 @@ struct qcom_cpufreq_drv;
struct qcom_cpufreq_match_data { struct qcom_cpufreq_match_data {
int (*get_version)(struct device *cpu_dev, int (*get_version)(struct device *cpu_dev,
struct nvmem_cell *speedbin_nvmem, struct nvmem_cell *speedbin_nvmem,
@ -166,7 +160,7 @@ index 0ad8e5b..5f2add0 100644
static enum _msm8996_version qcom_cpufreq_get_msm_id(void) static enum _msm8996_version qcom_cpufreq_get_msm_id(void)
{ {
size_t len; size_t len;
@@ -90,11 +165,13 @@ @@ -90,11 +165,13 @@ static enum _msm8996_version qcom_cpufre
static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev, static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev,
struct nvmem_cell *speedbin_nvmem, struct nvmem_cell *speedbin_nvmem,
@ -180,7 +174,7 @@ index 0ad8e5b..5f2add0 100644
msm8996_version = qcom_cpufreq_get_msm_id(); msm8996_version = qcom_cpufreq_get_msm_id();
if (NUM_OF_MSM8996_VERSIONS == msm8996_version) { if (NUM_OF_MSM8996_VERSIONS == msm8996_version) {
@@ -122,16 +199,51 @@ @@ -122,16 +199,51 @@ static int qcom_cpufreq_kryo_name_versio
return 0; return 0;
} }
@ -232,7 +226,7 @@ index 0ad8e5b..5f2add0 100644
unsigned cpu; unsigned cpu;
const struct of_device_id *match; const struct of_device_id *match;
int ret; int ret;
@@ -144,7 +256,7 @@ @@ -144,7 +256,7 @@ static int qcom_cpufreq_probe(struct pla
if (!np) if (!np)
return -ENOENT; return -ENOENT;
@ -241,7 +235,7 @@ index 0ad8e5b..5f2add0 100644
if (!ret) { if (!ret) {
of_node_put(np); of_node_put(np);
return -ENOENT; return -ENOENT;
@@ -172,7 +284,7 @@ @@ -172,7 +284,7 @@ static int qcom_cpufreq_probe(struct pla
goto free_drv; goto free_drv;
} }
@ -250,7 +244,7 @@ index 0ad8e5b..5f2add0 100644
if (ret) { if (ret) {
nvmem_cell_put(speedbin_nvmem); nvmem_cell_put(speedbin_nvmem);
goto free_drv; goto free_drv;
@@ -181,12 +293,18 @@ @@ -181,12 +293,18 @@ static int qcom_cpufreq_probe(struct pla
} }
of_node_put(np); of_node_put(np);
@ -271,7 +265,7 @@ index 0ad8e5b..5f2add0 100644
for_each_possible_cpu(cpu) { for_each_possible_cpu(cpu) {
cpu_dev = get_cpu_device(cpu); cpu_dev = get_cpu_device(cpu);
@@ -196,11 +314,22 @@ @@ -196,11 +314,22 @@ static int qcom_cpufreq_probe(struct pla
} }
if (drv->data->get_version) { if (drv->data->get_version) {
@ -298,7 +292,7 @@ index 0ad8e5b..5f2add0 100644
dev_err(cpu_dev, dev_err(cpu_dev,
"Failed to set supported hardware\n"); "Failed to set supported hardware\n");
goto free_opp; goto free_opp;
@@ -220,11 +349,18 @@ @@ -220,11 +349,18 @@ static int qcom_cpufreq_probe(struct pla
free_opp: free_opp:
for_each_possible_cpu(cpu) { for_each_possible_cpu(cpu) {
@ -320,7 +314,7 @@ index 0ad8e5b..5f2add0 100644
free_drv: free_drv:
kfree(drv); kfree(drv);
@@ -239,10 +375,14 @@ @@ -239,10 +375,14 @@ static int qcom_cpufreq_remove(struct pl
platform_device_unregister(cpufreq_dt_pdev); platform_device_unregister(cpufreq_dt_pdev);
for_each_possible_cpu(cpu) for_each_possible_cpu(cpu)
@ -338,7 +332,7 @@ index 0ad8e5b..5f2add0 100644
kfree(drv); kfree(drv);
return 0; return 0;
@@ -259,6 +399,10 @@ @@ -259,6 +399,10 @@ static struct platform_driver qcom_cpufr
static const struct of_device_id qcom_cpufreq_match_list[] __initconst = { static const struct of_device_id qcom_cpufreq_match_list[] __initconst = {
{ .compatible = "qcom,apq8096", .data = &match_data_kryo }, { .compatible = "qcom,apq8096", .data = &match_data_kryo },
{ .compatible = "qcom,msm8996", .data = &match_data_kryo }, { .compatible = "qcom,msm8996", .data = &match_data_kryo },

View File

@ -37,15 +37,12 @@ Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
include/linux/pm_opp.h | 13 ++++++++ include/linux/pm_opp.h | 13 ++++++++
2 files changed, 82 insertions(+) 2 files changed, 82 insertions(+)
diff --git a/drivers/opp/core.c b/drivers/opp/core.c
index 3b7ffd0234e9..f38b3be85072 100644
--- a/drivers/opp/core.c --- a/drivers/opp/core.c
+++ b/drivers/opp/core.c +++ b/drivers/opp/core.c
@@ -2112,6 +2112,75 @@ static int _opp_set_availability(struct device *dev, unsigned long freq, @@ -1623,6 +1623,75 @@ put_table:
return r;
} }
+/** /**
+ * dev_pm_opp_adjust_voltage() - helper to change the voltage of an OPP + * dev_pm_opp_adjust_voltage() - helper to change the voltage of an OPP
+ * @dev: device for which we do this operation + * @dev: device for which we do this operation
+ * @freq: OPP frequency to adjust voltage of + * @freq: OPP frequency to adjust voltage of
@ -114,36 +111,35 @@ index 3b7ffd0234e9..f38b3be85072 100644
+ return r; + return r;
+} +}
+ +
/** +/**
* dev_pm_opp_enable() - Enable a specific OPP * dev_pm_opp_enable() - Enable a specific OPP
* @dev: device for which we do this operation * @dev: device for which we do this operation
diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h * @freq: OPP frequency to enable
index b8197ab014f2..747861816f4f 100644
--- a/include/linux/pm_opp.h --- a/include/linux/pm_opp.h
+++ b/include/linux/pm_opp.h +++ b/include/linux/pm_opp.h
@@ -22,6 +22,7 @@ struct opp_table; @@ -25,6 +25,7 @@ struct opp_table;
enum dev_pm_opp_event { enum dev_pm_opp_event {
OPP_EVENT_ADD, OPP_EVENT_REMOVE, OPP_EVENT_ENABLE, OPP_EVENT_DISABLE, OPP_EVENT_ADD, OPP_EVENT_REMOVE, OPP_EVENT_ENABLE, OPP_EVENT_DISABLE,
+ OPP_EVENT_ADJUST_VOLTAGE, + OPP_EVENT_ADJUST_VOLTAGE,
}; };
/** /**
@@ -113,6 +114,10 @@ int dev_pm_opp_add(struct device *dev, unsigned long freq, @@ -108,6 +109,10 @@ int dev_pm_opp_add(struct device *dev, u
unsigned long u_volt);
void dev_pm_opp_remove(struct device *dev, unsigned long freq); void dev_pm_opp_remove(struct device *dev, unsigned long freq);
void dev_pm_opp_remove_all_dynamic(struct device *dev);
+int dev_pm_opp_adjust_voltage(struct device *dev, unsigned long freq, +int dev_pm_opp_adjust_voltage(struct device *dev, unsigned long freq,
+ unsigned long u_volt, unsigned long u_volt_min, + unsigned long u_volt, unsigned long u_volt_min,
+ unsigned long u_volt_max); + unsigned long u_volt_max);
+ +
int dev_pm_opp_enable(struct device *dev, unsigned long freq); int dev_pm_opp_enable(struct device *dev, unsigned long freq);
int dev_pm_opp_disable(struct device *dev, unsigned long freq); int dev_pm_opp_disable(struct device *dev, unsigned long freq);
@@ -242,6 +247,14 @@ static inline void dev_pm_opp_remove_all_dynamic(struct device *dev) @@ -208,6 +213,14 @@ static inline void dev_pm_opp_remove(str
{ {
} }
+static inline int +static inline int
+dev_pm_opp_adjust_voltage(struct device *dev, unsigned long freq, +dev_pm_opp_adjust_voltage(struct device *dev, unsigned long freq,
+ unsigned long u_volt, unsigned long u_volt_min, + unsigned long u_volt, unsigned long u_volt_min,

View File

@ -17,7 +17,7 @@ Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org>
--- a/drivers/opp/core.c --- a/drivers/opp/core.c
+++ b/drivers/opp/core.c +++ b/drivers/opp/core.c
@@ -1663,6 +1663,7 @@ @@ -1663,6 +1663,7 @@ int dev_pm_opp_adjust_voltage(struct dev
struct opp_table *opp_table; struct opp_table *opp_table;
struct dev_pm_opp *tmp_opp, *opp = ERR_PTR(-ENODEV); struct dev_pm_opp *tmp_opp, *opp = ERR_PTR(-ENODEV);
int r = 0; int r = 0;
@ -25,7 +25,7 @@ Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org>
/* Find the opp_table */ /* Find the opp_table */
opp_table = _find_opp_table(dev); opp_table = _find_opp_table(dev);
@@ -1692,8 +1693,17 @@ @@ -1692,8 +1693,17 @@ int dev_pm_opp_adjust_voltage(struct dev
goto adjust_unlock; goto adjust_unlock;
opp->supplies->u_volt = u_volt; opp->supplies->u_volt = u_volt;

View File

@ -99,7 +99,7 @@ Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org>
cpu_dev = get_cpu_device(policy->cpu); cpu_dev = get_cpu_device(policy->cpu);
if (!cpu_dev) { if (!cpu_dev) {
@@ -254,10 +294,13 @@ static int cpufreq_init(struct cpufreq_p @@ -251,10 +291,13 @@ static int cpufreq_init(struct cpufreq_p
__func__, ret); __func__, ret);
} }
@ -114,7 +114,7 @@ Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org>
} }
priv->cpu_dev = cpu_dev; priv->cpu_dev = cpu_dev;
@@ -287,6 +330,8 @@ static int cpufreq_init(struct cpufreq_p @@ -284,6 +327,8 @@ static int cpufreq_init(struct cpufreq_p
out_free_cpufreq_table: out_free_cpufreq_table:
dev_pm_opp_free_cpufreq_table(cpu_dev, &freq_table); dev_pm_opp_free_cpufreq_table(cpu_dev, &freq_table);

View File

@ -52,7 +52,7 @@ Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org>
priv->opp_freq = freq * 1000; priv->opp_freq = freq * 1000;
arch_set_freq_scale(policy->related_cpus, freq, arch_set_freq_scale(policy->related_cpus, freq,
policy->cpuinfo.max_freq); policy->cpuinfo.max_freq);
@@ -201,6 +229,8 @@ static int cpufreq_init(struct cpufreq_p @@ -201,6 +230,8 @@ static int cpufreq_init(struct cpufreq_p
const char *name; const char *name;
int ret; int ret;
struct srcu_notifier_head *opp_srcu_head; struct srcu_notifier_head *opp_srcu_head;
@ -61,7 +61,7 @@ Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org>
cpu_dev = get_cpu_device(policy->cpu); cpu_dev = get_cpu_device(policy->cpu);
if (!cpu_dev) { if (!cpu_dev) {
@@ -310,6 +340,13 @@ static int cpufreq_init(struct cpufreq_p @@ -307,6 +338,13 @@ static int cpufreq_init(struct cpufreq_p
policy->suspend_freq = dev_pm_opp_get_suspend_opp_freq(cpu_dev) / 1000; policy->suspend_freq = dev_pm_opp_get_suspend_opp_freq(cpu_dev) / 1000;

View File

@ -10,7 +10,7 @@ Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org>
--- a/drivers/cpufreq/cpufreq-dt.c --- a/drivers/cpufreq/cpufreq-dt.c
+++ b/drivers/cpufreq/cpufreq-dt.c +++ b/drivers/cpufreq/cpufreq-dt.c
@@ -146,8 +146,10 @@ static int opp_notifier(struct notifier_ @@ -147,8 +147,10 @@ static int opp_notifier(struct notifier_
ret = PTR_ERR(cpu_reg); ret = PTR_ERR(cpu_reg);
goto out; goto out;
} }