[PATCH] drm/panfrost: Make devfreq truly optional

Ezequiel Garcia ezequiel at collabora.com
Mon May 13 17:55:54 UTC 2019


Currently, there is some logic to make devfreq optional,
but it fails to cover some cases such as !CONFIG_PM_DEVFREQ.

Moreover, depending on return codes is not resilient to change,
so let's take a different approach, introducing proper
stubs and only conditionally compiling the devfreq support.

Signed-off-by: Ezequiel Garcia <ezequiel at collabora.com>
---
 drivers/gpu/drm/panfrost/Makefile           |  3 ++-
 drivers/gpu/drm/panfrost/panfrost_devfreq.c | 13 ++-----------
 drivers/gpu/drm/panfrost/panfrost_devfreq.h | 19 +++++++++++++++++--
 3 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/panfrost/Makefile b/drivers/gpu/drm/panfrost/Makefile
index 6de72d13c58f..8b690672f9d9 100644
--- a/drivers/gpu/drm/panfrost/Makefile
+++ b/drivers/gpu/drm/panfrost/Makefile
@@ -3,10 +3,11 @@
 panfrost-y := \
 	panfrost_drv.o \
 	panfrost_device.o \
-	panfrost_devfreq.o \
 	panfrost_gem.o \
 	panfrost_gpu.o \
 	panfrost_job.o \
 	panfrost_mmu.o
 
+panfrost-$(CONFIG_PM_DEVFREQ) += panfrost_devfreq.o
+
 obj-$(CONFIG_DRM_PANFROST) += panfrost.o
diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.c b/drivers/gpu/drm/panfrost/panfrost_devfreq.c
index 238bd1d89d43..29fcffdf2d57 100644
--- a/drivers/gpu/drm/panfrost/panfrost_devfreq.c
+++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.c
@@ -140,8 +140,8 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
 		return 0;
 
 	ret = dev_pm_opp_of_add_table(&pfdev->pdev->dev);
-	if (ret == -ENODEV) /* Optional, continue without devfreq */
-		return 0;
+	if (ret)
+		return ret;
 
 	panfrost_devfreq_reset(pfdev);
 
@@ -170,9 +170,6 @@ void panfrost_devfreq_resume(struct panfrost_device *pfdev)
 {
 	int i;
 
-	if (!pfdev->devfreq.devfreq)
-		return;
-
 	panfrost_devfreq_reset(pfdev);
 	for (i = 0; i < NUM_JOB_SLOTS; i++)
 		pfdev->devfreq.slot[i].busy = false;
@@ -182,9 +179,6 @@ void panfrost_devfreq_resume(struct panfrost_device *pfdev)
 
 void panfrost_devfreq_suspend(struct panfrost_device *pfdev)
 {
-	if (!pfdev->devfreq.devfreq)
-		return;
-
 	devfreq_suspend_device(pfdev->devfreq.devfreq);
 }
 
@@ -194,9 +188,6 @@ static void panfrost_devfreq_update_utilization(struct panfrost_device *pfdev, i
 	ktime_t now;
 	ktime_t last;
 
-	if (!pfdev->devfreq.devfreq)
-		return;
-
 	now = ktime_get();
 	last = pfdev->devfreq.slot[slot].time_last_update;
 
diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.h b/drivers/gpu/drm/panfrost/panfrost_devfreq.h
index eb999531ed90..76b56a8de6e3 100644
--- a/drivers/gpu/drm/panfrost/panfrost_devfreq.h
+++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.h
@@ -4,11 +4,26 @@
 #ifndef __PANFROST_DEVFREQ_H__
 #define __PANFROST_DEVFREQ_H__
 
+#if defined(CONFIG_PM_DEVFREQ)
 int panfrost_devfreq_init(struct panfrost_device *pfdev);
-
 void panfrost_devfreq_resume(struct panfrost_device *pfdev);
 void panfrost_devfreq_suspend(struct panfrost_device *pfdev);
-
 void panfrost_devfreq_record_transition(struct panfrost_device *pfdev, int slot);
+#else
+static inline int panfrost_devfreq_init(struct panfrost_device *pfdev)
+{
+	return 0;
+}
+
+static inline void panfrost_devfreq_resume(struct panfrost_device *pfdev)
+{}
+
+static inline void panfrost_devfreq_suspend(struct panfrost_device *pfdev)
+{}
+
+static inline void
+panfrost_devfreq_record_transition(struct panfrost_device *pfdev, int slot)
+{}
+#endif
 
 #endif /* __PANFROST_DEVFREQ_H__ */
-- 
2.20.1



More information about the dri-devel mailing list