1. 16 4月, 2013 12 次提交
  2. 12 4月, 2013 6 次提交
  3. 11 4月, 2013 5 次提交
    • T
      drm/omap: add statics to a few structs · 6717cd29
      Tomi Valkeinen 提交于
      Some static structs are not marked as static. Add it.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      6717cd29
    • A
      drm/omap: Fix and improve crtc and overlay manager correlation · 0d8f371f
      Archit Taneja 提交于
      The omapdrm driver currently takes a config/module arg to figure out the number
      of crtcs it needs to create. We could create as many crtcs as there are overlay
      managers in the DSS hardware, but we don't do that because each crtc eats up
      one DSS overlay, and that reduces the number of planes we can attach to a single
      crtc.
      
      Since the number of crtcs may be lesser than the number of hardware overlay
      managers, we need to figure out which overlay managers to use for our crtcs. The
      current approach is to use pipe2chan(), which returns a higher numbered manager
      for the crtc.
      
      The problem with this approach is that it assumes that the overlay managers we
      choose will connect to the encoders the platform's panels are going to use,
      this isn't true, an overlay manager connects only to a few outputs/encoders, and
      choosing any overlay manager for our crtc might lead to a situation where the
      encoder cannot connect to any of the crtcs we have chosen. For example, an
      omap5-panda board has just one hdmi output. If num_crtc is set to 1, with the
      current approach, pipe2chan will pick up the LCD2 overlay manager, which cannot
      connect to the hdmi encoder at all. The only manager that could have connected
      to hdmi was the TV overlay manager.
      
      Therefore, there is a need to choose our overlay managers keeping in mind the
      panels we have on that platform. The new approach iterates through all the
      available panels, creates encoders and connectors for them, and then tries to
      get a suitable overlay manager to create a crtc which can connect to the
      encoders.
      
      We use the dispc_channel field in omap_dss_output to retrieve the desired
      overlay manager's channel number, we then check whether the manager had already
      been assigned to a crtc or not. If it was already assigned to a crtc, we assume
      that out of all the encoders which intend use this crtc, only one will run at a
      time. If the overlay manager wan't assigned to a crtc till then, we create a
      new crtc and link it with the overlay manager.
      
      This approach just looks for the best dispc_channel for each encoder. On DSS HW,
      some encoders can connect to multiple overlay managers. Since we don't try
      looking for alternate overlay managers, there is a greater possibility that 2
      or more encoders end up asking for the same crtc, causing only one encoder to
      run at a time.
      
      Also, this approach isn't the most optimal one, it can do either good or bad
      depending on the sequence in which the panels/outputs are parsed. The optimal
      way would be some sort of back tracking approach, where we improve the set of
      managers we use as we iterate through the list of panels/encoders. That's
      something left for later.
      Signed-off-by: NArchit Taneja <archit@ti.com>
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      0d8f371f
    • A
      drm/omap: Take a fb reference in omap_plane_update() · b03e14fd
      Archit Taneja 提交于
      When userspace calls SET_PLANE ioctl, drm core takes a reference of the fb and
      passes control to the update_plane op defined by the drm driver.
      
      In omapdrm, we have a worker thread which queues framebuffers objects received
      from update_plane and displays them at the appropriate time.
      
      It is possible that the framebuffer is destoryed by userspace between the time
      of calling the ioctl and apply-worker being scheduled. If this happens, the
      apply-worker holds a pointer to a framebuffer which is already destroyed.
      
      Take an extra refernece/unreference of the fb in omap_plane_update() to prevent
      this from happening. A reference is taken of the fb passed to update_plane(),
      the previous framebuffer (held by plane->fb) is unreferenced. This will prevent
      drm from destroying the framebuffer till the time it's unreferenced by the
      apply-worker.
      
      This is in addition to the exisitng reference/unreference in update_pin(),
      which is taken for the scanout of the plane's current framebuffer, and an
      unreference the previous framebuffer.
      Signed-off-by: NArchit Taneja <archit@ti.com>
      Reviewed-by: NRob Clark <robdclark@gmail.com>
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      b03e14fd
    • A
      drm/omap: Make fixed resolution panels work · bddabbe1
      Archit Taneja 提交于
      The omapdrm driver requires omapdss panel drivers to expose ops like detect,
      set_timings and check_timings. These can be NULL for fixed panel DPI, DBI, DSI
      and SDI drivers. At some places, there are no checks to see if the panel driver
      has these ops or not, and that leads to a crash.
      
      The following things are done to make fixed panels work:
      
      - The omap_connector's detect function is modified such that it considers panel
        types which are generally fixed panels as always connected(provided the panel
        driver doesn't have a detect op). Hence, the connector corresponding to these
        panels is always in a 'connected' state.
      
      - If a panel driver doesn't have a check_timings op, assume that it supports the
        mode passed to omap_connector_mode_valid(the 'mode_valid' drm helper function)
      
      - The function omap_encoder_update shouldn't really do anything for fixed
        resolution panels, make sure that it calls set_timings only if the panel
        driver has one.
      Signed-off-by: NArchit Taneja <archit@ti.com>
      Reviewed-by: NRob Clark <robdclark@gmail.com>
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      bddabbe1
    • A
      drm/omap: fix modeset_init if a panel doesn't satisfy omapdrm requirements · 581382e3
      Archit Taneja 提交于
      modeset_init iterates through all the registered omapdss devices and has some
      initial checks to see if the panel has a driver and the required driver ops for
      it to be usable by omapdrm.
      
      The function bails out from modeset_init if a panel doesn't meet the
      requirements, and stops the registration of the future panels and encoders which
      come after it, that isn't the correct thing to do, we should go through the rest
      of the panels. Replace the 'return's with 'continue's.
      Signed-off-by: NArchit Taneja <archit@ti.com>
      Reviewed-by: NRob Clark <robdclark@gmail.com>
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      581382e3
  4. 06 4月, 2013 7 次提交
  5. 03 4月, 2013 10 次提交
    • D
      drm/i915: create pipe_config->dpll for clock state · f47709a9
      Daniel Vetter 提交于
      Clock computations and handling are highly encoder specific, both in
      the optimal clock selection and also in which clocks to use and when
      sharing of clocks is possible.
      
      So the best place to do this is somewhere in the encoders, with a
      generic fallback for those encoders without special needs. To facility
      this, add a pipe_config->clocks_set boolean.
      
      This patch here is only prep work, it simply sets the computed clock
      values in pipe_config->dpll, and uses that data in the hw clock
      setting functions.
      
      Haswell code isn't touched, simply because Haswell clocks work much
      different and need their own infrastructure (with probably a
      Haswell-specific config->ddi_clock substruct).
      Reviewed-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      f47709a9
    • D
      drm/i915: hw readout support for ->has_pch_encoders · 88adfff1
      Daniel Vetter 提交于
      Now we can ditch the checks in the Haswell disable code.
      
      v2: add support for Haswell
      Reviewed-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      88adfff1
    • D
      drm/i915: add hw state readout/checking for pipe_config · 0e8ffe1b
      Daniel Vetter 提交于
      We need to be able to read out the hw state code for a bunch
      of reasons:
      - Correctly disabling boot-up/resume state.
      - Pure paranoia.
      
      Since not all of the pipe configuration is e.g. relevant for
      fastboot (or at least we can allow some wiggle room in some
      parameters, like the clocks), we need to add a strict_checking
      parameter to intel_pipe_config_compare for fastboot.
      
      For now intel_pipe_config_compare should be fully paranoid and
      check everything that the hw state readout code supports. Which
      for this infrastructure code is nothing.
      
      I've gone a bit overboard with adding 3 get_pipe_config functions:
      The ilk version will differ with the next patch, so it's not too
      onerous.
      
      v2: Don't check the hw config if the pipe is off, since an enabled,
      but dpms off crtc will obviously have tons of difference with the hw
      state.
      Reviewed-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      0e8ffe1b
    • D
      drm/i915: rip out superflous is_dp&is_cpu_edp tracking · 8b47047b
      Daniel Vetter 提交于
      The only exception left is is_cpu_edp in the haswell modeset code.
      We need that to assign the cpu transcoder, but we might want to
      move that eventually into the encoder, too.
      
      \o/-by: Jesse Barnes <jbarnes@virtuousgeek.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      8b47047b
    • D
      drm/i915: remove leaky eDP functions · 947978fa
      Daniel Vetter 提交于
      Jesse Barnes noticed in his review of my DP cleanup series that
      intel_edp_target_clock is now unused. Checking related code I've
      noticed that also intel_edp_link_config is long unused.
      
      Kill them both.
      
      Wrt leaky eDP functions used in the common crtc code, the only thing
      still left is intel_encoder_is_pch_edp. That one is just due to the
      massive confusion between eDP vs. DP and port A vs. port D. Crtc code
      should at most concern itself with the later, never with the former.
      
      But that's material for another patch series.
      
      Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
      Reviewed-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      947978fa
    • D
      drm/i915: track dp target_clock in pipe_config · df92b1e6
      Daniel Vetter 提交于
      We need it in the fdi m_n computation, which nicely kills almost
      all ugly special cases in there.
      
      It looks like we also need this to handle 12bpc hdmi correctly.
      
      Eventually it might be better to switch things around and put the
      target clock into adjusted_mode->clock and create a new pipe_config
      parameter for the port link clock.
      
      v2: Add a massive comment in the code to explain this mess.
      
      v3: s/dp_target_clock/pixel_target_clock in anticipation of the hdmi
      use-case.
      Reviewed-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      df92b1e6
    • D
      drm/i915: move dp_m_n computation to dp_encoder->compute_config · 03afc4a2
      Daniel Vetter 提交于
      We need a flag to designate dp encoders and the dp link m_n parameters
      in the pipe config for that. And now that the pipe bpp computations
      have been moved up and stored in the pipe config, too, we can do this
      without losing our sanity.
      
      v2: Rebased on top of Takashi Iwai's fix to (again) fix the target
      clock handling for eDP. Luckily the new code is sane enough and just
      does the right thing!
      
      v3: Move ->has_dp_encoder to this patch (Jesse).
      Reviewed-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      03afc4a2
    • D
      drm/i915: clear up the fdi/dp set_m_n confusion · 6cf86a5e
      Daniel Vetter 提交于
      There's a rather decent confusion going on around transcoder m_n
      values. So let's clarify:
      - All dp encoders need this, either on the pch transcoder if it's a
        pch port, or on the cpu transcoder/pipe if it's a cpu port.
      - fdi links need to have the right m_n values for the fdi link set in
        the cpu transcoder.
      
      To handle the pch vs transcoder stuff a bit better, extract transcoder
      set_m_n helpers. To make them simpler, set intel_crtc->cpu_transcoder
      als in ironlake_crtc_mode_set, so that gen5+ (where the cpu m_n
      registers are all at the same offset) can use it.
      
      Haswell modeset is decently confused about dp vs. edp vs. fdi. dp vs.
      edp works exactly the same as dp (since there's no pch dp any more),
      so use that as a check. And only set up the fdi m_n values if we
      really have a pch encoder present (which means we have a VGA encoder).
      
      On ilk+ we've called ironlake_set_m_n both for cpu_edp and for pch
      encoders. Now that dp_set_m_n handles all dp links (thanks to the
      pch encoder check), we can ditch the cpu_edp stuff from the
      fdi_set_m_n function.
      
      Since the dp_m_n values are not readily available, we need to
      carefully coax the edp values out of the encoder. Hence we can't (yet)
      kill this superflous complexity.
      
      v2: Rebase on top of the ivb fdi B/C check patch - we need to properly
      clear intel_crtc->fdi_lane, otherwise those checks will misfire.
      
      v3: Rebased on top of a s/IS_HASWELL/HAS_DDI/ patch from Paulo Zanoni.
      
      v4: Drop the addition of has_dp_encoder, it's in the wrong patch (Jesse).
      Reviewed-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      6cf86a5e
    • D
      drm/i915: Fix sdvo connector get_hw_state function · bd6946e8
      Daniel Vetter 提交于
      The active output is only the currently selected one, which does not
      imply that it's actually enabled. Since we don't use the sdvo encoder
      side dpms support, we need to check whether the chip-side sdvo port is
      enabled instead.
      
      v2: Fix up Bugzilla links.
      
      v3: Simplify logic a bit (Chris).
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=60138
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=63031
      Cc: Egbert Eich <eich@pdx.freedesktop.org>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Tested-by: Egbert Eich <eich@pdx.freedesktop.org> (v2)
      Cc: stable@vger.kernel.org
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      bd6946e8
    • I
      drm: correctly restore mappings if drm_open fails · a8ec3a66
      Ilija Hadzic 提交于
      If first drm_open fails, the error-handling path will
      incorrectly restore inode's mapping to NULL. This can
      cause the crash later on. Fix by separately storing
      away mapping pointers that drm_open can touch and
      restore each from its own respective variable if the
      call fails.
      
      Fixes: https://bugzilla.novell.com/show_bug.cgi?id=807850
      (thanks to Michal Hocko for investigating investigating and
      finding the root cause of the bug)
      
      Reference:
      http://lists.freedesktop.org/archives/dri-devel/2013-March/036564.html
      
      v2: Use one variable to store file and inode mapping
          since they are the same at the function entry.
          Fix spelling mistakes in commit message.
      
      v3: Add reference to the original bug report.
      Reported-by: NMarco Munderloh <munderl@tnt.uni-hannover.de>
      Tested-by: NMarco Munderloh <munderl@tnt.uni-hannover.de>
      Signed-off-by: NIlija Hadzic <ihadzic@research.bell-labs.com>
      Cc: Michal Hocko <mhocko@suse.cz>
      Cc: stable@vger.kernel.org
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      a8ec3a66