Skip to content
  1. Jul 08, 2014
    • Thierry Reding's avatar
      drm: Introduce drm_fb_helper_prepare() · 10a23102
      Thierry Reding authored
      
      
      To implement hotplug detection in a race-free manner, drivers must call
      drm_kms_helper_poll_init() before hotplug events can be triggered. Such
      events can be triggered right after any of the encoders or connectors
      are initialized. At the same time, if the drm_fb_helper_hotplug_event()
      helper is used by a driver, then the poll helper requires some parts of
      the FB helper to be initialized to prevent a crash.
      
      At the same time, drm_fb_helper_init() requires information that is not
      necessarily available at such an early stage (number of CRTCs and
      connectors), so it cannot be used yet.
      
      Add a new helper, drm_fb_helper_prepare(), that initializes the bare
      minimum needed to allow drm_kms_helper_poll_init() to execute and any
      subsequent hotplug events to be processed properly.
      
      Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      10a23102
    • Thierry Reding's avatar
      drm: Constify struct drm_fb_helper_funcs · 3a493879
      Thierry Reding authored
      
      
      There's no need for this to be modifiable. Make it const so that it can
      be put into the .rodata section.
      
      Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
      Acked-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      3a493879
    • Daniel Vetter's avatar
      drm/fb-helper: Fix hpd vs. initial config races · 50c3dc97
      Daniel Vetter authored
      
      
      Some drivers need to be able to have a perfect race-free fbcon setup.
      Current drivers only enable hotplug processing after the call to
      drm_fb_helper_initial_config which leaves a tiny but important race.
      
      This race is especially noticable on embedded platforms where the
      driver itself enables the voltage for the hdmi output, since only then
      will monitors (after a bit of delay, as usual) respond by asserting
      the hpd pin.
      
      Most of the infrastructure is already there with the split-out
      drm_fb_helper_init. And drm_fb_helper_initial_config already has all
      the required locking to handle concurrent hpd events since
      
      commit 53f1904b
      Author: Daniel Vetter <daniel.vetter@ffwll.ch>
      Date:   Thu Mar 20 14:26:35 2014 +0100
      
          drm/fb-helper: improve drm_fb_helper_initial_config locking
      
      The only missing bit is making drm_fb_helper_hotplug_event save
      against concurrent calls of drm_fb_helper_initial_config. The only
      unprotected bit is the check for fb_helper->fb.
      
      With that drivers can first initialize the fb helper, then enabel
      hotplug processing and then set up the initial config all in a
      completely race-free manner. Update kerneldoc and convert i915 as a
      proof of concept.
      
      Feature requested by Thierry since his tegra driver atm reliably boots
      slowly enough to misses the hotplug event for an external hdmi screen,
      but also reliably boots to quickly for the hpd pin to be asserted when
      the fb helper calls into the hdmi ->detect function.
      
      Cc: Thierry Reding <treding@nvidia.com>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      50c3dc97
    • Martin Kepplinger's avatar
      ttm: use NULL instead of 0 for ttm_bo_reserve()'s pointer arg. · 0eff2a24
      Martin Kepplinger authored
      
      
      Fix a sparse warning: ttm_bo_reserve()'s last argument is a
      pointer to a struct, so use NULL as nullpointer.
      
      Signed-off-by: default avatarMartin Kepplinger <martink@posteo.de>
      Reviewed-by: default avatarJingoo Han <jg1.han@samsung.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      0eff2a24
    • Guido Martínez's avatar
      drm/tilcdc: replace late_initcall with module_init · 2023d84d
      Guido Martínez authored
      
      
      Use module_init instead of late_initcall, as is the norm for modular
      drivers.
      
      module_init was used until 6e8de0bd
      ("drm/tilcdc: add encoder slave (v2)") changed it to a late_initcall,
      but it does not explain why. Tests show it's working properly with
      module_init.
      
      Signed-off-by: default avatarGuido Martínez <guido@vanguardiasur.com.ar>
      Tested-by: default avatarDarren Etheridge <detheridge@ti.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      2023d84d
    • Guido Martínez's avatar
      drm/tilcdc: remove submodule destroy calls · 7cdcce9f
      Guido Martínez authored
      
      
      The TI tilcdc driver is designed with a notion of submodules. Currently,
      at unload time, these submodules are iterated and destroyed.
      
      Now that the tilcdc remove order is fixed, this can be handled perfectly
      by the kernel using the device infrastructure, since each submodule
      is a kernel driver itself, and they are only destroy()'ed at unload
      time. Therefore we move the destroy() functionality to each submodule's
      remove().
      
      Also, remove some checks in the unloading process since the new code
      guarantees the resources are allocated and need a release.
      
      Signed-off-by: default avatarGuido Martínez <guido@vanguardiasur.com.ar>
      Tested-by: default avatarDarren Etheridge <detheridge@ti.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      7cdcce9f
    • Guido Martínez's avatar
      drm/tilcdc: fix double kfree · c9a3ad25
      Guido Martínez authored
      
      
      display_timings_release calls kfree on the display_timings object passed
      to it. Calling kfree after it is wrong. SLUB debug showed the following
      warning:
      
          =============================================================================
          BUG kmalloc-64 (Tainted: G        W    ): Object already free
          -----------------------------------------------------------------------------
      
          Disabling lock debugging due to kernel taint
          INFO: Allocated in of_get_display_timings+0x2c/0x214 age=601 cpu=0
          pid=884
           __slab_alloc.constprop.79+0x2e0/0x33c
           kmem_cache_alloc+0xac/0xdc
           of_get_display_timings+0x2c/0x214
           panel_probe+0x7c/0x314 [tilcdc]
           platform_drv_probe+0x18/0x48
           [..snip..]
          INFO: Freed in panel_destroy+0x18/0x3c [tilcdc] age=0 cpu=0 pid=907
           __slab_free+0x34/0x330
           panel_destroy+0x18/0x3c [tilcdc]
           tilcdc_unload+0xd0/0x118 [tilcdc]
           drm_dev_unregister+0x24/0x98
           [..snip..]
      
      Signed-off-by: default avatarGuido Martínez <guido@vanguardiasur.com.ar>
      Tested-by: default avatarDarren Etheridge <detheridge@ti.com>
      Cc: <stable@vger.kernel.org> #v3.9+
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      c9a3ad25
    • Guido Martínez's avatar
      drm/tilcdc: fix release order on exit · eb565a2b
      Guido Martínez authored
      
      
      Unregister resources in the correct order on tilcdc_drm_fini, which is
      the reverse order they were registered during tilcdc_drm_init.
      
      This also means unregistering the driver before releasing its resources.
      
      Signed-off-by: default avatarGuido Martínez <guido@vanguardiasur.com.ar>
      Tested-by: default avatarDarren Etheridge <detheridge@ti.com>
      Cc: <stable@vger.kernel.org> #v3.9+
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      eb565a2b
    • Guido Martínez's avatar
      drm/tilcdc: panel: fix leak when unloading the module · 3a490122
      Guido Martínez authored
      
      
      The driver did not unregister the allocated framebuffer, which caused
      memory leaks (and memory manager WARNs) when unloading. Also, the
      framebuffer device under /dev still existed after unloading.
      
      Add a call to drm_fbdev_cma_fini when unloading the module to prevent
      both issues.
      
      Signed-off-by: default avatarGuido Martínez <guido@vanguardiasur.com.ar>
      Tested-by: default avatarDarren Etheridge <detheridge@ti.com>
      Cc: <stable@vger.kernel.org> #v3.9+
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      3a490122
    • Guido Martínez's avatar
      drm/tilcdc: tfp410: fix dangling sysfs connector node · 16dcbdef
      Guido Martínez authored
      
      
      Add a drm_sysfs_connector_remove call when we destroy the panel to make
      sure the connector node in sysfs gets deleted.
      
      This is required for proper unload and re-load of this driver, otherwise
      we will get a warning about a duplicate filename in sysfs.
      
      Signed-off-by: default avatarGuido Martínez <guido@vanguardiasur.com.ar>
      Tested-by: default avatarDarren Etheridge <detheridge@ti.com>
      Cc: <stable@vger.kernel.org> #v3.9+
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      16dcbdef
    • Guido Martínez's avatar
      drm/tilcdc: slave: fix dangling sysfs connector node · daa15b4c
      Guido Martínez authored
      
      
      Add a drm_sysfs_connector_remove call when we destroy the panel to make
      sure the connector node in sysfs gets deleted.
      
      This is required for proper unload and re-load of this driver as a
      module. Without this, we would get a warning at re-load time like so:
      
         tda998x 0-0070: found TDA19988
         ------------[ cut here ]------------
         WARNING: CPU: 0 PID: 825 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x54/0x74()
         sysfs: cannot create duplicate filename '/class/drm/card0-HDMI-A-1'
         Modules linked in: [..]
         CPU: 0 PID: 825 Comm: modprobe Not tainted 3.15.0-rc4-00027-g9dcdef4 #82
         [<c0013bb8>] (unwind_backtrace) from [<c0011824>] (show_stack+0x10/0x14)
         [<c0011824>] (show_stack) from [<c0034e8c>] (warn_slowpath_common+0x68/0x88)
         [<c0034e8c>] (warn_slowpath_common) from [<c0034edc>] (warn_slowpath_fmt+0x30/0x40)
         [<c0034edc>] (warn_slowpath_fmt) from [<c01243f4>] (sysfs_warn_dup+0x54/0x74)
         [<c01243f4>] (sysfs_warn_dup) from [<c0124708>] (sysfs_do_create_link_sd.isra.2+0xb0/0xb8)
         [<c0124708>] (sysfs_do_create_link_sd.isra.2) from [<c02ae37c>] (device_add+0x338/0x520)
         [<c02ae37c>] (device_add) from [<c02ae6e8>] (device_create_groups_vargs+0xa0/0xc4)
         [<c02ae6e8>] (device_create_groups_vargs) from [<c02ae758>] (device_create+0x24/0x2c)
         [<c02ae758>] (device_create) from [<c029b4ec>] (drm_sysfs_connector_add+0x64/0x204)
         [<c029b4ec>] (drm_sysfs_connector_add) from [<bf0b1b40>] (slave_modeset_init+0x120/0x1bc [tilcdc])
         [<bf0b1b40>] (slave_modeset_init [tilcdc]) from [<bf0b2be8>] (tilcdc_load+0x214/0x4c0 [tilcdc])
         [<bf0b2be8>] (tilcdc_load [tilcdc]) from [<c029955c>] (drm_dev_register+0xa4/0x104)
            [..snip..]
         ---[ end trace 4df8d614936ebdee ]---
         [drm:drm_sysfs_connector_add] *ERROR* failed to register connector device: -17
      
      Signed-off-by: default avatarGuido Martínez <guido@vanguardiasur.com.ar>
      Tested-by: default avatarDarren Etheridge <detheridge@ti.com>
      Cc: <stable@vger.kernel.org> #v3.9+
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      daa15b4c
    • Guido Martínez's avatar
      drm/tilcdc: panel: fix dangling sysfs connector node · e396900e
      Guido Martínez authored
      
      
      Add a drm_sysfs_connector_remove call when we destroy the panel to make
      sure the connector node in sysfs gets deleted.
      
      This is required for proper unload and re-load of this driver as a
      module. Without this, we would get a warning at re-load time like so:
      
         ------------[ cut here ]------------
         WARNING: CPU: 0 PID: 824 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x54/0x74()
         sysfs: cannot create duplicate filename '/class/drm/card0-LVDS-1'
         Modules linked in: [...]
         CPU: 0 PID: 824 Comm: modprobe Not tainted 3.15.0-rc4-00027-g6484f96-dirty #81
         [<c0013bb8>] (unwind_backtrace) from [<c0011824>] (show_stack+0x10/0x14)
         [<c0011824>] (show_stack) from [<c0034e8c>] (warn_slowpath_common+0x68/0x88)
         [<c0034e8c>] (warn_slowpath_common) from [<c0034edc>] (warn_slowpath_fmt+0x30/0x40)
         [<c0034edc>] (warn_slowpath_fmt) from [<c01243f4>] (sysfs_warn_dup+0x54/0x74)
         [<c01243f4>] (sysfs_warn_dup) from [<c0124708>] (sysfs_do_create_link_sd.isra.2+0xb0/0xb8)
         [<c0124708>] (sysfs_do_create_link_sd.isra.2) from [<c02ae37c>] (device_add+0x338/0x520)
         [<c02ae37c>] (device_add) from [<c02ae6e8>] (device_create_groups_vargs+0xa0/0xc4)
         [<c02ae6e8>] (device_create_groups_vargs) from [<c02ae758>] (device_create+0x24/0x2c)
         [<c02ae758>] (device_create) from [<c029b4ec>] (drm_sysfs_connector_add+0x64/0x204)
         [<c029b4ec>] (drm_sysfs_connector_add) from [<bf0b1fec>] (panel_modeset_init+0xb8/0x134 [tilcdc])
         [<bf0b1fec>] (panel_modeset_init [tilcdc]) from [<bf0b2bf0>] (tilcdc_load+0x214/0x4c0 [tilcdc])
         [<bf0b2bf0>] (tilcdc_load [tilcdc]) from [<c029955c>] (drm_dev_register+0xa4/0x104)
            [ .. snip .. ]
         ---[ end trace b2d09cd9578b0497 ]---
         [drm:drm_sysfs_connector_add] *ERROR* failed to register connector device: -17
      
      Signed-off-by: default avatarGuido Martínez <guido@vanguardiasur.com.ar>
      Tested-by: default avatarDarren Etheridge <detheridge@ti.com>
      Cc: <stable@vger.kernel.org> #v3.9+
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      e396900e
    • Fabien DESSENNE's avatar
      drm/crtc-helper: use drm_framebuffer flags · d980b183
      Fabien DESSENNE authored
      
      
      The "flags" parameter of the DRM_IOCTL_MODE_ADDFB2 ioctl must be
      propagated and used by the driver.
      The only possible value of flags is DRM_MODE_FB_INTERLACED.
      
      Signed-off-by: default avatarFabien Dessenne <fabien.dessenne@st.com>
      Reviewed-by: default avatarBenjamin GAIGNARD <benjamin.gaignard@st.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      d980b183
    • Christian König's avatar
      drm/ttm: fix handling of TTM_PL_FLAG_TOPDOWN v2 · e3f20279
      Christian König authored
      
      
      bo->mem.placement is not initialized when ttm_bo_man_get_node is called,
      so the flag had no effect at all.
      
      v2: change nouveau and vmwgfx as well
      
      Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      e3f20279
    • Alex Williamson's avatar
      vgaarb: We can own non-decoded resources · 4e4e7dc5
      Alex Williamson authored
      
      
      The VGA arbiter does not allow devices to "own" resources that it
      doesn't "decode".  However, it does allow devices to "lock" resources
      that it doesn't decode.  This gets us into trouble because locking
      the resource goes through the same bridge routing updates regardless
      of whether we decode the resource.  This means that when a non-decoded
      resource is released, the bridge is left with VGA routing enabled and
      locking a different device won't clear it.
      
      This happens in the following scenario:
      
      VGA device 01:00.0 (VGA1) is owned by the radeon driver, which
      registers a set_vga_decode function which releases legacy VGA decodes.
      
      VGA device 02:00.0 (VGA2) is any VGA device.
      
      VGA1 user locks VGA resources triggering first_use callback of
      set_vga_decoded, clearing "decode" and "owns" of legacy resources
      on VGA1.
      
      VGA1 user unlocks VGA resources.
      
      VGA2 user locks VGA resources, which skips VGA1 as conflicting as it
      does not "own" legacy resources, although VGA routing is still enabled
      for the VGA1 bridge.  VGA routing is enabled on VGA2 bridge.
      
      VGA2 may or may not receive VGA transactions depending on the bus
      priority of VGA1 vs VGA2 bridge.
      
      To resolve this, we need to allow devices to "own" resources that they
      do not "decode".  This way we can track bus ownership of VGA.  When a
      device decodes VGA, it only means that we must update the command bits
      in cases where the conflicting device is on the same bus.
      
      Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: Dave Airlie <airlied@redhat.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      4e4e7dc5
  2. Jul 07, 2014
  3. Jul 04, 2014
  4. Jul 03, 2014
  5. Jul 02, 2014
    • Dave Airlie's avatar
      drm: fix permissions on drm_drv.c · 18602687
      Dave Airlie authored
      
      
      1539fb9b managed to somehow +x
      drm_drv.c undo it.
      
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      18602687
    • Christian König's avatar
      drm/radeon: page table BOs are kernel allocations · 7dae77f8
      Christian König authored
      
      
      Userspace shouldn't be able to access them.
      
      Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      7dae77f8
    • Alex Deucher's avatar
      drm/radeon/cik: fix typo in EOP packet · b397207b
      Alex Deucher authored
      
      
      Volatile bit was in the wrong location.  This bit is
      not used at the moment.
      
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      b397207b
    • Peter Chen's avatar
      usb: chipidea: udc: delete td from req's td list at ep_dequeue · e4adcff0
      Peter Chen authored
      
      
      We need to delete un-finished td from current request's td list
      at ep_dequeue API, otherwise, this non-user td will be remained
      at td list before this request is freed. So if we do ep_queue->
      ep_dequeue->ep_queue sequence, when the complete interrupt for
      the second ep_queue comes, we search td list for this request,
      the first td (added by the first ep_queue) will be handled, and
      its status is still active, so we will consider the this transfer
      still not be completed, but in fact, it has completed. It causes
      the peripheral side considers it never receives current data for
      this transfer.
      
      We met this problem when do "Error Recovery Test - Device Configured"
      test item for USBCV2 MSC test, the host has never received ACK for
      the IN token for CSW due to peripheral considers it does not get this
      CBW, the USBCV test log like belows:
      
      --------------------------------------------------------------------------
      INFO
      Issuing BOT MSC Reset, reset should always succeed
      INFO
      Retrieving status on CBW endpoint
      INFO
      CBW endpoint status = 0x0
      INFO
      Retrieving status on CSW endpoint
      INFO
      CSW endpoint status = 0x0
      INFO
      Issuing required command (Test Unit Ready) to verify device has recovered
      INFO
      Issuing CBW (attempt #1):
      INFO
      |----- CBW LUN                  = 0x0
      INFO
      |----- CBW Flags                = 0x0
      INFO
      |----- CBW Data Transfer Length = 0x0
      INFO
      |----- CBW CDB Length           = 0x6
      INFO
      |----- CBW CDB-00 = 0x0
      INFO
      |----- CBW CDB-01 = 0x0
      INFO
      |----- CBW CDB-02 = 0x0
      INFO
      |----- CBW CDB-03 = 0x0
      INFO
      |----- CBW CDB-04 = 0x0
      INFO
      |----- CBW CDB-05 = 0x0
      INFO
      Issuing CSW : try 1
      INFO
      CSW Bulk Request timed out!
      ERROR
      Failed CSW phase : should have been success or stall
      FAIL
      (5.3.4) The CSW status value must be 0x00, 0x01, or 0x02.
      ERROR
      BOTCommonMSCRequest failed:  error=80004000
      
      Cc: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarPeter Chen <peter.chen@freescale.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e4adcff0
  6. Jul 01, 2014
Loading