1. 25 Feb, 2016 16 commits
    • Tomi Valkeinen's avatar
      drm/tilcdc: Get rid of complex ping-pong mechanism · 2b2080d7
      Tomi Valkeinen authored
      Get rid of complex ping-pong mechanism and replace it with simpler
      single buffer flipping code.
      
      The LCDC HW appears to be designed mainly static framebuffers in
      mind. There are two modes of operation, either static single buffer,
      or ping pong double buffering with two static buffers switching back
      and forth. Luckily the framebuffer start address is fetched only in
      the beginning of the frame and changing the address after that only
      takes effect after the next vertical blank. The page flipping code can
      simply write the address of the new framebuffer and the page is
      flipped automatically after the next vertical blank. Using the ping
      pong double buffering makes the flipping code way more complex and it
      does not provide any benefit, so it is better to switch to single
      buffer operation.
      
      There is still one problem in updating the framebuffer dma address on
      the fly. There are two registers defining the framebuffer dma area and
      things may break if the dma address is fetched in while the registers
      are are being updated.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      [Added description to the patch]
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      2b2080d7
    • Tomi Valkeinen's avatar
      drm/tilcdc: cleanup irq handling · 317aae73
      Tomi Valkeinen authored
      Cleanup irq handling. Clear the irq status unconditionally and
      restructure the status bit conditions.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      [Added description to the patch]
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      317aae73
    • Tomi Valkeinen's avatar
      drm/tilcdc: remove broken error handling · 31ec5a2c
      Tomi Valkeinen authored
      Remove broken error handling. The condition for handling the
      LCDC_SYNC_LOST and LCDC_FIFO_UNDERFLOW could never be satisfied as the
      LCDC_SYNC_LOST interrupt is not enabled. Also the requirement to have
      both LCDC_SYNC_LOST and LCDC_FIFO_UNDERFLOW fired at once before
      handling the error looks weird.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      [Added description to the patch]
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      31ec5a2c
    • Tomi Valkeinen's avatar
      drm/tilcdc: split reset to a separate function · 2efec4f3
      Tomi Valkeinen authored
      Split reset to a separate function and use usleep_range(250, 1000)
      instead of msleep(1) to to keep the reset bit on long enough.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      [Added description to the patch, changed mdelay(500) to usleep_range(250, 1000)]
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      2efec4f3
    • Tomi Valkeinen's avatar
      drm/tilcdc: disable crtc on unload · 1aea1e79
      Tomi Valkeinen authored
      Disable crtc on unload. Call tilcdc_crtc_dpms() with DRM_MODE_DPMS_OFF
      in the beginning of unload function.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      [Added description to the patch]
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      1aea1e79
    • Tomi Valkeinen's avatar
      drm/tilcdc: cleanup runtime PM handling · 65734a26
      Tomi Valkeinen authored
      Cleanup runtime PM handling. Before the patch the usage of pm_runtime
      calls was inconsistent and hard to follow. After the update the
      pm_runtime calls are removed from set_scanout() and called around
      major operations that access the HW. After the patch the DPMS code does
      not have pm_runtime_forbid/allow calls any more and
      pm_runtime_irq_safe() is not set anymore.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      [Added description to the patch]
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      65734a26
    • Jyri Sarha's avatar
      drm/tilcdc: Allocate register storage based on the actual number registers · 29ddd6e1
      Jyri Sarha authored
      Allocate suspend/resume register storage based on the actual number
      registers the driver is aware of. The static allocation for register
      storage had fallen behind badly.
      Reported-by: default avatarMichael Bode <michael@bumbleB.de>
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      29ddd6e1
    • Grygorii Strashko's avatar
      drm/tilcdc: fix build error when !CONFIG_CPU_FREQ · 7974dff4
      Grygorii Strashko authored
      Fix build error when !CONFIG_CPU_FREQ
      drivers/gpu/drm/tilcdc/tilcdc_drv.c: In function 'tilcdc_load':
      drivers/gpu/drm/tilcdc/tilcdc_drv.c:327:1: error: label 'fail_put_clk' defined but not used [-Werror=unused-label]
       fail_put_clk:
       ^
      Signed-off-by: default avatarGrygorii Strashko <Grygorii.Strashko@linaro.org>
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      7974dff4
    • Jyri Sarha's avatar
      drm/tilcdc: Implement dma-buf support for tilcdc · 9c153905
      Jyri Sarha authored
      There is nothing special about tilcdc HW when the video memory is
      concerned. Just using the standard drm helpers for implementation is
      enough.
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      9c153905
    • Darren Etheridge's avatar
      drm/tilcdc: disable the lcd controller/dma engine when suspend invoked · 614b3cfe
      Darren Etheridge authored
      The LCD controller must be deactivated and all DMA transactions stopped
      when the suspend power state is entered otherwise the PRCM causes the L3
      bus to get stuck in transition state.
      
      This commit forces the lcdc to be shut down and waits for all pending DMA
      transactions to complete as part of the suspend handler for this driver.
      Signed-off-by: default avatarDarren Etheridge <detheridge@ti.com>
      Tested-by: default avatarDave Gerlach <d-gerlach@ti.com>
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      614b3cfe
    • Darren Etheridge's avatar
      drm/tilcdc: make frame_done interrupt active at all times · b62222fc
      Darren Etheridge authored
      The frame_done interrupt was only being enabled when the vsync
      interrupts were being enabled by DRM.  However the frame_done is
      used to determine if the LCD controller has successfully completed
      the raster_enable, raster_disable commands and the vsync interrupts
      are not always enabled during these operations.
      Signed-off-by: default avatarDarren Etheridge <detheridge@ti.com>
      Tested-by: default avatarDave Gerlach <d-gerlach@ti.com>
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      b62222fc
    • Darren Etheridge's avatar
      drm/tilcdc: fix kernel panic on suspend when no hdmi monitor connected · 85fd27f8
      Darren Etheridge authored
      On BeagleBone Black if no HDMI monitor is connected and suspend
      is requested a kernel panic will result:
      
      root@am335x-evm:~# echo mem > /sys/power/state
      [ 65.548710] PM: Syncing filesystems ... done.
      [ 65.631311] Freezing user space processes ... (elapsed 0.006 seconds) done.
      [ 65.648619] Freezing remaining freezable tasks ... (elapsed 0.005 seconds) done.
      [ 65.833500] Unhandled fault: external abort on non-linefetch (0x1028) at 0xfa30e004
      [ 65.841692] Internal error: : 1028 [#1] SMP ARM
        <snip>
      [ 66.105287] [<c03765f0>] (platform_pm_suspend) from [<c037b6d4>] (dpm_run_callback+0x34/0x70)
      [ 66.114370] [<c037b6d4>] (dpm_run_callback) from [<c037ba84>] (__device_suspend+0x10c/0x2f4)
      [ 66.123357] [<c037ba84>] (__device_suspend) from [<c037d004>] (dpm_suspend+0x58/0x218)
      [ 66.131796] [<c037d004>] (dpm_suspend) from [<c008d948>] (suspend_devices_and_enter+0x9c/0x3c0)
      [ 66.141055] [<c008d948>] (suspend_devices_and_enter) from [<c008de7c>] (pm_suspend+0x210/0x24c)
      [ 66.150312] [<c008de7c>] (pm_suspend) from [<c008cabc>] (state_store+0x68/0xb8)
      [ 66.158103] [<c008cabc>] (state_store) from [<c02e9654>] (kobj_attr_store+0x14/0x20)
      [ 66.166355] [<c02e9654>] (kobj_attr_store) from [<c0185c70>] (sysfs_kf_write+0x4c/0x50)
      [ 66.174883] [<c0185c70>] (sysfs_kf_write) from [<c018926c>] (kernfs_fop_write+0xb4/0x150)
      [ 66.183598] [<c018926c>] (kernfs_fop_write) from [<c0122638>] (vfs_write+0xa8/0x180)
      [ 66.191846] [<c0122638>] (vfs_write) from [<c01229f8>] (SyS_write+0x40/0x8c)
      [ 66.199365] [<c01229f8>] (SyS_write) from [<c000e580>] (ret_fast_syscall+0x0/0x48)
      [ 66.207426] Code: e595c210 e5932000 e59cc000 e08c2002 (e592c000)
      
      This is because the lcdc module is not enabled when no monitor is detected
      to save power.  However the suspend handler just blindly tries to save the
      lcdc state by copying out the pertinent registers. However module is off
      so no good things happen when you try and access it.
      
      This patch only saves off the registers if the module is enabled, and
      then only restores the registers on resume if they were saved off during
      suspend.
      Signed-off-by: default avatarDarren Etheridge <detheridge@ti.com>
      Tested-by: default avatarDave Gerlach <d-gerlach@ti.com>
      Acked-by: default avatarFelipe Balbi <balbi@ti.com>
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      85fd27f8
    • Dave Gerlach's avatar
      drm/tilcdc: adopt pinctrl support · 416a07fb
      Dave Gerlach authored
      Update tilcdc driver to set the state of the pins to:
      - "default on resume
      - "sleep" on suspend
      
      By optionally putting the pins into sleep state in the suspend callback
      we can accomplish two things.
      - minimize current leakage from pins and thus save power,
      - prevent the IP from driving pins output in an uncontrolled manner,
      which may happen if the power domain drops the domain regulator.
      Signed-off-by: default avatarDave Gerlach <d-gerlach@ti.com>
      Signed-off-by: default avatarDarren Etheridge <detheridge@ti.com>
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      416a07fb
    • Tomi Valkeinen's avatar
      drm/tilcdc: verify fb pitch · 6f206e9d
      Tomi Valkeinen authored
      LCDC hardware does not support fb pitch that is different (i.e. larger)
      than the screen size. The driver currently does no checks for this, and
      the results of too big pitch are are flickering and lower fps.
      
      This issue easily happens when using libdrm's modetest tool with non-32
      bpp modes. As modetest always allocated 4 bytes per pixel, it implies a
      bigger pitch for 16 or 24 bpp modes.
      
      This patch adds a check to reject pitches the hardware cannot support.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      Signed-off-by: default avatarDarren Etheridge <detheridge@ti.com>
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      6f206e9d
    • Darren Etheridge's avatar
      drm/tilcdc: rewrite pixel clock calculation · 3d19306a
      Darren Etheridge authored
      Updating the tilcdc DRM driver code to calculate the LCD controller
      pixel clock more accurately. Based on a suggested implementation by
      Tomi Valkeinen.
      
      The current code does not work correctly and produces wrong results
      with many requested clock rates. It also oddly uses two different
      clocks, a display pll clock and a divider clock (child of display
      pll), instead of just using the clock coming to the lcdc.
      
      This patch removes the use of the display pll clock, and rewrites the
      code to calculate the clock rates. The idea is simply to request a
      clock rate of pixelclock*2, as the LCD controller has an internal
      divider which we set to 2.
      Signed-off-by: default avatarDarren Etheridge <detheridge@ti.com>
      [Rewrapped description]
      Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
      Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      3d19306a
    • Dave Airlie's avatar
      Merge branch 'drm/next/du' of git://linuxtv.org/pinchartl/fbdev into drm-next · 0041ee4d
      Dave Airlie authored
      rcar-du updates.
      
      * 'drm/next/du' of git://linuxtv.org/pinchartl/fbdev: (281 commits)
        drm: rcar-du: Add tri-planar memory formats support
        drm: rcar-du: Add probe deferral debug messages
        drm: rcar-du: lvds: Add R-Car Gen3 support
        drm: rcar-du: lvds: Rename PLLEN bit to PLLON
        drm: rcar-du: lvds: Fix PLL frequency-related configuration
        drm: rcar-du: lvds: Avoid duplication of clock clamp code
        drm: rcar-du: Add R8A7795 device support
        drm: rcar-du: Output the DISP signal on the ODDF pin
        drm: rcar-du: Output the DISP signal on the DISP pin
        drm: rcar-du: Support up to 4 CRTCs
        drm: rcar-du: Drop LVDS double dependency on OF
        drm: rcar-du: Enable compilation on ARM64
        drm: rcar-du: Fix compile warning on 64-bit platforms
        drm: rcar-du: Expose the VSP1 compositor through KMS planes
        drm: rcar-du: Move plane allocator to rcar_du_plane.c
        drm: rcar-du: Restart the DU group when a plane source changes
        drm: rcar-du: Add VSP1 compositor support
        drm: rcar-du: Add VSP1 support to the planes allocator
        drm: rcar-du: Refactor plane setup
        drm: rcar-du: Compute plane DDCR4 register value directly
        ...
      0041ee4d
  2. 23 Feb, 2016 14 commits
  3. 20 Feb, 2016 10 commits