Commit | Line | Data |
---|---|---|
97fb5e8d | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
25fdd593 | 2 | /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. |
25fdd593 JS |
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" | |
25fdd593 JS |
14 | |
15 | #define DPU_PERF_DEFAULT_MAX_CORE_CLK_RATE 412500000 | |
16 | ||
aeb7b49a SP |
17 | /** |
18 | * enum dpu_core_perf_data_bus_id - data bus identifier | |
19 | * @DPU_CORE_PERF_DATA_BUS_ID_MNOC: DPU/MNOC data bus | |
20 | * @DPU_CORE_PERF_DATA_BUS_ID_LLCC: MNOC/LLCC data bus | |
21 | * @DPU_CORE_PERF_DATA_BUS_ID_EBI: LLCC/EBI data bus | |
22 | */ | |
23 | enum dpu_core_perf_data_bus_id { | |
24 | DPU_CORE_PERF_DATA_BUS_ID_MNOC, | |
25 | DPU_CORE_PERF_DATA_BUS_ID_LLCC, | |
26 | DPU_CORE_PERF_DATA_BUS_ID_EBI, | |
27 | DPU_CORE_PERF_DATA_BUS_ID_MAX, | |
28 | }; | |
29 | ||
25fdd593 JS |
30 | /** |
31 | * struct dpu_core_perf_params - definition of performance parameters | |
32 | * @max_per_pipe_ib: maximum instantaneous bandwidth request | |
33 | * @bw_ctl: arbitrated bandwidth request | |
34 | * @core_clk_rate: core clock rate request | |
35 | */ | |
36 | struct dpu_core_perf_params { | |
aeb7b49a SP |
37 | u64 max_per_pipe_ib[DPU_CORE_PERF_DATA_BUS_ID_MAX]; |
38 | u64 bw_ctl[DPU_CORE_PERF_DATA_BUS_ID_MAX]; | |
25fdd593 JS |
39 | u64 core_clk_rate; |
40 | }; | |
41 | ||
42 | /** | |
43 | * struct dpu_core_perf_tune - definition of performance tuning control | |
44 | * @mode: performance mode | |
45 | * @min_core_clk: minimum core clock | |
46 | * @min_bus_vote: minimum bus vote | |
47 | */ | |
48 | struct dpu_core_perf_tune { | |
49 | u32 mode; | |
50 | u64 min_core_clk; | |
51 | u64 min_bus_vote; | |
52 | }; | |
53 | ||
54 | /** | |
55 | * struct dpu_core_perf - definition of core performance context | |
56 | * @dev: Pointer to drm device | |
57 | * @debugfs_root: top level debug folder | |
58 | * @catalog: Pointer to catalog configuration | |
25fdd593 JS |
59 | * @core_clk: Pointer to core clock structure |
60 | * @core_clk_rate: current core clock rate | |
61 | * @max_core_clk_rate: maximum allowable core clock rate | |
62 | * @perf_tune: debug control for performance tuning | |
63 | * @enable_bw_release: debug control for bandwidth release | |
64 | * @fix_core_clk_rate: fixed core clock request in Hz used in mode 2 | |
65 | * @fix_core_ib_vote: fixed core ib vote in bps used in mode 2 | |
66 | * @fix_core_ab_vote: fixed core ab vote in bps used in mode 2 | |
67 | */ | |
68 | struct dpu_core_perf { | |
69 | struct drm_device *dev; | |
70 | struct dentry *debugfs_root; | |
71 | struct dpu_mdss_cfg *catalog; | |
25fdd593 JS |
72 | struct dss_clk *core_clk; |
73 | u64 core_clk_rate; | |
74 | u64 max_core_clk_rate; | |
75 | struct dpu_core_perf_tune perf_tune; | |
76 | u32 enable_bw_release; | |
77 | u64 fix_core_clk_rate; | |
78 | u64 fix_core_ib_vote; | |
79 | u64 fix_core_ab_vote; | |
80 | }; | |
81 | ||
82 | /** | |
83 | * dpu_core_perf_crtc_check - validate performance of the given crtc state | |
84 | * @crtc: Pointer to crtc | |
85 | * @state: Pointer to new crtc state | |
86 | * return: zero if success, or error code otherwise | |
87 | */ | |
88 | int dpu_core_perf_crtc_check(struct drm_crtc *crtc, | |
89 | struct drm_crtc_state *state); | |
90 | ||
91 | /** | |
92 | * dpu_core_perf_crtc_update - update performance of the given crtc | |
93 | * @crtc: Pointer to crtc | |
94 | * @params_changed: true if crtc parameters are modified | |
95 | * @stop_req: true if this is a stop request | |
96 | * return: zero if success, or error code otherwise | |
97 | */ | |
98 | int dpu_core_perf_crtc_update(struct drm_crtc *crtc, | |
99 | int params_changed, bool stop_req); | |
100 | ||
101 | /** | |
102 | * dpu_core_perf_crtc_release_bw - release bandwidth of the given crtc | |
103 | * @crtc: Pointer to crtc | |
104 | */ | |
105 | void dpu_core_perf_crtc_release_bw(struct drm_crtc *crtc); | |
106 | ||
107 | /** | |
108 | * dpu_core_perf_destroy - destroy the given core performance context | |
109 | * @perf: Pointer to core performance context | |
110 | */ | |
111 | void dpu_core_perf_destroy(struct dpu_core_perf *perf); | |
112 | ||
113 | /** | |
114 | * dpu_core_perf_init - initialize the given core performance context | |
115 | * @perf: Pointer to core performance context | |
116 | * @dev: Pointer to drm device | |
117 | * @catalog: Pointer to catalog | |
25fdd593 JS |
118 | * @core_clk: pointer to core clock |
119 | */ | |
120 | int dpu_core_perf_init(struct dpu_core_perf *perf, | |
121 | struct drm_device *dev, | |
122 | struct dpu_mdss_cfg *catalog, | |
25fdd593 JS |
123 | struct dss_clk *core_clk); |
124 | ||
3d688410 JC |
125 | struct dpu_kms; |
126 | ||
25fdd593 JS |
127 | /** |
128 | * dpu_core_perf_debugfs_init - initialize debugfs for core performance context | |
3d688410 | 129 | * @dpu_kms: Pointer to the dpu_kms struct |
25fdd593 JS |
130 | * @debugfs_parent: Pointer to parent debugfs |
131 | */ | |
3d688410 | 132 | int dpu_core_perf_debugfs_init(struct dpu_kms *dpu_kms, struct dentry *parent); |
25fdd593 JS |
133 | |
134 | #endif /* _DPU_CORE_PERF_H_ */ |