summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorEdmond Chung <edmondchung@google.com>2020-08-14 15:21:21 -0700
committerEdmond Chung <edmondchung@google.com>2020-08-14 15:29:39 -0700
commit659657997b293d4442808e8c7f85367a657954b6 (patch)
treef145313d4eb68c8a5fd141b9d5c3f9fa0da9ff3b /platform
parent758e2b792dd6f5de7e488d8768d87316859c4032 (diff)
downloadlwis-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.c81
-rw-r--r--platform/gs101/lwis_platform_gs101.h16
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