mirror of
https://github.com/Fishwaldo/build.git
synced 2025-07-23 05:18:55 +00:00
AR-1 - Adding support category for distributions AR-4 - Remove Allwinner legacy AR-5 - Drop Udoo family and move Udoo board into newly created imx6 family AR-9 - Rename sunxi-next to sunxi-legacy AR-10 - Rename sunxi-dev to sunxi-current AR-11 - Adding Radxa Rockpi S support AR-13 - Rename rockchip64-default to rockchip64-legacy AR-14 - Add rockchip64-current as mainline source AR-15 - Drop Rockchip 4.19.y NEXT, current become 5.3.y AR-16 - Rename RK3399 default to legacy AR-17 - Rename Odroid XU4 next and default to legacy 4.14.y, add DEV 5.4.y AR-18 - Add Odroid N2 current mainline AR-19 - Move Odroid C1 to meson family AR-20 - Rename mvebu64-default to mvebu64-legacy AR-21 - Rename mvebu-default to mvebu-legacy AR-22 - Rename mvebu-next to mvebu-current AR-23 - Drop meson64 default and next, current becomes former DEV 5.3.y AR-24 - Drop cubox family and move Cubox/Hummingboard boards under imx6 AR-26 - Adjust motd AR-27 - Enabling distribution release status AR-28 - Added new GCC compilers AR-29 - Implementing Ubuntu Eoan AR-30 - Add desktop packages per board or family AR-31 - Remove (Ubuntu/Debian) distribution name from image filename AR-32 - Move arch configs from configuration.sh to separate arm64 and armhf config files AR-33 - Revision numbers for beta builds changed to day_in_the_year AR-34 - Patches support linked patches AR-35 - Break meson64 family into gxbb and gxl AR-36 - Add Nanopineo2 Black AR-38 - Upgrade option from old branches to new one via armbian-config AR-41 - Show full timezone info AR-43 - Merge Odroid N2 to meson64 AR-44 - Enable FORCE_BOOTSCRIPT_UPDATE for all builds
80 lines
2.5 KiB
Text
80 lines
2.5 KiB
Text
diff --git a/drivers/cpufreq/armada-37xx-cpufreq.c b/drivers/cpufreq/armada-37xx-cpufreq.c
|
|
index 75491fc84..c2adf380b 100644
|
|
--- a/drivers/cpufreq/armada-37xx-cpufreq.c
|
|
+++ b/drivers/cpufreq/armada-37xx-cpufreq.c
|
|
@@ -162,11 +162,25 @@ static void __init armada37xx_cpufreq_dvfs_setup(struct regmap *base,
|
|
}
|
|
|
|
/*
|
|
- * Set cpu clock source, for all the level we keep the same
|
|
- * clock source that the one already configured. For this one
|
|
- * we need to use the clock framework
|
|
- */
|
|
+ * Set CPU clock source, for all the level we keep the same
|
|
+ * clock source that the one already configured with DVS
|
|
+ * disabled. For this one we need to use the clock framewor
|
|
+ */
|
|
parent = clk_get_parent(clk);
|
|
+
|
|
+ /*
|
|
+ * Unset parent clock to force the clock framework setting again
|
|
+ * the clock parent
|
|
+ */
|
|
+ clk_set_parent(clk, NULL);
|
|
+
|
|
+ /*
|
|
+ * For the Armada 37xx CPU clocks, setting the parent will
|
|
+ * actually configure the parent when DVFS is enabled. At
|
|
+ * hardware level it will be a different register from the one
|
|
+ * read when doing clk_get_parent that will be set with
|
|
+ * clk_set_parent.
|
|
+ */
|
|
clk_set_parent(clk, parent);
|
|
}
|
|
|
|
@@ -359,11 +373,11 @@ static int __init armada37xx_cpufreq_driver_init(void)
|
|
struct armada_37xx_dvfs *dvfs;
|
|
struct platform_device *pdev;
|
|
unsigned long freq;
|
|
- unsigned int cur_frequency;
|
|
+ unsigned int cur_frequency, base_frequency;
|
|
struct regmap *nb_pm_base, *avs_base;
|
|
struct device *cpu_dev;
|
|
int load_lvl, ret;
|
|
- struct clk *clk;
|
|
+ struct clk *clk, *parent;
|
|
|
|
nb_pm_base =
|
|
syscon_regmap_lookup_by_compatible("marvell,armada-3700-nb-pm");
|
|
@@ -399,6 +413,22 @@ static int __init armada37xx_cpufreq_driver_init(void)
|
|
return PTR_ERR(clk);
|
|
}
|
|
|
|
+ parent = clk_get_parent(clk);
|
|
+ if (IS_ERR(parent)) {
|
|
+ dev_err(cpu_dev, "Cannot get parent clock for CPU0\n");
|
|
+ clk_put(clk);
|
|
+ return PTR_ERR(parent);
|
|
+ }
|
|
+
|
|
+ /* Get parent CPU frequency */
|
|
+ base_frequency = clk_get_rate(parent);
|
|
+
|
|
+ if (!base_frequency) {
|
|
+ dev_err(cpu_dev, "Failed to get parent clock rate for CPU\n");
|
|
+ clk_put(clk);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
/* Get nominal (current) CPU frequency */
|
|
cur_frequency = clk_get_rate(clk);
|
|
if (!cur_frequency) {
|
|
@@ -431,7 +461,7 @@ static int __init armada37xx_cpufreq_driver_init(void)
|
|
for (load_lvl = ARMADA_37XX_DVFS_LOAD_0; load_lvl < LOAD_LEVEL_NR;
|
|
load_lvl++) {
|
|
unsigned long u_volt = avs_map[dvfs->avs[load_lvl]] * 1000;
|
|
- freq = cur_frequency / dvfs->divider[load_lvl];
|
|
+ freq = base_frequency / dvfs->divider[load_lvl];
|
|
ret = dev_pm_opp_add(cpu_dev, freq, u_volt);
|
|
if (ret)
|
|
goto remove_opp;
|