1. 07 Mar, 2018 3 commits
    • Marek Szyprowski's avatar
      drm/bridge: analogix_dp: Don't create useless connectors · 2e9b3e74
      Marek Szyprowski authored
      If there is another bridge after analogix_dp, then the connector object
      should not be created. This fixes following timeouts on Exynos5420-based
      Chromebook2 Peach-PIT board during boot:
      
      exynos-dp 145b0000.dp-controller: AUX CH cmd reply timeout!
      exynos-dp 145b0000.dp-controller: AUX CH enable timeout!
      exynos-dp 145b0000.dp-controller: AUX CH enable timeout!
      exynos-dp 145b0000.dp-controller: AUX CH enable timeout!
      exynos-dp 145b0000.dp-controller: AUX CH enable timeout!
      Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
      Tested-by: default avatarHeiko Stuebner <heiko@sntech.de>
      Signed-off-by: default avatarAndrzej Hajda <a.hajda@samsung.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180305085741.18896-4-m.szyprowski@samsung.com
      2e9b3e74
    • Marek Szyprowski's avatar
      drm/bridge: analogix_dp: Postpone enabling runtime power management · f25c8358
      Marek Szyprowski authored
      Enabling runtime power management early in analogix_dp_bind() causes following
      kernel NULL pointer dereference:
      
      Unable to handle kernel NULL pointer dereference at virtual address 000007d8
      pgd = 28ffa2e4
      [000007d8] *pgd=00000000
      Internal error: Oops: 5 [#1] PREEMPT SMP ARM
      Modules linked in:
      CPU: 6 PID: 69 Comm: kworker/6:1 Not tainted 4.16.0-rc1-00062-ge25751974ba8 #3622
      Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
      Workqueue: events deferred_probe_work_func
      PC is at analogix_dp_resume+0x8/0xc0
      LR is at pm_generic_runtime_resume+0x2c/0x38
      pc : [<c0531b98>]    lr : [<c0543fec>] psr: a0000113
      sp : ee13fbd8  ip : 0000001a  fp : 00000001
      r10: ee0eb080  r9 : c0552bd8  r8 : c0fb1d98
      r7 : eebb1010  r6 : eeae9808  r5 : 00000000  r4 : d4850415
      r3 : ee0ed010  r2 : b2d05e00  r1 : 00000000  r0 : 00000000
      Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM Segment none
      Control: 10c5387d  Table: 2000406a  DAC: 00000051
      Process kworker/6:1 (pid: 69, stack limit = 0x913205b4)
      Stack: (0xee13fbd8 to 0xee140000)
      ...
      [<c0531b98>] (analogix_dp_resume) from [<c0543fec>] (pm_generic_runtime_resume+0x2c/0x38)
      [<c0543fec>] (pm_generic_runtime_resume) from [<c054ffb4>] (__genpd_runtime_resume+0x2c/0x8c)
      [<c054ffb4>] (__genpd_runtime_resume) from [<c0552d24>] (genpd_runtime_resume+0x14c/0x258)
      [<c0552d24>] (genpd_runtime_resume) from [<c0547798>] (__rpm_callback+0x134/0x214)
      [<c0547798>] (__rpm_callback) from [<c0547898>] (rpm_callback+0x20/0x80)
      [<c0547898>] (rpm_callback) from [<c0546ff4>] (rpm_resume+0x3a0/0x734)
      [<c0546ff4>] (rpm_resume) from [<c05475ec>] (__pm_runtime_resume+0x64/0x9c)
      [<c05475ec>] (__pm_runtime_resume) from [<c053b95c>] (__device_attach+0x8c/0x134)
      [<c053b95c>] (__device_attach) from [<c053ad08>] (bus_probe_device+0x88/0x90)
      [<c053ad08>] (bus_probe_device) from [<c05390d0>] (device_add+0x3a8/0x580)
      [<c05390d0>] (device_add) from [<c06764c4>] (i2c_register_adapter+0xd4/0x3ec)
      [<c06764c4>] (i2c_register_adapter) from [<c05321c8>] (analogix_dp_bind+0x2a0/0x410)
      [<c05321c8>] (analogix_dp_bind) from [<c0528e90>] (exynos_dp_bind+0x9c/0x12c)
      [<c0528e90>] (exynos_dp_bind) from [<c0535bc4>] (component_bind_all+0xfc/0x258)
      [<c0535bc4>] (component_bind_all) from [<c0522ee8>] (exynos_drm_bind+0x15c/0x28c)
      [<c0522ee8>] (exynos_drm_bind) from [<c0536378>] (try_to_bring_up_master+0x1b8/0x29c)
      [<c0536378>] (try_to_bring_up_master) from [<c05364fc>] (component_add+0xa0/0x170)
      [<c05364fc>] (component_add) from [<c0528fe4>] (exynos_dp_probe+0x64/0xb8)
      [<c0528fe4>] (exynos_dp_probe) from [<c053debc>] (platform_drv_probe+0x50/0xb0)
      [<c053debc>] (platform_drv_probe) from [<c053bd18>] (driver_probe_device+0x2b8/0x4a0)
      [<c053bd18>] (driver_probe_device) from [<c0539e4c>] (bus_for_each_drv+0x44/0x8c)
      [<c0539e4c>] (bus_for_each_drv) from [<c053b970>] (__device_attach+0xa0/0x134)
      [<c053b970>] (__device_attach) from [<c053ad08>] (bus_probe_device+0x88/0x90)
      [<c053ad08>] (bus_probe_device) from [<c053b258>] (deferred_probe_work_func+0x3c/0x168)
      [<c053b258>] (deferred_probe_work_func) from [<c014352c>] (process_one_work+0x1d0/0x7bc)
      [<c014352c>] (process_one_work) from [<c0143b84>] (worker_thread+0x34/0x4dc)
      [<c0143b84>] (worker_thread) from [<c014a30c>] (kthread+0x128/0x164)
      [<c014a30c>] (kthread) from [<c01010b4>] (ret_from_fork+0x14/0x20)
      Exception stack(0xee13ffb0 to 0xee13fff8)
      ffa0:                                     00000000 00000000 00000000 00000000
      ffc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
      ffe0: 00000000 00000000 00000000 00000000 00000013 00000000
      Code: e2800e37 eafee601 e92d4070 e1a05000 (e59067d8)
      ---[ end trace bf6046013df7cab2 ]---
      
      This oops happens, because analogix_dp_bind() calls drm_dp_aux_register()
      which registers i2c adapter. I2C core tries to runtime get i2c host
      device during registration. This ends in analogix_dp_resume(), but dp
      context is NULL there. dp context is set in exynos_dp_bind() after
      executing analogix_dp_bind(). Fix this issue by postponing enabling runtime
      power management after drm_dp_aux_register().
      Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
      Tested-by: default avatarHeiko Stuebner <heiko@sntech.de>
      Reviewed-by: default avatarHeiko Stuebner <heiko@sntech.de>
      Signed-off-by: default avatarAndrzej Hajda <a.hajda@samsung.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180305085741.18896-3-m.szyprowski@samsung.com
      f25c8358
    • zain wang's avatar
      drm/bridge: analogix_dp: Don't power bridge in analogix_dp_bind · ea2a14da
      zain wang authored
      The bridge does not need to be powered in analogix_dp_bind(), so
      remove the calls to pm_runtime_get()/phy_power_on()/analogix_dp_init_dp()
      as well as their power-off counterparts.
      
      Cc: Stéphane Marchesin <marcheu@chromium.org>
      Signed-off-by: default avatarzain wang <wzz@rock-chips.com>
      Signed-off-by: default avatarCaesar Wang <wxt@rock-chips.com>
      [the patch originally just removed the power_on portion, seanpaul removed
      the power off code as well as improved the commit message]
      Signed-off-by: default avatarSean Paul <seanpaul@chromium.org>
      Signed-off-by: default avatarThierry Escande <thierry.escande@collabora.com>
      Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
      Tested-by: default avatarHeiko Stuebner <heiko@sntech.de>
      Reviewed-by: default avatarHeiko Stuebner <heiko@sntech.de>
      Signed-off-by: default avatarAndrzej Hajda <a.hajda@samsung.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180305085741.18896-2-m.szyprowski@samsung.com
      ea2a14da
  2. 06 Mar, 2018 8 commits
  3. 05 Mar, 2018 7 commits
  4. 02 Mar, 2018 15 commits
  5. 01 Mar, 2018 6 commits
  6. 28 Feb, 2018 1 commit