.. | .. |
---|
31 | 31 | dcc_control__256_256_xxx, |
---|
32 | 32 | dcc_control__128_128_xxx, |
---|
33 | 33 | dcc_control__256_64_64, |
---|
| 34 | +#if defined(CONFIG_DRM_AMD_DC_DCN3_0) |
---|
| 35 | + dcc_control__256_128_128, |
---|
| 36 | +#endif |
---|
34 | 37 | }; |
---|
35 | 38 | |
---|
36 | 39 | enum segment_order { |
---|
.. | .. |
---|
39 | 42 | segment_order__non_contiguous, |
---|
40 | 43 | }; |
---|
41 | 44 | |
---|
| 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 | +}; |
---|
42 | 108 | |
---|
43 | 109 | struct hubbub_funcs { |
---|
44 | 110 | void (*update_dchub)( |
---|
45 | 111 | struct hubbub *hubbub, |
---|
46 | 112 | 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); |
---|
47 | 121 | |
---|
48 | 122 | bool (*get_dcc_compression_cap)(struct hubbub *hubbub, |
---|
49 | 123 | const struct dc_dcc_surface_param *input, |
---|
.. | .. |
---|
58 | 132 | bool (*dcc_support_pixel_format)( |
---|
59 | 133 | enum surface_pixel_format format, |
---|
60 | 134 | 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); |
---|
61 | 155 | }; |
---|
62 | 156 | |
---|
| 157 | +struct hubbub { |
---|
| 158 | + const struct hubbub_funcs *funcs; |
---|
| 159 | + struct dc_context *ctx; |
---|
| 160 | +}; |
---|
63 | 161 | |
---|
64 | 162 | #endif |
---|