cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

intel_pps.c (43141B)


      1// SPDX-License-Identifier: MIT
      2/*
      3 * Copyright © 2020 Intel Corporation
      4 */
      5
      6#include "g4x_dp.h"
      7#include "i915_drv.h"
      8#include "intel_de.h"
      9#include "intel_display_power_well.h"
     10#include "intel_display_types.h"
     11#include "intel_dp.h"
     12#include "intel_dpll.h"
     13#include "intel_lvds.h"
     14#include "intel_pps.h"
     15
     16static void vlv_steal_power_sequencer(struct drm_i915_private *dev_priv,
     17				      enum pipe pipe);
     18
     19static void pps_init_delays(struct intel_dp *intel_dp);
     20static void pps_init_registers(struct intel_dp *intel_dp, bool force_disable_vdd);
     21
     22intel_wakeref_t intel_pps_lock(struct intel_dp *intel_dp)
     23{
     24	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
     25	intel_wakeref_t wakeref;
     26
     27	/*
     28	 * See intel_pps_reset_all() why we need a power domain reference here.
     29	 */
     30	wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_DISPLAY_CORE);
     31	mutex_lock(&dev_priv->pps_mutex);
     32
     33	return wakeref;
     34}
     35
     36intel_wakeref_t intel_pps_unlock(struct intel_dp *intel_dp,
     37				 intel_wakeref_t wakeref)
     38{
     39	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
     40
     41	mutex_unlock(&dev_priv->pps_mutex);
     42	intel_display_power_put(dev_priv, POWER_DOMAIN_DISPLAY_CORE, wakeref);
     43
     44	return 0;
     45}
     46
     47static void
     48vlv_power_sequencer_kick(struct intel_dp *intel_dp)
     49{
     50	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
     51	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
     52	enum pipe pipe = intel_dp->pps.pps_pipe;
     53	bool pll_enabled, release_cl_override = false;
     54	enum dpio_phy phy = DPIO_PHY(pipe);
     55	enum dpio_channel ch = vlv_pipe_to_channel(pipe);
     56	u32 DP;
     57
     58	if (drm_WARN(&dev_priv->drm,
     59		     intel_de_read(dev_priv, intel_dp->output_reg) & DP_PORT_EN,
     60		     "skipping pipe %c power sequencer kick due to [ENCODER:%d:%s] being active\n",
     61		     pipe_name(pipe), dig_port->base.base.base.id,
     62		     dig_port->base.base.name))
     63		return;
     64
     65	drm_dbg_kms(&dev_priv->drm,
     66		    "kicking pipe %c power sequencer for [ENCODER:%d:%s]\n",
     67		    pipe_name(pipe), dig_port->base.base.base.id,
     68		    dig_port->base.base.name);
     69
     70	/* Preserve the BIOS-computed detected bit. This is
     71	 * supposed to be read-only.
     72	 */
     73	DP = intel_de_read(dev_priv, intel_dp->output_reg) & DP_DETECTED;
     74	DP |= DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0;
     75	DP |= DP_PORT_WIDTH(1);
     76	DP |= DP_LINK_TRAIN_PAT_1;
     77
     78	if (IS_CHERRYVIEW(dev_priv))
     79		DP |= DP_PIPE_SEL_CHV(pipe);
     80	else
     81		DP |= DP_PIPE_SEL(pipe);
     82
     83	pll_enabled = intel_de_read(dev_priv, DPLL(pipe)) & DPLL_VCO_ENABLE;
     84
     85	/*
     86	 * The DPLL for the pipe must be enabled for this to work.
     87	 * So enable temporarily it if it's not already enabled.
     88	 */
     89	if (!pll_enabled) {
     90		release_cl_override = IS_CHERRYVIEW(dev_priv) &&
     91			!chv_phy_powergate_ch(dev_priv, phy, ch, true);
     92
     93		if (vlv_force_pll_on(dev_priv, pipe, vlv_get_dpll(dev_priv))) {
     94			drm_err(&dev_priv->drm,
     95				"Failed to force on pll for pipe %c!\n",
     96				pipe_name(pipe));
     97			return;
     98		}
     99	}
    100
    101	/*
    102	 * Similar magic as in intel_dp_enable_port().
    103	 * We _must_ do this port enable + disable trick
    104	 * to make this power sequencer lock onto the port.
    105	 * Otherwise even VDD force bit won't work.
    106	 */
    107	intel_de_write(dev_priv, intel_dp->output_reg, DP);
    108	intel_de_posting_read(dev_priv, intel_dp->output_reg);
    109
    110	intel_de_write(dev_priv, intel_dp->output_reg, DP | DP_PORT_EN);
    111	intel_de_posting_read(dev_priv, intel_dp->output_reg);
    112
    113	intel_de_write(dev_priv, intel_dp->output_reg, DP & ~DP_PORT_EN);
    114	intel_de_posting_read(dev_priv, intel_dp->output_reg);
    115
    116	if (!pll_enabled) {
    117		vlv_force_pll_off(dev_priv, pipe);
    118
    119		if (release_cl_override)
    120			chv_phy_powergate_ch(dev_priv, phy, ch, false);
    121	}
    122}
    123
    124static enum pipe vlv_find_free_pps(struct drm_i915_private *dev_priv)
    125{
    126	struct intel_encoder *encoder;
    127	unsigned int pipes = (1 << PIPE_A) | (1 << PIPE_B);
    128
    129	/*
    130	 * We don't have power sequencer currently.
    131	 * Pick one that's not used by other ports.
    132	 */
    133	for_each_intel_dp(&dev_priv->drm, encoder) {
    134		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
    135
    136		if (encoder->type == INTEL_OUTPUT_EDP) {
    137			drm_WARN_ON(&dev_priv->drm,
    138				    intel_dp->pps.active_pipe != INVALID_PIPE &&
    139				    intel_dp->pps.active_pipe !=
    140				    intel_dp->pps.pps_pipe);
    141
    142			if (intel_dp->pps.pps_pipe != INVALID_PIPE)
    143				pipes &= ~(1 << intel_dp->pps.pps_pipe);
    144		} else {
    145			drm_WARN_ON(&dev_priv->drm,
    146				    intel_dp->pps.pps_pipe != INVALID_PIPE);
    147
    148			if (intel_dp->pps.active_pipe != INVALID_PIPE)
    149				pipes &= ~(1 << intel_dp->pps.active_pipe);
    150		}
    151	}
    152
    153	if (pipes == 0)
    154		return INVALID_PIPE;
    155
    156	return ffs(pipes) - 1;
    157}
    158
    159static enum pipe
    160vlv_power_sequencer_pipe(struct intel_dp *intel_dp)
    161{
    162	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    163	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
    164	enum pipe pipe;
    165
    166	lockdep_assert_held(&dev_priv->pps_mutex);
    167
    168	/* We should never land here with regular DP ports */
    169	drm_WARN_ON(&dev_priv->drm, !intel_dp_is_edp(intel_dp));
    170
    171	drm_WARN_ON(&dev_priv->drm, intel_dp->pps.active_pipe != INVALID_PIPE &&
    172		    intel_dp->pps.active_pipe != intel_dp->pps.pps_pipe);
    173
    174	if (intel_dp->pps.pps_pipe != INVALID_PIPE)
    175		return intel_dp->pps.pps_pipe;
    176
    177	pipe = vlv_find_free_pps(dev_priv);
    178
    179	/*
    180	 * Didn't find one. This should not happen since there
    181	 * are two power sequencers and up to two eDP ports.
    182	 */
    183	if (drm_WARN_ON(&dev_priv->drm, pipe == INVALID_PIPE))
    184		pipe = PIPE_A;
    185
    186	vlv_steal_power_sequencer(dev_priv, pipe);
    187	intel_dp->pps.pps_pipe = pipe;
    188
    189	drm_dbg_kms(&dev_priv->drm,
    190		    "picked pipe %c power sequencer for [ENCODER:%d:%s]\n",
    191		    pipe_name(intel_dp->pps.pps_pipe),
    192		    dig_port->base.base.base.id,
    193		    dig_port->base.base.name);
    194
    195	/* init power sequencer on this pipe and port */
    196	pps_init_delays(intel_dp);
    197	pps_init_registers(intel_dp, true);
    198
    199	/*
    200	 * Even vdd force doesn't work until we've made
    201	 * the power sequencer lock in on the port.
    202	 */
    203	vlv_power_sequencer_kick(intel_dp);
    204
    205	return intel_dp->pps.pps_pipe;
    206}
    207
    208static int
    209bxt_power_sequencer_idx(struct intel_dp *intel_dp)
    210{
    211	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    212	int backlight_controller = dev_priv->vbt.backlight.controller;
    213
    214	lockdep_assert_held(&dev_priv->pps_mutex);
    215
    216	/* We should never land here with regular DP ports */
    217	drm_WARN_ON(&dev_priv->drm, !intel_dp_is_edp(intel_dp));
    218
    219	if (!intel_dp->pps.pps_reset)
    220		return backlight_controller;
    221
    222	intel_dp->pps.pps_reset = false;
    223
    224	/*
    225	 * Only the HW needs to be reprogrammed, the SW state is fixed and
    226	 * has been setup during connector init.
    227	 */
    228	pps_init_registers(intel_dp, false);
    229
    230	return backlight_controller;
    231}
    232
    233typedef bool (*vlv_pipe_check)(struct drm_i915_private *dev_priv,
    234			       enum pipe pipe);
    235
    236static bool vlv_pipe_has_pp_on(struct drm_i915_private *dev_priv,
    237			       enum pipe pipe)
    238{
    239	return intel_de_read(dev_priv, PP_STATUS(pipe)) & PP_ON;
    240}
    241
    242static bool vlv_pipe_has_vdd_on(struct drm_i915_private *dev_priv,
    243				enum pipe pipe)
    244{
    245	return intel_de_read(dev_priv, PP_CONTROL(pipe)) & EDP_FORCE_VDD;
    246}
    247
    248static bool vlv_pipe_any(struct drm_i915_private *dev_priv,
    249			 enum pipe pipe)
    250{
    251	return true;
    252}
    253
    254static enum pipe
    255vlv_initial_pps_pipe(struct drm_i915_private *dev_priv,
    256		     enum port port,
    257		     vlv_pipe_check pipe_check)
    258{
    259	enum pipe pipe;
    260
    261	for (pipe = PIPE_A; pipe <= PIPE_B; pipe++) {
    262		u32 port_sel = intel_de_read(dev_priv, PP_ON_DELAYS(pipe)) &
    263			PANEL_PORT_SELECT_MASK;
    264
    265		if (port_sel != PANEL_PORT_SELECT_VLV(port))
    266			continue;
    267
    268		if (!pipe_check(dev_priv, pipe))
    269			continue;
    270
    271		return pipe;
    272	}
    273
    274	return INVALID_PIPE;
    275}
    276
    277static void
    278vlv_initial_power_sequencer_setup(struct intel_dp *intel_dp)
    279{
    280	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    281	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
    282	enum port port = dig_port->base.port;
    283
    284	lockdep_assert_held(&dev_priv->pps_mutex);
    285
    286	/* try to find a pipe with this port selected */
    287	/* first pick one where the panel is on */
    288	intel_dp->pps.pps_pipe = vlv_initial_pps_pipe(dev_priv, port,
    289						      vlv_pipe_has_pp_on);
    290	/* didn't find one? pick one where vdd is on */
    291	if (intel_dp->pps.pps_pipe == INVALID_PIPE)
    292		intel_dp->pps.pps_pipe = vlv_initial_pps_pipe(dev_priv, port,
    293							      vlv_pipe_has_vdd_on);
    294	/* didn't find one? pick one with just the correct port */
    295	if (intel_dp->pps.pps_pipe == INVALID_PIPE)
    296		intel_dp->pps.pps_pipe = vlv_initial_pps_pipe(dev_priv, port,
    297							      vlv_pipe_any);
    298
    299	/* didn't find one? just let vlv_power_sequencer_pipe() pick one when needed */
    300	if (intel_dp->pps.pps_pipe == INVALID_PIPE) {
    301		drm_dbg_kms(&dev_priv->drm,
    302			    "no initial power sequencer for [ENCODER:%d:%s]\n",
    303			    dig_port->base.base.base.id,
    304			    dig_port->base.base.name);
    305		return;
    306	}
    307
    308	drm_dbg_kms(&dev_priv->drm,
    309		    "initial power sequencer for [ENCODER:%d:%s]: pipe %c\n",
    310		    dig_port->base.base.base.id,
    311		    dig_port->base.base.name,
    312		    pipe_name(intel_dp->pps.pps_pipe));
    313}
    314
    315void intel_pps_reset_all(struct drm_i915_private *dev_priv)
    316{
    317	struct intel_encoder *encoder;
    318
    319	if (drm_WARN_ON(&dev_priv->drm, !IS_LP(dev_priv)))
    320		return;
    321
    322	if (!HAS_DISPLAY(dev_priv))
    323		return;
    324
    325	/*
    326	 * We can't grab pps_mutex here due to deadlock with power_domain
    327	 * mutex when power_domain functions are called while holding pps_mutex.
    328	 * That also means that in order to use pps_pipe the code needs to
    329	 * hold both a power domain reference and pps_mutex, and the power domain
    330	 * reference get/put must be done while _not_ holding pps_mutex.
    331	 * pps_{lock,unlock}() do these steps in the correct order, so one
    332	 * should use them always.
    333	 */
    334
    335	for_each_intel_dp(&dev_priv->drm, encoder) {
    336		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
    337
    338		drm_WARN_ON(&dev_priv->drm,
    339			    intel_dp->pps.active_pipe != INVALID_PIPE);
    340
    341		if (encoder->type != INTEL_OUTPUT_EDP)
    342			continue;
    343
    344		if (DISPLAY_VER(dev_priv) >= 9)
    345			intel_dp->pps.pps_reset = true;
    346		else
    347			intel_dp->pps.pps_pipe = INVALID_PIPE;
    348	}
    349}
    350
    351struct pps_registers {
    352	i915_reg_t pp_ctrl;
    353	i915_reg_t pp_stat;
    354	i915_reg_t pp_on;
    355	i915_reg_t pp_off;
    356	i915_reg_t pp_div;
    357};
    358
    359static void intel_pps_get_registers(struct intel_dp *intel_dp,
    360				    struct pps_registers *regs)
    361{
    362	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    363	int pps_idx = 0;
    364
    365	memset(regs, 0, sizeof(*regs));
    366
    367	if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
    368		pps_idx = bxt_power_sequencer_idx(intel_dp);
    369	else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
    370		pps_idx = vlv_power_sequencer_pipe(intel_dp);
    371
    372	regs->pp_ctrl = PP_CONTROL(pps_idx);
    373	regs->pp_stat = PP_STATUS(pps_idx);
    374	regs->pp_on = PP_ON_DELAYS(pps_idx);
    375	regs->pp_off = PP_OFF_DELAYS(pps_idx);
    376
    377	/* Cycle delay moved from PP_DIVISOR to PP_CONTROL */
    378	if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv) ||
    379	    INTEL_PCH_TYPE(dev_priv) >= PCH_CNP)
    380		regs->pp_div = INVALID_MMIO_REG;
    381	else
    382		regs->pp_div = PP_DIVISOR(pps_idx);
    383}
    384
    385static i915_reg_t
    386_pp_ctrl_reg(struct intel_dp *intel_dp)
    387{
    388	struct pps_registers regs;
    389
    390	intel_pps_get_registers(intel_dp, &regs);
    391
    392	return regs.pp_ctrl;
    393}
    394
    395static i915_reg_t
    396_pp_stat_reg(struct intel_dp *intel_dp)
    397{
    398	struct pps_registers regs;
    399
    400	intel_pps_get_registers(intel_dp, &regs);
    401
    402	return regs.pp_stat;
    403}
    404
    405static bool edp_have_panel_power(struct intel_dp *intel_dp)
    406{
    407	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    408
    409	lockdep_assert_held(&dev_priv->pps_mutex);
    410
    411	if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
    412	    intel_dp->pps.pps_pipe == INVALID_PIPE)
    413		return false;
    414
    415	return (intel_de_read(dev_priv, _pp_stat_reg(intel_dp)) & PP_ON) != 0;
    416}
    417
    418static bool edp_have_panel_vdd(struct intel_dp *intel_dp)
    419{
    420	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    421
    422	lockdep_assert_held(&dev_priv->pps_mutex);
    423
    424	if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
    425	    intel_dp->pps.pps_pipe == INVALID_PIPE)
    426		return false;
    427
    428	return intel_de_read(dev_priv, _pp_ctrl_reg(intel_dp)) & EDP_FORCE_VDD;
    429}
    430
    431void intel_pps_check_power_unlocked(struct intel_dp *intel_dp)
    432{
    433	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    434
    435	if (!intel_dp_is_edp(intel_dp))
    436		return;
    437
    438	if (!edp_have_panel_power(intel_dp) && !edp_have_panel_vdd(intel_dp)) {
    439		drm_WARN(&dev_priv->drm, 1,
    440			 "eDP powered off while attempting aux channel communication.\n");
    441		drm_dbg_kms(&dev_priv->drm, "Status 0x%08x Control 0x%08x\n",
    442			    intel_de_read(dev_priv, _pp_stat_reg(intel_dp)),
    443			    intel_de_read(dev_priv, _pp_ctrl_reg(intel_dp)));
    444	}
    445}
    446
    447#define IDLE_ON_MASK		(PP_ON | PP_SEQUENCE_MASK | 0                     | PP_SEQUENCE_STATE_MASK)
    448#define IDLE_ON_VALUE   	(PP_ON | PP_SEQUENCE_NONE | 0                     | PP_SEQUENCE_STATE_ON_IDLE)
    449
    450#define IDLE_OFF_MASK		(PP_ON | PP_SEQUENCE_MASK | 0                     | 0)
    451#define IDLE_OFF_VALUE		(0     | PP_SEQUENCE_NONE | 0                     | 0)
    452
    453#define IDLE_CYCLE_MASK		(PP_ON | PP_SEQUENCE_MASK | PP_CYCLE_DELAY_ACTIVE | PP_SEQUENCE_STATE_MASK)
    454#define IDLE_CYCLE_VALUE	(0     | PP_SEQUENCE_NONE | 0                     | PP_SEQUENCE_STATE_OFF_IDLE)
    455
    456static void intel_pps_verify_state(struct intel_dp *intel_dp);
    457
    458static void wait_panel_status(struct intel_dp *intel_dp,
    459				       u32 mask,
    460				       u32 value)
    461{
    462	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    463	i915_reg_t pp_stat_reg, pp_ctrl_reg;
    464
    465	lockdep_assert_held(&dev_priv->pps_mutex);
    466
    467	intel_pps_verify_state(intel_dp);
    468
    469	pp_stat_reg = _pp_stat_reg(intel_dp);
    470	pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
    471
    472	drm_dbg_kms(&dev_priv->drm,
    473		    "mask %08x value %08x status %08x control %08x\n",
    474		    mask, value,
    475		    intel_de_read(dev_priv, pp_stat_reg),
    476		    intel_de_read(dev_priv, pp_ctrl_reg));
    477
    478	if (intel_de_wait_for_register(dev_priv, pp_stat_reg,
    479				       mask, value, 5000))
    480		drm_err(&dev_priv->drm,
    481			"Panel status timeout: status %08x control %08x\n",
    482			intel_de_read(dev_priv, pp_stat_reg),
    483			intel_de_read(dev_priv, pp_ctrl_reg));
    484
    485	drm_dbg_kms(&dev_priv->drm, "Wait complete\n");
    486}
    487
    488static void wait_panel_on(struct intel_dp *intel_dp)
    489{
    490	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
    491
    492	drm_dbg_kms(&i915->drm, "Wait for panel power on\n");
    493	wait_panel_status(intel_dp, IDLE_ON_MASK, IDLE_ON_VALUE);
    494}
    495
    496static void wait_panel_off(struct intel_dp *intel_dp)
    497{
    498	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
    499
    500	drm_dbg_kms(&i915->drm, "Wait for panel power off time\n");
    501	wait_panel_status(intel_dp, IDLE_OFF_MASK, IDLE_OFF_VALUE);
    502}
    503
    504static void wait_panel_power_cycle(struct intel_dp *intel_dp)
    505{
    506	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
    507	ktime_t panel_power_on_time;
    508	s64 panel_power_off_duration;
    509
    510	drm_dbg_kms(&i915->drm, "Wait for panel power cycle\n");
    511
    512	/* take the difference of currrent time and panel power off time
    513	 * and then make panel wait for t11_t12 if needed. */
    514	panel_power_on_time = ktime_get_boottime();
    515	panel_power_off_duration = ktime_ms_delta(panel_power_on_time, intel_dp->pps.panel_power_off_time);
    516
    517	/* When we disable the VDD override bit last we have to do the manual
    518	 * wait. */
    519	if (panel_power_off_duration < (s64)intel_dp->pps.panel_power_cycle_delay)
    520		wait_remaining_ms_from_jiffies(jiffies,
    521				       intel_dp->pps.panel_power_cycle_delay - panel_power_off_duration);
    522
    523	wait_panel_status(intel_dp, IDLE_CYCLE_MASK, IDLE_CYCLE_VALUE);
    524}
    525
    526void intel_pps_wait_power_cycle(struct intel_dp *intel_dp)
    527{
    528	intel_wakeref_t wakeref;
    529
    530	if (!intel_dp_is_edp(intel_dp))
    531		return;
    532
    533	with_intel_pps_lock(intel_dp, wakeref)
    534		wait_panel_power_cycle(intel_dp);
    535}
    536
    537static void wait_backlight_on(struct intel_dp *intel_dp)
    538{
    539	wait_remaining_ms_from_jiffies(intel_dp->pps.last_power_on,
    540				       intel_dp->pps.backlight_on_delay);
    541}
    542
    543static void edp_wait_backlight_off(struct intel_dp *intel_dp)
    544{
    545	wait_remaining_ms_from_jiffies(intel_dp->pps.last_backlight_off,
    546				       intel_dp->pps.backlight_off_delay);
    547}
    548
    549/* Read the current pp_control value, unlocking the register if it
    550 * is locked
    551 */
    552
    553static  u32 ilk_get_pp_control(struct intel_dp *intel_dp)
    554{
    555	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    556	u32 control;
    557
    558	lockdep_assert_held(&dev_priv->pps_mutex);
    559
    560	control = intel_de_read(dev_priv, _pp_ctrl_reg(intel_dp));
    561	if (drm_WARN_ON(&dev_priv->drm, !HAS_DDI(dev_priv) &&
    562			(control & PANEL_UNLOCK_MASK) != PANEL_UNLOCK_REGS)) {
    563		control &= ~PANEL_UNLOCK_MASK;
    564		control |= PANEL_UNLOCK_REGS;
    565	}
    566	return control;
    567}
    568
    569/*
    570 * Must be paired with intel_pps_vdd_off_unlocked().
    571 * Must hold pps_mutex around the whole on/off sequence.
    572 * Can be nested with intel_pps_vdd_{on,off}() calls.
    573 */
    574bool intel_pps_vdd_on_unlocked(struct intel_dp *intel_dp)
    575{
    576	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    577	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
    578	u32 pp;
    579	i915_reg_t pp_stat_reg, pp_ctrl_reg;
    580	bool need_to_disable = !intel_dp->pps.want_panel_vdd;
    581
    582	lockdep_assert_held(&dev_priv->pps_mutex);
    583
    584	if (!intel_dp_is_edp(intel_dp))
    585		return false;
    586
    587	cancel_delayed_work(&intel_dp->pps.panel_vdd_work);
    588	intel_dp->pps.want_panel_vdd = true;
    589
    590	if (edp_have_panel_vdd(intel_dp))
    591		return need_to_disable;
    592
    593	drm_WARN_ON(&dev_priv->drm, intel_dp->pps.vdd_wakeref);
    594	intel_dp->pps.vdd_wakeref = intel_display_power_get(dev_priv,
    595							    intel_aux_power_domain(dig_port));
    596
    597	drm_dbg_kms(&dev_priv->drm, "Turning [ENCODER:%d:%s] VDD on\n",
    598		    dig_port->base.base.base.id,
    599		    dig_port->base.base.name);
    600
    601	if (!edp_have_panel_power(intel_dp))
    602		wait_panel_power_cycle(intel_dp);
    603
    604	pp = ilk_get_pp_control(intel_dp);
    605	pp |= EDP_FORCE_VDD;
    606
    607	pp_stat_reg = _pp_stat_reg(intel_dp);
    608	pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
    609
    610	intel_de_write(dev_priv, pp_ctrl_reg, pp);
    611	intel_de_posting_read(dev_priv, pp_ctrl_reg);
    612	drm_dbg_kms(&dev_priv->drm, "PP_STATUS: 0x%08x PP_CONTROL: 0x%08x\n",
    613		    intel_de_read(dev_priv, pp_stat_reg),
    614		    intel_de_read(dev_priv, pp_ctrl_reg));
    615	/*
    616	 * If the panel wasn't on, delay before accessing aux channel
    617	 */
    618	if (!edp_have_panel_power(intel_dp)) {
    619		drm_dbg_kms(&dev_priv->drm,
    620			    "[ENCODER:%d:%s] panel power wasn't enabled\n",
    621			    dig_port->base.base.base.id,
    622			    dig_port->base.base.name);
    623		msleep(intel_dp->pps.panel_power_up_delay);
    624	}
    625
    626	return need_to_disable;
    627}
    628
    629/*
    630 * Must be paired with intel_pps_off().
    631 * Nested calls to these functions are not allowed since
    632 * we drop the lock. Caller must use some higher level
    633 * locking to prevent nested calls from other threads.
    634 */
    635void intel_pps_vdd_on(struct intel_dp *intel_dp)
    636{
    637	intel_wakeref_t wakeref;
    638	bool vdd;
    639
    640	if (!intel_dp_is_edp(intel_dp))
    641		return;
    642
    643	vdd = false;
    644	with_intel_pps_lock(intel_dp, wakeref)
    645		vdd = intel_pps_vdd_on_unlocked(intel_dp);
    646	I915_STATE_WARN(!vdd, "[ENCODER:%d:%s] VDD already requested on\n",
    647			dp_to_dig_port(intel_dp)->base.base.base.id,
    648			dp_to_dig_port(intel_dp)->base.base.name);
    649}
    650
    651static void intel_pps_vdd_off_sync_unlocked(struct intel_dp *intel_dp)
    652{
    653	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    654	struct intel_digital_port *dig_port =
    655		dp_to_dig_port(intel_dp);
    656	u32 pp;
    657	i915_reg_t pp_stat_reg, pp_ctrl_reg;
    658
    659	lockdep_assert_held(&dev_priv->pps_mutex);
    660
    661	drm_WARN_ON(&dev_priv->drm, intel_dp->pps.want_panel_vdd);
    662
    663	if (!edp_have_panel_vdd(intel_dp))
    664		return;
    665
    666	drm_dbg_kms(&dev_priv->drm, "Turning [ENCODER:%d:%s] VDD off\n",
    667		    dig_port->base.base.base.id,
    668		    dig_port->base.base.name);
    669
    670	pp = ilk_get_pp_control(intel_dp);
    671	pp &= ~EDP_FORCE_VDD;
    672
    673	pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
    674	pp_stat_reg = _pp_stat_reg(intel_dp);
    675
    676	intel_de_write(dev_priv, pp_ctrl_reg, pp);
    677	intel_de_posting_read(dev_priv, pp_ctrl_reg);
    678
    679	/* Make sure sequencer is idle before allowing subsequent activity */
    680	drm_dbg_kms(&dev_priv->drm, "PP_STATUS: 0x%08x PP_CONTROL: 0x%08x\n",
    681		    intel_de_read(dev_priv, pp_stat_reg),
    682		    intel_de_read(dev_priv, pp_ctrl_reg));
    683
    684	if ((pp & PANEL_POWER_ON) == 0)
    685		intel_dp->pps.panel_power_off_time = ktime_get_boottime();
    686
    687	intel_display_power_put(dev_priv,
    688				intel_aux_power_domain(dig_port),
    689				fetch_and_zero(&intel_dp->pps.vdd_wakeref));
    690}
    691
    692void intel_pps_vdd_off_sync(struct intel_dp *intel_dp)
    693{
    694	intel_wakeref_t wakeref;
    695
    696	if (!intel_dp_is_edp(intel_dp))
    697		return;
    698
    699	cancel_delayed_work_sync(&intel_dp->pps.panel_vdd_work);
    700	/*
    701	 * vdd might still be enabled due to the delayed vdd off.
    702	 * Make sure vdd is actually turned off here.
    703	 */
    704	with_intel_pps_lock(intel_dp, wakeref)
    705		intel_pps_vdd_off_sync_unlocked(intel_dp);
    706}
    707
    708static void edp_panel_vdd_work(struct work_struct *__work)
    709{
    710	struct intel_pps *pps = container_of(to_delayed_work(__work),
    711					     struct intel_pps, panel_vdd_work);
    712	struct intel_dp *intel_dp = container_of(pps, struct intel_dp, pps);
    713	intel_wakeref_t wakeref;
    714
    715	with_intel_pps_lock(intel_dp, wakeref) {
    716		if (!intel_dp->pps.want_panel_vdd)
    717			intel_pps_vdd_off_sync_unlocked(intel_dp);
    718	}
    719}
    720
    721static void edp_panel_vdd_schedule_off(struct intel_dp *intel_dp)
    722{
    723	unsigned long delay;
    724
    725	/*
    726	 * Queue the timer to fire a long time from now (relative to the power
    727	 * down delay) to keep the panel power up across a sequence of
    728	 * operations.
    729	 */
    730	delay = msecs_to_jiffies(intel_dp->pps.panel_power_cycle_delay * 5);
    731	schedule_delayed_work(&intel_dp->pps.panel_vdd_work, delay);
    732}
    733
    734/*
    735 * Must be paired with edp_panel_vdd_on().
    736 * Must hold pps_mutex around the whole on/off sequence.
    737 * Can be nested with intel_pps_vdd_{on,off}() calls.
    738 */
    739void intel_pps_vdd_off_unlocked(struct intel_dp *intel_dp, bool sync)
    740{
    741	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    742
    743	lockdep_assert_held(&dev_priv->pps_mutex);
    744
    745	if (!intel_dp_is_edp(intel_dp))
    746		return;
    747
    748	I915_STATE_WARN(!intel_dp->pps.want_panel_vdd, "[ENCODER:%d:%s] VDD not forced on",
    749			dp_to_dig_port(intel_dp)->base.base.base.id,
    750			dp_to_dig_port(intel_dp)->base.base.name);
    751
    752	intel_dp->pps.want_panel_vdd = false;
    753
    754	if (sync)
    755		intel_pps_vdd_off_sync_unlocked(intel_dp);
    756	else
    757		edp_panel_vdd_schedule_off(intel_dp);
    758}
    759
    760void intel_pps_on_unlocked(struct intel_dp *intel_dp)
    761{
    762	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    763	u32 pp;
    764	i915_reg_t pp_ctrl_reg;
    765
    766	lockdep_assert_held(&dev_priv->pps_mutex);
    767
    768	if (!intel_dp_is_edp(intel_dp))
    769		return;
    770
    771	drm_dbg_kms(&dev_priv->drm, "Turn [ENCODER:%d:%s] panel power on\n",
    772		    dp_to_dig_port(intel_dp)->base.base.base.id,
    773		    dp_to_dig_port(intel_dp)->base.base.name);
    774
    775	if (drm_WARN(&dev_priv->drm, edp_have_panel_power(intel_dp),
    776		     "[ENCODER:%d:%s] panel power already on\n",
    777		     dp_to_dig_port(intel_dp)->base.base.base.id,
    778		     dp_to_dig_port(intel_dp)->base.base.name))
    779		return;
    780
    781	wait_panel_power_cycle(intel_dp);
    782
    783	pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
    784	pp = ilk_get_pp_control(intel_dp);
    785	if (IS_IRONLAKE(dev_priv)) {
    786		/* ILK workaround: disable reset around power sequence */
    787		pp &= ~PANEL_POWER_RESET;
    788		intel_de_write(dev_priv, pp_ctrl_reg, pp);
    789		intel_de_posting_read(dev_priv, pp_ctrl_reg);
    790	}
    791
    792	pp |= PANEL_POWER_ON;
    793	if (!IS_IRONLAKE(dev_priv))
    794		pp |= PANEL_POWER_RESET;
    795
    796	intel_de_write(dev_priv, pp_ctrl_reg, pp);
    797	intel_de_posting_read(dev_priv, pp_ctrl_reg);
    798
    799	wait_panel_on(intel_dp);
    800	intel_dp->pps.last_power_on = jiffies;
    801
    802	if (IS_IRONLAKE(dev_priv)) {
    803		pp |= PANEL_POWER_RESET; /* restore panel reset bit */
    804		intel_de_write(dev_priv, pp_ctrl_reg, pp);
    805		intel_de_posting_read(dev_priv, pp_ctrl_reg);
    806	}
    807}
    808
    809void intel_pps_on(struct intel_dp *intel_dp)
    810{
    811	intel_wakeref_t wakeref;
    812
    813	if (!intel_dp_is_edp(intel_dp))
    814		return;
    815
    816	with_intel_pps_lock(intel_dp, wakeref)
    817		intel_pps_on_unlocked(intel_dp);
    818}
    819
    820void intel_pps_off_unlocked(struct intel_dp *intel_dp)
    821{
    822	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    823	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
    824	u32 pp;
    825	i915_reg_t pp_ctrl_reg;
    826
    827	lockdep_assert_held(&dev_priv->pps_mutex);
    828
    829	if (!intel_dp_is_edp(intel_dp))
    830		return;
    831
    832	drm_dbg_kms(&dev_priv->drm, "Turn [ENCODER:%d:%s] panel power off\n",
    833		    dig_port->base.base.base.id, dig_port->base.base.name);
    834
    835	drm_WARN(&dev_priv->drm, !intel_dp->pps.want_panel_vdd,
    836		 "Need [ENCODER:%d:%s] VDD to turn off panel\n",
    837		 dig_port->base.base.base.id, dig_port->base.base.name);
    838
    839	pp = ilk_get_pp_control(intel_dp);
    840	/* We need to switch off panel power _and_ force vdd, for otherwise some
    841	 * panels get very unhappy and cease to work. */
    842	pp &= ~(PANEL_POWER_ON | PANEL_POWER_RESET | EDP_FORCE_VDD |
    843		EDP_BLC_ENABLE);
    844
    845	pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
    846
    847	intel_dp->pps.want_panel_vdd = false;
    848
    849	intel_de_write(dev_priv, pp_ctrl_reg, pp);
    850	intel_de_posting_read(dev_priv, pp_ctrl_reg);
    851
    852	wait_panel_off(intel_dp);
    853	intel_dp->pps.panel_power_off_time = ktime_get_boottime();
    854
    855	/* We got a reference when we enabled the VDD. */
    856	intel_display_power_put(dev_priv,
    857				intel_aux_power_domain(dig_port),
    858				fetch_and_zero(&intel_dp->pps.vdd_wakeref));
    859}
    860
    861void intel_pps_off(struct intel_dp *intel_dp)
    862{
    863	intel_wakeref_t wakeref;
    864
    865	if (!intel_dp_is_edp(intel_dp))
    866		return;
    867
    868	with_intel_pps_lock(intel_dp, wakeref)
    869		intel_pps_off_unlocked(intel_dp);
    870}
    871
    872/* Enable backlight in the panel power control. */
    873void intel_pps_backlight_on(struct intel_dp *intel_dp)
    874{
    875	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    876	intel_wakeref_t wakeref;
    877
    878	/*
    879	 * If we enable the backlight right away following a panel power
    880	 * on, we may see slight flicker as the panel syncs with the eDP
    881	 * link.  So delay a bit to make sure the image is solid before
    882	 * allowing it to appear.
    883	 */
    884	wait_backlight_on(intel_dp);
    885
    886	with_intel_pps_lock(intel_dp, wakeref) {
    887		i915_reg_t pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
    888		u32 pp;
    889
    890		pp = ilk_get_pp_control(intel_dp);
    891		pp |= EDP_BLC_ENABLE;
    892
    893		intel_de_write(dev_priv, pp_ctrl_reg, pp);
    894		intel_de_posting_read(dev_priv, pp_ctrl_reg);
    895	}
    896}
    897
    898/* Disable backlight in the panel power control. */
    899void intel_pps_backlight_off(struct intel_dp *intel_dp)
    900{
    901	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
    902	intel_wakeref_t wakeref;
    903
    904	if (!intel_dp_is_edp(intel_dp))
    905		return;
    906
    907	with_intel_pps_lock(intel_dp, wakeref) {
    908		i915_reg_t pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
    909		u32 pp;
    910
    911		pp = ilk_get_pp_control(intel_dp);
    912		pp &= ~EDP_BLC_ENABLE;
    913
    914		intel_de_write(dev_priv, pp_ctrl_reg, pp);
    915		intel_de_posting_read(dev_priv, pp_ctrl_reg);
    916	}
    917
    918	intel_dp->pps.last_backlight_off = jiffies;
    919	edp_wait_backlight_off(intel_dp);
    920}
    921
    922/*
    923 * Hook for controlling the panel power control backlight through the bl_power
    924 * sysfs attribute. Take care to handle multiple calls.
    925 */
    926void intel_pps_backlight_power(struct intel_connector *connector, bool enable)
    927{
    928	struct drm_i915_private *i915 = to_i915(connector->base.dev);
    929	struct intel_dp *intel_dp = intel_attached_dp(connector);
    930	intel_wakeref_t wakeref;
    931	bool is_enabled;
    932
    933	is_enabled = false;
    934	with_intel_pps_lock(intel_dp, wakeref)
    935		is_enabled = ilk_get_pp_control(intel_dp) & EDP_BLC_ENABLE;
    936	if (is_enabled == enable)
    937		return;
    938
    939	drm_dbg_kms(&i915->drm, "panel power control backlight %s\n",
    940		    enable ? "enable" : "disable");
    941
    942	if (enable)
    943		intel_pps_backlight_on(intel_dp);
    944	else
    945		intel_pps_backlight_off(intel_dp);
    946}
    947
    948static void vlv_detach_power_sequencer(struct intel_dp *intel_dp)
    949{
    950	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
    951	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
    952	enum pipe pipe = intel_dp->pps.pps_pipe;
    953	i915_reg_t pp_on_reg = PP_ON_DELAYS(pipe);
    954
    955	drm_WARN_ON(&dev_priv->drm, intel_dp->pps.active_pipe != INVALID_PIPE);
    956
    957	if (drm_WARN_ON(&dev_priv->drm, pipe != PIPE_A && pipe != PIPE_B))
    958		return;
    959
    960	intel_pps_vdd_off_sync_unlocked(intel_dp);
    961
    962	/*
    963	 * VLV seems to get confused when multiple power sequencers
    964	 * have the same port selected (even if only one has power/vdd
    965	 * enabled). The failure manifests as vlv_wait_port_ready() failing
    966	 * CHV on the other hand doesn't seem to mind having the same port
    967	 * selected in multiple power sequencers, but let's clear the
    968	 * port select always when logically disconnecting a power sequencer
    969	 * from a port.
    970	 */
    971	drm_dbg_kms(&dev_priv->drm,
    972		    "detaching pipe %c power sequencer from [ENCODER:%d:%s]\n",
    973		    pipe_name(pipe), dig_port->base.base.base.id,
    974		    dig_port->base.base.name);
    975	intel_de_write(dev_priv, pp_on_reg, 0);
    976	intel_de_posting_read(dev_priv, pp_on_reg);
    977
    978	intel_dp->pps.pps_pipe = INVALID_PIPE;
    979}
    980
    981static void vlv_steal_power_sequencer(struct drm_i915_private *dev_priv,
    982				      enum pipe pipe)
    983{
    984	struct intel_encoder *encoder;
    985
    986	lockdep_assert_held(&dev_priv->pps_mutex);
    987
    988	for_each_intel_dp(&dev_priv->drm, encoder) {
    989		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
    990
    991		drm_WARN(&dev_priv->drm, intel_dp->pps.active_pipe == pipe,
    992			 "stealing pipe %c power sequencer from active [ENCODER:%d:%s]\n",
    993			 pipe_name(pipe), encoder->base.base.id,
    994			 encoder->base.name);
    995
    996		if (intel_dp->pps.pps_pipe != pipe)
    997			continue;
    998
    999		drm_dbg_kms(&dev_priv->drm,
   1000			    "stealing pipe %c power sequencer from [ENCODER:%d:%s]\n",
   1001			    pipe_name(pipe), encoder->base.base.id,
   1002			    encoder->base.name);
   1003
   1004		/* make sure vdd is off before we steal it */
   1005		vlv_detach_power_sequencer(intel_dp);
   1006	}
   1007}
   1008
   1009void vlv_pps_init(struct intel_encoder *encoder,
   1010		  const struct intel_crtc_state *crtc_state)
   1011{
   1012	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
   1013	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
   1014	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
   1015
   1016	lockdep_assert_held(&dev_priv->pps_mutex);
   1017
   1018	drm_WARN_ON(&dev_priv->drm, intel_dp->pps.active_pipe != INVALID_PIPE);
   1019
   1020	if (intel_dp->pps.pps_pipe != INVALID_PIPE &&
   1021	    intel_dp->pps.pps_pipe != crtc->pipe) {
   1022		/*
   1023		 * If another power sequencer was being used on this
   1024		 * port previously make sure to turn off vdd there while
   1025		 * we still have control of it.
   1026		 */
   1027		vlv_detach_power_sequencer(intel_dp);
   1028	}
   1029
   1030	/*
   1031	 * We may be stealing the power
   1032	 * sequencer from another port.
   1033	 */
   1034	vlv_steal_power_sequencer(dev_priv, crtc->pipe);
   1035
   1036	intel_dp->pps.active_pipe = crtc->pipe;
   1037
   1038	if (!intel_dp_is_edp(intel_dp))
   1039		return;
   1040
   1041	/* now it's all ours */
   1042	intel_dp->pps.pps_pipe = crtc->pipe;
   1043
   1044	drm_dbg_kms(&dev_priv->drm,
   1045		    "initializing pipe %c power sequencer for [ENCODER:%d:%s]\n",
   1046		    pipe_name(intel_dp->pps.pps_pipe), encoder->base.base.id,
   1047		    encoder->base.name);
   1048
   1049	/* init power sequencer on this pipe and port */
   1050	pps_init_delays(intel_dp);
   1051	pps_init_registers(intel_dp, true);
   1052}
   1053
   1054static void intel_pps_vdd_sanitize(struct intel_dp *intel_dp)
   1055{
   1056	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
   1057	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
   1058
   1059	lockdep_assert_held(&dev_priv->pps_mutex);
   1060
   1061	if (!edp_have_panel_vdd(intel_dp))
   1062		return;
   1063
   1064	/*
   1065	 * The VDD bit needs a power domain reference, so if the bit is
   1066	 * already enabled when we boot or resume, grab this reference and
   1067	 * schedule a vdd off, so we don't hold on to the reference
   1068	 * indefinitely.
   1069	 */
   1070	drm_dbg_kms(&dev_priv->drm,
   1071		    "VDD left on by BIOS, adjusting state tracking\n");
   1072	drm_WARN_ON(&dev_priv->drm, intel_dp->pps.vdd_wakeref);
   1073	intel_dp->pps.vdd_wakeref = intel_display_power_get(dev_priv,
   1074							    intel_aux_power_domain(dig_port));
   1075
   1076	edp_panel_vdd_schedule_off(intel_dp);
   1077}
   1078
   1079bool intel_pps_have_panel_power_or_vdd(struct intel_dp *intel_dp)
   1080{
   1081	intel_wakeref_t wakeref;
   1082	bool have_power = false;
   1083
   1084	with_intel_pps_lock(intel_dp, wakeref) {
   1085		have_power = edp_have_panel_power(intel_dp) ||
   1086			     edp_have_panel_vdd(intel_dp);
   1087	}
   1088
   1089	return have_power;
   1090}
   1091
   1092static void pps_init_timestamps(struct intel_dp *intel_dp)
   1093{
   1094	intel_dp->pps.panel_power_off_time = ktime_get_boottime();
   1095	intel_dp->pps.last_power_on = jiffies;
   1096	intel_dp->pps.last_backlight_off = jiffies;
   1097}
   1098
   1099static void
   1100intel_pps_readout_hw_state(struct intel_dp *intel_dp, struct edp_power_seq *seq)
   1101{
   1102	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
   1103	u32 pp_on, pp_off, pp_ctl;
   1104	struct pps_registers regs;
   1105
   1106	intel_pps_get_registers(intel_dp, &regs);
   1107
   1108	pp_ctl = ilk_get_pp_control(intel_dp);
   1109
   1110	/* Ensure PPS is unlocked */
   1111	if (!HAS_DDI(dev_priv))
   1112		intel_de_write(dev_priv, regs.pp_ctrl, pp_ctl);
   1113
   1114	pp_on = intel_de_read(dev_priv, regs.pp_on);
   1115	pp_off = intel_de_read(dev_priv, regs.pp_off);
   1116
   1117	/* Pull timing values out of registers */
   1118	seq->t1_t3 = REG_FIELD_GET(PANEL_POWER_UP_DELAY_MASK, pp_on);
   1119	seq->t8 = REG_FIELD_GET(PANEL_LIGHT_ON_DELAY_MASK, pp_on);
   1120	seq->t9 = REG_FIELD_GET(PANEL_LIGHT_OFF_DELAY_MASK, pp_off);
   1121	seq->t10 = REG_FIELD_GET(PANEL_POWER_DOWN_DELAY_MASK, pp_off);
   1122
   1123	if (i915_mmio_reg_valid(regs.pp_div)) {
   1124		u32 pp_div;
   1125
   1126		pp_div = intel_de_read(dev_priv, regs.pp_div);
   1127
   1128		seq->t11_t12 = REG_FIELD_GET(PANEL_POWER_CYCLE_DELAY_MASK, pp_div) * 1000;
   1129	} else {
   1130		seq->t11_t12 = REG_FIELD_GET(BXT_POWER_CYCLE_DELAY_MASK, pp_ctl) * 1000;
   1131	}
   1132}
   1133
   1134static void
   1135intel_pps_dump_state(struct intel_dp *intel_dp, const char *state_name,
   1136		     const struct edp_power_seq *seq)
   1137{
   1138	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
   1139
   1140	drm_dbg_kms(&i915->drm, "%s t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
   1141		    state_name,
   1142		    seq->t1_t3, seq->t8, seq->t9, seq->t10, seq->t11_t12);
   1143}
   1144
   1145static void
   1146intel_pps_verify_state(struct intel_dp *intel_dp)
   1147{
   1148	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
   1149	struct edp_power_seq hw;
   1150	struct edp_power_seq *sw = &intel_dp->pps.pps_delays;
   1151
   1152	intel_pps_readout_hw_state(intel_dp, &hw);
   1153
   1154	if (hw.t1_t3 != sw->t1_t3 || hw.t8 != sw->t8 || hw.t9 != sw->t9 ||
   1155	    hw.t10 != sw->t10 || hw.t11_t12 != sw->t11_t12) {
   1156		drm_err(&i915->drm, "PPS state mismatch\n");
   1157		intel_pps_dump_state(intel_dp, "sw", sw);
   1158		intel_pps_dump_state(intel_dp, "hw", &hw);
   1159	}
   1160}
   1161
   1162static void pps_init_delays(struct intel_dp *intel_dp)
   1163{
   1164	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
   1165	struct edp_power_seq cur, vbt, spec,
   1166		*final = &intel_dp->pps.pps_delays;
   1167
   1168	lockdep_assert_held(&dev_priv->pps_mutex);
   1169
   1170	/* already initialized? */
   1171	if (final->t11_t12 != 0)
   1172		return;
   1173
   1174	intel_pps_readout_hw_state(intel_dp, &cur);
   1175
   1176	intel_pps_dump_state(intel_dp, "cur", &cur);
   1177
   1178	vbt = dev_priv->vbt.edp.pps;
   1179	/* On Toshiba Satellite P50-C-18C system the VBT T12 delay
   1180	 * of 500ms appears to be too short. Ocassionally the panel
   1181	 * just fails to power back on. Increasing the delay to 800ms
   1182	 * seems sufficient to avoid this problem.
   1183	 */
   1184	if (dev_priv->quirks & QUIRK_INCREASE_T12_DELAY) {
   1185		vbt.t11_t12 = max_t(u16, vbt.t11_t12, 1300 * 10);
   1186		drm_dbg_kms(&dev_priv->drm,
   1187			    "Increasing T12 panel delay as per the quirk to %d\n",
   1188			    vbt.t11_t12);
   1189	}
   1190	/* T11_T12 delay is special and actually in units of 100ms, but zero
   1191	 * based in the hw (so we need to add 100 ms). But the sw vbt
   1192	 * table multiplies it with 1000 to make it in units of 100usec,
   1193	 * too. */
   1194	vbt.t11_t12 += 100 * 10;
   1195
   1196	/* Upper limits from eDP 1.3 spec. Note that we use the clunky units of
   1197	 * our hw here, which are all in 100usec. */
   1198	spec.t1_t3 = 210 * 10;
   1199	spec.t8 = 50 * 10; /* no limit for t8, use t7 instead */
   1200	spec.t9 = 50 * 10; /* no limit for t9, make it symmetric with t8 */
   1201	spec.t10 = 500 * 10;
   1202	/* This one is special and actually in units of 100ms, but zero
   1203	 * based in the hw (so we need to add 100 ms). But the sw vbt
   1204	 * table multiplies it with 1000 to make it in units of 100usec,
   1205	 * too. */
   1206	spec.t11_t12 = (510 + 100) * 10;
   1207
   1208	intel_pps_dump_state(intel_dp, "vbt", &vbt);
   1209
   1210	/* Use the max of the register settings and vbt. If both are
   1211	 * unset, fall back to the spec limits. */
   1212#define assign_final(field)	final->field = (max(cur.field, vbt.field) == 0 ? \
   1213				       spec.field : \
   1214				       max(cur.field, vbt.field))
   1215	assign_final(t1_t3);
   1216	assign_final(t8);
   1217	assign_final(t9);
   1218	assign_final(t10);
   1219	assign_final(t11_t12);
   1220#undef assign_final
   1221
   1222#define get_delay(field)	(DIV_ROUND_UP(final->field, 10))
   1223	intel_dp->pps.panel_power_up_delay = get_delay(t1_t3);
   1224	intel_dp->pps.backlight_on_delay = get_delay(t8);
   1225	intel_dp->pps.backlight_off_delay = get_delay(t9);
   1226	intel_dp->pps.panel_power_down_delay = get_delay(t10);
   1227	intel_dp->pps.panel_power_cycle_delay = get_delay(t11_t12);
   1228#undef get_delay
   1229
   1230	drm_dbg_kms(&dev_priv->drm,
   1231		    "panel power up delay %d, power down delay %d, power cycle delay %d\n",
   1232		    intel_dp->pps.panel_power_up_delay,
   1233		    intel_dp->pps.panel_power_down_delay,
   1234		    intel_dp->pps.panel_power_cycle_delay);
   1235
   1236	drm_dbg_kms(&dev_priv->drm, "backlight on delay %d, off delay %d\n",
   1237		    intel_dp->pps.backlight_on_delay,
   1238		    intel_dp->pps.backlight_off_delay);
   1239
   1240	/*
   1241	 * We override the HW backlight delays to 1 because we do manual waits
   1242	 * on them. For T8, even BSpec recommends doing it. For T9, if we
   1243	 * don't do this, we'll end up waiting for the backlight off delay
   1244	 * twice: once when we do the manual sleep, and once when we disable
   1245	 * the panel and wait for the PP_STATUS bit to become zero.
   1246	 */
   1247	final->t8 = 1;
   1248	final->t9 = 1;
   1249
   1250	/*
   1251	 * HW has only a 100msec granularity for t11_t12 so round it up
   1252	 * accordingly.
   1253	 */
   1254	final->t11_t12 = roundup(final->t11_t12, 100 * 10);
   1255}
   1256
   1257static void pps_init_registers(struct intel_dp *intel_dp, bool force_disable_vdd)
   1258{
   1259	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
   1260	u32 pp_on, pp_off, port_sel = 0;
   1261	int div = RUNTIME_INFO(dev_priv)->rawclk_freq / 1000;
   1262	struct pps_registers regs;
   1263	enum port port = dp_to_dig_port(intel_dp)->base.port;
   1264	const struct edp_power_seq *seq = &intel_dp->pps.pps_delays;
   1265
   1266	lockdep_assert_held(&dev_priv->pps_mutex);
   1267
   1268	intel_pps_get_registers(intel_dp, &regs);
   1269
   1270	/*
   1271	 * On some VLV machines the BIOS can leave the VDD
   1272	 * enabled even on power sequencers which aren't
   1273	 * hooked up to any port. This would mess up the
   1274	 * power domain tracking the first time we pick
   1275	 * one of these power sequencers for use since
   1276	 * intel_pps_vdd_on_unlocked() would notice that the VDD was
   1277	 * already on and therefore wouldn't grab the power
   1278	 * domain reference. Disable VDD first to avoid this.
   1279	 * This also avoids spuriously turning the VDD on as
   1280	 * soon as the new power sequencer gets initialized.
   1281	 */
   1282	if (force_disable_vdd) {
   1283		u32 pp = ilk_get_pp_control(intel_dp);
   1284
   1285		drm_WARN(&dev_priv->drm, pp & PANEL_POWER_ON,
   1286			 "Panel power already on\n");
   1287
   1288		if (pp & EDP_FORCE_VDD)
   1289			drm_dbg_kms(&dev_priv->drm,
   1290				    "VDD already on, disabling first\n");
   1291
   1292		pp &= ~EDP_FORCE_VDD;
   1293
   1294		intel_de_write(dev_priv, regs.pp_ctrl, pp);
   1295	}
   1296
   1297	pp_on = REG_FIELD_PREP(PANEL_POWER_UP_DELAY_MASK, seq->t1_t3) |
   1298		REG_FIELD_PREP(PANEL_LIGHT_ON_DELAY_MASK, seq->t8);
   1299	pp_off = REG_FIELD_PREP(PANEL_LIGHT_OFF_DELAY_MASK, seq->t9) |
   1300		REG_FIELD_PREP(PANEL_POWER_DOWN_DELAY_MASK, seq->t10);
   1301
   1302	/* Haswell doesn't have any port selection bits for the panel
   1303	 * power sequencer any more. */
   1304	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
   1305		port_sel = PANEL_PORT_SELECT_VLV(port);
   1306	} else if (HAS_PCH_IBX(dev_priv) || HAS_PCH_CPT(dev_priv)) {
   1307		switch (port) {
   1308		case PORT_A:
   1309			port_sel = PANEL_PORT_SELECT_DPA;
   1310			break;
   1311		case PORT_C:
   1312			port_sel = PANEL_PORT_SELECT_DPC;
   1313			break;
   1314		case PORT_D:
   1315			port_sel = PANEL_PORT_SELECT_DPD;
   1316			break;
   1317		default:
   1318			MISSING_CASE(port);
   1319			break;
   1320		}
   1321	}
   1322
   1323	pp_on |= port_sel;
   1324
   1325	intel_de_write(dev_priv, regs.pp_on, pp_on);
   1326	intel_de_write(dev_priv, regs.pp_off, pp_off);
   1327
   1328	/*
   1329	 * Compute the divisor for the pp clock, simply match the Bspec formula.
   1330	 */
   1331	if (i915_mmio_reg_valid(regs.pp_div)) {
   1332		intel_de_write(dev_priv, regs.pp_div,
   1333			       REG_FIELD_PREP(PP_REFERENCE_DIVIDER_MASK, (100 * div) / 2 - 1) | REG_FIELD_PREP(PANEL_POWER_CYCLE_DELAY_MASK, DIV_ROUND_UP(seq->t11_t12, 1000)));
   1334	} else {
   1335		u32 pp_ctl;
   1336
   1337		pp_ctl = intel_de_read(dev_priv, regs.pp_ctrl);
   1338		pp_ctl &= ~BXT_POWER_CYCLE_DELAY_MASK;
   1339		pp_ctl |= REG_FIELD_PREP(BXT_POWER_CYCLE_DELAY_MASK, DIV_ROUND_UP(seq->t11_t12, 1000));
   1340		intel_de_write(dev_priv, regs.pp_ctrl, pp_ctl);
   1341	}
   1342
   1343	drm_dbg_kms(&dev_priv->drm,
   1344		    "panel power sequencer register settings: PP_ON %#x, PP_OFF %#x, PP_DIV %#x\n",
   1345		    intel_de_read(dev_priv, regs.pp_on),
   1346		    intel_de_read(dev_priv, regs.pp_off),
   1347		    i915_mmio_reg_valid(regs.pp_div) ?
   1348		    intel_de_read(dev_priv, regs.pp_div) :
   1349		    (intel_de_read(dev_priv, regs.pp_ctrl) & BXT_POWER_CYCLE_DELAY_MASK));
   1350}
   1351
   1352void intel_pps_encoder_reset(struct intel_dp *intel_dp)
   1353{
   1354	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
   1355	intel_wakeref_t wakeref;
   1356
   1357	if (!intel_dp_is_edp(intel_dp))
   1358		return;
   1359
   1360	with_intel_pps_lock(intel_dp, wakeref) {
   1361		/*
   1362		 * Reinit the power sequencer also on the resume path, in case
   1363		 * BIOS did something nasty with it.
   1364		 */
   1365		if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915))
   1366			vlv_initial_power_sequencer_setup(intel_dp);
   1367
   1368		pps_init_delays(intel_dp);
   1369		pps_init_registers(intel_dp, false);
   1370
   1371		intel_pps_vdd_sanitize(intel_dp);
   1372	}
   1373}
   1374
   1375void intel_pps_init(struct intel_dp *intel_dp)
   1376{
   1377	INIT_DELAYED_WORK(&intel_dp->pps.panel_vdd_work, edp_panel_vdd_work);
   1378
   1379	pps_init_timestamps(intel_dp);
   1380
   1381	intel_pps_encoder_reset(intel_dp);
   1382}
   1383
   1384void intel_pps_unlock_regs_wa(struct drm_i915_private *dev_priv)
   1385{
   1386	int pps_num;
   1387	int pps_idx;
   1388
   1389	if (!HAS_DISPLAY(dev_priv) || HAS_DDI(dev_priv))
   1390		return;
   1391	/*
   1392	 * This w/a is needed at least on CPT/PPT, but to be sure apply it
   1393	 * everywhere where registers can be write protected.
   1394	 */
   1395	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
   1396		pps_num = 2;
   1397	else
   1398		pps_num = 1;
   1399
   1400	for (pps_idx = 0; pps_idx < pps_num; pps_idx++) {
   1401		u32 val = intel_de_read(dev_priv, PP_CONTROL(pps_idx));
   1402
   1403		val = (val & ~PANEL_UNLOCK_MASK) | PANEL_UNLOCK_REGS;
   1404		intel_de_write(dev_priv, PP_CONTROL(pps_idx), val);
   1405	}
   1406}
   1407
   1408void intel_pps_setup(struct drm_i915_private *i915)
   1409{
   1410	if (HAS_PCH_SPLIT(i915) || IS_GEMINILAKE(i915) || IS_BROXTON(i915))
   1411		i915->pps_mmio_base = PCH_PPS_BASE;
   1412	else if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915))
   1413		i915->pps_mmio_base = VLV_PPS_BASE;
   1414	else
   1415		i915->pps_mmio_base = PPS_BASE;
   1416}
   1417
   1418void assert_pps_unlocked(struct drm_i915_private *dev_priv, enum pipe pipe)
   1419{
   1420	i915_reg_t pp_reg;
   1421	u32 val;
   1422	enum pipe panel_pipe = INVALID_PIPE;
   1423	bool locked = true;
   1424
   1425	if (drm_WARN_ON(&dev_priv->drm, HAS_DDI(dev_priv)))
   1426		return;
   1427
   1428	if (HAS_PCH_SPLIT(dev_priv)) {
   1429		u32 port_sel;
   1430
   1431		pp_reg = PP_CONTROL(0);
   1432		port_sel = intel_de_read(dev_priv, PP_ON_DELAYS(0)) & PANEL_PORT_SELECT_MASK;
   1433
   1434		switch (port_sel) {
   1435		case PANEL_PORT_SELECT_LVDS:
   1436			intel_lvds_port_enabled(dev_priv, PCH_LVDS, &panel_pipe);
   1437			break;
   1438		case PANEL_PORT_SELECT_DPA:
   1439			g4x_dp_port_enabled(dev_priv, DP_A, PORT_A, &panel_pipe);
   1440			break;
   1441		case PANEL_PORT_SELECT_DPC:
   1442			g4x_dp_port_enabled(dev_priv, PCH_DP_C, PORT_C, &panel_pipe);
   1443			break;
   1444		case PANEL_PORT_SELECT_DPD:
   1445			g4x_dp_port_enabled(dev_priv, PCH_DP_D, PORT_D, &panel_pipe);
   1446			break;
   1447		default:
   1448			MISSING_CASE(port_sel);
   1449			break;
   1450		}
   1451	} else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
   1452		/* presumably write lock depends on pipe, not port select */
   1453		pp_reg = PP_CONTROL(pipe);
   1454		panel_pipe = pipe;
   1455	} else {
   1456		u32 port_sel;
   1457
   1458		pp_reg = PP_CONTROL(0);
   1459		port_sel = intel_de_read(dev_priv, PP_ON_DELAYS(0)) & PANEL_PORT_SELECT_MASK;
   1460
   1461		drm_WARN_ON(&dev_priv->drm,
   1462			    port_sel != PANEL_PORT_SELECT_LVDS);
   1463		intel_lvds_port_enabled(dev_priv, LVDS, &panel_pipe);
   1464	}
   1465
   1466	val = intel_de_read(dev_priv, pp_reg);
   1467	if (!(val & PANEL_POWER_ON) ||
   1468	    ((val & PANEL_UNLOCK_MASK) == PANEL_UNLOCK_REGS))
   1469		locked = false;
   1470
   1471	I915_STATE_WARN(panel_pipe == pipe && locked,
   1472			"panel assertion failure, pipe %c regs locked\n",
   1473			pipe_name(pipe));
   1474}