Re: [PATCHv6 0/9] devfreq: Add devfreq-event class to provide raw data for devfreq device

From: Chanwoo Choi
Date: Mon Jan 05 2015 - 21:00:39 EST


Genlty Ping.

Best Regards,
Chanwoo Choi

On 12/29/2014 09:04 AM, Chanwoo Choi wrote:
> This patchset add new devfreq_event class to provide raw data to determine
> current utilization of device which is used for devfreq governor.
>
> [Description of devfreq-event class]
> This patchset add new devfreq_event class for devfreq_event device which provide
> raw data (e.g., memory bus utilization/GPU utilization). This raw data from
> devfreq_event data would be used for the governor of devfreq subsystem.
> - devfreq_event device : Provide raw data for governor of existing devfreq device
> - devfreq device : Monitor device state and change frequency/voltage of device
> using the raw data from devfreq_event device
>
> The devfreq subsystem support generic DVFS(Dynamic Voltage/Frequency Scaling)
> for Non-CPU Devices. The devfreq device would dertermine current device state
> using various governor (e.g., ondemand, performance, powersave). After completed
> determination of system state, devfreq device would change the frequency/voltage
> of devfreq device according to the result of governor.
>
> But, devfreq governor must need basic data which indicates current device state.
> Existing devfreq subsystem only consider devfreq device which check current system
> state and determine proper system state using basic data. There is no subsystem
> for device providing basic data to devfreq device.
>
> The devfreq subsystem must need devfreq_event device(data-provider device) for
> existing devfreq device. So, this patch add new devfreq_event class for
> devfreq_event device which read various basic data(e.g, memory bus utilization,
> GPU utilization) and provide measured data to existing devfreq device through
> standard APIs of devfreq_event class.
>
> The following description explains the feature of two kind of devfreq class:
> - devfreq class (existing)
> : devfreq consumer device use raw data from devfreq_event device for
> determining proper current system state and change voltage/frequency
> dynamically using various governors.
> - devfreq_event class (new)
> : Provide measured raw data to devfreq device for governor
>
> Also, the devfreq-event device would support various type event as following:
> : DEVFREQ_EVENT_TYPE_RAW_DATA
> : DEVFREQ_EVENT_TYPE_UTILIZATION
> : DEVFREQ_EVENT_TYPE_BANDWIDTH
> : DEVFREQ_EVENT_TYPE_LATENCY
>
> [For example]
> If board dts includes PPMU_DMC0/DMC1/LEFTBUS/RIGHTBUS event node,
> would show following sysfs entry. Also devfreq driver(e.g., exynos4_bus.c)
> can get the instance of devfreq-event device by using provided API and then
> get raw data which reflect the current state of device.
>
> -sh-3.2# cd /sys/class/devfreq-event/
> -sh-3.2# ls -al
> total 0
> drwxr-xr-x 2 root root 0 Jan 9 16:47 .
> drwxr-xr-x 37 root root 0 Jan 9 16:47 ..
> lrwxrwxrwx 1 root root 0 Jan 9 16:47 event.0 -> ../../devices/soc/106a0000.ppmu_dmc0/devfreq-event/event.0
> lrwxrwxrwx 1 root root 0 Jan 9 16:47 event.1 -> ../../devices/soc/106b0000.ppmu_dmc1/devfreq-event/event.1
> lrwxrwxrwx 1 root root 0 Jan 9 16:47 event.2 -> ../../devices/soc/112a0000.ppmu_rightbus/devfreq-event/event.2
> lrwxrwxrwx 1 root root 0 Jan 9 16:47 event.3 -> ../../devices/soc/116a0000.ppmu_leftbus0/devfreq-event/event.3
>
> Changes from v5:
> - Rebase these patch-set on v3.19-rc1 and Test it.
> 1. exynos-ppmu.c
> - Change the error value when of_iomap() fail to map the memory
> - Remove owner setting of platform_driver
> - Add exynos_ppmu_disable() function
> 2. exynos dts file
> - Add PPMU node to Exynos3250-based Monk board
> - Remove ppmu_cpu node on Exynos4412-based TRATS2 board and add ppmu_leftbus/rightbus node
>
> Changes from v4:
> 1. devfreq-event class driver
> - Add devfreq_event_get_edev_count() function
> - Modify the simple description of devfreq-event framework in devfreq-event.c
> - Minimize the usage range of global lock usage in devfreq_event_add_edev()
> - Remove '_is_enabled()' function pointer in devfreq_event_ops structure
> - Add separte CONFIG_PM_DEVFREQ_EVENT configuration
> - Add new devfreq-event.h header file including devfreq-event helper functions
> 2. exynos dts file
> - Add new patch to support PPMU with DEVFREQ-event on Exynos4412-based TRATS2
>
> Changes from v3:
> 1. devfreq-event class driver
> - Fix return value of devfreq_event_get_event()
> - Add new structure devfreq_event_data for devfreq_event_get_event()
> - Modify the prototype of devfreq_event_get_event() function
> - Call of_node_put after calling of_parse_phandle() to decrement refcount
> 2. exynos-ppmu driver
> - Modify usage of devfreq_event_get_event() function
> according to new prototype of this funciton
> - Add the additional description to exynos-ppmu.txt how to add PPMU node
> in board dts file
> - Use 'PPMU_EVENT' macro to remove duplicate codes
> - Add the support of PPMU for Exynos5260
> 3. exynos dts file
> - Add missing PPMU_FSYS node to exynos3250.dtsi
> - Fix 'ppmu_mfc_l' node name as 'ppmu_mfc' because exynos3250 has only one MFC IP.
> - Add missing PPMU_ACP/G3D to exynos4.dtsi
> 4. etc
> - Fix wrong abbreviation of PPMU (PPMU :Platform Performance Monitoring Unit)
> - Add new patch to support the PPMU of Exynos5260 SoC
>
> Changes from v2:
> 1. devfreq-event class driver
> - Rename all the helper functions of devfreq-event device
> - Add devfreq_event_remove_edev() instead of devfreq_put_event_dev()
> - Add devfreq_event_release_edev() to initialize it before put device
> - Add the detailed description of devfreq-event API
> - Add the attributes of devfreq-event class (enable_count)
> - Check the overflow about event/total_event data in devfreq_event_get_event()
> - Remove the 'exclusive flag' feature
> - Set set_event()/get_event() functions as mandary
> - Add missing of_node_put() call
> - Change variable type of 'get_event()' funciton from 'int' to 'u64'
> 2. exynos-ppmu driver
> - Remove un-used field (struct devfreq)
> - Use 'of_get_child_by_name()' instead of 'of_find_node_by_name()'
> - Add missing of_node_put() call
> - Fix wrong clock control
> - Use devfreq_event_remove_edev() instead of devfreq_remove_device()
> - Add the documentation for exynos-ppmu driver
> - Remove 'enable/disable/is_enabled/reset' function of exynos-ppmu driver
> 3. exynos3250-rinato.dts
> - Add ppmu_{leftbus|rightbus} dt node and remove ppmu_cpu dt node
>
> Changes from v1:
> - Code clean
> - Add the description of devfreq-event structure
> - Add 'is_enabled' function to devfreq_event_ops structure
> - Add 'enable_count' field to devfreq_event_dev structure
> - Check whether devfreq-event device is enabled or not
> during calling devfreq_event API
> - Define the type of devfreq-event device as following
> : DEVFREQ_EVENT_TYPE_RAW_DATA
> : DEVFREQ_EVENT_TYPE_UTILIZATION
> : DEVFREQ_EVENT_TYPE_BANDWIDTH
> : DEVFREQ_EVENT_TYPE_LATENCY
> - Add the exclusive feature of devfreq-event device.
> If devfreq-event device is used on only on devfreq driver,
> should used 'devfreq_enable_event_dev_exclusive()' function
> - Add new patch6 for test on Exynos3250-based Rinato board
>
> Chanwoo Choi (9):
> devfreq: event: Add new devfreq_event class to provide basic data for devfreq governor
> devfreq: event: Add the list of supported devfreq-event type
> devfreq: event: Add exynos-ppmu devfreq-event driver
> devfreq: event: Add documentation for exynos-ppmu devfreq-event driver
> ARM: dts: Add PPMU dt node for Exynos3250 SoC
> ARM: dts: Add PPMU dt node for Exynos4 SoCs
> ARM: dts: Add PPMU dt node for Exynos5260 SoC
> ARM: dts: exynos: Add PPMU node to Exynos3250-based Rinato/Monk board
> ARM: dts: exynos: Add PPMU node for Exynos4412-based TRATS2 board
>
> .../bindings/devfreq/event/exynos-ppmu.txt | 110 +++++
> arch/arm/boot/dts/exynos3250-monk.dts | 40 ++
> arch/arm/boot/dts/exynos3250-rinato.dts | 40 ++
> arch/arm/boot/dts/exynos3250.dtsi | 74 +++
> arch/arm/boot/dts/exynos4.dtsi | 108 +++++
> arch/arm/boot/dts/exynos4210.dtsi | 8 +
> arch/arm/boot/dts/exynos4412-trats2.dts | 40 ++
> arch/arm/boot/dts/exynos5260.dtsi | 90 ++++
> drivers/devfreq/Kconfig | 2 +
> drivers/devfreq/Makefile | 6 +-
> drivers/devfreq/devfreq-event.c | 510 +++++++++++++++++++++
> drivers/devfreq/event/Kconfig | 25 +
> drivers/devfreq/event/Makefile | 2 +
> drivers/devfreq/event/exynos-ppmu.c | 410 +++++++++++++++++
> include/linux/devfreq-event.h | 189 ++++++++
> 15 files changed, 1653 insertions(+), 1 deletion(-)
> create mode 100644 Documentation/devicetree/bindings/devfreq/event/exynos-ppmu.txt
> create mode 100644 drivers/devfreq/devfreq-event.c
> create mode 100644 drivers/devfreq/event/Kconfig
> create mode 100644 drivers/devfreq/event/Makefile
> create mode 100644 drivers/devfreq/event/exynos-ppmu.c
> create mode 100644 include/linux/devfreq-event.h
>

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/