Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: MIT
0002 /*
0003  * Copyright 2022 Advanced Micro Devices, Inc.
0004  *
0005  * Permission is hereby granted, free of charge, to any person obtaining a
0006  * copy of this software and associated documentation files (the "Software"),
0007  * to deal in the Software without restriction, including without limitation
0008  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
0009  * and/or sell copies of the Software, and to permit persons to whom the
0010  * Software is furnished to do so, subject to the following conditions:
0011  *
0012  * The above copyright notice and this permission notice shall be included in
0013  * all copies or substantial portions of the Software.
0014  *
0015  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
0016  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
0017  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
0018  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
0019  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
0020  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
0021  * OTHER DEALINGS IN THE SOFTWARE.
0022  *
0023  * Authors: AMD
0024  *
0025  */
0026 
0027 #include "dce110/dce110_hw_sequencer.h"
0028 #include "dcn10/dcn10_hw_sequencer.h"
0029 #include "dcn20/dcn20_hwseq.h"
0030 #include "dcn21/dcn21_hwseq.h"
0031 #include "dcn30/dcn30_hwseq.h"
0032 #include "dcn301/dcn301_hwseq.h"
0033 #include "dcn31/dcn31_hwseq.h"
0034 #include "dcn314/dcn314_hwseq.h"
0035 
0036 #include "dcn314_init.h"
0037 
0038 static const struct hw_sequencer_funcs dcn314_funcs = {
0039     .program_gamut_remap = dcn10_program_gamut_remap,
0040     .init_hw = dcn31_init_hw,
0041     .power_down_on_boot = dcn10_power_down_on_boot,
0042     .apply_ctx_to_hw = dce110_apply_ctx_to_hw,
0043     .apply_ctx_for_surface = NULL,
0044     .program_front_end_for_ctx = dcn20_program_front_end_for_ctx,
0045     .wait_for_pending_cleared = dcn10_wait_for_pending_cleared,
0046     .post_unlock_program_front_end = dcn20_post_unlock_program_front_end,
0047     .update_plane_addr = dcn20_update_plane_addr,
0048     .update_dchub = dcn10_update_dchub,
0049     .update_pending_status = dcn10_update_pending_status,
0050     .program_output_csc = dcn20_program_output_csc,
0051     .enable_accelerated_mode = dce110_enable_accelerated_mode,
0052     .enable_timing_synchronization = dcn10_enable_timing_synchronization,
0053     .enable_per_frame_crtc_position_reset = dcn10_enable_per_frame_crtc_position_reset,
0054     .update_info_frame = dcn31_update_info_frame,
0055     .send_immediate_sdp_message = dcn10_send_immediate_sdp_message,
0056     .enable_stream = dcn20_enable_stream,
0057     .disable_stream = dce110_disable_stream,
0058     .unblank_stream = dcn20_unblank_stream,
0059     .blank_stream = dce110_blank_stream,
0060     .enable_audio_stream = dce110_enable_audio_stream,
0061     .disable_audio_stream = dce110_disable_audio_stream,
0062     .disable_plane = dcn20_disable_plane,
0063     .pipe_control_lock = dcn20_pipe_control_lock,
0064     .interdependent_update_lock = dcn10_lock_all_pipes,
0065     .cursor_lock = dcn10_cursor_lock,
0066     .prepare_bandwidth = dcn20_prepare_bandwidth,
0067     .optimize_bandwidth = dcn20_optimize_bandwidth,
0068     .update_bandwidth = dcn20_update_bandwidth,
0069     .set_drr = dcn10_set_drr,
0070     .get_position = dcn10_get_position,
0071     .set_static_screen_control = dcn10_set_static_screen_control,
0072     .setup_stereo = dcn10_setup_stereo,
0073     .set_avmute = dcn30_set_avmute,
0074     .log_hw_state = dcn10_log_hw_state,
0075     .get_hw_state = dcn10_get_hw_state,
0076     .clear_status_bits = dcn10_clear_status_bits,
0077     .wait_for_mpcc_disconnect = dcn10_wait_for_mpcc_disconnect,
0078     .edp_backlight_control = dce110_edp_backlight_control,
0079     .edp_power_control = dce110_edp_power_control,
0080     .edp_wait_for_T12 = dce110_edp_wait_for_T12,
0081     .edp_wait_for_hpd_ready = dce110_edp_wait_for_hpd_ready,
0082     .set_cursor_position = dcn10_set_cursor_position,
0083     .set_cursor_attribute = dcn10_set_cursor_attribute,
0084     .set_cursor_sdr_white_level = dcn10_set_cursor_sdr_white_level,
0085     .setup_periodic_interrupt = dcn10_setup_periodic_interrupt,
0086     .set_clock = dcn10_set_clock,
0087     .get_clock = dcn10_get_clock,
0088     .program_triplebuffer = dcn20_program_triple_buffer,
0089     .enable_writeback = dcn30_enable_writeback,
0090     .disable_writeback = dcn30_disable_writeback,
0091     .update_writeback = dcn30_update_writeback,
0092     .mmhubbub_warmup = dcn30_mmhubbub_warmup,
0093     .dmdata_status_done = dcn20_dmdata_status_done,
0094     .program_dmdata_engine = dcn30_program_dmdata_engine,
0095     .set_dmdata_attributes = dcn20_set_dmdata_attributes,
0096     .init_sys_ctx = dcn31_init_sys_ctx,
0097     .init_vm_ctx = dcn20_init_vm_ctx,
0098     .set_flip_control_gsl = dcn20_set_flip_control_gsl,
0099     .get_vupdate_offset_from_vsync = dcn10_get_vupdate_offset_from_vsync,
0100     .calc_vupdate_position = dcn10_calc_vupdate_position,
0101     .power_down = dce110_power_down,
0102     .set_backlight_level = dcn21_set_backlight_level,
0103     .set_abm_immediate_disable = dcn21_set_abm_immediate_disable,
0104     .set_pipe = dcn21_set_pipe,
0105     .z10_restore = dcn31_z10_restore,
0106     .z10_save_init = dcn31_z10_save_init,
0107     .set_disp_pattern_generator = dcn30_set_disp_pattern_generator,
0108     .optimize_pwr_state = dcn21_optimize_pwr_state,
0109     .exit_optimized_pwr_state = dcn21_exit_optimized_pwr_state,
0110     .update_visual_confirm_color = dcn20_update_visual_confirm_color,
0111 };
0112 
0113 static const struct hwseq_private_funcs dcn314_private_funcs = {
0114     .init_pipes = dcn10_init_pipes,
0115     .update_plane_addr = dcn20_update_plane_addr,
0116     .plane_atomic_disconnect = dcn10_plane_atomic_disconnect,
0117     .update_mpcc = dcn20_update_mpcc,
0118     .set_input_transfer_func = dcn30_set_input_transfer_func,
0119     .set_output_transfer_func = dcn30_set_output_transfer_func,
0120     .power_down = dce110_power_down,
0121     .enable_display_power_gating = dcn10_dummy_display_power_gating,
0122     .blank_pixel_data = dcn20_blank_pixel_data,
0123     .reset_hw_ctx_wrap = dcn31_reset_hw_ctx_wrap,
0124     .enable_stream_timing = dcn20_enable_stream_timing,
0125     .edp_backlight_control = dce110_edp_backlight_control,
0126     .disable_stream_gating = dcn20_disable_stream_gating,
0127     .enable_stream_gating = dcn20_enable_stream_gating,
0128     .setup_vupdate_interrupt = dcn20_setup_vupdate_interrupt,
0129     .did_underflow_occur = dcn10_did_underflow_occur,
0130     .init_blank = dcn20_init_blank,
0131     .disable_vga = dcn20_disable_vga,
0132     .bios_golden_init = dcn10_bios_golden_init,
0133     .plane_atomic_disable = dcn20_plane_atomic_disable,
0134     .plane_atomic_power_down = dcn10_plane_atomic_power_down,
0135     .enable_power_gating_plane = dcn314_enable_power_gating_plane,
0136     .hubp_pg_control = dcn31_hubp_pg_control,
0137     .program_all_writeback_pipes_in_tree = dcn30_program_all_writeback_pipes_in_tree,
0138     .update_odm = dcn314_update_odm,
0139     .dsc_pg_control = dcn314_dsc_pg_control,
0140     .set_hdr_multiplier = dcn10_set_hdr_multiplier,
0141     .verify_allow_pstate_change_high = dcn10_verify_allow_pstate_change_high,
0142     .wait_for_blank_complete = dcn20_wait_for_blank_complete,
0143     .dccg_init = dcn20_dccg_init,
0144     .set_blend_lut = dcn30_set_blend_lut,
0145     .set_shaper_3dlut = dcn20_set_shaper_3dlut,
0146     .setup_hpo_hw_control = dcn31_setup_hpo_hw_control,
0147     .calculate_dccg_k1_k2_values = dcn314_calculate_dccg_k1_k2_values,
0148     .set_pixels_per_cycle = dcn314_set_pixels_per_cycle,
0149 };
0150 
0151 void dcn314_hw_sequencer_construct(struct dc *dc)
0152 {
0153     dc->hwss = dcn314_funcs;
0154     dc->hwseq->funcs = dcn314_private_funcs;
0155 
0156     if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) {
0157         dc->hwss.init_hw = dcn20_fpga_init_hw;
0158         dc->hwseq->funcs.init_pipes = NULL;
0159     }
0160 }