* [PATCH v4 0/5] add coupled regulators for Exynos5422/5800 [not found] <CGME20190725144324eucas1p211802237e336852ea3d1aa003e4d5d04@eucas1p2.samsung.com> @ 2019-07-25 14:42 ` k.konieczny [not found] ` <CGME20190725144325eucas1p1463ecde90f9c93cb73d3c54c7cf3f1ff@eucas1p1.samsung.com> ` (4 more replies) 0 siblings, 5 replies; 9+ messages in thread From: k.konieczny @ 2019-07-25 14:42 UTC (permalink / raw) To: k.konieczny Cc: Mark Rutland, Nishanth Menon, linux-samsung-soc, Rob Herring, linux-arm-kernel, Bartlomiej Zolnierkiewicz, Stephen Boyd, Viresh Kumar, linux-pm, linux-kernel, Krzysztof Kozlowski, Chanwoo Choi, Kyungmin Park, Kukjin Kim, MyungJoo Ham, devicetree, Marek Szyprowski Hi, The main purpose of this patch series is to add coupled regulators for Exynos5422/5800 to keep constrain on voltage difference between vdd_arm and vdd_int to be at most 300mV. In exynos-bus instead of using regulator_set_voltage_tol() with default voltage tolerance it should be used regulator_set_voltage_triplet() with volatege range, and this is already present in opp/core.c code, so it can be reused. While at this, move setting regulators into opp/core. This patchset was tested on Odroid XU3. The DTS coupled regulators patch depends on previous patches. Changes: v4: - removed "opp: core: add regulators enable and disable" from patchset as it was applied by Viresh Kumar and changed cover letter - fix patch "devfreq: exynos-bus: correct clock enable sequence" to correct order of enable/disable - removed unrelated changes in "devfreq: exynos-bus: convert to use dev_pm_opp_set_rate()" - added new patch "devfreq: exynos-bus: remove exynos_bus_passive_target()" as suggested by Chanwoo Choi v3: - added new exynos-bus patch to correct clock and regulator enabling and disabling sequence as suggested by Chanwoo Choi - corrected error path in enable and improved commit message in opp/core - improve comment in devfreq/exynos-bus.c before devfreq_recommended_opp() - change cover letter as there is new patch - added note before Signed-off-by in 4th patch v2: - improve regulators enable/disable code in opp/core as suggested by Viresh Kumar - add new patch for remove unused dt-bindings as suggested by Krzysztof Kozlowski Kamil Konieczny (4): devfreq: exynos-bus: correct clock enable sequence devfreq: exynos-bus: convert to use dev_pm_opp_set_rate() dt-bindings: devfreq: exynos-bus: remove unused property devfreq: exynos-bus: remove exynos_bus_passive_target() Marek Szyprowski (1): ARM: dts: exynos: add initial data for coupled regulators for Exynos5422/5800 .../bindings/devfreq/exynos-bus.txt | 2 - arch/arm/boot/dts/exynos5420.dtsi | 34 ++-- arch/arm/boot/dts/exynos5422-odroid-core.dtsi | 4 + arch/arm/boot/dts/exynos5800-peach-pi.dts | 4 + arch/arm/boot/dts/exynos5800.dtsi | 32 ++-- drivers/devfreq/exynos-bus.c | 153 +++++------------- 6 files changed, 78 insertions(+), 151 deletions(-) -- 2.22.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <CGME20190725144325eucas1p1463ecde90f9c93cb73d3c54c7cf3f1ff@eucas1p1.samsung.com>]
* [PATCH v4 1/5] devfreq: exynos-bus: correct clock enable sequence [not found] ` <CGME20190725144325eucas1p1463ecde90f9c93cb73d3c54c7cf3f1ff@eucas1p1.samsung.com> @ 2019-07-25 14:42 ` k.konieczny 2019-07-25 14:59 ` Chanwoo Choi 0 siblings, 1 reply; 9+ messages in thread From: k.konieczny @ 2019-07-25 14:42 UTC (permalink / raw) To: k.konieczny Cc: Mark Rutland, Nishanth Menon, linux-samsung-soc, Rob Herring, linux-arm-kernel, Bartlomiej Zolnierkiewicz, Stephen Boyd, Viresh Kumar, linux-pm, linux-kernel, Krzysztof Kozlowski, Chanwoo Choi, Kyungmin Park, Kukjin Kim, MyungJoo Ham, devicetree, Marek Szyprowski Regulators should be enabled before clocks to avoid h/w hang. This require change in exynos_bus_probe() to move exynos_bus_parse_of() after exynos_bus_parent_parse_of() and change in error handling. Similar change is needed in exynos_bus_exit() where clock should be disabled before regulators. Signed-off-by: Kamil Konieczny <k.konieczny@partner.samsung.com> --- Changes: v4: - move regulator disable after clock disable - remove unrelated changes - add disabling regulators in error path in exynos_bus_probe() --- drivers/devfreq/exynos-bus.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c index 486cc5b422f1..f34fa26f00d0 100644 --- a/drivers/devfreq/exynos-bus.c +++ b/drivers/devfreq/exynos-bus.c @@ -194,11 +194,10 @@ static void exynos_bus_exit(struct device *dev) if (ret < 0) dev_warn(dev, "failed to disable the devfreq-event devices\n"); - if (bus->regulator) - regulator_disable(bus->regulator); - dev_pm_opp_of_remove_table(dev); clk_disable_unprepare(bus->clk); + if (bus->regulator) + regulator_disable(bus->regulator); } /* @@ -386,6 +385,7 @@ static int exynos_bus_probe(struct platform_device *pdev) struct exynos_bus *bus; int ret, max_state; unsigned long min_freq, max_freq; + bool passive = false; if (!np) { dev_err(dev, "failed to find devicetree node\n"); @@ -399,27 +399,27 @@ static int exynos_bus_probe(struct platform_device *pdev) bus->dev = &pdev->dev; platform_set_drvdata(pdev, bus); - /* Parse the device-tree to get the resource information */ - ret = exynos_bus_parse_of(np, bus); - if (ret < 0) - return ret; - profile = devm_kzalloc(dev, sizeof(*profile), GFP_KERNEL); - if (!profile) { - ret = -ENOMEM; - goto err; - } + if (!profile) + return -ENOMEM; node = of_parse_phandle(dev->of_node, "devfreq", 0); if (node) { of_node_put(node); - goto passive; + passive = true; } else { ret = exynos_bus_parent_parse_of(np, bus); + if (ret < 0) + return ret; } + /* Parse the device-tree to get the resource information */ + ret = exynos_bus_parse_of(np, bus); if (ret < 0) - goto err; + goto err_reg; + + if (passive) + goto passive; /* Initialize the struct profile and governor data for parent device */ profile->polling_ms = 50; @@ -510,6 +510,9 @@ static int exynos_bus_probe(struct platform_device *pdev) err: dev_pm_opp_of_remove_table(dev); clk_disable_unprepare(bus->clk); +err_reg: + if (!passive) + regulator_disable(bus->regulator); return ret; } -- 2.22.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v4 1/5] devfreq: exynos-bus: correct clock enable sequence 2019-07-25 14:42 ` [PATCH v4 1/5] devfreq: exynos-bus: correct clock enable sequence k.konieczny @ 2019-07-25 14:59 ` Chanwoo Choi 2019-07-25 15:07 ` Kamil Konieczny 0 siblings, 1 reply; 9+ messages in thread From: Chanwoo Choi @ 2019-07-25 14:59 UTC (permalink / raw) To: Kamil Konieczny Cc: Mark Rutland, Nishanth Menon, linux-samsung-soc, Rob Herring, linux-arm-kernel, Bartlomiej Zolnierkiewicz, Stephen Boyd, Viresh Kumar, Linux PM list, linux-kernel, Krzysztof Kozlowski, Chanwoo Choi, Kyungmin Park, Kukjin Kim, MyungJoo Ham, devicetree, Marek Szyprowski Hi, You are missing my Acked tag. 2019년 7월 25일 (목) 오후 11:44, <k.konieczny@partner.samsung.com>님이 작성: > > Regulators should be enabled before clocks to avoid h/w hang. This > require change in exynos_bus_probe() to move exynos_bus_parse_of() > after exynos_bus_parent_parse_of() and change in error handling. > Similar change is needed in exynos_bus_exit() where clock should be > disabled before regulators. > > Signed-off-by: Kamil Konieczny <k.konieczny@partner.samsung.com> > --- > Changes: > v4: > - move regulator disable after clock disable > - remove unrelated changes > - add disabling regulators in error path in exynos_bus_probe() > > --- > drivers/devfreq/exynos-bus.c | 31 +++++++++++++++++-------------- > 1 file changed, 17 insertions(+), 14 deletions(-) > > diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c > index 486cc5b422f1..f34fa26f00d0 100644 > --- a/drivers/devfreq/exynos-bus.c > +++ b/drivers/devfreq/exynos-bus.c > @@ -194,11 +194,10 @@ static void exynos_bus_exit(struct device *dev) > if (ret < 0) > dev_warn(dev, "failed to disable the devfreq-event devices\n"); > > - if (bus->regulator) > - regulator_disable(bus->regulator); > - > dev_pm_opp_of_remove_table(dev); > clk_disable_unprepare(bus->clk); > + if (bus->regulator) > + regulator_disable(bus->regulator); > } > > /* > @@ -386,6 +385,7 @@ static int exynos_bus_probe(struct platform_device *pdev) > struct exynos_bus *bus; > int ret, max_state; > unsigned long min_freq, max_freq; > + bool passive = false; > > if (!np) { > dev_err(dev, "failed to find devicetree node\n"); > @@ -399,27 +399,27 @@ static int exynos_bus_probe(struct platform_device *pdev) > bus->dev = &pdev->dev; > platform_set_drvdata(pdev, bus); > > - /* Parse the device-tree to get the resource information */ > - ret = exynos_bus_parse_of(np, bus); > - if (ret < 0) > - return ret; > - > profile = devm_kzalloc(dev, sizeof(*profile), GFP_KERNEL); > - if (!profile) { > - ret = -ENOMEM; > - goto err; > - } > + if (!profile) > + return -ENOMEM; > > node = of_parse_phandle(dev->of_node, "devfreq", 0); > if (node) { > of_node_put(node); > - goto passive; > + passive = true; > } else { > ret = exynos_bus_parent_parse_of(np, bus); > + if (ret < 0) > + return ret; > } > > + /* Parse the device-tree to get the resource information */ > + ret = exynos_bus_parse_of(np, bus); > if (ret < 0) > - goto err; > + goto err_reg; > + > + if (passive) > + goto passive; > > /* Initialize the struct profile and governor data for parent device */ > profile->polling_ms = 50; > @@ -510,6 +510,9 @@ static int exynos_bus_probe(struct platform_device *pdev) > err: > dev_pm_opp_of_remove_table(dev); > clk_disable_unprepare(bus->clk); > +err_reg: > + if (!passive) > + regulator_disable(bus->regulator); > > return ret; > } > -- > 2.22.0 > -- Best Regards, Chanwoo Choi _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v4 1/5] devfreq: exynos-bus: correct clock enable sequence 2019-07-25 14:59 ` Chanwoo Choi @ 2019-07-25 15:07 ` Kamil Konieczny 0 siblings, 0 replies; 9+ messages in thread From: Kamil Konieczny @ 2019-07-25 15:07 UTC (permalink / raw) To: cwchoi00 Cc: Mark Rutland, Nishanth Menon, linux-samsung-soc, Rob Herring, linux-arm-kernel, Bartlomiej Zolnierkiewicz, Stephen Boyd, Viresh Kumar, Linux PM list, linux-kernel, Krzysztof Kozlowski, Chanwoo Choi, Kyungmin Park, Kukjin Kim, MyungJoo Ham, devicetree, Marek Szyprowski Hi, On 25.07.2019 16:59, Chanwoo Choi wrote: > Hi, > > You are missing my Acked tag. I changed code, so I can not add your Ack in v4. Please send new Ack for this patch. > 2019년 7월 25일 (목) 오후 11:44, <k.konieczny@partner.samsung.com>님이 작성: >> >> Regulators should be enabled before clocks to avoid h/w hang. This >> require change in exynos_bus_probe() to move exynos_bus_parse_of() >> after exynos_bus_parent_parse_of() and change in error handling. >> Similar change is needed in exynos_bus_exit() where clock should be >> disabled before regulators. >> >> Signed-off-by: Kamil Konieczny <k.konieczny@partner.samsung.com> >> --- >> Changes: >> v4: >> - move regulator disable after clock disable >> - remove unrelated changes >> - add disabling regulators in error path in exynos_bus_probe() >> >> --- >> drivers/devfreq/exynos-bus.c | 31 +++++++++++++++++-------------- >> 1 file changed, 17 insertions(+), 14 deletions(-) >> >> diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c >> index 486cc5b422f1..f34fa26f00d0 100644 >> --- a/drivers/devfreq/exynos-bus.c >> +++ b/drivers/devfreq/exynos-bus.c >> @@ -194,11 +194,10 @@ static void exynos_bus_exit(struct device *dev) >> if (ret < 0) >> dev_warn(dev, "failed to disable the devfreq-event devices\n"); >> >> - if (bus->regulator) >> - regulator_disable(bus->regulator); >> - >> dev_pm_opp_of_remove_table(dev); >> clk_disable_unprepare(bus->clk); >> + if (bus->regulator) >> + regulator_disable(bus->regulator); >> } >> >> /* >> @@ -386,6 +385,7 @@ static int exynos_bus_probe(struct platform_device *pdev) >> struct exynos_bus *bus; >> int ret, max_state; >> unsigned long min_freq, max_freq; >> + bool passive = false; >> >> if (!np) { >> dev_err(dev, "failed to find devicetree node\n"); >> @@ -399,27 +399,27 @@ static int exynos_bus_probe(struct platform_device *pdev) >> bus->dev = &pdev->dev; >> platform_set_drvdata(pdev, bus); >> >> - /* Parse the device-tree to get the resource information */ >> - ret = exynos_bus_parse_of(np, bus); >> - if (ret < 0) >> - return ret; >> - >> profile = devm_kzalloc(dev, sizeof(*profile), GFP_KERNEL); >> - if (!profile) { >> - ret = -ENOMEM; >> - goto err; >> - } >> + if (!profile) >> + return -ENOMEM; >> >> node = of_parse_phandle(dev->of_node, "devfreq", 0); >> if (node) { >> of_node_put(node); >> - goto passive; >> + passive = true; >> } else { >> ret = exynos_bus_parent_parse_of(np, bus); >> + if (ret < 0) >> + return ret; >> } >> >> + /* Parse the device-tree to get the resource information */ >> + ret = exynos_bus_parse_of(np, bus); >> if (ret < 0) >> - goto err; >> + goto err_reg; >> + >> + if (passive) >> + goto passive; >> >> /* Initialize the struct profile and governor data for parent device */ >> profile->polling_ms = 50; >> @@ -510,6 +510,9 @@ static int exynos_bus_probe(struct platform_device *pdev) >> err: >> dev_pm_opp_of_remove_table(dev); >> clk_disable_unprepare(bus->clk); >> +err_reg: >> + if (!passive) >> + regulator_disable(bus->regulator); >> >> return ret; >> } >> -- >> 2.22.0 >> > > -- Best regards, Kamil Konieczny Samsung R&D Institute Poland _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <CGME20190725144325eucas1p204f9ffe8988a3604fdf21f77d242c7b8@eucas1p2.samsung.com>]
* [PATCH v4 2/5] devfreq: exynos-bus: convert to use dev_pm_opp_set_rate() [not found] ` <CGME20190725144325eucas1p204f9ffe8988a3604fdf21f77d242c7b8@eucas1p2.samsung.com> @ 2019-07-25 14:42 ` k.konieczny 2019-07-25 15:08 ` Chanwoo Choi 0 siblings, 1 reply; 9+ messages in thread From: k.konieczny @ 2019-07-25 14:42 UTC (permalink / raw) To: k.konieczny Cc: Mark Rutland, Nishanth Menon, linux-samsung-soc, Rob Herring, linux-arm-kernel, Bartlomiej Zolnierkiewicz, Stephen Boyd, Viresh Kumar, linux-pm, linux-kernel, Krzysztof Kozlowski, Chanwoo Choi, Kyungmin Park, Kukjin Kim, MyungJoo Ham, devicetree, Marek Szyprowski Reuse opp core code for setting bus clock and voltage. As a side effect this allow usage of coupled regulators feature (required for boards using Exynos5422/5800 SoCs) because dev_pm_opp_set_rate() uses regulator_set_voltage_triplet() for setting regulator voltage while the old code used regulator_set_voltage_tol() with fixed tolerance. This patch also removes no longer needed parsing of DT property "exynos,voltage-tolerance" (no Exynos devfreq DT node uses it). Signed-off-by: Kamil Konieczny <k.konieczny@partner.samsung.com> --- Changes: v4: - remove unrelated changes, add newline before comment --- drivers/devfreq/exynos-bus.c | 108 +++++++++-------------------------- 1 file changed, 28 insertions(+), 80 deletions(-) diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c index f34fa26f00d0..ebb8f46312b6 100644 --- a/drivers/devfreq/exynos-bus.c +++ b/drivers/devfreq/exynos-bus.c @@ -25,7 +25,6 @@ #include <linux/slab.h> #define DEFAULT_SATURATION_RATIO 40 -#define DEFAULT_VOLTAGE_TOLERANCE 2 struct exynos_bus { struct device *dev; @@ -37,9 +36,8 @@ struct exynos_bus { unsigned long curr_freq; - struct regulator *regulator; + struct opp_table *opp_table; struct clk *clk; - unsigned int voltage_tolerance; unsigned int ratio; }; @@ -99,56 +97,23 @@ static int exynos_bus_target(struct device *dev, unsigned long *freq, u32 flags) { struct exynos_bus *bus = dev_get_drvdata(dev); struct dev_pm_opp *new_opp; - unsigned long old_freq, new_freq, new_volt, tol; int ret = 0; - /* Get new opp-bus instance according to new bus clock */ + /* Get correct frequency for bus. */ new_opp = devfreq_recommended_opp(dev, freq, flags); if (IS_ERR(new_opp)) { dev_err(dev, "failed to get recommended opp instance\n"); return PTR_ERR(new_opp); } - new_freq = dev_pm_opp_get_freq(new_opp); - new_volt = dev_pm_opp_get_voltage(new_opp); dev_pm_opp_put(new_opp); - old_freq = bus->curr_freq; - - if (old_freq == new_freq) - return 0; - tol = new_volt * bus->voltage_tolerance / 100; - /* Change voltage and frequency according to new OPP level */ mutex_lock(&bus->lock); + ret = dev_pm_opp_set_rate(dev, *freq); + if (!ret) + bus->curr_freq = *freq; - if (old_freq < new_freq) { - ret = regulator_set_voltage_tol(bus->regulator, new_volt, tol); - if (ret < 0) { - dev_err(bus->dev, "failed to set voltage\n"); - goto out; - } - } - - ret = clk_set_rate(bus->clk, new_freq); - if (ret < 0) { - dev_err(dev, "failed to change clock of bus\n"); - clk_set_rate(bus->clk, old_freq); - goto out; - } - - if (old_freq > new_freq) { - ret = regulator_set_voltage_tol(bus->regulator, new_volt, tol); - if (ret < 0) { - dev_err(bus->dev, "failed to set voltage\n"); - goto out; - } - } - bus->curr_freq = new_freq; - - dev_dbg(dev, "Set the frequency of bus (%luHz -> %luHz, %luHz)\n", - old_freq, new_freq, clk_get_rate(bus->clk)); -out: mutex_unlock(&bus->lock); return ret; @@ -196,8 +161,10 @@ static void exynos_bus_exit(struct device *dev) dev_pm_opp_of_remove_table(dev); clk_disable_unprepare(bus->clk); - if (bus->regulator) - regulator_disable(bus->regulator); + if (bus->opp_table) { + dev_pm_opp_put_regulators(bus->opp_table); + bus->opp_table = NULL; + } } /* @@ -208,39 +175,23 @@ static int exynos_bus_passive_target(struct device *dev, unsigned long *freq, { struct exynos_bus *bus = dev_get_drvdata(dev); struct dev_pm_opp *new_opp; - unsigned long old_freq, new_freq; - int ret = 0; + int ret; - /* Get new opp-bus instance according to new bus clock */ + /* Get correct frequency for bus. */ new_opp = devfreq_recommended_opp(dev, freq, flags); if (IS_ERR(new_opp)) { dev_err(dev, "failed to get recommended opp instance\n"); return PTR_ERR(new_opp); } - new_freq = dev_pm_opp_get_freq(new_opp); dev_pm_opp_put(new_opp); - old_freq = bus->curr_freq; - - if (old_freq == new_freq) - return 0; - /* Change the frequency according to new OPP level */ mutex_lock(&bus->lock); + ret = dev_pm_opp_set_rate(dev, *freq); + if (!ret) + bus->curr_freq = *freq; - ret = clk_set_rate(bus->clk, new_freq); - if (ret < 0) { - dev_err(dev, "failed to set the clock of bus\n"); - goto out; - } - - *freq = new_freq; - bus->curr_freq = new_freq; - - dev_dbg(dev, "Set the frequency of bus (%luHz -> %luHz, %luHz)\n", - old_freq, new_freq, clk_get_rate(bus->clk)); -out: mutex_unlock(&bus->lock); return ret; @@ -258,21 +209,19 @@ static int exynos_bus_parent_parse_of(struct device_node *np, struct exynos_bus *bus) { struct device *dev = bus->dev; + struct opp_table *opp_table; + const char *vdd = "vdd"; int i, ret, count, size; - /* Get the regulator to provide each bus with the power */ - bus->regulator = devm_regulator_get(dev, "vdd"); - if (IS_ERR(bus->regulator)) { - dev_err(dev, "failed to get VDD regulator\n"); - return PTR_ERR(bus->regulator); - } - - ret = regulator_enable(bus->regulator); - if (ret < 0) { - dev_err(dev, "failed to enable VDD regulator\n"); + opp_table = dev_pm_opp_set_regulators(dev, &vdd, 1); + if (IS_ERR(opp_table)) { + ret = PTR_ERR(opp_table); + dev_err(dev, "failed to set regulators %d\n", ret); return ret; } + bus->opp_table = opp_table; + /* * Get the devfreq-event devices to get the current utilization of * buses. This raw data will be used in devfreq ondemand governor. @@ -313,14 +262,11 @@ static int exynos_bus_parent_parse_of(struct device_node *np, if (of_property_read_u32(np, "exynos,saturation-ratio", &bus->ratio)) bus->ratio = DEFAULT_SATURATION_RATIO; - if (of_property_read_u32(np, "exynos,voltage-tolerance", - &bus->voltage_tolerance)) - bus->voltage_tolerance = DEFAULT_VOLTAGE_TOLERANCE; - return 0; err_regulator: - regulator_disable(bus->regulator); + dev_pm_opp_put_regulators(bus->opp_table); + bus->opp_table = NULL; return ret; } @@ -511,8 +457,10 @@ static int exynos_bus_probe(struct platform_device *pdev) dev_pm_opp_of_remove_table(dev); clk_disable_unprepare(bus->clk); err_reg: - if (!passive) - regulator_disable(bus->regulator); + if (!passive) { + dev_pm_opp_put_regulators(bus->opp_table); + bus->opp_table = NULL; + } return ret; } -- 2.22.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v4 2/5] devfreq: exynos-bus: convert to use dev_pm_opp_set_rate() 2019-07-25 14:42 ` [PATCH v4 2/5] devfreq: exynos-bus: convert to use dev_pm_opp_set_rate() k.konieczny @ 2019-07-25 15:08 ` Chanwoo Choi 0 siblings, 0 replies; 9+ messages in thread From: Chanwoo Choi @ 2019-07-25 15:08 UTC (permalink / raw) To: Kamil Konieczny Cc: Mark Rutland, Nishanth Menon, linux-samsung-soc, Rob Herring, linux-arm-kernel, Bartlomiej Zolnierkiewicz, Stephen Boyd, Viresh Kumar, Linux PM list, linux-kernel, Krzysztof Kozlowski, Chanwoo Choi, Kyungmin Park, Kukjin Kim, MyungJoo Ham, devicetree, Marek Szyprowski Hi, This patch has the same problem as I mentioned on v3. We need to discuss it on v3[1]. Please check my reply. [1] [PATCH v3 3/5] devfreq: exynos-bus: convert to use dev_pm_opp_set_rate() 2019년 7월 25일 (목) 오후 11:46, <k.konieczny@partner.samsung.com>님이 작성: > > Reuse opp core code for setting bus clock and voltage. As a side > effect this allow usage of coupled regulators feature (required > for boards using Exynos5422/5800 SoCs) because dev_pm_opp_set_rate() > uses regulator_set_voltage_triplet() for setting regulator voltage > while the old code used regulator_set_voltage_tol() with fixed > tolerance. This patch also removes no longer needed parsing of DT > property "exynos,voltage-tolerance" (no Exynos devfreq DT node uses > it). > > Signed-off-by: Kamil Konieczny <k.konieczny@partner.samsung.com> > --- > Changes: > v4: > - remove unrelated changes, add newline before comment > > --- > drivers/devfreq/exynos-bus.c | 108 +++++++++-------------------------- > 1 file changed, 28 insertions(+), 80 deletions(-) > > diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c > index f34fa26f00d0..ebb8f46312b6 100644 > --- a/drivers/devfreq/exynos-bus.c > +++ b/drivers/devfreq/exynos-bus.c > @@ -25,7 +25,6 @@ > #include <linux/slab.h> > > #define DEFAULT_SATURATION_RATIO 40 > -#define DEFAULT_VOLTAGE_TOLERANCE 2 > > struct exynos_bus { > struct device *dev; > @@ -37,9 +36,8 @@ struct exynos_bus { > > unsigned long curr_freq; > > - struct regulator *regulator; > + struct opp_table *opp_table; > struct clk *clk; > - unsigned int voltage_tolerance; > unsigned int ratio; > }; > > @@ -99,56 +97,23 @@ static int exynos_bus_target(struct device *dev, unsigned long *freq, u32 flags) > { > struct exynos_bus *bus = dev_get_drvdata(dev); > struct dev_pm_opp *new_opp; > - unsigned long old_freq, new_freq, new_volt, tol; > int ret = 0; > > - /* Get new opp-bus instance according to new bus clock */ > + /* Get correct frequency for bus. */ > new_opp = devfreq_recommended_opp(dev, freq, flags); > if (IS_ERR(new_opp)) { > dev_err(dev, "failed to get recommended opp instance\n"); > return PTR_ERR(new_opp); > } > > - new_freq = dev_pm_opp_get_freq(new_opp); > - new_volt = dev_pm_opp_get_voltage(new_opp); > dev_pm_opp_put(new_opp); > > - old_freq = bus->curr_freq; > - > - if (old_freq == new_freq) > - return 0; > - tol = new_volt * bus->voltage_tolerance / 100; > - > /* Change voltage and frequency according to new OPP level */ > mutex_lock(&bus->lock); > + ret = dev_pm_opp_set_rate(dev, *freq); > + if (!ret) > + bus->curr_freq = *freq; > > - if (old_freq < new_freq) { > - ret = regulator_set_voltage_tol(bus->regulator, new_volt, tol); > - if (ret < 0) { > - dev_err(bus->dev, "failed to set voltage\n"); > - goto out; > - } > - } > - > - ret = clk_set_rate(bus->clk, new_freq); > - if (ret < 0) { > - dev_err(dev, "failed to change clock of bus\n"); > - clk_set_rate(bus->clk, old_freq); > - goto out; > - } > - > - if (old_freq > new_freq) { > - ret = regulator_set_voltage_tol(bus->regulator, new_volt, tol); > - if (ret < 0) { > - dev_err(bus->dev, "failed to set voltage\n"); > - goto out; > - } > - } > - bus->curr_freq = new_freq; > - > - dev_dbg(dev, "Set the frequency of bus (%luHz -> %luHz, %luHz)\n", > - old_freq, new_freq, clk_get_rate(bus->clk)); > -out: > mutex_unlock(&bus->lock); > > return ret; > @@ -196,8 +161,10 @@ static void exynos_bus_exit(struct device *dev) > > dev_pm_opp_of_remove_table(dev); > clk_disable_unprepare(bus->clk); > - if (bus->regulator) > - regulator_disable(bus->regulator); > + if (bus->opp_table) { > + dev_pm_opp_put_regulators(bus->opp_table); > + bus->opp_table = NULL; > + } > } > > /* > @@ -208,39 +175,23 @@ static int exynos_bus_passive_target(struct device *dev, unsigned long *freq, > { > struct exynos_bus *bus = dev_get_drvdata(dev); > struct dev_pm_opp *new_opp; > - unsigned long old_freq, new_freq; > - int ret = 0; > + int ret; > > - /* Get new opp-bus instance according to new bus clock */ > + /* Get correct frequency for bus. */ > new_opp = devfreq_recommended_opp(dev, freq, flags); > if (IS_ERR(new_opp)) { > dev_err(dev, "failed to get recommended opp instance\n"); > return PTR_ERR(new_opp); > } > > - new_freq = dev_pm_opp_get_freq(new_opp); > dev_pm_opp_put(new_opp); > > - old_freq = bus->curr_freq; > - > - if (old_freq == new_freq) > - return 0; > - > /* Change the frequency according to new OPP level */ > mutex_lock(&bus->lock); > + ret = dev_pm_opp_set_rate(dev, *freq); > + if (!ret) > + bus->curr_freq = *freq; > > - ret = clk_set_rate(bus->clk, new_freq); > - if (ret < 0) { > - dev_err(dev, "failed to set the clock of bus\n"); > - goto out; > - } > - > - *freq = new_freq; > - bus->curr_freq = new_freq; > - > - dev_dbg(dev, "Set the frequency of bus (%luHz -> %luHz, %luHz)\n", > - old_freq, new_freq, clk_get_rate(bus->clk)); > -out: > mutex_unlock(&bus->lock); > > return ret; > @@ -258,21 +209,19 @@ static int exynos_bus_parent_parse_of(struct device_node *np, > struct exynos_bus *bus) > { > struct device *dev = bus->dev; > + struct opp_table *opp_table; > + const char *vdd = "vdd"; > int i, ret, count, size; > > - /* Get the regulator to provide each bus with the power */ > - bus->regulator = devm_regulator_get(dev, "vdd"); > - if (IS_ERR(bus->regulator)) { > - dev_err(dev, "failed to get VDD regulator\n"); > - return PTR_ERR(bus->regulator); > - } > - > - ret = regulator_enable(bus->regulator); > - if (ret < 0) { > - dev_err(dev, "failed to enable VDD regulator\n"); > + opp_table = dev_pm_opp_set_regulators(dev, &vdd, 1); > + if (IS_ERR(opp_table)) { > + ret = PTR_ERR(opp_table); > + dev_err(dev, "failed to set regulators %d\n", ret); > return ret; > } > > + bus->opp_table = opp_table; > + > /* > * Get the devfreq-event devices to get the current utilization of > * buses. This raw data will be used in devfreq ondemand governor. > @@ -313,14 +262,11 @@ static int exynos_bus_parent_parse_of(struct device_node *np, > if (of_property_read_u32(np, "exynos,saturation-ratio", &bus->ratio)) > bus->ratio = DEFAULT_SATURATION_RATIO; > > - if (of_property_read_u32(np, "exynos,voltage-tolerance", > - &bus->voltage_tolerance)) > - bus->voltage_tolerance = DEFAULT_VOLTAGE_TOLERANCE; > - > return 0; > > err_regulator: > - regulator_disable(bus->regulator); > + dev_pm_opp_put_regulators(bus->opp_table); > + bus->opp_table = NULL; > > return ret; > } > @@ -511,8 +457,10 @@ static int exynos_bus_probe(struct platform_device *pdev) > dev_pm_opp_of_remove_table(dev); > clk_disable_unprepare(bus->clk); > err_reg: > - if (!passive) > - regulator_disable(bus->regulator); > + if (!passive) { > + dev_pm_opp_put_regulators(bus->opp_table); > + bus->opp_table = NULL; > + } > > return ret; > } > -- > 2.22.0 > -- Best Regards, Chanwoo Choi _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <CGME20190725144326eucas1p29087ad57d52c5978525bcfb050d1a0e6@eucas1p2.samsung.com>]
* [PATCH v4 3/5] ARM: dts: exynos: add initial data for coupled regulators for Exynos5422/5800 [not found] ` <CGME20190725144326eucas1p29087ad57d52c5978525bcfb050d1a0e6@eucas1p2.samsung.com> @ 2019-07-25 14:42 ` k.konieczny 0 siblings, 0 replies; 9+ messages in thread From: k.konieczny @ 2019-07-25 14:42 UTC (permalink / raw) To: k.konieczny Cc: Mark Rutland, Nishanth Menon, linux-samsung-soc, Rob Herring, linux-arm-kernel, Bartlomiej Zolnierkiewicz, Stephen Boyd, Viresh Kumar, linux-pm, linux-kernel, Krzysztof Kozlowski, Chanwoo Choi, Kyungmin Park, Kukjin Kim, MyungJoo Ham, devicetree, Marek Szyprowski From: Marek Szyprowski <m.szyprowski@samsung.com> Declare Exynos5422/5800 voltage ranges for opp points for big cpu core and bus wcore and couple their voltage supllies as vdd_arm and vdd_int should be in 300mV range. Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> [k.konieczny: add missing patch description] Signed-off-by: Kamil Konieczny <k.konieczny@partner.samsung.com> Reviewed-by: Chanwoo Choi <cw00.choi@samsung.com> --- arch/arm/boot/dts/exynos5420.dtsi | 34 +++++++++---------- arch/arm/boot/dts/exynos5422-odroid-core.dtsi | 4 +++ arch/arm/boot/dts/exynos5800-peach-pi.dts | 4 +++ arch/arm/boot/dts/exynos5800.dtsi | 32 ++++++++--------- 4 files changed, 41 insertions(+), 33 deletions(-) diff --git a/arch/arm/boot/dts/exynos5420.dtsi b/arch/arm/boot/dts/exynos5420.dtsi index 5fb2326875dc..0cbf74750553 100644 --- a/arch/arm/boot/dts/exynos5420.dtsi +++ b/arch/arm/boot/dts/exynos5420.dtsi @@ -48,62 +48,62 @@ opp-shared; opp-1800000000 { opp-hz = /bits/ 64 <1800000000>; - opp-microvolt = <1250000>; + opp-microvolt = <1250000 1250000 1500000>; clock-latency-ns = <140000>; }; opp-1700000000 { opp-hz = /bits/ 64 <1700000000>; - opp-microvolt = <1212500>; + opp-microvolt = <1212500 1212500 1500000>; clock-latency-ns = <140000>; }; opp-1600000000 { opp-hz = /bits/ 64 <1600000000>; - opp-microvolt = <1175000>; + opp-microvolt = <1175000 1175000 1500000>; clock-latency-ns = <140000>; }; opp-1500000000 { opp-hz = /bits/ 64 <1500000000>; - opp-microvolt = <1137500>; + opp-microvolt = <1137500 1137500 1500000>; clock-latency-ns = <140000>; }; opp-1400000000 { opp-hz = /bits/ 64 <1400000000>; - opp-microvolt = <1112500>; + opp-microvolt = <1112500 1112500 1500000>; clock-latency-ns = <140000>; }; opp-1300000000 { opp-hz = /bits/ 64 <1300000000>; - opp-microvolt = <1062500>; + opp-microvolt = <1062500 1062500 1500000>; clock-latency-ns = <140000>; }; opp-1200000000 { opp-hz = /bits/ 64 <1200000000>; - opp-microvolt = <1037500>; + opp-microvolt = <1037500 1037500 1500000>; clock-latency-ns = <140000>; }; opp-1100000000 { opp-hz = /bits/ 64 <1100000000>; - opp-microvolt = <1012500>; + opp-microvolt = <1012500 1012500 1500000>; clock-latency-ns = <140000>; }; opp-1000000000 { opp-hz = /bits/ 64 <1000000000>; - opp-microvolt = < 987500>; + opp-microvolt = < 987500 987500 1500000>; clock-latency-ns = <140000>; }; opp-900000000 { opp-hz = /bits/ 64 <900000000>; - opp-microvolt = < 962500>; + opp-microvolt = < 962500 962500 1500000>; clock-latency-ns = <140000>; }; opp-800000000 { opp-hz = /bits/ 64 <800000000>; - opp-microvolt = < 937500>; + opp-microvolt = < 937500 937500 1500000>; clock-latency-ns = <140000>; }; opp-700000000 { opp-hz = /bits/ 64 <700000000>; - opp-microvolt = < 912500>; + opp-microvolt = < 912500 912500 1500000>; clock-latency-ns = <140000>; }; }; @@ -1100,23 +1100,23 @@ opp00 { opp-hz = /bits/ 64 <84000000>; - opp-microvolt = <925000>; + opp-microvolt = <925000 925000 1400000>; }; opp01 { opp-hz = /bits/ 64 <111000000>; - opp-microvolt = <950000>; + opp-microvolt = <950000 950000 1400000>; }; opp02 { opp-hz = /bits/ 64 <222000000>; - opp-microvolt = <950000>; + opp-microvolt = <950000 950000 1400000>; }; opp03 { opp-hz = /bits/ 64 <333000000>; - opp-microvolt = <950000>; + opp-microvolt = <950000 950000 1400000>; }; opp04 { opp-hz = /bits/ 64 <400000000>; - opp-microvolt = <987500>; + opp-microvolt = <987500 987500 1400000>; }; }; diff --git a/arch/arm/boot/dts/exynos5422-odroid-core.dtsi b/arch/arm/boot/dts/exynos5422-odroid-core.dtsi index 25d95de15c9b..65d094256b54 100644 --- a/arch/arm/boot/dts/exynos5422-odroid-core.dtsi +++ b/arch/arm/boot/dts/exynos5422-odroid-core.dtsi @@ -428,6 +428,8 @@ regulator-max-microvolt = <1500000>; regulator-always-on; regulator-boot-on; + regulator-coupled-with = <&buck3_reg>; + regulator-coupled-max-spread = <300000>; }; buck3_reg: BUCK3 { @@ -436,6 +438,8 @@ regulator-max-microvolt = <1400000>; regulator-always-on; regulator-boot-on; + regulator-coupled-with = <&buck2_reg>; + regulator-coupled-max-spread = <300000>; }; buck4_reg: BUCK4 { diff --git a/arch/arm/boot/dts/exynos5800-peach-pi.dts b/arch/arm/boot/dts/exynos5800-peach-pi.dts index e0f470fe54c8..5c1e965ed7e9 100644 --- a/arch/arm/boot/dts/exynos5800-peach-pi.dts +++ b/arch/arm/boot/dts/exynos5800-peach-pi.dts @@ -257,6 +257,8 @@ regulator-always-on; regulator-boot-on; regulator-ramp-delay = <12500>; + regulator-coupled-with = <&buck3_reg>; + regulator-coupled-max-spread = <300000>; regulator-state-mem { regulator-off-in-suspend; }; @@ -269,6 +271,8 @@ regulator-always-on; regulator-boot-on; regulator-ramp-delay = <12500>; + regulator-coupled-with = <&buck2_reg>; + regulator-coupled-max-spread = <300000>; regulator-state-mem { regulator-off-in-suspend; }; diff --git a/arch/arm/boot/dts/exynos5800.dtsi b/arch/arm/boot/dts/exynos5800.dtsi index 57d3b319fd65..2a74735d161c 100644 --- a/arch/arm/boot/dts/exynos5800.dtsi +++ b/arch/arm/boot/dts/exynos5800.dtsi @@ -22,61 +22,61 @@ &cluster_a15_opp_table { opp-1700000000 { - opp-microvolt = <1250000>; + opp-microvolt = <1250000 1250000 1500000>; }; opp-1600000000 { - opp-microvolt = <1250000>; + opp-microvolt = <1250000 1250000 1500000>; }; opp-1500000000 { - opp-microvolt = <1100000>; + opp-microvolt = <1100000 1100000 1500000>; }; opp-1400000000 { - opp-microvolt = <1100000>; + opp-microvolt = <1100000 1100000 1500000>; }; opp-1300000000 { - opp-microvolt = <1100000>; + opp-microvolt = <1100000 1100000 1500000>; }; opp-1200000000 { - opp-microvolt = <1000000>; + opp-microvolt = <1000000 1000000 1500000>; }; opp-1100000000 { - opp-microvolt = <1000000>; + opp-microvolt = <1000000 1000000 1500000>; }; opp-1000000000 { - opp-microvolt = <1000000>; + opp-microvolt = <1000000 1000000 1500000>; }; opp-900000000 { - opp-microvolt = <1000000>; + opp-microvolt = <1000000 1000000 1500000>; }; opp-800000000 { - opp-microvolt = <900000>; + opp-microvolt = <900000 900000 1500000>; }; opp-700000000 { - opp-microvolt = <900000>; + opp-microvolt = <900000 900000 1500000>; }; opp-600000000 { opp-hz = /bits/ 64 <600000000>; - opp-microvolt = <900000>; + opp-microvolt = <900000 900000 1500000>; clock-latency-ns = <140000>; }; opp-500000000 { opp-hz = /bits/ 64 <500000000>; - opp-microvolt = <900000>; + opp-microvolt = <900000 900000 1500000>; clock-latency-ns = <140000>; }; opp-400000000 { opp-hz = /bits/ 64 <400000000>; - opp-microvolt = <900000>; + opp-microvolt = <900000 900000 1500000>; clock-latency-ns = <140000>; }; opp-300000000 { opp-hz = /bits/ 64 <300000000>; - opp-microvolt = <900000>; + opp-microvolt = <900000 900000 1500000>; clock-latency-ns = <140000>; }; opp-200000000 { opp-hz = /bits/ 64 <200000000>; - opp-microvolt = <900000>; + opp-microvolt = <900000 900000 1500000>; clock-latency-ns = <140000>; }; }; -- 2.22.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 9+ messages in thread
[parent not found: <CGME20190725144327eucas1p1c799f61c7ff5c926002c4da846c048a6@eucas1p1.samsung.com>]
* [PATCH v4 4/5] dt-bindings: devfreq: exynos-bus: remove unused property [not found] ` <CGME20190725144327eucas1p1c799f61c7ff5c926002c4da846c048a6@eucas1p1.samsung.com> @ 2019-07-25 14:42 ` k.konieczny 0 siblings, 0 replies; 9+ messages in thread From: k.konieczny @ 2019-07-25 14:42 UTC (permalink / raw) To: k.konieczny Cc: Mark Rutland, Nishanth Menon, linux-samsung-soc, Rob Herring, linux-arm-kernel, Bartlomiej Zolnierkiewicz, Stephen Boyd, Viresh Kumar, linux-pm, linux-kernel, Krzysztof Kozlowski, Chanwoo Choi, Kyungmin Park, Kukjin Kim, MyungJoo Ham, devicetree, Marek Szyprowski Remove unused DT property "exynos,voltage-tolerance". Signed-off-by: Kamil Konieczny <k.konieczny@partner.samsung.com> Acked-by: Chanwoo Choi <cw00.choi@samsung.com> --- Documentation/devicetree/bindings/devfreq/exynos-bus.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/Documentation/devicetree/bindings/devfreq/exynos-bus.txt b/Documentation/devicetree/bindings/devfreq/exynos-bus.txt index f8e946471a58..e71f752cc18f 100644 --- a/Documentation/devicetree/bindings/devfreq/exynos-bus.txt +++ b/Documentation/devicetree/bindings/devfreq/exynos-bus.txt @@ -50,8 +50,6 @@ Required properties only for passive bus device: Optional properties only for parent bus device: - exynos,saturation-ratio: the percentage value which is used to calibrate the performance count against total cycle count. -- exynos,voltage-tolerance: the percentage value for bus voltage tolerance - which is used to calculate the max voltage. Detailed correlation between sub-blocks and power line according to Exynos SoC: - In case of Exynos3250, there are two power line as following: -- 2.22.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 9+ messages in thread
[parent not found: <CGME20190725144328eucas1p1e16c826c18c79af8f9c7283a896266a6@eucas1p1.samsung.com>]
* [PATCH v4 5/5] devfreq: exynos-bus: remove exynos_bus_passive_target() [not found] ` <CGME20190725144328eucas1p1e16c826c18c79af8f9c7283a896266a6@eucas1p1.samsung.com> @ 2019-07-25 14:43 ` k.konieczny 0 siblings, 0 replies; 9+ messages in thread From: k.konieczny @ 2019-07-25 14:43 UTC (permalink / raw) To: k.konieczny Cc: Mark Rutland, Nishanth Menon, linux-samsung-soc, Rob Herring, linux-arm-kernel, Bartlomiej Zolnierkiewicz, Stephen Boyd, Viresh Kumar, linux-pm, linux-kernel, Krzysztof Kozlowski, Chanwoo Choi, Kyungmin Park, Kukjin Kim, MyungJoo Ham, devicetree, Marek Szyprowski Both functions exynos_bus_passive_target() and exynos_bus_target() have the same code, so remove exynos_bus_passive_target(). In exynos_bus_probe() replace it with exynos_bus_target. Suggested-by: Chanwoo Choi <cw00.choi@samsung.com> Signed-off-by: Kamil Konieczny <k.konieczny@partner.samsung.com> --- This patch is new to this series. --- drivers/devfreq/exynos-bus.c | 34 ++-------------------------------- 1 file changed, 2 insertions(+), 32 deletions(-) diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c index ebb8f46312b6..2aeb6cc07960 100644 --- a/drivers/devfreq/exynos-bus.c +++ b/drivers/devfreq/exynos-bus.c @@ -91,7 +91,7 @@ static int exynos_bus_get_event(struct exynos_bus *bus, } /* - * Must necessary function for devfreq simple-ondemand governor + * devfreq function for both simple-ondemand and passive governor */ static int exynos_bus_target(struct device *dev, unsigned long *freq, u32 flags) { @@ -167,36 +167,6 @@ static void exynos_bus_exit(struct device *dev) } } -/* - * Must necessary function for devfreq passive governor - */ -static int exynos_bus_passive_target(struct device *dev, unsigned long *freq, - u32 flags) -{ - struct exynos_bus *bus = dev_get_drvdata(dev); - struct dev_pm_opp *new_opp; - int ret; - - /* Get correct frequency for bus. */ - new_opp = devfreq_recommended_opp(dev, freq, flags); - if (IS_ERR(new_opp)) { - dev_err(dev, "failed to get recommended opp instance\n"); - return PTR_ERR(new_opp); - } - - dev_pm_opp_put(new_opp); - - /* Change the frequency according to new OPP level */ - mutex_lock(&bus->lock); - ret = dev_pm_opp_set_rate(dev, *freq); - if (!ret) - bus->curr_freq = *freq; - - mutex_unlock(&bus->lock); - - return ret; -} - static void exynos_bus_passive_exit(struct device *dev) { struct exynos_bus *bus = dev_get_drvdata(dev); @@ -417,7 +387,7 @@ static int exynos_bus_probe(struct platform_device *pdev) goto out; passive: /* Initialize the struct profile and governor data for passive device */ - profile->target = exynos_bus_passive_target; + profile->target = exynos_bus_target; profile->exit = exynos_bus_passive_exit; /* Get the instance of parent devfreq device */ -- 2.22.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2019-07-25 15:09 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <CGME20190725144324eucas1p211802237e336852ea3d1aa003e4d5d04@eucas1p2.samsung.com> 2019-07-25 14:42 ` [PATCH v4 0/5] add coupled regulators for Exynos5422/5800 k.konieczny [not found] ` <CGME20190725144325eucas1p1463ecde90f9c93cb73d3c54c7cf3f1ff@eucas1p1.samsung.com> 2019-07-25 14:42 ` [PATCH v4 1/5] devfreq: exynos-bus: correct clock enable sequence k.konieczny 2019-07-25 14:59 ` Chanwoo Choi 2019-07-25 15:07 ` Kamil Konieczny [not found] ` <CGME20190725144325eucas1p204f9ffe8988a3604fdf21f77d242c7b8@eucas1p2.samsung.com> 2019-07-25 14:42 ` [PATCH v4 2/5] devfreq: exynos-bus: convert to use dev_pm_opp_set_rate() k.konieczny 2019-07-25 15:08 ` Chanwoo Choi [not found] ` <CGME20190725144326eucas1p29087ad57d52c5978525bcfb050d1a0e6@eucas1p2.samsung.com> 2019-07-25 14:42 ` [PATCH v4 3/5] ARM: dts: exynos: add initial data for coupled regulators for Exynos5422/5800 k.konieczny [not found] ` <CGME20190725144327eucas1p1c799f61c7ff5c926002c4da846c048a6@eucas1p1.samsung.com> 2019-07-25 14:42 ` [PATCH v4 4/5] dt-bindings: devfreq: exynos-bus: remove unused property k.konieczny [not found] ` <CGME20190725144328eucas1p1e16c826c18c79af8f9c7283a896266a6@eucas1p1.samsung.com> 2019-07-25 14:43 ` [PATCH v4 5/5] devfreq: exynos-bus: remove exynos_bus_passive_target() k.konieczny
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).