root/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn42b/dcn42b_clk_mgr.h
// SPDX-License-Identifier: MIT
//
// Copyright 2026 Advanced Micro Devices, Inc.

#ifndef __DCN42B_CLK_MGR_H__
#define __DCN42B_CLK_MGR_H__
#include "clk_mgr_internal.h"
#include "dcn42/dcn42_clk_mgr.h"

/* DCN42B reuses the following from DCN42:
 * - dcn42_update_clocks (dtbclk_en=false so all dtbclk branches are skipped)
 * - dcn42_get_dispclk_from_dentist (DENTIST_DISPCLK_CNTL has same DCN offset)
 * - dcn42_get_dpm_table_from_smu (identical, only SMU calls)
 * - dcn42_are_clock_states_equal
 * - dcn42_enable_pme_wa
 * - dcn42_update_clocks_update_dpp_dto
 * - dcn42_update_clocks_update_dtb_dto
 * - dcn42_build_watermark_ranges
 * - dcn42_is_spll_ssc_enabled
 * - dcn42_has_active_display
 * - dcn42_notify_wm_ranges
 * - dcn42_set_low_power_state
 * - dcn42_exit_low_power_state
 * - dcn42_get_max_clock_khz
 * - dcn42_is_smu_present
 *
 * CANNOT reuse from DCN42 (hardware register differences):
 * - dcn42_read_ss_info_from_lut (CLK8 vs CLK5 registers)
 * - dcn42_dump_clk_registers* (CLK8 vs CLK5 registers)
 * - dcn42_get_clock_freq_from_clkip (CLK8 vs CLK5 registers)
 * - dcn42_init_clocks (calls CLK8-specific functions, dtbclk logic)
 * - init_clk_states (dtbclk_en difference: true for dcn42, false for dcn42b)
 *
 * See dcn42_clk_mgr.h for declarations
 */

#define NUM_CLOCK_SOURCES 5

void dcn42b_init_clocks(struct clk_mgr *clk_mgr);

void dcn42b_clk_mgr_construct(struct dc_context *ctx,
                              struct clk_mgr_dcn42 *clk_mgr,
                              struct pp_smu_funcs *pp_smu,
                              struct dccg *dccg);
uint32_t dcn42b_get_clock_freq_from_clkip(struct clk_mgr *clk_mgr_base,
                                  enum clock_type clock);

#endif //__DCN42B_CLK_MGR_H__