Loading drivers/devfreq/governor_bw_vbif.c +18 −13 Original line number Diff line number Diff line Loading @@ -5,9 +5,12 @@ #include <linux/devfreq.h> #include <linux/module.h> #include <linux/msm_adreno_devfreq.h> #include "governor.h" unsigned long (*extern_get_bw)(void) = NULL; static getbw_func extern_get_bw; static void *extern_get_bw_data; unsigned long *dev_ab; static unsigned long dev_ib; Loading @@ -22,12 +25,12 @@ static struct devfreq *df; static int devfreq_vbif_get_freq(struct devfreq *df, unsigned long *freq) { /* If the IB isn't set yet, check if it should be non-zero. */ if (!dev_ib && extern_get_bw) { dev_ib = extern_get_bw(); if (dev_ab) *dev_ab = dev_ib / 4; } unsigned long ab, ib; extern_get_bw(&ib, &ab, extern_get_bw_data); dev_ib = ib; *dev_ab = ab; *freq = dev_ib; return 0; Loading @@ -38,20 +41,19 @@ static int devfreq_vbif_get_freq(struct devfreq *df, * value from legacy vbif based bus bandwidth governor. * This function is called by KGSL driver. */ void devfreq_vbif_register_callback(void *p) void devfreq_vbif_register_callback(getbw_func func, void *data) { extern_get_bw = p; extern_get_bw = func; extern_get_bw_data = data; } int devfreq_vbif_update_bw(unsigned long ib, unsigned long ab) int devfreq_vbif_update_bw(void) { int ret = 0; mutex_lock(&df_lock); if (df) { mutex_lock(&df->lock); dev_ib = ib; *dev_ab = ab; ret = update_devfreq(df); mutex_unlock(&df->lock); } Loading @@ -78,7 +80,10 @@ static int devfreq_vbif_ev_handler(struct devfreq *devfreq, mutex_unlock(&df_lock); ret = devfreq_vbif_update_bw(0, 0); dev_ib = 0; *dev_ab = 0; ret = devfreq_vbif_update_bw(); if (ret) { pr_err("Unable to update BW! Gov start failed!\n"); return ret; Loading drivers/gpu/msm/kgsl_pwrctrl.c +20 −12 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ static const char * const clocks[] = { static unsigned long ib_votes[KGSL_MAX_BUSLEVELS]; static int last_vote_buslevel; static int max_vote_buslevel; static unsigned long last_ab; static void kgsl_pwrctrl_clk(struct kgsl_device *device, int state, int requested_state); Loading Loading @@ -116,9 +117,16 @@ static void _record_pwrevent(struct kgsl_device *device, /** * kgsl_get_bw() - Return latest msm bus IB vote */ static unsigned long kgsl_get_bw(void) static void kgsl_get_bw(unsigned long *ib, unsigned long *ab, void *data) { return ib_votes[last_vote_buslevel]; struct kgsl_device *device = (struct kgsl_device *)data; if (gmu_core_scales_bandwidth(device)) *ib = 0; else *ib = ib_votes[last_vote_buslevel]; *ab = last_ab; } #endif Loading Loading @@ -197,13 +205,13 @@ static unsigned int _adjust_pwrlevel(struct kgsl_pwrctrl *pwr, int level, } #ifdef CONFIG_DEVFREQ_GOV_QCOM_GPUBW_MON static void kgsl_pwrctrl_vbif_update(unsigned long ab) static void kgsl_pwrctrl_vbif_update(void) { /* ask a governor to vote on behalf of us */ devfreq_vbif_update_bw(ib_votes[last_vote_buslevel], ab); devfreq_vbif_update_bw(); } #else static void kgsl_pwrctrl_vbif_update(unsigned long ab) static void kgsl_pwrctrl_vbif_update(void) { } #endif Loading Loading @@ -295,9 +303,11 @@ void kgsl_pwrctrl_buslevel_update(struct kgsl_device *device, /* buslevel is the IB vote, update the AB */ _ab_buslevel_update(pwr, &ab); last_ab = ab; kgsl_bus_scale_request(device, buslevel); kgsl_pwrctrl_vbif_update(ab); kgsl_pwrctrl_vbif_update(); } EXPORT_SYMBOL(kgsl_pwrctrl_buslevel_update); Loading Loading @@ -1770,15 +1780,13 @@ static void kgsl_thermal_timer(struct timer_list *t) } #ifdef CONFIG_DEVFREQ_GOV_QCOM_GPUBW_MON static int kgsl_pwrctrl_vbif_init(void) static void kgsl_pwrctrl_vbif_init(struct kgsl_device *device) { devfreq_vbif_register_callback(kgsl_get_bw); return 0; devfreq_vbif_register_callback(kgsl_get_bw, device); } #else static int kgsl_pwrctrl_vbif_init(void) static void kgsl_pwrctrl_vbif_init(struct kgsl_device *device) { return 0; } #endif Loading Loading @@ -2183,7 +2191,7 @@ int kgsl_pwrctrl_init(struct kgsl_device *device) spin_lock_init(&pwr->limits_lock); pwr->sysfs_pwr_limit = kgsl_pwr_limits_add(KGSL_DEVICE_3D0); kgsl_pwrctrl_vbif_init(); kgsl_pwrctrl_vbif_init(device); /* temperature sensor name */ of_property_read_string(pdev->dev.of_node, "qcom,tzone-name", Loading include/linux/msm_adreno_devfreq.h +5 −5 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. */ #ifndef MSM_ADRENO_DEVFREQ_H Loading Loading @@ -82,9 +82,9 @@ struct msm_busmon_extended_profile { struct devfreq_dev_profile profile; }; #ifdef CONFIG_DEVFREQ_GOV_QCOM_GPUBW_MON int devfreq_vbif_update_bw(unsigned long ib, unsigned long ab); int devfreq_vbif_register_callback(void *callback); #endif typedef void(*getbw_func)(unsigned long *, unsigned long *, void *); int devfreq_vbif_update_bw(void); void devfreq_vbif_register_callback(getbw_func func, void *data); #endif Loading
drivers/devfreq/governor_bw_vbif.c +18 −13 Original line number Diff line number Diff line Loading @@ -5,9 +5,12 @@ #include <linux/devfreq.h> #include <linux/module.h> #include <linux/msm_adreno_devfreq.h> #include "governor.h" unsigned long (*extern_get_bw)(void) = NULL; static getbw_func extern_get_bw; static void *extern_get_bw_data; unsigned long *dev_ab; static unsigned long dev_ib; Loading @@ -22,12 +25,12 @@ static struct devfreq *df; static int devfreq_vbif_get_freq(struct devfreq *df, unsigned long *freq) { /* If the IB isn't set yet, check if it should be non-zero. */ if (!dev_ib && extern_get_bw) { dev_ib = extern_get_bw(); if (dev_ab) *dev_ab = dev_ib / 4; } unsigned long ab, ib; extern_get_bw(&ib, &ab, extern_get_bw_data); dev_ib = ib; *dev_ab = ab; *freq = dev_ib; return 0; Loading @@ -38,20 +41,19 @@ static int devfreq_vbif_get_freq(struct devfreq *df, * value from legacy vbif based bus bandwidth governor. * This function is called by KGSL driver. */ void devfreq_vbif_register_callback(void *p) void devfreq_vbif_register_callback(getbw_func func, void *data) { extern_get_bw = p; extern_get_bw = func; extern_get_bw_data = data; } int devfreq_vbif_update_bw(unsigned long ib, unsigned long ab) int devfreq_vbif_update_bw(void) { int ret = 0; mutex_lock(&df_lock); if (df) { mutex_lock(&df->lock); dev_ib = ib; *dev_ab = ab; ret = update_devfreq(df); mutex_unlock(&df->lock); } Loading @@ -78,7 +80,10 @@ static int devfreq_vbif_ev_handler(struct devfreq *devfreq, mutex_unlock(&df_lock); ret = devfreq_vbif_update_bw(0, 0); dev_ib = 0; *dev_ab = 0; ret = devfreq_vbif_update_bw(); if (ret) { pr_err("Unable to update BW! Gov start failed!\n"); return ret; Loading
drivers/gpu/msm/kgsl_pwrctrl.c +20 −12 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ static const char * const clocks[] = { static unsigned long ib_votes[KGSL_MAX_BUSLEVELS]; static int last_vote_buslevel; static int max_vote_buslevel; static unsigned long last_ab; static void kgsl_pwrctrl_clk(struct kgsl_device *device, int state, int requested_state); Loading Loading @@ -116,9 +117,16 @@ static void _record_pwrevent(struct kgsl_device *device, /** * kgsl_get_bw() - Return latest msm bus IB vote */ static unsigned long kgsl_get_bw(void) static void kgsl_get_bw(unsigned long *ib, unsigned long *ab, void *data) { return ib_votes[last_vote_buslevel]; struct kgsl_device *device = (struct kgsl_device *)data; if (gmu_core_scales_bandwidth(device)) *ib = 0; else *ib = ib_votes[last_vote_buslevel]; *ab = last_ab; } #endif Loading Loading @@ -197,13 +205,13 @@ static unsigned int _adjust_pwrlevel(struct kgsl_pwrctrl *pwr, int level, } #ifdef CONFIG_DEVFREQ_GOV_QCOM_GPUBW_MON static void kgsl_pwrctrl_vbif_update(unsigned long ab) static void kgsl_pwrctrl_vbif_update(void) { /* ask a governor to vote on behalf of us */ devfreq_vbif_update_bw(ib_votes[last_vote_buslevel], ab); devfreq_vbif_update_bw(); } #else static void kgsl_pwrctrl_vbif_update(unsigned long ab) static void kgsl_pwrctrl_vbif_update(void) { } #endif Loading Loading @@ -295,9 +303,11 @@ void kgsl_pwrctrl_buslevel_update(struct kgsl_device *device, /* buslevel is the IB vote, update the AB */ _ab_buslevel_update(pwr, &ab); last_ab = ab; kgsl_bus_scale_request(device, buslevel); kgsl_pwrctrl_vbif_update(ab); kgsl_pwrctrl_vbif_update(); } EXPORT_SYMBOL(kgsl_pwrctrl_buslevel_update); Loading Loading @@ -1770,15 +1780,13 @@ static void kgsl_thermal_timer(struct timer_list *t) } #ifdef CONFIG_DEVFREQ_GOV_QCOM_GPUBW_MON static int kgsl_pwrctrl_vbif_init(void) static void kgsl_pwrctrl_vbif_init(struct kgsl_device *device) { devfreq_vbif_register_callback(kgsl_get_bw); return 0; devfreq_vbif_register_callback(kgsl_get_bw, device); } #else static int kgsl_pwrctrl_vbif_init(void) static void kgsl_pwrctrl_vbif_init(struct kgsl_device *device) { return 0; } #endif Loading Loading @@ -2183,7 +2191,7 @@ int kgsl_pwrctrl_init(struct kgsl_device *device) spin_lock_init(&pwr->limits_lock); pwr->sysfs_pwr_limit = kgsl_pwr_limits_add(KGSL_DEVICE_3D0); kgsl_pwrctrl_vbif_init(); kgsl_pwrctrl_vbif_init(device); /* temperature sensor name */ of_property_read_string(pdev->dev.of_node, "qcom,tzone-name", Loading
include/linux/msm_adreno_devfreq.h +5 −5 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. */ #ifndef MSM_ADRENO_DEVFREQ_H Loading Loading @@ -82,9 +82,9 @@ struct msm_busmon_extended_profile { struct devfreq_dev_profile profile; }; #ifdef CONFIG_DEVFREQ_GOV_QCOM_GPUBW_MON int devfreq_vbif_update_bw(unsigned long ib, unsigned long ab); int devfreq_vbif_register_callback(void *callback); #endif typedef void(*getbw_func)(unsigned long *, unsigned long *, void *); int devfreq_vbif_update_bw(void); void devfreq_vbif_register_callback(getbw_func func, void *data); #endif