1. 27 11月, 2016 1 次提交
    • R
      drm/msm/mdp5: handle non-fullscreen base plane case · 1455adbd
      Rob Clark 提交于
      If the bottom-most layer is not fullscreen, we need to use the BASE
      mixer stage for solid fill (ie. MDP5_CTL_BLEND_OP_FLAG_BORDER_OUT).  The
      blend_setup() code pretty much handled this already, we just had to
      figure this out in _atomic_check() and assign the stages appropriately.
      
      Also fix the case where there are zero enabled planes, where we also
      need to enable BORDER_OUT.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      1455adbd
  2. 09 11月, 2016 2 次提交
  3. 22 10月, 2016 2 次提交
  4. 16 9月, 2016 3 次提交
  5. 19 8月, 2016 1 次提交
  6. 09 8月, 2016 1 次提交
  7. 16 7月, 2016 15 次提交
    • M
      drm/msm: Delete unnecessary checks before drm_gem_object_unreference_unlocked() · e73a8569
      Markus Elfring 提交于
      The drm_gem_object_unreference_unlocked() function tests whether
      its argument is NULL and then returns immediately.
      Thus the test around the calls is not needed.
      
      This issue was detected by using the Coccinelle software.
      Signed-off-by: NMarkus Elfring <elfring@users.sourceforge.net>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      e73a8569
    • L
      drm/msm: Replace drm_fb_get_bpp_depth() with drm_format_plane_cpp() · d13b33fa
      Laurent Pinchart 提交于
      The driver needs the number of bytes per pixel, not the bpp and depth
      info meant for fbdev compatibility. Use the right API.
      Signed-off-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      d13b33fa
    • 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: Update the register offsets of MDP5 sub-blocks · 031d63dd
      Archit Taneja 提交于
      The MDP5 sub-block register offsets are relative to the top level
      MDSS register address.
      
      Now that we have the start of MDP5 register address space, provide
      the offsets relative to that. This involves subtracting the offsets
      with 0x1000 or 0x100 depending on the MDP5 version.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      031d63dd
    • 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
    • A
      drm/msm/mdp5: Use the new hierarchy and drop old irq management · 0a6030d2
      Archit Taneja 提交于
      Call msm_mdss_init in msm_drv to set up top level registers/irq line.
      Start using the new kms_init2/destroy2 funcs to inititalize MDP5 KMS.
      
      With the MDSS interrupt and irqdomain set up, the old MDP5 irq code
      can be dropped.
      
      The mdp5_hw_init kms func now uses the platform device tied to MDP5
      instead of the one tied to the drm_device/MDSS.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      0a6030d2
    • A
      drm/msm/mdp5: Prepare new kms_init funcs · aec095ec
      Archit Taneja 提交于
      With MDP5 as a new device, we need to do less for MDP when initializing
      modeset after all the components are bound.
      
      Create mdp5_kms_init2/destroy2 funcs that inits modeset. These will
      eventually replace the older kms_init/destroy funcs.
      
      In the new kms_init2, the platform_device used is the one corresponding
      to the new MDP5 platform_device. The new change here is that the irq is
      now retrieved using irq_of_parse_and_map(), since MDP5 is a child interrupt
      of the MDSS interrupt controller.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      aec095ec
    • A
      drm/msm/mdp5: Create a separate MDP5 device · 1dd0a0b1
      Archit Taneja 提交于
      In order to have a tree-like device hierarchy between MDSS and its
      sub-blocks (MDP5, DSI, HDMI, eDP etc), we need to create a separate
      device/driver for MDP5. Currently, MDP5 and MDSS are squashed
      together are are tied to the top level platform_device, which is
      also the one used to create drm_device.
      
      The mdp5_kms_init code is split into two parts. The part where device
      resources are allocated are associated with the MDP5 driver's probe,
      the rest is executed later when we initialize modeset.
      
      With this change, unlike MDP4, the MDP5 platform_device isn't tied to
      the top level drm_device anymore. The top level drm_device is now
      associated with a platform device that corresponds to MDSS wrapper
      hardware.
      
      Create mdp5_init/destroy funcs that will be used by the MDP5 driver
      probe/remove. Use the HW_VERSION register in the MDP5 register address
      space. Both the MDSS and MDP VERSION registers give out identical
      version info.
      
      The older mdp5_kms_init code is left as is for now, this would be removed
      later when we have all the pieces to support the new device hierarchy.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      1dd0a0b1
    • A
      drm/msm/mdp5: Add MDSS top level driver · 990a4007
      Archit Taneja 提交于
      SoCs that contain MDP5 have a top level wrapper called MDSS that manages
      clocks, power and irq for the sub-blocks within it.
      
      Currently, the MDSS portions are stuffed into the MDP5 driver. This makes
      it hard to represent the DT bindings in the correct way. We create a top
      level MDSS helper that handles these parts. This is essentially moving out
      some of the mdp5_kms irq code and MDSS register space and keeping it as a
      separate entity. We haven't given any clocks to the top level MDSS yet,
      but a AHB clock would be added in the future to access registers.
      
      One thing to note is that the resources allocated by this helper are
      tied to the top level platform_device (the one that allocates the
      drm_device struct too). This device would be the parent to MDSS
      sub-blocks like MDP5, DSI, eDP etc.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      990a4007
    • A
      drm/msm: Get irq number within kms driver itself · a2b3a557
      Archit Taneja 提交于
      The driver gets the irq number using platform_get_irq on the main kms
      platform device. This works fine since both MDP4 and MDP5 currently
      have a flat device hierarchy. The platform device tied with the
      drm_device points to the MDP DT node in both cases.
      
      This won't work when MDP5 supports a tree-like hierarchy. In this
      case, the platform device tied to the top level drm_device is the
      MDSS DT node, and the irq we need for KMS is the one generated by
      MDP5, not MDSS.
      
      Get the irq number from the MDP4/5 kms driver itself. Each driver
      can later provide the irq number based on what device hierarchy it
      uses.
      
      While we're at it, call drm_irq_install only when we have a valid KMS
      driver.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      a2b3a557
    • A
      drm/msm/mdp4: Clean up some MDP4 clocks · db9e44fb
      Archit Taneja 提交于
      Fix some issues with MDP4 clocks:
      
      - mdp4_dtv_encoder tries to get "src_clk", which is a RCG(TV_SRC) in
        MSM8960 and APQ8064. This isn't something the driver should access or
        configure. Instead of this, configure the "mdp_clk" (MDP_TV_CLK), a
        branch clock in MMCC that has the TV_SRC as its parent. Setting
        rate/enabling the "mdp_clk" will eventually configure "src_clk", which
        is what we want.
      - Rename "mdp_clk" to "tv_clk" because that's slightly less confusing.
      - Rename "mdp_axi_clk" to "bus_clk" because that's what we do elsewhere
        too.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      db9e44fb
    • A
      drm/msm/mdp5: Don't get source of MDP core clock · 0e0d9dfe
      Archit Taneja 提交于
      The driver expects DT to provide the parent to MDP core clock. The only
      operation done to the parent clock is to set a rate. This can be
      achieved by setting the rate on the core clock itsef. Don't try to
      get the parent clock anymore.
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      0e0d9dfe
  8. 09 6月, 2016 1 次提交
  9. 02 6月, 2016 2 次提交
  10. 17 5月, 2016 1 次提交
  11. 08 5月, 2016 3 次提交
  12. 02 5月, 2016 1 次提交
  13. 05 3月, 2016 1 次提交
  14. 04 3月, 2016 2 次提交
    • A
      drm/msm: rename hdmi symbols · fcda50c8
      Arnd Bergmann 提交于
      Global symbols in the kernel should be prefixed by the name
      of the subsystem and/or driver to avoid conflicts when all
      code is built-in.
      
      In this case, function names like 'hdmi_register' or 'hdmi_set_mode'
      are way too generic for an MSM specific DRM driver, so I'm renaming
      them all to msm_hdmi_* here.
      
      I also rename a lot of the 'static' symbols along with the global
      names for consistency, even though those are relatively harmless;
      they might only be slightly confusing when they show up in
      backtraces.
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      fcda50c8
    • R
      drm/msm: update generated headers · a2272e48
      Rob Clark 提交于
      Pull in additional regs needed for a430, etc.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      a2272e48
  15. 03 3月, 2016 2 次提交
  16. 16 2月, 2016 1 次提交
  17. 08 2月, 2016 1 次提交