1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
3  */
4 
5 #ifndef _DPU_CORE_PERF_H_
6 #define _DPU_CORE_PERF_H_
7 
8 #include <linux/types.h>
9 #include <linux/dcache.h>
10 #include <linux/mutex.h>
11 #include <drm/drm_crtc.h>
12 
13 #include "dpu_hw_catalog.h"
14 
15 /**
16  * struct dpu_core_perf_params - definition of performance parameters
17  * @max_per_pipe_ib: maximum instantaneous bandwidth request
18  * @bw_ctl: arbitrated bandwidth request
19  * @core_clk_rate: core clock rate request
20  */
21 struct dpu_core_perf_params {
22 	u64 max_per_pipe_ib;
23 	u64 bw_ctl;
24 	u64 core_clk_rate;
25 };
26 
27 /**
28  * struct dpu_core_perf_tune - definition of performance tuning control
29  * @mode: performance mode
30  */
31 struct dpu_core_perf_tune {
32 	u32 mode;
33 };
34 
35 /**
36  * struct dpu_core_perf - definition of core performance context
37  * @perf_cfg: Platform-specific performance configuration
38  * @core_clk_rate: current core clock rate
39  * @max_core_clk_rate: maximum allowable core clock rate
40  * @perf_tune: debug control for performance tuning
41  * @enable_bw_release: debug control for bandwidth release
42  * @fix_core_clk_rate: fixed core clock request in Hz used in mode 2
43  * @fix_core_ib_vote: fixed core ib vote in bps used in mode 2
44  * @fix_core_ab_vote: fixed core ab vote in bps used in mode 2
45  */
46 struct dpu_core_perf {
47 	const struct dpu_perf_cfg *perf_cfg;
48 	u64 core_clk_rate;
49 	u64 max_core_clk_rate;
50 	struct dpu_core_perf_tune perf_tune;
51 	u32 enable_bw_release;
52 	u64 fix_core_clk_rate;
53 	u64 fix_core_ib_vote;
54 	u64 fix_core_ab_vote;
55 };
56 
57 /**
58  * dpu_core_perf_crtc_check - validate performance of the given crtc state
59  * @crtc: Pointer to crtc
60  * @state: Pointer to new crtc state
61  * return: zero if success, or error code otherwise
62  */
63 int dpu_core_perf_crtc_check(struct drm_crtc *crtc,
64 		struct drm_crtc_state *state);
65 
66 /**
67  * dpu_core_perf_crtc_update - update performance of the given crtc
68  * @crtc: Pointer to crtc
69  * @params_changed: true if crtc parameters are modified
70  * return: zero if success, or error code otherwise
71  */
72 int dpu_core_perf_crtc_update(struct drm_crtc *crtc,
73 			      int params_changed);
74 
75 /**
76  * dpu_core_perf_crtc_release_bw - release bandwidth of the given crtc
77  * @crtc: Pointer to crtc
78  */
79 void dpu_core_perf_crtc_release_bw(struct drm_crtc *crtc);
80 
81 /**
82  * dpu_core_perf_init - initialize the given core performance context
83  * @perf: Pointer to core performance context
84  * @perf_cfg: Pointer to platform performance configuration
85  * @max_core_clk_rate: Maximum core clock rate
86  */
87 int dpu_core_perf_init(struct dpu_core_perf *perf,
88 		const struct dpu_perf_cfg *perf_cfg,
89 		unsigned long max_core_clk_rate);
90 
91 struct dpu_kms;
92 
93 /**
94  * dpu_core_perf_debugfs_init - initialize debugfs for core performance context
95  * @dpu_kms: Pointer to the dpu_kms struct
96  * @debugfs_parent: Pointer to parent debugfs
97  */
98 int dpu_core_perf_debugfs_init(struct dpu_kms *dpu_kms, struct dentry *parent);
99 
100 #endif /* _DPU_CORE_PERF_H_ */
101