From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752391AbbKZNr7 (ORCPT ); Thu, 26 Nov 2015 08:47:59 -0500 Received: from mailout2.samsung.com ([203.254.224.25]:48418 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751501AbbKZNrn (ORCPT ); Thu, 26 Nov 2015 08:47:43 -0500 X-AuditID: cbfee68f-f79666d0000076bb-a4-56570d7c193d From: Chanwoo Choi To: myungjoo.ham@samsung.com, kyungmin.park@samsung.com, kgene@kernel.org, k.kozlowski@samsung.com Cc: robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com, ijc+devicetree@hellion.org.uk, galak@codeaurora.org, linux@arm.linux.org.uk, tjakobi@math.uni-bielefeld.de, cw00.choi@samsung.com, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-samsung-soc@vger.kernel.org, devicetree@vger.kernel.org Subject: [RFC PATCH 00/15] PM / devferq: Add generic exynos bus frequency driver and new passive governor Date: Thu, 26 Nov 2015 22:47:24 +0900 Message-id: <1448545659-32287-1-git-send-email-cw00.choi@samsung.com> X-Mailer: git-send-email 1.8.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrLLMWRmVeSWpSXmKPExsWyRsSkQLeGNzzM4MkaPYvrX56zWsw/co7V ov/NQlaLc69WMlq8fmFo0f/4NbPF2aY37BaXd81hs/jce4TRYsb5fUwWty/zWiy9fhHIaFzB ZjFh+loWi9a9R9gt2lZ/YHUQ8Fgzbw2jR0tzD5vH5b5eJo+Vy7+weWxa1cnm8e8Yu0ffllWM Hp83yQVwRHHZpKTmZJalFunbJXBlrF+cUvDaoWJ7ywy2Bsavhl2MnBwSAiYSvcsPM0PYYhIX 7q1n62Lk4hASWMEo0XjvGRtMUd+xbSwQiaWMEi3/jzBCOF8YJW4+nsAIUsUmoCWx/8UNsA4R gRSJvzdngxUxCxxikjjz7ggTSEJYIFvi1OtrYPtYBFQlDn48BdbMK+AqcaHjJtQdchIf9jxi B2mWELjGLvF11XxWiAYBiW+TDwHdwQGUkJXYdACqXlLi4IobLBMYBRcwMqxiFE0tSC4oTkov MtYrTswtLs1L10vOz93ECIyV0/+e9e9gvHvA+hCjAAejEg9vgW1YmBBrYllxZe4hRlOgDROZ pUST84ERmVcSb2hsZmRhamJqbGRuaaYkzrtQ6mewkEB6YklqdmpqQWpRfFFpTmrxIUYmDk6p Bsby263xjWeXc6xS/arNfy7xVdzRBflflV/tvKLFlbqz3p+vq6ZFZyWv6EvPL7GTQi8dmrNG Mjq/WOKbnuhE+7XelftOK0xqt/xg+PjUgl7FNVNL5zF+VuHa2/W4PPJpwKbTl9+pc939VOzh mjxh14E6v6J3Ses2Jm/OUXBR/le4qvjOufo1HAJKLMUZiYZazEXFiQAUnoYHkAIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrFIsWRmVeSWpSXmKPExsVy+t9jAd0a3vAwg0171Cyuf3nOajH/yDlW i/43C1ktzr1ayWjx+oWhRf/j18wWZ5vesFtc3jWHzeJz7xFGixnn9zFZ3L7Ma7H0+kUgo3EF m8WE6WtZLFr3HmG3aFv9gdVBwGPNvDWMHi3NPWwel/t6mTxWLv/C5rFpVSebx79j7B59W1Yx enzeJBfAEdXAaJORmpiSWqSQmpecn5KZl26r5B0c7xxvamZgqGtoaWGupJCXmJtqq+TiE6Dr lpkD9ICSQlliTilQKCCxuFhJ3w7ThNAQN10LmMYIXd+QILgeIwM0kLCGMWP94pSC1w4V21tm sDUwfjXsYuTkkBAwkeg7to0FwhaTuHBvPVsXIxeHkMBSRomW/0cYIZwvjBI3H09gBKliE9CS 2P/iBhuILSKQIvH35mywImaBQ0wSZ94dYQJJCAtkS5x6fY0ZxGYRUJU4+PEUWDOvgKvEhY6b zBDr5CQ+7HnEPoGRewEjwypGidSC5ILipPRco7zUcr3ixNzi0rx0veT83E2M4Hh8Jr2D8fAu 90OMAhyMSjy8BbZhYUKsiWXFlbmHGCU4mJVEeG+xhIcJ8aYkVlalFuXHF5XmpBYfYjQFOmAi s5Rocj4wVeSVxBsam5gZWRqZG1oYGZsrifNe2O8XJiSQnliSmp2aWpBaBNPHxMEp1cDo9TdG ZwPTa+E7C9cdurv83c9YeaXoty3Kb7ILDnxcknhlZ6xz6FW3aetnmj612pLTaP6cUSzNJrUn dnX5+em1Ss/8pt5ZcOz00VTVLRMS624Wy9VPW7bj91VPu9ibfnkVWzjv5WirRt67zPxjSmCH uW976Iu4DRN6TFbfW9PSser08ie8h+blKrEUZyQaajEXFScCAGLrZ8HdAgAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch-set includes the two features as following. The generic exynos bus frequency driver is able to support almost Exynos SoCs for bus frequency scaling. And the new passive governor is able to make the dependency on between devices for frequency/voltage scaling. I had posted the patch-set[1] with the similiar concept. This is is revised version for exynos bus frequency. - Generic exynos bus frequency driver - New passive governor of DEVFREQ framework Detailed descirption for patch-set: 1. Add generic exynos bus frequency driver : This patch-set adds the generic exynos bus frequency driver for AXI bus of sub-blocks in exynos SoC. The Samsung Exynos SoC have the common architecture for bus between DRAM and sub-blocks in SoC. There are the different buses according to Exynos SoC because Exynos SoC has the differnt sub-blocks and bus speed. In spite of this difference among Exynos SoCs, this driver is able to support almost Exynos SoC by adding unique data of each bus in the devicetree file. In devicetree, each bus node has a bus clock, regulator, operation-point and devfreq-event devices which measure the utilization of each bus block. For example, - The bus of DMC block in exynos3250.dtsi are listed below: bus_dmc: bus_dmc { compatible = "samsung,exynos-bus"; clocks = <&cmu_dmc CLK_DIV_DMC>; clock-names = "bus"; operating-points-v2 = <&bus_dmc_opp_table>; status = "disabled"; }; bus_dmc_opp_table: opp_table0 { compatible = "operating-points-v2"; opp-shared; opp00 { opp-hz = /bits/ 64 <50000000>; opp-microvolt = <800000>; }; opp01 { opp-hz = /bits/ 64 <100000000>; opp-microvolt = <800000>; }; opp02 { opp-hz = /bits/ 64 <133000000>; opp-microvolt = <800000>; }; opp03 { opp-hz = /bits/ 64 <200000000>; opp-microvolt = <800000>; }; opp04 { opp-hz = /bits/ 64 <400000000>; opp-microvolt = <875000>; }; }; - Usage case to handle the frequency and voltage of bus on runtime in exynos3250-rinato.dts are listed below: &bus_dmc { devfreq-events = <&ppmu_dmc0_3>, <&ppmu_dmc1_3>; vdd-supply = <&buck1_reg>; /* VDD_MIF */ status = "okay"; }; 2. Add new passive governor of DEVFREQ framework (patch5-patch7) : This patch-set add the new passive governor for DEVFREQ framework. The existing governors (ondemand, performance and so on) are used for DVFS (Dynamic Voltage and Frequency Scaling) drivers. The existing governors are independently used for specific device driver which don't give the influence to other device drviers and also don't receive the effect from other device drivers. The passive governor depends on operation of parent driver with existing governors(ondemand, performance and so on) extremely and is not able to decide the new frequency by oneself. According to the decided new frequency of parent driver with governor, the passive governor uses it to decide the appropriate frequency for own device driver. The passive governor must need the following information from device tree: For exameple, There are one more bus device drivers in Exynos3250 which need to change their source clock according to their utilization on runtime. But, they share the same power line (e.g., regulator). So, LEFTBUS bus driver is operated as parent with ondemand governor and then the rest device driver with passive governor. The buses of Internal block in exynos3250.dtsi are listed below: When LEFTBUS bus driver (parent) changes the bus frequency with ondemand governor on runtime, the rest bus devices which sharing the same power line (VDD_INT) will change the each bus frequency according to the decision of LEFTBUS bus driver (parent). - INT (Internal) block : VDD_INT |--- LEFTBUS |--- PERIL | (parent) |--- MFC | |--- G3D | |--- RIGHTBUS |--- FSYS |--- LCD0 |--- PERIR |--- ISP |--- CAM - The buss of INT block in exynos3250.dtsi are listed below: bus_leftbus: bus_leftbus { compatible = "samsung,exynos-bus"; clocks = <&cmu CLK_DIV_GDL>; clock-names = "bus"; operating-points-v2 = <&bus_leftbus_opp_table>; status = "disabled"; }; bus_rightbus: bus_rightbus { compatible = "samsung,exynos-bus"; clocks = <&cmu CLK_DIV_GDR>; clock-names = "bus"; operating-points-v2 = <&bus_leftbus_opp_table>; status = "disabled"; }; (Omit the rest bus dt node) - Usage case to handle the frequency and voltage of bus on runtime in exynos3250-rinato.dts are listed below: /* Parent bus device of VDD_INT */ &bus_leftbus { devfreq-events = <&ppmu_leftbus_3>, <&ppmu_rightbus_3>; vdd-supply = <&buck3_reg>; status = "okay"; }; /* Passive bus device depend on LEFTBUS bus. */ &bus_rightbus { devfreq = <&bus_leftbus>; /* 'devfreq' property indicates the phandle of parent device. */ status = "okay"; }; (Omit the rest bus dt node) Depends on: - This patch-set is based on devfreq.git[2]. [1] https://lkml.org/lkml/2015/1/7/872 : [PATCHv3 0/8] devfreq: Add generic exynos memory-bus frequency driver [2] https://git.kernel.org/cgit/linux/kernel/git/mzx/devfreq.git/ (branch: for-rafael) Chanwoo Choi (15): PM / devfreq: exynos: Add generic exynos bus frequency driver PM / devfreq: exynos: Add documentation for generic exynos bus frequency driver ARM: dts: Add DMC bus node for Exynos3250 ARM: dts: Add DMC bus freqeuncy for exynos3250-rinato/monk PM / devfreq: Add new passive governor PM / devfreq: Add devfreq_get_devfreq_by_phandle() PM / devfreq: Show the related information according to governor type PM / devfreq: exynos: Add support of bus frequency of sub-blocks using passive governor PM / devfreq: exynos: Update documentation for bus devices using passive governor PM / devfreq: exynos: Remove unused exynos4/5 busfreq driver ARM: dts: Add bus nodes using VDD_INT for Exynos3250 ARM: dts: Add support of bus frequency using VDD_INT for exynos3250-rinato ARM: dts: Add bus nodes using VDD_MIF for Exynos4x12 ARM: dts: Add bus nodes using VDD_INT for Exynos4x12 ARM: dts: Add support of bus frequency for exynos4412-trats .../devicetree/bindings/devfreq/exynos-bus.txt | 312 ++++++ arch/arm/boot/dts/exynos3250-monk.dts | 6 + arch/arm/boot/dts/exynos3250-rinato.dts | 42 + arch/arm/boot/dts/exynos3250.dtsi | 186 ++++ arch/arm/boot/dts/exynos4412-trats2.dts | 47 + arch/arm/boot/dts/exynos4x12.dtsi | 192 ++++ drivers/devfreq/Kconfig | 37 +- drivers/devfreq/Makefile | 2 + drivers/devfreq/devfreq.c | 120 ++- drivers/devfreq/exynos/Makefile | 3 +- drivers/devfreq/exynos/exynos-bus.c | 543 ++++++++++ drivers/devfreq/exynos/exynos4_bus.c | 1055 -------------------- drivers/devfreq/exynos/exynos4_bus.h | 110 -- drivers/devfreq/exynos/exynos5_bus.c | 431 -------- drivers/devfreq/exynos/exynos_ppmu.c | 119 --- drivers/devfreq/exynos/exynos_ppmu.h | 86 -- drivers/devfreq/governor.h | 7 + drivers/devfreq/governor_passive.c | 109 ++ drivers/devfreq/governor_performance.c | 1 + drivers/devfreq/governor_powersave.c | 1 + drivers/devfreq/governor_simpleondemand.c | 1 + drivers/devfreq/governor_userspace.c | 1 + include/linux/devfreq.h | 28 + 23 files changed, 1614 insertions(+), 1825 deletions(-) create mode 100644 Documentation/devicetree/bindings/devfreq/exynos-bus.txt create mode 100644 drivers/devfreq/exynos/exynos-bus.c delete mode 100644 drivers/devfreq/exynos/exynos4_bus.c delete mode 100644 drivers/devfreq/exynos/exynos4_bus.h delete mode 100644 drivers/devfreq/exynos/exynos5_bus.c delete mode 100644 drivers/devfreq/exynos/exynos_ppmu.c delete mode 100644 drivers/devfreq/exynos/exynos_ppmu.h create mode 100644 drivers/devfreq/governor_passive.c -- 1.9.1