From 77817b0443d28cfa30c0a3ed73fa9ce9619d265f Mon Sep 17 00:00:00 2001 From: idkwhoiam322 Date: Wed, 29 Jan 2020 05:23:27 -0500 Subject: [PATCH] devfreq_boost: Update and expand to handle CPUBW/LLCCBW boosting This will enable us to more accurately replicate Pixel 4 userspace DDR boosting by adding support for both CPUBW and LLCCBW devices. https://android.googlesource.com/device/google/coral/+/refs/heads/master/init.power.rc https://android.googlesource.com/device/google/coral/+/refs/heads/master/powerhint.json Signed-off-by: idkwhoiam322 Signed-off-by: Adam W. Willis Signed-off-by: Yaroslav Furman Signed-off-by: UtsavBalar1231 --- drivers/devfreq/Kconfig | 9 ++++++++- drivers/devfreq/devfreq_boost.c | 4 +++- drivers/devfreq/devfreq_devbw.c | 5 ++++- drivers/gpu/drm/drm_atomic.c | 4 +++- include/linux/devfreq_boost.h | 1 + mm/page_alloc.c | 1 + 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig index cdffd46f1a42..2e007925fa26 100644 --- a/drivers/devfreq/Kconfig +++ b/drivers/devfreq/Kconfig @@ -292,7 +292,14 @@ config DEVFREQ_MSM_CPUBW_BOOST_FREQ int "Boost freq for cpubw device" default "0" help - Boost frequency for the MSM DDR bus. + CPUBW boost frequency for the MSM DDR bus. + + +config DEVFREQ_MSM_LLCCBW_BOOST_FREQ + int "Boost freq for llccbw device" + default "0" + help + LLCCBW boost frequency for the MSM DDR bus. endif diff --git a/drivers/devfreq/devfreq_boost.c b/drivers/devfreq/devfreq_boost.c index 67e83613fce1..911ab6832a69 100644 --- a/drivers/devfreq/devfreq_boost.c +++ b/drivers/devfreq/devfreq_boost.c @@ -50,7 +50,9 @@ static void devfreq_max_unboost(struct work_struct *work); static struct df_boost_drv df_boost_drv_g __read_mostly = { BOOST_DEV_INIT(df_boost_drv_g, DEVFREQ_MSM_CPUBW, - CONFIG_DEVFREQ_MSM_CPUBW_BOOST_FREQ) + CONFIG_DEVFREQ_MSM_CPUBW_BOOST_FREQ), + BOOST_DEV_INIT(df_boost_drv_g, DEVFREQ_MSM_LLCCBW, + CONFIG_DEVFREQ_MSM_LLCCBW_BOOST_FREQ) }; static void __devfreq_boost_kick(struct boost_dev *b) diff --git a/drivers/devfreq/devfreq_devbw.c b/drivers/devfreq/devfreq_devbw.c index 50fd93ba860d..497958024f19 100644 --- a/drivers/devfreq/devfreq_devbw.c +++ b/drivers/devfreq/devfreq_devbw.c @@ -238,9 +238,12 @@ int devfreq_add_devbw(struct device *dev) return PTR_ERR(d->df); } - if (!strcmp(dev_name(dev), "soc:qcom,cpu-llcc-ddr-bw")) + if (!strcmp(dev_name(dev), "soc:qcom,cpu-cpu-llcc-bw")) devfreq_register_boost_device(DEVFREQ_MSM_CPUBW, d->df); + if (!strcmp(dev_name(dev), "soc:qcom,cpu-llcc-ddr-bw")) + devfreq_register_boost_device(DEVFREQ_MSM_LLCCBW, d->df); + return 0; } diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 8c34ee9a023b..e22de7c98d29 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -2248,8 +2248,10 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, (arg->flags & DRM_MODE_PAGE_FLIP_EVENT)) return -EINVAL; - if (!(arg->flags & DRM_MODE_ATOMIC_TEST_ONLY)) + if (!(arg->flags & DRM_MODE_ATOMIC_TEST_ONLY)) { devfreq_boost_kick(DEVFREQ_MSM_CPUBW); + devfreq_boost_kick(DEVFREQ_MSM_LLCCBW); + } drm_modeset_acquire_init(&ctx, 0); diff --git a/include/linux/devfreq_boost.h b/include/linux/devfreq_boost.h index c133705d0121..391aec1a8043 100644 --- a/include/linux/devfreq_boost.h +++ b/include/linux/devfreq_boost.h @@ -9,6 +9,7 @@ enum df_device { DEVFREQ_MSM_CPUBW, + DEVFREQ_MSM_LLCCBW, DEVFREQ_MAX }; diff --git a/mm/page_alloc.c b/mm/page_alloc.c index ad1c46ea9a2d..c0ae9336d18a 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -4217,6 +4217,7 @@ retry: /* Boost when memory is low so allocation latency doesn't get too bad */ cpu_input_boost_kick_max(100); + devfreq_boost_kick_max(DEVFREQ_MSM_LLCCBW, 100); devfreq_boost_kick_max(DEVFREQ_MSM_CPUBW, 100); if (should_reclaim_retry(gfp_mask, order, ac, alloc_flags,