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 devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html