18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/* Copyright 2019 Collabora ltd. */
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci#ifndef __PANFROST_DEVFREQ_H__
58c2ecf20Sopenharmony_ci#define __PANFROST_DEVFREQ_H__
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#include <linux/spinlock.h>
88c2ecf20Sopenharmony_ci#include <linux/ktime.h>
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_cistruct devfreq;
118c2ecf20Sopenharmony_cistruct opp_table;
128c2ecf20Sopenharmony_cistruct thermal_cooling_device;
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_cistruct panfrost_device;
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_cistruct panfrost_devfreq {
178c2ecf20Sopenharmony_ci	struct devfreq *devfreq;
188c2ecf20Sopenharmony_ci	struct opp_table *regulators_opp_table;
198c2ecf20Sopenharmony_ci	struct thermal_cooling_device *cooling;
208c2ecf20Sopenharmony_ci	bool opp_of_table_added;
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci	ktime_t busy_time;
238c2ecf20Sopenharmony_ci	ktime_t idle_time;
248c2ecf20Sopenharmony_ci	ktime_t time_last_update;
258c2ecf20Sopenharmony_ci	int busy_count;
268c2ecf20Sopenharmony_ci	/*
278c2ecf20Sopenharmony_ci	 * Protect busy_time, idle_time, time_last_update and busy_count
288c2ecf20Sopenharmony_ci	 * because these can be updated concurrently between multiple jobs.
298c2ecf20Sopenharmony_ci	 */
308c2ecf20Sopenharmony_ci	spinlock_t lock;
318c2ecf20Sopenharmony_ci};
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ciint panfrost_devfreq_init(struct panfrost_device *pfdev);
348c2ecf20Sopenharmony_civoid panfrost_devfreq_fini(struct panfrost_device *pfdev);
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_civoid panfrost_devfreq_resume(struct panfrost_device *pfdev);
378c2ecf20Sopenharmony_civoid panfrost_devfreq_suspend(struct panfrost_device *pfdev);
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_civoid panfrost_devfreq_record_busy(struct panfrost_devfreq *devfreq);
408c2ecf20Sopenharmony_civoid panfrost_devfreq_record_idle(struct panfrost_devfreq *devfreq);
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci#endif /* __PANFROST_DEVFREQ_H__ */
43