hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/gpu/drm/amd/display/dc/inc/hw/dchubbub.h
....@@ -31,6 +31,9 @@
3131 dcc_control__256_256_xxx,
3232 dcc_control__128_128_xxx,
3333 dcc_control__256_64_64,
34
+#if defined(CONFIG_DRM_AMD_DC_DCN3_0)
35
+ dcc_control__256_128_128,
36
+#endif
3437 };
3538
3639 enum segment_order {
....@@ -39,11 +42,82 @@
3942 segment_order__non_contiguous,
4043 };
4144
45
+struct dcn_hubbub_wm_set {
46
+ uint32_t wm_set;
47
+ uint32_t data_urgent;
48
+ uint32_t pte_meta_urgent;
49
+ uint32_t sr_enter;
50
+ uint32_t sr_exit;
51
+ uint32_t dram_clk_chanage;
52
+};
53
+
54
+struct dcn_hubbub_wm {
55
+ struct dcn_hubbub_wm_set sets[4];
56
+};
57
+
58
+enum dcn_hubbub_page_table_depth {
59
+ DCN_PAGE_TABLE_DEPTH_1_LEVEL,
60
+ DCN_PAGE_TABLE_DEPTH_2_LEVEL,
61
+ DCN_PAGE_TABLE_DEPTH_3_LEVEL,
62
+ DCN_PAGE_TABLE_DEPTH_4_LEVEL
63
+};
64
+
65
+enum dcn_hubbub_page_table_block_size {
66
+ DCN_PAGE_TABLE_BLOCK_SIZE_4KB = 0,
67
+ DCN_PAGE_TABLE_BLOCK_SIZE_64KB = 4,
68
+#if defined(CONFIG_DRM_AMD_DC_DCN3_0)
69
+ DCN_PAGE_TABLE_BLOCK_SIZE_32KB = 3
70
+#endif
71
+};
72
+
73
+struct dcn_hubbub_phys_addr_config {
74
+ struct {
75
+ uint64_t fb_top;
76
+ uint64_t fb_offset;
77
+ uint64_t fb_base;
78
+ uint64_t agp_top;
79
+ uint64_t agp_bot;
80
+ uint64_t agp_base;
81
+ } system_aperture;
82
+
83
+ struct {
84
+ uint64_t page_table_start_addr;
85
+ uint64_t page_table_end_addr;
86
+ uint64_t page_table_base_addr;
87
+ } gart_config;
88
+
89
+ uint64_t page_table_default_page_addr;
90
+};
91
+
92
+struct dcn_hubbub_virt_addr_config {
93
+ uint64_t page_table_start_addr;
94
+ uint64_t page_table_end_addr;
95
+ enum dcn_hubbub_page_table_block_size page_table_block_size;
96
+ enum dcn_hubbub_page_table_depth page_table_depth;
97
+ uint64_t page_table_base_addr;
98
+};
99
+
100
+struct hubbub_addr_config {
101
+ struct dcn_hubbub_phys_addr_config pa_config;
102
+ struct dcn_hubbub_virt_addr_config va_config;
103
+ struct {
104
+ uint64_t aperture_check_fault;
105
+ uint64_t generic_fault;
106
+ } default_addrs;
107
+};
42108
43109 struct hubbub_funcs {
44110 void (*update_dchub)(
45111 struct hubbub *hubbub,
46112 struct dchub_init_data *dh_data);
113
+
114
+ int (*init_dchub_sys_ctx)(
115
+ struct hubbub *hubbub,
116
+ struct dcn_hubbub_phys_addr_config *pa_config);
117
+ void (*init_vm_ctx)(
118
+ struct hubbub *hubbub,
119
+ struct dcn_hubbub_virt_addr_config *va_config,
120
+ int vmid);
47121
48122 bool (*get_dcc_compression_cap)(struct hubbub *hubbub,
49123 const struct dc_dcc_surface_param *input,
....@@ -58,7 +132,31 @@
58132 bool (*dcc_support_pixel_format)(
59133 enum surface_pixel_format format,
60134 unsigned int *bytes_per_element);
135
+
136
+ void (*wm_read_state)(struct hubbub *hubbub,
137
+ struct dcn_hubbub_wm *wm);
138
+
139
+ void (*get_dchub_ref_freq)(struct hubbub *hubbub,
140
+ unsigned int dccg_ref_freq_inKhz,
141
+ unsigned int *dchub_ref_freq_inKhz);
142
+
143
+ bool (*program_watermarks)(
144
+ struct hubbub *hubbub,
145
+ struct dcn_watermark_set *watermarks,
146
+ unsigned int refclk_mhz,
147
+ bool safe_to_lower);
148
+
149
+ bool (*is_allow_self_refresh_enabled)(struct hubbub *hubbub);
150
+ void (*allow_self_refresh_control)(struct hubbub *hubbub, bool allow);
151
+
152
+ void (*apply_DEDCN21_147_wa)(struct hubbub *hubbub);
153
+
154
+ void (*force_wm_propagate_to_pipes)(struct hubbub *hubbub);
61155 };
62156
157
+struct hubbub {
158
+ const struct hubbub_funcs *funcs;
159
+ struct dc_context *ctx;
160
+};
63161
64162 #endif