1. 29 10月, 2017 1 次提交
  2. 28 10月, 2017 1 次提交
  3. 11 10月, 2017 1 次提交
  4. 23 8月, 2017 2 次提交
    • A
      drm/msm/mdp5: mark runtime_pm functions as __maybe_unused · d1f08d82
      Arnd Bergmann 提交于
      When CONFIG_PM is disabled, we get harmless warnings about unused
      functions:
      
      drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c:1025:12: error: 'mdp5_runtime_resume' defined but not used [-Werror=unused-function]
       static int mdp5_runtime_resume(struct device *dev)
                  ^~~~~~~~~~~~~~~~~~~
      drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c:1015:12: error: 'mdp5_runtime_suspend' defined but not used [-Werror=unused-function]
       static int mdp5_runtime_suspend(struct device *dev)
                  ^~~~~~~~~~~~~~~~~~~~
      
      This marks both functions as __maybe_unused so the compiler
      can drop them silently.
      
      Fixes: d68fe15b ("drm/msm/mdp5: Use runtime PM get/put API instead of toggling clocks")
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      d1f08d82
    • R
      drm/msm/mdp5: add tracking for clk enable-count · a7d3bb00
      Rob Clark 提交于
      Accessing registers for an unclocked block is an insta-reboot on
      snapdragon devices.  So add a bit of logic to track the enable_count so
      we can WARN_ON() unclocked register writes.  This makes it much easier
      to track down mistakes.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      a7d3bb00
  5. 02 8月, 2017 2 次提交
    • A
      drm/msm/mdp5: Use runtime PM get/put API instead of toggling clocks · d68fe15b
      Archit Taneja 提交于
      mdp5_enable/disable calls are scattered all around in the MDP5 code.
      Use the pm_runtime_get/put calls here instead, and populate the
      runtime PM suspend/resume ops to manage the clocks.
      
      About the overall design: MDP5 is a child of the top level MDSS
      device. MDSS is also the parent to DSI, HDMI and other interfaces. When
      we enable MDP5's power domain, we end up enabling MDSS's PD too. It is
      only MDSS's PD that actually controlls the GDSC HW. Therefore, calling
      runtime_get/put on the MDP5 device is like just requesting a vote to
      enable/disable the GDSC.
      
      Functionally, replacing the clock enable/disable calls with the RPM API
      can result in the power domain (GDSC) state being toggled if no other
      child isn't powered on. This can result in the register context being lost.
      We make sure (in future commits) that code paths don't end up configuring
      registers and then later lose state, resulting in a bad HW state.
      
      For now, we've replaced each mdp5_enable/disable with runtime_get/put API.
      We could optimize things later by removing runtime_get/put calls which
      don't really need to be there. This could prevent unnecessary toggling of
      the power domain and clocks.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      d68fe15b
    • A
      drm/msm/mdp5: Drop clock names with "_clk" suffix · d0538f50
      Archit Taneja 提交于
      We have upstream bindings (msm8916) that have the "_clk" suffix in the
      clock names. The downstream bindings also require it.
      
      We want to drop the "_clk" suffix and at the same time support existing
      bindings. Update the MDP5 code with the the msm_clk_get() helper to
      support both old and new clock names.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      d0538f50
  6. 16 6月, 2017 2 次提交
  7. 10 5月, 2017 3 次提交
    • D
      drm/vblank: drop the mode argument from drm_calc_vbltimestamp_from_scanoutpos · 1bf6ad62
      Daniel Vetter 提交于
      If we restrict this helper to only kms drivers (which is the case) we
      can look up the correct mode easily ourselves. But it's a bit tricky:
      
      - All legacy drivers look at crtc->hwmode. But that is updated already
        at the beginning of the modeset helper, which means when we disable
        a pipe. Hence the final timestamps might be a bit off. But since
        this is an existing bug I'm not going to change it, but just try to
        be bug-for-bug compatible with the current code. This only applies
        to radeon&amdgpu.
      
      - i915 tries to get it perfect by updating crtc->hwmode when the pipe
        is off (i.e. vblank->enabled = false).
      
      - All other atomic drivers look at crtc->state->adjusted_mode. Those
        that look at state->requested_mode simply don't adjust their mode,
        so it's the same. That has two problems: Accessing crtc->state from
        interrupt handling code is unsafe, and it's updated before we shut
        down the pipe. For nonblocking modesets it's even worse.
      
      For atomic drivers try to implement what i915 does. To do that we add
      a new hwmode field to the vblank structure, and update it from
      drm_calc_timestamping_constants(). For atomic drivers that's called
      from the right spot by the helper library already, so all fine. But
      for safety let's enforce that.
      
      For legacy driver this function is only called at the end (oh the
      fun), which is broken, so again let's not bother and just stay
      bug-for-bug compatible.
      
      The  benefit is that we can use drm_calc_vbltimestamp_from_scanoutpos
      directly to implement ->get_vblank_timestamp in every driver, deleting
      a lot of code.
      
      v2: Completely new approach, trying to mimick the i915 solution.
      
      v3: Fixup kerneldoc.
      
      v4: Drop the WARN_ON to check that the vblank is off, atomic helpers
      currently unconditionally call this. Recomputing the same stuff should
      be harmless.
      
      v5: Fix typos and move misplaced hunks to the right patches (Neil).
      
      v6: Undo hunk movement (kbuild).
      
      Cc: Mario Kleiner <mario.kleiner@tuebingen.mpg.de>
      Cc: Eric Anholt <eric@anholt.net>
      Cc: Rob Clark <robdclark@gmail.com>
      Cc: linux-arm-msm@vger.kernel.org
      Cc: freedreno@lists.freedesktop.org
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: Christian König <christian.koenig@amd.com>
      Cc: Ben Skeggs <bskeggs@redhat.com>
      Reviewed-by: NNeil Armstrong <narmstrong@baylibre.com>
      Acked-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170509140329.24114-4-daniel.vetter@ffwll.ch
      1bf6ad62
    • D
      drm/vblank: Switch to bool in_vblank_irq in get_vblank_timestamp · 3fcdcb27
      Daniel Vetter 提交于
      It's overkill to have a flag parameter which is essentially used just
      as a boolean. This takes care of core + adjusting drivers.
      
      Adjusting the scanout position callback is a bit harder, since radeon
      also supplies it's own driver-private flags in there.
      
      v2: Fixup misplaced hunks (Neil).
      
      v3: kbuild says v1 was better ...
      
      Cc: Mario Kleiner <mario.kleiner@tuebingen.mpg.de>
      Cc: Eric Anholt <eric@anholt.net>
      Cc: Rob Clark <robdclark@gmail.com>
      Cc: linux-arm-msm@vger.kernel.org
      Cc: freedreno@lists.freedesktop.org
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: Christian König <christian.koenig@amd.com>
      Cc: Ben Skeggs <bskeggs@redhat.com>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NNeil Armstrong <narmstrong@baylibre.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170509140329.24114-2-daniel.vetter@ffwll.ch
      3fcdcb27
    • D
      drm/vblank: Switch drm_driver->get_vblank_timestamp to return a bool · d673c02c
      Daniel Vetter 提交于
      There's really no reason for anything more:
      - Calling this while the crtc vblank stuff isn't set up is a driver
        bug. Those places alrready DRM_ERROR.
      - Calling this when the crtc is off is either a driver bug (calling
        drm_crtc_handle_vblank at the wrong time) or a core bug (for
        anything else). Again, we DRM_ERROR.
      - EINVAL is checked at higher levels already, and if we'd use struct
        drm_crtc * instead of (dev, pipe) it would be real obvious that
        those are again core bugs.
      
      The only valid failure mode is crap hardware that couldn't sample a
      useful timestamp, to ask the core to just grab a not-so-accurate
      timestamp. Bool is perfectly fine for that.
      
      v2: Also fix up the one caller, I lost that in the shuffling (Jani).
      
      v3: Fixup commit message (Neil).
      
      Cc: Jani Nikula <jani.nikula@linux.intel.com>
      Cc: Mario Kleiner <mario.kleiner@tuebingen.mpg.de>
      Cc: Eric Anholt <eric@anholt.net>
      Cc: Rob Clark <robdclark@gmail.com>
      Cc: linux-arm-msm@vger.kernel.org
      Cc: freedreno@lists.freedesktop.org
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: Christian König <christian.koenig@amd.com>
      Cc: Ben Skeggs <bskeggs@redhat.com>
      Reviewed-by: NNeil Armstrong <narmstrong@baylibre.com>
      Acked-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170509140329.24114-1-daniel.vetter@ffwll.ch
      d673c02c
  8. 08 4月, 2017 6 次提交
    • J
      drm/msm: Reference count address spaces · ee546cd3
      Jordan Crouse 提交于
      There are reasons for a memory object to outlive the file descriptor
      that created it and so the address space that a buffer object is
      attached to must also outlive the file descriptor. Reference count
      the address space so that it can remain viable until all the objects
      have released their addresses.
      Signed-off-by: NJordan Crouse <jcrouse@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      ee546cd3
    • A
      drm/msm/mdp5: Start using parameters from CRTC state · 0ddc3a63
      Archit Taneja 提交于
      In the last few commits, we've been adding params to mdp5_crtc_state, and
      assigning them in the atomic_check() funcs. Now it's time to actually
      start using them.
      
      Remove the duplicated params from the mdp5_crtc struct, and start using
      them in the mdp5_crtc code. The majority of the references to these params
      is in code that executes after the atomic swap has occurred, so it's okay
      to use crtc->state in them. There are a couple of legacy LM cursor ops that
      may not use the updated state, but (I think) it's okay to live with that.
      
      Now that we dynamically allocate a mixer to the CRTC, we can also remove
      the static assignment to it in mdp5_crtc_init, and also drop the code that
      skipped init-ing WB bound mixers (those will now be rejected by
      mdp5_mixer_assign()).
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      0ddc3a63
    • A
      drm/msm/mdp5: Prepare for dynamic assignment of mixers · 894558ec
      Archit Taneja 提交于
      Add the stuff needed to allow dynamically assigning a mixer to a CRTC.
      
      Since mixers are a resource that can be shared across multiple CRTCs, we
      need to maintain a 'hwmixer_to_crtc' map in the global atomic state,
      acquire the mdp5_kms.state_lock modeset lock and so on.
      
      The mixer is assigned in the CRTC's atomic_check() func, a failure will
      result in the new state being cleanly rolled back.
      
      The mixer assignment itself is straightforward, and almost identical to
      what we do for hwpipes. We don't need to grab the old hwmixer_to_crtc
      state like we do in hwpipes since we don't need to compare anything
      with the old state at the moment.
      
      The only LM capability we care about at the moment is whether the mixer
      instance can be used to display stuff (i.e, connect to an INTF
      downstream).
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      894558ec
    • A
      drm/msm/mdp5: Clean up interface assignment · 36d1364a
      Archit Taneja 提交于
      mdp5_interface struct contains data corresponding to a INTF
      instance in MDP5 hardware. This sturct is memcpy'd to the
      mdp5_encoder struct, and then later to the mdp5_ctl struct.
      
      Instead of copying around interface data, create mdp5_interface
      instances in mdp5_init, like how it's done currently done for
      pipes and layer mixers. Pass around the interface pointers to
      mdp5_encoder and mdp5_ctl. This simplifies the code, and allows
      us to decouple encoders from INTFs in the future if needed.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      36d1364a
    • A
      drm/msm/mdp5: Start using mdp5_hw_mixer · adfc0e63
      Archit Taneja 提交于
      Use the mdp5_hw_mixer struct in the mdp5_crtc and mdp5_ctl instead of
      using the LM index.
      
      Like before, the Layer Mixers are assigned statically to the CRTCs.
      The hwmixer(s) will later be dynamically assigned to CRTCs.
      
      For now, ignore the hwmixers that can only do WB.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      adfc0e63
    • A
      drm/msm/mdp5: Add structs for hw Layer Mixers · 6803c606
      Archit Taneja 提交于
      Create a struct to represent MDP5 Layer Mixer instances. This will
      eventually allow us to detach CRTCs from the Layer Mixers, and
      generally clean things up a bit.
      
      This is very similar to how hwpipes were previously abstracted away
      from drm planes.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      6803c606
  9. 01 3月, 2017 1 次提交
  10. 07 2月, 2017 7 次提交
    • A
      drm/msm/mdp5: Add cursor planes · bff8fba4
      Archit Taneja 提交于
      Register cursor drm_planes. The loop in modeset_init that inits the
      planes and crtcs has to be refactored a bit. We first iterate all the
      hwpipes to find the cursor planes. Then, we loop again to create
      crtcs.
      
      In msm_atomic_wait_for_commit_done, remove the check which bypasses
      waiting for vsyncs if state->legacy_cursor_updates is true.
      
      We will later create a fast path for cursor position changes in the
      cursor plane's update_plane func that doesn't go via the regular
      atomic commit path. For rest of cursor related updates, we will have
      to wait for vsyncs, so ignore the legacy_cursor_updates flag.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      bff8fba4
    • A
      drm/msm/mdp5: Misc cursor plane bits · 5798c8e0
      Archit Taneja 提交于
      These are various changes added in preparation for cursor planes:
      
      - Add a pipe_cursor block for 8x96 in mdp5_cfg.
      - Add a new pipe CAP called MDP_PIPE_CAP_CURSOR. Use this to ensure we
        assign a cursor SSPP for a drm_plane with type DRM_PLANE_TYPE_CURSOR.
      - Update mdp5_ctl_blend_mask/ext_blend_mask funcs to incorporate cursor
        SSPPs.
      - In mdp5_ctl_blend, iterate through MAX_STAGES instead of stage_cnt,
        we need to do this because we can now have empty stages in between.
      - In mdp5_crtc_atomic_check, make sure that the cursor plane has the
        highest zorder, and stage the cursor plane to the maximum stage #
        present on the HW.
      - Create drm_crtc_funcs that doesn't try to implement cursors using the
        older LM cursor HW.
      - Pass drm_plane_type in mdp5_plane_init instead of a bool telling
        whether plane is primary or not.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      5798c8e0
    • A
      drm/msm/mdp5: Create only as many CRTCs as we need · e5366ffe
      Archit Taneja 提交于
      We currently create CRTCs equaling to the # of Layer Mixer blocks we
      have on the MDP5 HW. This number is generally more than the # of encoders
      (INTFs) we have in the MDSS HW. The number of encoders connected to
      displays on the platform (as described by DT) would be even lesser.
      
      Create only N drm_crtcs, where N is the number of drm_encoders
      successfully registered. To do this, we call modeset_init_intf() before
      we init the drm_crtcs and drm_planes.
      
      Because of this change, setting encoder->possible_crtcs needs to be moved
      from construct_encoder() to a later point when we know how many CRTCs we
      have.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      e5366ffe
    • A
      drm/msm/mdp5: Create single encoder per interface (INTF) · b3a94705
      Archit Taneja 提交于
      For the DSI interfaces, the mdp5_kms core creates 2 encoders for video
      and command modes.
      
      Create only a single encoder per interface. When creating the encoder, set
      the interface type to MDP5_INTF_MODE_NONE. It's the bridge (DSI/HDMI/eDP)
      driver's responsibility to set a different interface type. It can use the
      the kms func op set_encoder_mode to change the mode of operation, which
      in turn would configure the interface type for the INTF.
      
      In mdp5_cmd_encoder.c, we remove the redundant code, and make the commmand
      mode funcs as helpers that are used in mdp5_encoder.c
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      b3a94705
    • A
      drm/msm/mdp5: Prepare for merging video and command encoders · df8a71d2
      Archit Taneja 提交于
      Rename the mdp5_encoder_* ops for active displays to
      mdp5_vid_encoder_* ops.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      df8a71d2
    • A
      drm/msm: Set encoder's mode of operation using a kms func · 9c9f6f8d
      Archit Taneja 提交于
      The mdp5 kms driver currently sets up multiple encoders per interface
      (INTF), one for each kind of mode of operation it supports.
      We create 2 drm_encoders for DSI, one for Video Mode and the other
      for Command Mode operation. The reason behind this approach could have
      been that we aren't aware of the DSI device's mode of operation when
      we create the encoders.
      
      This makes things a bit complicated, since these encoders have to
      be further attached to the same DSI bridge. The easier way out is
      to create a single encoder, and make the DSI driver set its mode
      of operation when we know what the DSI device's mode flags are.
      
      Start with providing a way to set the mdp5_intf_mode using a kms
      func that sets the encoder's mode of operation. When constructing
      a DSI encoder, we set the mode of operation to Video Mode as
      default. When the DSI device is attached to the host, we probe the
      DSI mode flags and set the corresponding mode of operation.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      9c9f6f8d
    • A
      drm/msm: Construct only one encoder for DSI · 97e00119
      Archit Taneja 提交于
      We currently create 2 encoders for DSI interfaces, one for command
      mode and other for video mode operation. This isn't needed as we
      can't really use both the encoders at the same time. It also makes
      connecting bridges harder.
      
      Switch to creating a single encoder. For now, we assume that the
      encoder is configured only in video mode. Later, the same encoder
      would be usable in both modes.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      97e00119
  11. 13 1月, 2017 1 次提交
    • R
      drm/msm/mdp5: rip out plane->pending tracking · c57a94ff
      Rob Clark 提交于
      It would race between userspace thread and commit worker.  Ie. vblank
      irq would trigger event and userspace could begin the next atomic
      update, before the commit worker had a chance to clear the pending
      flag.
      
      If we do end up needing something to prevent userspace from trying
      another pageflip before getting vblank event, it should probably be
      implemented as a pending_planes bitmask, similar to pending_crtcs.  See
      start_atomic() and end_atomic().
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      c57a94ff
  12. 28 11月, 2016 8 次提交
    • R
      drm/msm/mdp5: move LM bounds check into plane->atomic_check() · 9708ebbe
      Rob Clark 提交于
      The mode_config->max_{width,height} is for the maximum size of a fb, not
      the max scanout limits (of the layer-mixer).  It is legal, and in fact
      common, to create a larger fb, only only scan-out a smaller part of it.
      For example multi-monitor configurations for x11, or android wallpaper
      layer (which is created larger than the screen resolution for fast
      scrolling by just changing the src x/y coordinates).
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      9708ebbe
    • R
      drm/msm/mdp5: add debugfs to show smp block status · bc5289ee
      Rob Clark 提交于
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      bc5289ee
    • R
      drm/msm/mdp5: handle SMP block allocations "atomically" · 49ec5b2e
      Rob Clark 提交于
      Previously, SMP block allocation was not checked in the plane's
      atomic_check() fxn, so we could fail allocation SMP block allocation at
      atomic_update() time.  Re-work the block allocation to request blocks
      during atomic_check(), but not update the hw until committing the atomic
      update.
      
      Since SMP blocks allocated at atomic_check() time, we need to manage the
      SMP state as part of mdp5_state (global atomic state).  This actually
      ends up significantly simplifying the SMP management, as the SMP module
      does not need to manage the intermediate state between assigning new
      blocks before setting flush bits and releasing old blocks after vblank.
      (The SMP registers and SMP allocation is not double-buffered, so newly
      allocated blocks need to be updated in kms->prepare_commit() released
      blocks in kms->complete_commit().)
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      49ec5b2e
    • R
      drm/msm/mdp5: dynamically assign hw pipes to planes · 4a0f012d
      Rob Clark 提交于
      (re)assign the hw pipes to planes based on required caps, and to handle
      situations where we could not modify an in-use plane (ie. SMP block
      reallocation).
      
      This means all planes advertise the superset of formats and properties.
      Userspace must (as always) use atomic TEST_ONLY step for atomic updates,
      as not all planes may be available for use on every frame.
      
      The mapping of hwpipe to plane is stored in mdp5_state, so that state
      updates are atomically committed in the same way that plane/etc state
      updates are managed.  This is needed because the mdp5_plane_state keeps
      a pointer to the hwpipe, and we don't want global state to become out
      of sync with the plane state if an atomic update fails, we hit deadlock/
      backoff scenario, etc.  The use of state_lock keeps multiple parallel
      updates which both re-assign hwpipes properly serialized.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      4a0f012d
    • R
      drm/msm/mdp5: add skeletal mdp5_state · ac2a3fd3
      Rob Clark 提交于
      Add basic state duplication/apply mechanism.  Following commits will
      move actual global hw state into this.
      
      The state_lock allows multiple concurrent updates to proceed as long as
      they don't both try to alter global state.  The ww_mutex mechanism will
      trigger backoff in case of deadlock between multiple threads trying to
      update state.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      Reviewed-by: NArchit Taneja <architt@codeaurora.org>
      ac2a3fd3
    • R
      drm/msm/mdp5: introduce mdp5_hw_pipe · c056b55d
      Rob Clark 提交于
      Split out the hardware pipe specifics from mdp5_plane.  To start, the hw
      pipes are statically assigned to planes, but next step is to assign the
      hw pipes during plane->atomic_check() based on requested caps (scaling,
      YUV, etc).  And then hw pipe re-assignment if required if required SMP
      blocks changes.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      Reviewed-by: NArchit Taneja <architt@codeaurora.org>
      c056b55d
    • R
      drm/msm/mdp5: small rename · d3937111
      Rob Clark 提交于
      These are really plane-id's, not crtc-id's.  Only connection to CRTCs is
      that they are used as primary-planes.
      
      Current name is just legacy from when we only supported RGB/primary
      planes.  Lets pick a better name now.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      d3937111
    • R
      drm/msm: support multiple address spaces · 667ce33e
      Rob Clark 提交于
      We can have various combinations of 64b and 32b address space, ie. 64b
      CPU but 32b display and gpu, or 64b CPU and GPU but 32b display.  So
      best to decouple the device iova's from mmap offset.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      667ce33e
  13. 16 7月, 2016 5 次提交
    • A
      drm/msm/mdp5: Update compatible strings for MDSS/MDP5 · 96a611b5
      Archit Taneja 提交于
      Introduce new compatible strings for the top level MDSS wrapper device,
      and the MDP5 device.
      
      Previously, the "qcom,mdp5" and "qcom,mdss_mdp" compatible strings
      were used to match the top level platform_device (which was also tied
      to the top level drm_device struct). Now, these strings are used
      to match the MDP5 platform device.
      
      Use "qcom,mdss" as the compatible string for top level MDSS device.
      This is now used to match the top level platform_device (which is
      tied to the drm_device struct).
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      96a611b5
    • A
      drm/msm/mdp5: Add missing mdp5_enable/disable calls · 7c8f0235
      Archit Taneja 提交于
      Since runtime PM isn't implemented yet, we need to call
      mdp5_enable/disable in a few more places. These would later be
      replaced by runtime PM get/put calls.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      7c8f0235
    • A
      drm/msm: Call pm_runtime_enable/disable for newly created devices · cd792726
      Archit Taneja 提交于
      With the new device hierarchy for MDP5, we need to enable runtime PM
      for both the toplevel MDSS device and the MDP5 device itself. Enable
      runtime PM for the new devices.
      
      Since MDP4 and MDP5 now have different places where runtime PM is
      enabled, remove the previous pm_runtime_enable/disable calls, and
      squash them in the respective kms drivers.
      
      The new device hierarchy (as expressed in the DT bindings) has the GDSC
      tied only to the MDSS wrapper device. This GDSC needs to be enabled for
      accessing any register in the MDSS sub-blocks. Once every driver is
      runtime adapted, the GDSC will be enabled when any sub-block device
      calls runtime_get because of the parent-child relationship with MDSS.
      
      Until then, we call pm_runtime_get_sync() once for the MDSS device to
      ensure the GDSC is never disabled. This will be removed once all the
      drivers are runtime PM adapted.
      
      The error handling paths become a bit tricky when we call these runtime
      PM funcs. There doesn't seem to be any helper that checks if runtime PM
      is enabled already. Add bool variables in mdp4_kms/mdp5_kms structs to
      check if the driver had managed to call pm_runtime_enable before bailing
      out.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      cd792726
    • A
      drm/msm/mdp5: Use updated MDP5 register names · 7b59c7e4
      Archit Taneja 提交于
      Since MDSS registers were stuffed within the the MDP5 register
      space, we had an __offset_MDP() macro to identify the offset
      between the start of MDSS and MDP5 address spaces. This offset
      macro expected a MDP index argument, which didn't make much
      sense since we don't have multiple MDPs.
      
      The offset is no longer needed now that we have devices for the 2
      different register address spaces. Also, remove the "REG_MDP5_MDP_"
      prefix to "REG_MDP5_".
      
      Update the generated headers in mdp5.xml.h
      
      We generally update headers as a separate patch, but we need to
      do these together to prevent breaking build.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      7b59c7e4
    • A
      drm/msm/mdp5: Remove old kms init/destroy funcs · 392ae6e0
      Archit Taneja 提交于
      With the new kms_init/destroy funcs in place for MDP5, we can get rid of
      the old kms funcs. Some members of the mdp5_kms struct also become
      redundant, so we remove those too.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      392ae6e0