Lines Matching full:phy
56 icl_get_procmon_ref_values(struct intel_display *display, enum phy phy) in icl_get_procmon_ref_values() argument
60 val = intel_de_read(display, ICL_PORT_COMP_DW3(phy)); in icl_get_procmon_ref_values()
79 enum phy phy) in icl_set_procmon_ref_values() argument
83 procmon = icl_get_procmon_ref_values(display, phy); in icl_set_procmon_ref_values()
85 intel_de_rmw(display, ICL_PORT_COMP_DW1(phy), in icl_set_procmon_ref_values()
88 intel_de_write(display, ICL_PORT_COMP_DW9(phy), procmon->dw9); in icl_set_procmon_ref_values()
89 intel_de_write(display, ICL_PORT_COMP_DW10(phy), procmon->dw10); in icl_set_procmon_ref_values()
93 enum phy phy, i915_reg_t reg, u32 mask, in check_phy_reg() argument
100 "Combo PHY %c reg %08x state mismatch: " in check_phy_reg()
102 phy_name(phy), in check_phy_reg()
111 enum phy phy) in icl_verify_procmon_ref_values() argument
116 procmon = icl_get_procmon_ref_values(display, phy); in icl_verify_procmon_ref_values()
118 ret = check_phy_reg(display, phy, ICL_PORT_COMP_DW1(phy), in icl_verify_procmon_ref_values()
120 ret &= check_phy_reg(display, phy, ICL_PORT_COMP_DW9(phy), in icl_verify_procmon_ref_values()
122 ret &= check_phy_reg(display, phy, ICL_PORT_COMP_DW10(phy), in icl_verify_procmon_ref_values()
128 static bool has_phy_misc(struct intel_display *display, enum phy phy) in has_phy_misc() argument
131 * Some platforms only expect PHY_MISC to be programmed for PHY-A and in has_phy_misc()
132 * PHY-B and may not even have instances of the register for the in has_phy_misc()
133 * other combo PHY's. in has_phy_misc()
136 * that we program it for PHY A. in has_phy_misc()
140 return phy == PHY_A; in has_phy_misc()
144 return phy < PHY_C; in has_phy_misc()
150 enum phy phy) in icl_combo_phy_enabled() argument
152 /* The PHY C added by EHL has no PHY_MISC register */ in icl_combo_phy_enabled()
153 if (!has_phy_misc(display, phy)) in icl_combo_phy_enabled()
154 return intel_de_read(display, ICL_PORT_COMP_DW0(phy)) & COMP_INIT; in icl_combo_phy_enabled()
156 return !(intel_de_read(display, ICL_PHY_MISC(phy)) & in icl_combo_phy_enabled()
158 (intel_de_read(display, ICL_PORT_COMP_DW0(phy)) & COMP_INIT); in icl_combo_phy_enabled()
169 * the PHY. So if combo PHY A is wired up to drive an external in ehl_vbt_ddi_d_present()
183 "VBT claims to have both internal and external displays on PHY A. Configuring for internal.\n"); in ehl_vbt_ddi_d_present()
188 static bool phy_is_master(struct intel_display *display, enum phy phy) in phy_is_master() argument
203 * We must set the IREFGEN bit for any PHY acting as a master in phy_is_master()
204 * to another PHY. in phy_is_master()
206 if (phy == PHY_A) in phy_is_master()
209 return phy == PHY_D; in phy_is_master()
211 return phy == PHY_C; in phy_is_master()
217 enum phy phy) in icl_combo_phy_verify_state() argument
222 if (!icl_combo_phy_enabled(display, phy)) in icl_combo_phy_verify_state()
226 ret &= check_phy_reg(display, phy, ICL_PORT_TX_DW8_LN(0, phy), in icl_combo_phy_verify_state()
232 ret &= check_phy_reg(display, phy, ICL_PORT_PCS_DW1_LN(0, phy), in icl_combo_phy_verify_state()
236 ret &= icl_verify_procmon_ref_values(display, phy); in icl_combo_phy_verify_state()
238 if (phy_is_master(display, phy)) { in icl_combo_phy_verify_state()
239 ret &= check_phy_reg(display, phy, ICL_PORT_COMP_DW8(phy), in icl_combo_phy_verify_state()
246 ret &= check_phy_reg(display, phy, ICL_PHY_MISC(phy), in icl_combo_phy_verify_state()
252 ret &= check_phy_reg(display, phy, ICL_PORT_CL_DW5(phy), in icl_combo_phy_verify_state()
259 enum phy phy, bool is_dsi, in intel_combo_phy_power_up_lanes() argument
303 intel_de_rmw(display, ICL_PORT_CL_DW10(phy), in intel_combo_phy_power_up_lanes()
309 enum phy phy; in icl_combo_phys_init() local
311 for_each_combo_phy(display, phy) { in icl_combo_phys_init()
315 if (icl_combo_phy_verify_state(display, phy)) in icl_combo_phys_init()
318 procmon = icl_get_procmon_ref_values(display, phy); in icl_combo_phys_init()
321 "Initializing combo PHY %c (Voltage/Process Info : %s)\n", in icl_combo_phys_init()
322 phy_name(phy), procmon->name); in icl_combo_phys_init()
324 if (!has_phy_misc(display, phy)) in icl_combo_phys_init()
328 * EHL's combo PHY A can be hooked up to either an external in icl_combo_phys_init()
331 * can't be changed on the fly, so initialize the PHY's mux in icl_combo_phys_init()
335 val = intel_de_read(display, ICL_PHY_MISC(phy)); in icl_combo_phys_init()
337 phy == PHY_A) { in icl_combo_phys_init()
345 intel_de_write(display, ICL_PHY_MISC(phy), val); in icl_combo_phys_init()
349 val = intel_de_read(display, ICL_PORT_TX_DW8_LN(0, phy)); in icl_combo_phys_init()
353 intel_de_write(display, ICL_PORT_TX_DW8_GRP(phy), val); in icl_combo_phys_init()
355 val = intel_de_read(display, ICL_PORT_PCS_DW1_LN(0, phy)); in icl_combo_phys_init()
358 intel_de_write(display, ICL_PORT_PCS_DW1_GRP(phy), val); in icl_combo_phys_init()
361 icl_set_procmon_ref_values(display, phy); in icl_combo_phys_init()
363 if (phy_is_master(display, phy)) in icl_combo_phys_init()
364 intel_de_rmw(display, ICL_PORT_COMP_DW8(phy), in icl_combo_phys_init()
367 intel_de_rmw(display, ICL_PORT_COMP_DW0(phy), 0, COMP_INIT); in icl_combo_phys_init()
368 intel_de_rmw(display, ICL_PORT_CL_DW5(phy), in icl_combo_phys_init()
375 enum phy phy; in icl_combo_phys_uninit() local
377 for_each_combo_phy_reverse(display, phy) { in icl_combo_phys_uninit()
378 if (phy == PHY_A && in icl_combo_phys_uninit()
379 !icl_combo_phy_verify_state(display, phy)) { in icl_combo_phys_uninit()
387 "Combo PHY %c HW state changed unexpectedly\n", in icl_combo_phys_uninit()
388 phy_name(phy)); in icl_combo_phys_uninit()
391 "Combo PHY %c HW state changed unexpectedly\n", in icl_combo_phys_uninit()
392 phy_name(phy)); in icl_combo_phys_uninit()
396 if (!has_phy_misc(display, phy)) in icl_combo_phys_uninit()
399 intel_de_rmw(display, ICL_PHY_MISC(phy), 0, in icl_combo_phys_uninit()
403 intel_de_rmw(display, ICL_PORT_COMP_DW0(phy), COMP_INIT, 0); in icl_combo_phys_uninit()