1. 22 12月, 2015 2 次提交
  2. 02 12月, 2015 2 次提交
  3. 13 10月, 2015 1 次提交
  4. 09 10月, 2015 1 次提交
  5. 06 10月, 2015 2 次提交
    • S
      drm/i915: Add hot_plug hook for hdmi encoder · 0b5e88dc
      Sonika Jindal 提交于
      This patch adds a separate probe function for HDMI
      EDID read over DDC channel. This function has been
      registered as a .hot_plug handler for HDMI encoder.
      
      The current implementation of hdmi_detect()
      function re-sets the cached HDMI edid (in connector->detect_edid) in
      every detect call.This function gets called many times, sometimes
      directly from userspace probes, forcing drivers to read EDID every
      detect function call.This causes several problems like:
      
      1. Race conditions in multiple hot_plug / unplug cases, between
         interrupts bottom halves and userspace detections.
      2. Many Un-necessary EDID reads for single hotplug/unplug
      3. HDMI complaince failures which expects only one EDID read per hotplug
      
      This function will be serving the purpose of really reading the EDID
      by really probing the DDC channel, and updating the cached EDID.
      
      The plan is to:
      1. i915 IRQ handler bottom half function already calls
         intel_encoder->hotplug() function. Adding This probe function which
         will read the EDID only in case of a hotplug / unplug.
      2. During init_connector this probe will be called to read the edid
      3. Reuse the cached EDID in hdmi_detect() function.
      
      The "< gen7" check is there because this was tested only for >=gen7
      platforms. For older platforms the hotplug/reading edid path remains same.
      
      v2: Calling set_edid instead of hdmi_probe during init.
      Also, for platforms having DDI, intel_encoder for DP and HDMI is same
      (taken from intel_dig_port), so for DP also, hot_plug function gets called
      which is not intended here. So, check for HDMI in intel_hdmi_probe
      Rely on HPD for updating edid only for platforms gen > 8 and also for VLV.
      
      v3: Dropping the gen < 8 || !VLV  check. Now all platforms should rely on
      hotplug or init for updating the edid.(Daniel)
      Also, calling hdmi_probe in init instead of set_edid
      
      v4: Renaming intel_hdmi_probe to intel_hdmi_hot_plug.
      Also calling this hotplug handler from intel_hpd_init to take care of init
      resume scenarios.
      
      v5: Moved the call to encoder hotplug during init to separate patch(Daniel)
      Signed-off-by: NShashank Sharma <shashank.sharma@intel.com>
      Signed-off-by: NSonika Jindal <sonika.jindal@intel.com>
      [danvet: Mark intel_hdmi_hot_plug as static.]
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      0b5e88dc
    • V
      drm/i915: Don't bypass LRC on CHV · 9571b190
      Ville Syrjälä 提交于
      The docs are unclear as usual, so it's not clear whether LRC should be
      bypassed, performed normally or GRC code should be used as the LRC code.
      Some old docs stated that LRC bypass ought to be used, more recent ones
      no longer say that. Some docs indicated that we could use GRC as the LRC
      code on CHV, but the BIOS doesn't do that, so let's not do it either.
      
      Besides to enable LRC bypass properly, I believe we should set the bit
      already before deasserting cmnreset.
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: Deepak S<deepak.s@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      9571b190
  6. 30 9月, 2015 4 次提交
  7. 23 9月, 2015 1 次提交
    • S
      drm/i915: Check live status before reading edid · 237ed86c
      Sonika Jindal 提交于
      The Bspec is very clear that Live status must be checked about before
      trying to read EDID over DDC channel. This patch makes sure that HDMI
      EDID is read only when live status is up.
      
      The live status doesn't seem to perform very consistent across various
      platforms when tested with different monitors. The reason behind that is
      some monitors are late to provide right voltage to set live_status up.
      So, after getting the interrupt, for a small duration, live status reg
      fluctuates, and then settles down showing the correct staus.
      
      This is explained here in, in a rough way:
      HPD line  ________________
      			 |\ T1 = Monitor Hotplug causing IRQ
      			 | \______________________________________
      			 | |
                               | |
      			 | |   T2 = Live status is stable
      			 | |  _____________________________________
      			 | | /|
      Live status _____________|_|/ |
      			 | |  |
      			 | |  |
      			 | |  |
      			T0 T1  T2
      
      (Between T1 and T2 Live status fluctuates or can be even low, depending on
       the monitor)
      
      After several experiments, we have concluded that a max delay
      of 30ms is enough to allow the live status to settle down with
      most of the monitors. This total delay of 30ms has been split into
      a resolution of 3 retries of 10ms each, for the better cases.
      
      This delay is kept at 30ms, keeping in consideration that, HDCP compliance
      expect the HPD handler to respond a plug out in 100ms, by disabling port.
      
      v2: Adding checks for VLV/CHV as well. Reusing old ibx and g4x functions
      to check digital port status. Adding a separate function to get bxt live
      status (Daniel)
      v3: Using intel_encoder->hpd_pin to check the live status (Siva)
      Moving the live status read to intel_hdmi_probe and passing parameter
      to read/not to read the edid. (me)
      v4:
      * Added live status check for all platforms using
      intel_digital_port_connected.
      * Rebased on top of Jani's DP cleanup series
      * Some monitors take time in setting the live status. So retry for few
      times if this is a connect HPD
      v5: Removed extra "drm/i915" from commit message. Adding Shashank's sob
          which was missed.
      v6: Drop the (!detect_edid && !live_status check) check because for DDI
      ports which are enumerated as hdmi as well as DP, we don't have a
      mechanism to differentiate between DP and hdmi inside the encoder's
      hot_plug. This leads to call to the hdmi's hot_plug hook for DP as well
      as hdmi which leads to issues during unplug because of the above check.
      v7: Make intel_digital_port_connected global in this patch, some
      reformatting of while loop, adding a print when live status is not
      up. (Rodrigo)
      v8: Rebase it on nightly which involved skipping the hot_plug hook for now
      and letting the live_status check happen in detect until the hpd handling
      part is finalized (Daniel)
      Signed-off-by: NShashank Sharma <shashank.sharma@intel.com>
      Signed-off-by: NSonika Jindal <sonika.jindal@intel.com>
      Reviewed-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      237ed86c
  8. 10 9月, 2015 1 次提交
  9. 01 9月, 2015 1 次提交
    • V
      drm/i915: Clean up CHV lane soft reset programming · a8f327fb
      Ville Syrjälä 提交于
      Currently we release the lane soft reset before lane stagger settings
      have been programmed. I believe that means we don't actually do lane
      staggering. So move the soft reset deassert to happen after lane
      staggering has been programmed.
      
      The one confusing thing in this is that when we remove the power down
      override from the lanes, they power up with defaul register values,
      which do not have the soft reset overrides enabled. And according to
      some docs by default the data lane resets are tied to cmnreset. So that
      would mean that lanes would come out of reset without staggering as
      soon as the power down overrides are removed. But since we can't access
      either the lane stagger register nor the soft reset override registers
      until the lanes are powered on, we can't really do anything about it.
      So let's just set the soft reset overrides as soon as the lane is
      powered on and hope for the best.
      
      v2: Fix typos in commit message (Daniel)
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NDeepak S <deepak.s@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      a8f327fb
  10. 31 8月, 2015 1 次提交
  11. 26 8月, 2015 4 次提交
    • V
      drm/i915: Trick CL2 into life on CHV when using pipe B with port B · b0b33846
      Ville Syrjälä 提交于
      Normmally the common lane in a PHY channel gets powered up when some
      of the data lanes get powered up. But when we're driving port B with
      pipe B we don't want to enabled any of the data lanes, and just want
      the DPLL in the common lane to be active.
      
      To make that happens we have to temporarily enable some data lanes
      after which we can access the DPLL registers in the common lane. Once
      the pipe is up and running we can drop the power override on the data
      lanes allowing them to shut down. From this point forward the common
      lane will in fact stay powered on until the data lanes in the other
      channel get powered down.
      
      Ville's extended explanation from the review thread:
      
      On Wed, Aug 19, 2015 at 07:47:41AM +0530, Deepak wrote:
      > One Q, why only for port B? Port C is also in same common lane right?
      
      Port B is in the first PHY channel which also houses CL1. CL1 always
      powers up whenever any lanes in either PHY channel are powered up.
      CL2 only powers up if lanes in the second channel (ie. the one with
      port C) powers up.
      
      So in this scenario (pipe B->port B) we want the DPLL from CL2, but
      ideally we only want to power up the lanes for port B. Powering up
      port B lanes will only power up CL1, but as we need CL2 instead we
      need to, temporarily, power up some lanes in port C as well.
      
      Crossing the streams the other way (pipe A->port C) is not a problem
      since CL1 powers up whenever anything else powers up. So powering up
      some port C lanes is enough on its own to make the CL1 DPLL
      operational, even though CL1 and the lanes live in separate channels.
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NDeepak S <deepak.s@linux.intel.com>
      [danvet: Amend commit message with extended explanation.]
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      b0b33846
    • V
      drm/i915: Implement PHY lane power gating for CHV · e0fce78f
      Ville Syrjälä 提交于
      Powergate the PHY lanes when they're not needed. For HDMI all four lanes
      are needed always, but for DP we can enable only the needed lanes. To
      power down the unused lanes we use some power down override bits in the
      DISPLAY_PHY_CONTROL register. Without the overrides it appears that the
      hardware always powers on all the lanes. When the port is disabled the
      power down override is not needed and the lanes will shut off on their
      own. That also means the override is critical to actually be able to
      access the DPIO registers before the port is actually enabled.
      
      Additionally the common lanes will power down when not needed. CL1
      remains on as long as anything else is on, CL2 will shut down when
      all the lanes in the same channel will shut down. There is one exception
      for CL2 that will be dealt in a separate patch for clarity.
      
      With potentially some lanes powered down, the DP code now has to check
      the number of active lanes before accessing PCS/TX registers. All
      registers in powered down blocks will reads as 0xffffffff, and soe we
      would drown in warnings from vlv_dpio_read() if we allowed the code
      to access all those registers.
      
      Another important detail in the DP code is the "TX latency optimal"
      setting. Normally the second TX lane acts as some kind of reset master,
      with the other lanes as slaves. But when only a single lane is enabled,
      that single lane obviously has to be the master.
      
      A bit of extra care is needed to reconstruct the initial state of the
      DISPLAY_PHY_CONTROL register since it can't be read safely. So instead
      read the actual lane status from the DPLL/PHY_STATUS registers and
      use that to determine which lanes ought to be powergated initially.
      
      We also need to switch the PHY power modes to "deep PSR" to avoid
      a hard system hang when powering down the single channel PHY.
      
      Also sprinkle a few debug prints around so that we can monitor the
      DISPLAY_PHY_STATUS changes without having to read it and risk
      corrupting it.
      
      v2: Add locking to chv_powergate_phy_lanes()
      v3: Actually enable dynamic powerdown in the PHY and deal with the
          fallout
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NDeepak S <deepak.s@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      e0fce78f
    • V
      drm/i915: Add encoder->post_pll_disable() hooks and move CHV clock buffer disables there · d6db995f
      Ville Syrjälä 提交于
      Move the CHV clock buffer disable from chv_disable_pll() to the new
      encoder .post_pll_disable() hook. This is more symmetric since the
      clock buffer enable happens from the .pre_pll_enable() hook.
      
      We'll have more use for the new hook soon.
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NDeepak S <deepak.s@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      d6db995f
    • V
      drm/i915: Always program unique transition scale for CHV · 67fa24b4
      Ville Syrjälä 提交于
      The docs give you the impression that the unique transition scale
      value shouldn't matter when unique transition scale is enabled. But
      as Imre found on BXT (and I verfied also on BSW) the value does
      matter. So from now on just program the same value 0x9a always.
      
      Cc: Imre Deak <imre.deak@intel.com>
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NDeepak S <deepak.s@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      67fa24b4
  12. 15 8月, 2015 2 次提交
  13. 14 8月, 2015 1 次提交
  14. 13 7月, 2015 1 次提交
  15. 06 7月, 2015 3 次提交
  16. 15 6月, 2015 8 次提交
  17. 28 5月, 2015 2 次提交
  18. 22 5月, 2015 3 次提交