diff options
author | Edmond Chung <edmondchung@google.com> | 2020-08-14 15:21:21 -0700 |
---|---|---|
committer | Edmond Chung <edmondchung@google.com> | 2020-08-14 15:29:39 -0700 |
commit | 659657997b293d4442808e8c7f85367a657954b6 (patch) | |
tree | f145313d4eb68c8a5fd141b9d5c3f9fa0da9ff3b /platform | |
parent | 758e2b792dd6f5de7e488d8768d87316859c4032 (diff) | |
download | lwis-659657997b293d4442808e8c7f85367a657954b6.tar.gz |
Platform: Migrate QoS code to exynos_pm_qos.h.
QoS related interfaces have moved from linux/pm_qos.h to
soc/google/exynos_pm_qos.h. Made the necessary modifications for
successful compilation.
Bug: 164512491
Signed-off-by: Edmond Chung <edmondchung@google.com>
Change-Id: I04344aa651075103d4f4b67cd23f74017610ffd7
Diffstat (limited to 'platform')
-rw-r--r-- | platform/gs101/lwis_platform_gs101.c | 81 | ||||
-rw-r--r-- | platform/gs101/lwis_platform_gs101.h | 16 |
2 files changed, 51 insertions, 46 deletions
diff --git a/platform/gs101/lwis_platform_gs101.c b/platform/gs101/lwis_platform_gs101.c index a244a77..f316f34 100644 --- a/platform/gs101/lwis_platform_gs101.c +++ b/platform/gs101/lwis_platform_gs101.c @@ -10,8 +10,6 @@ /* IOVMM is deprecated on 5.4, need replacement for these code blocks */ #define ENABLE_IOVMM 0 -/* PM QOS is not ported to 5.4 yet */ -#define ENABLE_QOS 0 #include "lwis_platform_gs101.h" @@ -20,11 +18,10 @@ #endif #include <linux/iommu.h> #include <linux/of.h> -#if ENABLE_QOS -#include <linux/pm_qos.h> -#endif +#include <linux/pm_runtime.h> #include <linux/slab.h> +#include "lwis_commands.h" #include "lwis_device_dpm.h" #include "lwis_debug.h" #include "lwis_platform.h" @@ -87,13 +84,10 @@ int lwis_platform_device_enable(struct lwis_device *lwis_dev) int ret; struct lwis_platform *platform; - /* TODO(b/157514330): Refactor */ -#if ENABLE_QOS const uint32_t int_qos = 465000; const uint32_t mif_qos = 2093000; const uint32_t core_clock_qos = 67000; - const uint32_t hpg_qos = 1; -#endif /* ENABLE_QOS */ + /* const uint32_t hpg_qos = 1; */ if (!lwis_dev) { return -ENODEV; @@ -126,11 +120,17 @@ int lwis_platform_device_enable(struct lwis_device *lwis_dev) } #endif /* ENABLE_IOVMM */ -#if ENABLE_QOS + /* + * PM_QOS_CPU_ONLINE_MIN is not defined in 5.4 branch, will need to + * revisit and see if a replacement is needed. + */ +#if 0 /* Set hardcoded DVFS levels */ - if (!pm_qos_request_active(&platform->pm_qos_hpg)) - pm_qos_add_request(&platform->pm_qos_hpg, PM_QOS_CPU_ONLINE_MIN, - hpg_qos); + if (!exynos_pm_qos_request_active(&platform->pm_qos_hpg)) { + exynos_pm_qos_add_request(&platform->pm_qos_hpg, + PM_QOS_CPU_ONLINE_MIN, hpg_qos); + } +#endif ret = lwis_platform_update_qos(lwis_dev, mif_qos, CLOCK_FAMILY_MIF); if (ret < 0) { @@ -152,7 +152,6 @@ int lwis_platform_device_enable(struct lwis_device *lwis_dev) return ret; } } -#endif /* ENABLE_QOS */ return 0; } @@ -189,9 +188,8 @@ int lwis_platform_device_disable(struct lwis_device *lwis_dev) int lwis_platform_update_qos(struct lwis_device *lwis_dev, uint32_t value, enum lwis_clock_family clock_family) { -#if ENABLE_QOS struct lwis_platform *platform; - struct pm_qos_request *qos_req; + struct exynos_pm_qos_request *qos_req; int qos_class; if (!lwis_dev) { @@ -203,8 +201,9 @@ int lwis_platform_update_qos(struct lwis_device *lwis_dev, uint32_t value, return -ENODEV; } - if (value == 0) - value = PM_QOS_DEFAULT_VALUE; + if (value == 0) { + value = EXYNOS_PM_QOS_DEFAULT_VALUE; + } switch (clock_family) { case CLOCK_FAMILY_INTCAM: @@ -235,22 +234,21 @@ int lwis_platform_update_qos(struct lwis_device *lwis_dev, uint32_t value, return -EINVAL; } - if (!pm_qos_request_active(qos_req)) - pm_qos_add_request(qos_req, qos_class, value); - else - pm_qos_update_request(qos_req, value); + if (!exynos_pm_qos_request_active(qos_req)) { + exynos_pm_qos_add_request(qos_req, qos_class, value); + } else { + exynos_pm_qos_update_request(qos_req, value); + } dev_info(lwis_dev->dev, "Updating clock for clock_family %d, freq to %u\n", clock_family, value); -#endif /* ENABLE_QOS */ return 0; } int lwis_platform_remove_qos(struct lwis_device *lwis_dev) { -#if ENABLE_QOS struct lwis_platform *platform; if (!lwis_dev) { @@ -262,34 +260,43 @@ int lwis_platform_remove_qos(struct lwis_device *lwis_dev) return -ENODEV; } - if (pm_qos_request_active(&platform->pm_qos_int)) - pm_qos_remove_request(&platform->pm_qos_int); - if (pm_qos_request_active(&platform->pm_qos_mem)) - pm_qos_remove_request(&platform->pm_qos_mem); - if (pm_qos_request_active(&platform->pm_qos_hpg)) - pm_qos_remove_request(&platform->pm_qos_hpg); + if (exynos_pm_qos_request_active(&platform->pm_qos_int)) { + exynos_pm_qos_remove_request(&platform->pm_qos_int); + } + if (exynos_pm_qos_request_active(&platform->pm_qos_mem)) { + exynos_pm_qos_remove_request(&platform->pm_qos_mem); + } + + /* + * pm_qos_hpg is not being used, see comments above regarding + * PM_QOS_CPU_ONLINE_MIN + */ +#if 0 + if (exynos_pm_qos_request_active(&platform->pm_qos_hpg)) { + exynos_pm_qos_remove_request(&platform->pm_qos_hpg); + } +#endif switch (lwis_dev->clock_family) { case CLOCK_FAMILY_INTCAM: - if (pm_qos_request_active(&platform->pm_qos_int_cam)) { - pm_qos_remove_request(&platform->pm_qos_int_cam); + if (exynos_pm_qos_request_active(&platform->pm_qos_int_cam)) { + exynos_pm_qos_remove_request(&platform->pm_qos_int_cam); } break; case CLOCK_FAMILY_CAM: - if (pm_qos_request_active(&platform->pm_qos_cam)) { - pm_qos_remove_request(&platform->pm_qos_cam); + if (exynos_pm_qos_request_active(&platform->pm_qos_cam)) { + exynos_pm_qos_remove_request(&platform->pm_qos_cam); } break; case CLOCK_FAMILY_TNR: #if defined(CONFIG_SOC_GS101) - if (pm_qos_request_active(&platform->pm_qos_tnr)) { - pm_qos_remove_request(&platform->pm_qos_tnr); + if (exynos_pm_qos_request_active(&platform->pm_qos_tnr)) { + exynos_pm_qos_remove_request(&platform->pm_qos_tnr); } #endif break; default: break; } -#endif /* ENABLE_QOS */ return 0; } diff --git a/platform/gs101/lwis_platform_gs101.h b/platform/gs101/lwis_platform_gs101.h index 7130124..c14c732 100644 --- a/platform/gs101/lwis_platform_gs101.h +++ b/platform/gs101/lwis_platform_gs101.h @@ -11,17 +11,15 @@ #ifndef LWIS_PLATFORM_GS101_H_ #define LWIS_PLATFORM_GS101_H_ -#include <linux/pm_qos.h> +#include <soc/google/exynos_pm_qos.h> struct lwis_platform { - /* TODO(b/157514330): Refactor this to be dynamically controlled - * from userspace */ - struct pm_qos_request pm_qos_int_cam; - struct pm_qos_request pm_qos_int; - struct pm_qos_request pm_qos_cam; - struct pm_qos_request pm_qos_mem; - struct pm_qos_request pm_qos_hpg; - struct pm_qos_request pm_qos_tnr; + struct exynos_pm_qos_request pm_qos_int_cam; + struct exynos_pm_qos_request pm_qos_int; + struct exynos_pm_qos_request pm_qos_cam; + struct exynos_pm_qos_request pm_qos_mem; + struct exynos_pm_qos_request pm_qos_tnr; + /* struct exynos_pm_qos_request pm_qos_hpg; */ }; #endif /* LWIS_PLATFORM_GS101_H_ */
\ No newline at end of file |