1. 24 11月, 2014 7 次提交
    • G
      Revert "drm/exynos: fix null pointer dereference issue" · b6713957
      Gustavo Padovan 提交于
      This reverts commit cea24824ab432f8acabb254d6805e9aa756de6af.
      
      Moving subdriver probe to exynos_drm_platform_probe() was making
      exynos_drm_device_subdrv_probe() fail because the platform data wasn't set
      yet. It only gets set in exynos_drm_load.
      
      We need to find a smarter way to fix this issue.
      Signed-off-by: NGustavo Padovan <gustavo.padovan@collabora.co.uk>
      Signed-off-by: NInki Dae <inki.dae@samsung.com>
      b6713957
    • K
      drm/exynos: Fix DSI resuming fail because power domain being off · 030794a3
      Krzysztof Kozlowski 提交于
      During system resume from suspend to RAM the Exynos DRM driver forced
      CRTC mode thus turning display on (DPMS_ON). This lead to runtime resuming
      of DSI which failed because whole LCD power domain was off and it was
      not allowed to turn on because of system resume in progress.
      
      Forcing mode should not be needed and removing it solves this particular
      problem.
      
      This necessary fix for following scenario reproduced on Exynos DRM:
      1. Power domain is off before suspending the system.
      2. System is suspended to RAM.
      3. Resuming starts. The Exynos DRM driver resume callback is called.
      4. The Exynos DRM driver calls drm_helper_resume_force_mode() which turns
         on the screen by calling exynos_dsi_dpms with DRM_MODE_DPMS_ON.
      5. The Exynos DSI driver calls pm_runtime_get. The driver runtime
         resumes and this should turn LCD power domain on.
      6. Unfortunately the domain cannot be turned on because system resume is
         in progress and genpd->prepared_count is positive.
      
      Steps to reproduce:
      1. Add runtime PM to Exynos DSI driver.
      2. Build Exynos DRM/FB without FRAMEBUFFER_CONSOLE.
      3. Enable the connector and screen (e.g. with modeset-vsync).
      4. echo 3 > /sys/devices/platform/exynos-drm/graphics/fb0/blank
      5. echo mem > /sys/power/state
      6. Resume.
      [   77.712469] PM: early resume of devices complete after 3.854 msecs
      [   77.712739] exynos-dsi 11c80000.dsi: pm_genpd_resume()
      [   77.712758] exynos4-fimc 11800000.fimc: pm_genpd_resume()
      [   77.712774] exynos4-fimc 11810000.fimc: pm_genpd_resume()
      [   77.712787] exynos-drm-fimc 11820000.fimc: pm_genpd_resume()
      [   77.712802] exynos-drm-fimc 11830000.fimc: pm_genpd_resume()
      [   77.712815] s5p-mipi-csis 11880000.csis: pm_genpd_resume()
      [   77.712829] s5p-mipi-csis 11890000.csis: pm_genpd_resume()
      [   77.712843] exynos-fimc-lite 12390000.fimc-lite: pm_genpd_resume()
      [   77.712856] exynos-fimc-lite 123a0000.fimc-lite: pm_genpd_resume()
      [   77.713788] exynos4-fb 11c00000.fimd: pm_genpd_resume()
      [   77.713912] wake disabled for irq 184
      [   77.713923] wake disabled for irq 185
      [   77.714082] wake disabled for irq 173
      [   77.715676] wake disabled for irq 176
      [   77.718540] exynos4-fb 11c00000.fimd: pm_genpd_runtime_resume()
      [   77.718567] exynos4-fb 11c00000.fimd: state restore latency exceeded, new value 1708 ns
      [   77.718636] exynos-dsi 11c80000.dsi: pm_genpd_runtime_resume()
      [   77.892366] exynos-dsi 11c80000.dsi: PLL failed to stabilize
      [   77.892377] exynos-dsi 11c80000.dsi: failed to configure DSI PLL
      [   78.192168] exynos-dsi 11c80000.dsi: timeout waiting for reset
      [   78.211578] exynos-dsi 11c80000.dsi: waiting for bus lanes timed out
      [   78.307173] exynos-dsi 11c80000.dsi: xfer timed out: d1 00 (null)
      [   78.307190] panel_s6e8aa0 11c80000.dsi.0: error -110 reading dcs seq(0xd1)
      [   78.307199] panel_s6e8aa0 11c80000.dsi.0: read id failed
      Signed-off-by: NKrzysztof Kozlowski <k.kozlowski@samsung.com>
      Signed-off-by: NInki Dae <inki.dae@samsung.com>
      030794a3
    • A
      drm/exynos: remove ifdeferry from initialization code · 72390677
      Andrzej Hajda 提交于
      The patch replaces separate calls to driver (de)registration by
      loops over the array of drivers. As a result it significantly
      decreases number of ifdefs. Additionally it moves device registration
      related ifdefs to header file.
      
      Changelog v2:
      - Rebased.
      - Consider non kms driver in respect to infinite loop issue.
      Signed-off-by: NAndrzej Hajda <a.hajda@samsung.com>
      Signed-off-by: NInki Dae <inki.dae@samsung.com>
      72390677
    • I
      drm/exynos: fix null pointer dereference issue · 421ee18d
      Inki Dae 提交于
      This patch fixes null pointer dereference issue incurred
      when ipp driver is enabled and Exynos drm driver is closed.
      
      Non kms driver should register its own sub driver to setup necessary
      resources, which is done by load(). So null pointer dereference
      occurs when ipp driver is enabled and Exynos drm driver is closed
      because ipp core device is registered after component_master_add_with_match
      call.
      
      This patch makes exynos_drm_device_subdrv_probe() to be called after all non
      kms drivers are registered.
      Signed-off-by: NInki Dae <inki.dae@samsung.com>
      421ee18d
    • I
      drm/exynos: fix possible infinite loop issue · e9fbdcb4
      Inki Dae 提交于
      This patch fixes possible infinite loop issue by postponing
      registration to non kms drivers after component_master_add_with_match
      call, which can be incurred in all cases that non kms driver is probed
      and then component bind is failed
      
      This patch should be applied on top of below patches,
      	http://comments.gmane.org/gmane.comp.video.dri.devel/117740
      	http://www.spinics.net/lists/linux-samsung-soc/msg38624.htmlSigned-off-by: NInki Dae <inki.dae@samsung.com>
      e9fbdcb4
    • I
      drm/exynos: resolve infinite loop issue on non multi-platform · fbdf093d
      Inki Dae 提交于
      This patch resovles the infinite loop issue incurred
      when Exyno drm driver is enabled but all kms drivers
      are disabled on Exynos board by returning -EPROBE_DEFER
      only in case that there is kms device registered.
      Signed-off-by: NInki Dae <inki.dae@samsung.com>
      fbdf093d
    • I
      drm/exynos: resolve infinite loop issue on multi-platform · 5cbb37df
      Inki Dae 提交于
      This patch resolves temporarily infinite loop issue incurred
      when Exynos drm driver is enabled and multi-platform kernel
      is used by registering Exynos drm device object only in case
      of Exynos SoC. So this patch will be replaced with more generic
      way later.
      Signed-off-by: NInki Dae <inki.dae@samsung.com>
      5cbb37df
  2. 03 11月, 2014 4 次提交
  3. 20 9月, 2014 3 次提交
    • A
      drm/exynos: switch to universal plane API · 72ed6ccd
      Andrzej Hajda 提交于
      The patch replaces legacy functions
      drm_plane_init() / drm_crtc_init() with
      drm_universal_plane_init() and drm_crtc_init_with_planes().
      It allows to replace fake primary plane with the real one.
      Additionally the patch leaves cleanup of crtcs to core,
      this way planes and crtcs are cleaned in correct order.
      Signed-off-by: NAndrzej Hajda <a.hajda@samsung.com>
      Signed-off-by: NInki Dae <inki.dae@samsung.com>
      72ed6ccd
    • I
      drm/exynos: use drm generic mmap interface · 832316c7
      Inki Dae 提交于
      This patch removes DRM_EXYNOS_GEM_MMAP ictrl feature specific
      to Exynos drm and instead uses drm generic mmap.
      
      We had used the interface specific to Exynos drm to do mmap directly,
      not to use demand paging which maps each page with physical memory
      at page fault handler. We don't need the specific mmap interface
      because the drm generic mmap which uses vm offset manager stuff can
      also do mmap directly.
      
      This patch makes a userspace region to be mapped with whole physical
      memory region allocated by userspace request when mmap system call is
      requested.
      
      Changelog v2:
      - do not set VM_IO, VM_DONTEXPEND and VM_DONTDUMP. These flags were already
        set by drm_gem_mmap
      - do not include <linux/anon_inodes.h>, which isn't needed anymore.
      Signed-off-by: NInki Dae <inki.dae@samsung.com>
      832316c7
    • I
      drm/exynos: remove DRM_EXYNOS_GEM_MAP_OFFSET ioctl · d931589c
      Inki Dae 提交于
      This interface and relevant codes aren't used anymore.
      Signed-off-by: NInki Dae <inki.dae@samsung.com>
      d931589c
  4. 19 9月, 2014 3 次提交
  5. 10 9月, 2014 1 次提交
  6. 03 8月, 2014 1 次提交
    • K
      drm/exynos: Fix NULL pointer exception when suspending without components · d50a1907
      Krzysztof Kozlowski 提交于
      Fix a NULL pointer exception when main exynos drm driver was probed
      successfully but no components were added (e.g. by incomplete DTS). In
      such case the exynos_drm_load() is never called and drvdata is NULL.
      
      The NULL pointer exception may theoretically also happen as a effect of race between
      adding components and main driver: if suspend of the driver happens
      before adding components.
      
      Trace:
      [    1.190295] [drm] Initialized drm 1.1.0 20060810
      [    1.195209] exynos-drm-ipp exynos-drm-ipp: drm ipp registered successfully.
      (...)
      [   24.001743] PM: Syncing filesystems ... done.
      [   24.002177] Freezing user space processes ... (elapsed 0.000 seconds) done.
      [   24.007403] Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
      [   24.032559] Unable to handle kernel NULL pointer dereference at virtual address 00000134
      [   24.035007] pgd = dedd8000
      [   24.037734] [00000134] *pgd=5ee13831, *pte=00000000, *ppte=00000000
      [   24.043953] Internal error: Oops: 17 [#1] PREEMPT SMP ARM
      [   24.049329] Modules linked in:
      [   24.052371] CPU: 0 PID: 1 Comm: sh Not tainted 3.16.0-rc3-00035-geba20bbdde04-dirty #51
      [   24.060354] task: df478000 ti: df480000 task.ti: df480000
      [   24.065743] PC is at mutex_lock+0x10/0x50
      [   24.069733] LR is at drm_modeset_lock_all+0x30/0xbc
      [   24.074590] pc : [<c048516c>]    lr : [<c02a14b4>]    psr: a0000013
      [   24.074590] sp : df481db8  ip : 00000000  fp : c05e524c
      [   24.086045] r10: 00000002  r9 : c02c1fe4  r8 : deca5e44
      [   24.091253] r7 : 00000000  r6 : 00000000  r5 : 0000014c  r4 : 00000134
      [   24.097763] r3 : 00000000  r2 : 00000000  r1 : 00000000  r0 : 00000134
      [   24.104275] Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
      [   24.111391] Control: 10c53c7d  Table: 5edd806a  DAC: 00000015
      [   24.117120] Process sh (pid: 1, stack limit = 0xdf480240)
      [   24.122502] Stack: (0xdf481db8 to 0xdf482000)
      [   24.126843] 1da0:                                                       dee01d80 c02a14b4
      [   24.135004] 1dc0: 00000000 00000000 c07aff98 c02aec7c 00000002 00000000 00000000 c07aff98
      [   24.143164] 1de0: deca5e10 c02aecf4 c02aecd4 c02c2010 00000000 c02c9470 00000000 00000000
      [   24.151322] 1e00: 00000000 00000000 deca5e10 deca5e10 00000000 c07aff98 00000002 deca5e44
      [   24.159482] 1e20: c06d8f78 c06fb800 deca5e78 c02ca660 df7baf00 007b0aa0 deca5e10 c06fb7c8
      [   24.167641] 1e40: c07aff98 00000000 00000002 c02cbe18 9757aec5 00000005 9757aec5 00000005
      [   24.175801] 1e60: ded1d380 00000003 00000003 c05c74d8 ded1d380 c07209d4 c05c7514 c07105d8
      [   24.183960] 1e80: 01e2a738 c0068a74 00000000 c05c7514 ded1d380 c071c6e0 00000004 c07105d8
      [   24.192119] 1ea0: 01e2a738 c047f1e0 c0600cc0 df481ec4 00000003 00000000 00000003 c05c74d8
      [   24.200278] 1ec0: ded1d380 c071c6e0 c05c7514 c07105d8 01e2a738 c0069444 c06d905c 00000003
      [   24.208438] 1ee0: 00000003 ded1d380 c06d9064 00000004 c05c3fc0 c0067d4c df535ab0 ded1d380
      [   24.216596] 1f00: df481f80 ded1d380 00000004 ded1d1cc ded1d1c0 c0221724 00000004 c016ca6c
      [   24.224756] 1f20: c016ca28 00000000 00000000 c016c1d4 00000000 00000000 b6f37000 df481f80
      [   24.232915] 1f40: decedd80 00000004 df480000 df480000 b6f37000 c0110920 df47839c 60000013
      [   24.241074] 1f60: 00000000 00000000 decedd80 decedd80 00000004 df480000 b6f37000 c0110da8
      [   24.249233] 1f80: 00000000 00000000 00000004 b6edf5d8 00000004 b6f37000 00000004 c000f2a8
      [   24.257393] 1fa0: 00001000 c000f0e0 b6edf5d8 00000004 00000001 b6f37000 00000004 00000000
      [   24.265551] 1fc0: b6edf5d8 00000004 b6f37000 00000004 00000004 00000001 00000000 01e2a738
      [   24.273711] 1fe0: 00000000 beba0a20 b6e1f4f0 b6e7022c 60000010 00000001 ffffffff ffffffff
      [   24.281885] [<c048516c>] (mutex_lock) from [<c02a14b4>] (drm_modeset_lock_all+0x30/0xbc)
      [   24.289950] [<c02a14b4>] (drm_modeset_lock_all) from [<c02aec7c>] (exynos_drm_suspend+0xc/0x64)
      [   24.298627] [<c02aec7c>] (exynos_drm_suspend) from [<c02aecf4>] (exynos_drm_sys_suspend+0x20/0x34)
      [   24.307568] [<c02aecf4>] (exynos_drm_sys_suspend) from [<c02c2010>] (platform_pm_suspend+0x2c/0x54)
      [   24.316597] [<c02c2010>] (platform_pm_suspend) from [<c02c9470>] (dpm_run_callback+0x48/0x170)
      [   24.325188] [<c02c9470>] (dpm_run_callback) from [<c02ca660>] (__device_suspend+0x128/0x39c)
      [   24.333606] [<c02ca660>] (__device_suspend) from [<c02cbe18>] (dpm_suspend+0x5c/0x314)
      [   24.341506] [<c02cbe18>] (dpm_suspend) from [<c0068a74>] (suspend_devices_and_enter+0x8c/0x598)
      [   24.350185] [<c0068a74>] (suspend_devices_and_enter) from [<c0069444>] (pm_suspend+0x4c4/0x5d0)
      [   24.358862] [<c0069444>] (pm_suspend) from [<c0067d4c>] (state_store+0x70/0xd4)
      [   24.366156] [<c0067d4c>] (state_store) from [<c0221724>] (kobj_attr_store+0x14/0x20)
      [   24.373885] [<c0221724>] (kobj_attr_store) from [<c016ca6c>] (sysfs_kf_write+0x44/0x48)
      [   24.381867] [<c016ca6c>] (sysfs_kf_write) from [<c016c1d4>] (kernfs_fop_write+0xc0/0x17c)
      [   24.390027] [<c016c1d4>] (kernfs_fop_write) from [<c0110920>] (vfs_write+0xa0/0x1c4)
      [   24.397750] [<c0110920>] (vfs_write) from [<c0110da8>] (SyS_write+0x40/0x8c)
      [   24.404782] [<c0110da8>] (SyS_write) from [<c000f0e0>] (ret_fast_syscall+0x0/0x3c)
      [   24.412332] Code: e92d4010 e1a04000 f57ff05b f590f000 (e1903f9f)
      [   24.418448] ---[ end trace cfa06690eabe8dd5 ]---
      [   24.423032] Kernel panic - not syncing: Fatal exception
      [   24.428220] CPU1: stopping
      [   24.430905] CPU: 1 PID: 0 Comm: swapper/1 Tainted: G      D       3.16.0-rc3-00035-geba20bbdde04-dirty #51
      [   24.440549] [<c0016440>] (unwind_backtrace) from [<c001294c>] (show_stack+0x10/0x14)
      [   24.448269] [<c001294c>] (show_stack) from [<c04811e8>] (dump_stack+0x80/0xcc)
      [   24.455472] [<c04811e8>] (dump_stack) from [<c001495c>] (handle_IPI+0x130/0x15c)
      [   24.462850] [<c001495c>] (handle_IPI) from [<c000862c>] (gic_handle_irq+0x60/0x68)
      [   24.470400] [<c000862c>] (gic_handle_irq) from [<c0013440>] (__irq_svc+0x40/0x70)
      [   24.477860] Exception stack(0xdf4bdf88 to 0xdf4bdfd0)
      [   24.482898] df80:                   ffffffed 00000000 00000000 00000000 df4bc000 c06d042c
      [   24.491058] dfa0: 00000000 ffffffed c06d03c0 00000000 c070c288 00000000 00000000 df4bdfd0
      [   24.499214] dfc0: c0010324 c0010328 60000013 ffffffff
      [   24.504254] [<c0013440>] (__irq_svc) from [<c0010328>] (arch_cpu_idle+0x28/0x30)
      [   24.511634] [<c0010328>] (arch_cpu_idle) from [<c005f110>] (cpu_startup_entry+0x2c4/0x3f0)
      [   24.519878] [<c005f110>] (cpu_startup_entry) from [<400086c4>] (0x400086c4)
      [   24.526821] ---[ end Kernel panic - not syncing: Fatal exception
      Signed-off-by: NKrzysztof Kozlowski <k.kozlowski@samsung.com>
      Signed-off-by: NInki Dae <inki.dae@samsung.com>
      d50a1907
  7. 24 6月, 2014 1 次提交
    • S
      drm/exynos: Fix de-registration ordering · 0013fc9e
      Sachin Kamat 提交于
      'exynos_drm_pdev' was not getting unregistered if platform_driver_register()
      failed. Fix the ordering to allow this. This also fixes the below warning by
      moving the #endif macro. While at it also fix the ordering in the exit function
      so that de-registration happens in opposite order of registration.
      drivers/gpu/drm/exynos/exynos_drm_drv.c:768:1: warning: label
      'err_unregister_pd' defined but not used [-Wunused-label]
      Signed-off-by: NSachin Kamat <sachin.kamat@samsung.com>
      Signed-off-by: NInki Dae <inki.dae@samsung.com>
      0013fc9e
  8. 18 6月, 2014 1 次提交
    • D
      drm: Don't export internal module variables · a1bc07c5
      Daniel Vetter 提交于
      Drivers really have no business touching these. Noticed because
      exynose _did_ touch the vblank off delay, which could potentially
      affect other drivers.
      
      drm_debug is an exception since it's used in macros and inline
      functions.
      
      Note that this reduces the timeout on exynos from 50s to 5s.
      Apparently this was done to paper over a vblank get/put race in
      exynos, but really should be fixed properly somewhere else. Spotted by
      David.
      
      v2: Drop bonghits changes. Note to self: Don't submit patches
      before first coffee.
      
      Cc: Inki Dae <inki.dae@samsung.com>
      Reviewed-by: NDavid Herrmann <dh.herrmann@gmail.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      a1bc07c5
  9. 10 6月, 2014 1 次提交
  10. 02 6月, 2014 9 次提交
  11. 04 4月, 2014 1 次提交
  12. 23 3月, 2014 8 次提交