1. 21 11月, 2014 6 次提交
    • S
      drm/msm: add multiple CRTC and overlay support · 0deed25b
      Stephane Viau 提交于
      MDP5 currently support one single CRTC with its private pipe.
      This change allows the configuration of multiple CRTCs with
      the possibility to attach several public planes to these CRTCs.
      Signed-off-by: NStephane Viau <sviau@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      0deed25b
    • R
      drm/msm/mdp5: set rate before enabling clk · ac7a5704
      Rob Clark 提交于
      Set a "safe" rate at first, in order to read out the hw revision.  And
      then after set the optimal value.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      ac7a5704
    • S
      drm/msm/mdp5: introduce mdp5_cfg module · 2e362e17
      Stephane Viau 提交于
      The hardware configuration modification from a version to another
      is quite consequent. Introducing a configuration module
      (mdp5_cfg) may make things more clear and easier to access when a
      new hardware version comes up.
      Signed-off-by: NStephane Viau <sviau@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      2e362e17
    • S
      drm/msm/mdp5: make SMP module dynamically configurable · bfcdfb0e
      Stephane Viau 提交于
      The Shared Memory Pool (SMP) has its own limitation, features and
      state. Some examples are:
       - the number of Memory Macro Block (MMB) and their size
       - the number of lines that can be fetched
       - the state of MMB currently allocated
       - the computation of number of blocks required per plane
       - client IDs ...
      
      In order to avoid private data to be overwritten by other modules,
      let's make these private to the SMP module.
      
      Some of these depend on the hardware configuration, let's add them
      to the mdp5_config struct.
      
      In some hw configurations, some MMBs are statically tied to RGB
      pipes and cannot be re-allocated dynamically. This change
      introduces the concept of MMB static usage and makes sure that
      dynamic MMB requests are dimensioned accordingly.
      
      A note on passing a pipe pointer, instead of client IDs:
      Client IDs are SMP-related information. Passing PIPE information
      to SMP lets SMP module to find out which SMP client(s) are used.
      This allows the SMP module to access the PIPE pointer, which can
      be used for FIFO watermark configuration.
      By the way, even though REG_MDP5_PIPE_REQPRIO_FIFO_WM_* registers
      are part of the PIPE registers, their functionality is to reflect
      the behavior of the SMP block. These registers access is now
      restricted to the SMP module.
      Signed-off-by: NStephane Viau <sviau@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      bfcdfb0e
    • S
      drm/msm/mdp5: get the core clock rate from MDP5 config · 3f307963
      Stephane Viau 提交于
      The core clock rate depends on the hw configuration. Once we have
      read the hardware revision, we can set the core clock to its
      maximum value.
      Before then, the clock is set at a rate supported by all MDP5
      revisions.
      Signed-off-by: NStephane Viau <sviau@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      3f307963
    • R
      drm/msm/mdp5: use irqdomains · f6a8eaca
      Rob Clark 提交于
      For mdp5, the irqs of hdmi/eDP/dsi0/dsi1 blocks get routed through the
      mdp block.  In order to decouple hdmi/eDP/etc, register an irq domain
      in mdp5.  When hdmi/dsi/etc are used with mdp4, they can directly setup
      their irqs in their DT nodes as normal.  When used with mdp5, instead
      set the mdp device as the interrupt-parent, as in:
      
      	mdp: qcom,mdss_mdp@fd900000 {
      		compatible = "qcom,mdss_mdp";
      		interrupt-controller;
      		#interrupt-cells = <1>;
      		...
      	};
      
      	hdmi: qcom,hdmi_tx@fd922100 {
      		compatible = "qcom,hdmi-tx-8074";
      		interrupt-parent = <&mdp>;
      		interrupts = <8 0>;   /* MDP5_HW_INTR_STATUS.INTR_HDMI */
      		...
      	};
      
      There is a slight awkwardness, in that we cannot disable child irqs
      at the mdp level, they can only be cleared in the child block.  So
      you must not use threaded irq handlers in the child.  I'm not sure
      if there is a better way to deal with that.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      f6a8eaca
  2. 17 11月, 2014 1 次提交
    • R
      drm/msm/hdmi: refactor bind/init · 067fef37
      Rob Clark 提交于
      Split up hdmi_init() into hdmi_init() (done at hdmi sub-device
      bind/probe time) and hdmi_modeset_init() done from master driver's
      modeset_init().
      
      Anything that can fail due to dependencies on other drivers which
      may be missing or not probed yet should go in hdmi_init(), so that
      devm error/cleanup paths work properly.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      067fef37
  3. 04 8月, 2014 3 次提交
    • S
      drm/msm/mdp5: add support for MDP5 v1.3 · 3d47fd47
      Stephane Viau 提交于
      MDP5 has several functional blocks (ie: VIG/RGB pipes, LMs, ...).
      From one revision to another, these blocks' base addresses might
      change due to the number of instances present in the MDP5 hw.
      A way of dealing with these offset changes is to introduce
      dynamic offsets 'per block'.
      
      This change adds support for the new revision of MDP5: v1.3.
      The idea is to define one hw config per MDP version and select
      either one of them at runtime, after reading the MDP5 version.
      
      Once the MDP version is known, 'per block' dynamic offsets
      are initialized through a global pointer, which is then used for
      read/write register access.
      Signed-off-by: NStephane Viau <sviau@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      3d47fd47
    • R
      drm/msm: use upstream iommu · 944fc36c
      Rob Clark 提交于
      Downstream kernel IOMMU had a non-standard way of dealing with multiple
      devices and multiple ports/contexts.  We don't need that on upstream
      kernel, so rip out the crazy.
      
      Note that we have to move the pinning of the ringbuffer to after the
      IOMMU is attached.  No idea how that managed to work properly on the
      downstream kernel.
      
      For now, I am leaving the IOMMU port name stuff in place, to simplify
      things for folks trying to backport latest drm/msm to device kernels.
      Once we no longer have to care about pre-DT kernels, we can drop this
      and instead backport upstream IOMMU driver.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      944fc36c
    • S
      drm/msm: activate iommu support · 3bf6c1ec
      Stephane Viau 提交于
      This changes activates the iommu support for MDP5, through the
      platform config structure.
      Signed-off-by: NStephane Viau <sviau@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      3bf6c1ec
  4. 22 6月, 2014 1 次提交
  5. 02 6月, 2014 1 次提交
  6. 10 1月, 2014 1 次提交
    • R
      drm/msm: add mdp5/apq8x74 · 06c0dd96
      Rob Clark 提交于
      Add support for the new MDP5 display controller block.  The mapping
      between parts of the display controller and KMS is:
      
        plane   -> PIPE{RGBn,VIGn}             \
        crtc    -> LM (layer mixer)            |-> MDP "device"
        encoder -> INTF                        /
        connector -> HDMI/DSI/eDP/etc          --> other device(s)
      
      Unlike MDP4, it appears we can get by with a single encoder, rather
      than needing a different implementation for DTV, DSI, etc.  (Ie. the
      register interface is same, just different bases.)
      
      Also unlike MDP4, all the IRQs for other blocks (HDMI, DSI, etc) are
      routed through MDP.
      
      And finally, MDP5 has this "Shared Memory Pool" (called "SMP"), from
      which blocks need to be allocated to the active pipes based on fetch
      stride.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      06c0dd96