<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-stable.git/drivers/gpu/drm/exynos, branch linux-5.6.y</title>
<subtitle>Linux kernel stable tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/'/>
<entry>
<title>drm/bridge: analogix_dp: Split bind() into probe() and real bind()</title>
<updated>2020-05-10T08:32:41+00:00</updated>
<author>
<name>Marek Szyprowski</name>
<email>m.szyprowski@samsung.com</email>
</author>
<published>2020-03-10T10:34:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=1c416944adfcde8767d12c2fa804bf49e54e0ffd'/>
<id>1c416944adfcde8767d12c2fa804bf49e54e0ffd</id>
<content type='text'>
[ Upstream commit 83a196773b8bc6702f49df1eddc848180e350340 ]

Analogix_dp driver acquires all its resources in the -&gt;bind() callback,
what is a bit against the component driver based approach, where the
driver initialization is split into a probe(), where all resources are
gathered, and a bind(), where all objects are created and a compound
driver is initialized.

Extract all the resource related operations to analogix_dp_probe() and
analogix_dp_remove(), then call them before/after registration of the
device components from the main Exynos DP and Rockchip DP drivers. Also
move the plat_data initialization to the probe() to make it available for
the analogix_dp_probe() function.

This fixes the multiple calls to the bind() of the DRM compound driver
when the DP PHY driver is not yet loaded/probed:

[drm] Exynos DRM: using 14400000.fimd device for DMA mapping operations
exynos-drm exynos-drm: bound 14400000.fimd (ops fimd_component_ops [exynosdrm])
exynos-drm exynos-drm: bound 14450000.mixer (ops mixer_component_ops [exynosdrm])
exynos-dp 145b0000.dp-controller: no DP phy configured
exynos-drm exynos-drm: failed to bind 145b0000.dp-controller (ops exynos_dp_ops [exynosdrm]): -517
exynos-drm exynos-drm: master bind failed: -517
...
[drm] Exynos DRM: using 14400000.fimd device for DMA mapping operations
exynos-drm exynos-drm: bound 14400000.fimd (ops hdmi_enable [exynosdrm])
exynos-drm exynos-drm: bound 14450000.mixer (ops hdmi_enable [exynosdrm])
exynos-drm exynos-drm: bound 145b0000.dp-controller (ops hdmi_enable [exynosdrm])
exynos-drm exynos-drm: bound 14530000.hdmi (ops hdmi_enable [exynosdrm])
[drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
Console: switching to colour frame buffer device 170x48
exynos-drm exynos-drm: fb0: exynosdrmfb frame buffer device
[drm] Initialized exynos 1.1.0 20180330 for exynos-drm on minor 1
...

Signed-off-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Acked-by: Andy Yan &lt;andy.yan@rock-chips.com&gt;
Reviewed-by: Andrzej Hajda &lt;a.hajda@samsung.com&gt;
Signed-off-by: Andrzej Hajda &lt;a.hajda@samsung.com&gt;
Link: https://patchwork.freedesktop.org/patch/msgid/20200310103427.26048-1-m.szyprowski@samsung.com
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit 83a196773b8bc6702f49df1eddc848180e350340 ]

Analogix_dp driver acquires all its resources in the -&gt;bind() callback,
what is a bit against the component driver based approach, where the
driver initialization is split into a probe(), where all resources are
gathered, and a bind(), where all objects are created and a compound
driver is initialized.

Extract all the resource related operations to analogix_dp_probe() and
analogix_dp_remove(), then call them before/after registration of the
device components from the main Exynos DP and Rockchip DP drivers. Also
move the plat_data initialization to the probe() to make it available for
the analogix_dp_probe() function.

This fixes the multiple calls to the bind() of the DRM compound driver
when the DP PHY driver is not yet loaded/probed:

[drm] Exynos DRM: using 14400000.fimd device for DMA mapping operations
exynos-drm exynos-drm: bound 14400000.fimd (ops fimd_component_ops [exynosdrm])
exynos-drm exynos-drm: bound 14450000.mixer (ops mixer_component_ops [exynosdrm])
exynos-dp 145b0000.dp-controller: no DP phy configured
exynos-drm exynos-drm: failed to bind 145b0000.dp-controller (ops exynos_dp_ops [exynosdrm]): -517
exynos-drm exynos-drm: master bind failed: -517
...
[drm] Exynos DRM: using 14400000.fimd device for DMA mapping operations
exynos-drm exynos-drm: bound 14400000.fimd (ops hdmi_enable [exynosdrm])
exynos-drm exynos-drm: bound 14450000.mixer (ops hdmi_enable [exynosdrm])
exynos-drm exynos-drm: bound 145b0000.dp-controller (ops hdmi_enable [exynosdrm])
exynos-drm exynos-drm: bound 14530000.hdmi (ops hdmi_enable [exynosdrm])
[drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
Console: switching to colour frame buffer device 170x48
exynos-drm exynos-drm: fb0: exynosdrmfb frame buffer device
[drm] Initialized exynos 1.1.0 20180330 for exynos-drm on minor 1
...

Signed-off-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Acked-by: Andy Yan &lt;andy.yan@rock-chips.com&gt;
Reviewed-by: Andrzej Hajda &lt;a.hajda@samsung.com&gt;
Signed-off-by: Andrzej Hajda &lt;a.hajda@samsung.com&gt;
Link: https://patchwork.freedesktop.org/patch/msgid/20200310103427.26048-1-m.szyprowski@samsung.com
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>drm/exynos: Fix cleanup of IOMMU related objects</title>
<updated>2020-03-10T04:25:18+00:00</updated>
<author>
<name>Marek Szyprowski</name>
<email>m.szyprowski@samsung.com</email>
</author>
<published>2020-03-09T11:02:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=07dc3678bacc2a75b1900febea7d996a31f178a2'/>
<id>07dc3678bacc2a75b1900febea7d996a31f178a2</id>
<content type='text'>
Store the IOMMU mapping created by the device core of each Exynos DRM
sub-device and restore it when the Exynos DRM driver is unbound. This
fixes IOMMU initialization failure for the second time when a deferred
probe is triggered from the bind() callback of master's compound DRM
driver. This also fixes the following issue found using kmemleak
detector:

unreferenced object 0xc2137640 (size 64):
  comm "swapper/0", pid 1, jiffies 4294937900 (age 3127.400s)
  hex dump (first 32 bytes):
    50 a3 14 c2 80 a2 14 c2 01 00 00 00 20 00 00 00  P........... ...
    00 10 00 00 00 80 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [&lt;3acd268d&gt;] arch_setup_dma_ops+0x4c/0x104
    [&lt;9f7d2cce&gt;] of_dma_configure+0x19c/0x3a4
    [&lt;ba07704b&gt;] really_probe+0xb0/0x47c
    [&lt;4f510e4f&gt;] driver_probe_device+0x78/0x1c4
    [&lt;7481a0cf&gt;] device_driver_attach+0x58/0x60
    [&lt;0ff8f5c1&gt;] __driver_attach+0xb8/0x158
    [&lt;86006144&gt;] bus_for_each_dev+0x74/0xb4
    [&lt;10159dca&gt;] bus_add_driver+0x1c0/0x200
    [&lt;8a265265&gt;] driver_register+0x74/0x108
    [&lt;e0f3451a&gt;] exynos_drm_init+0xb0/0x134
    [&lt;db3fc7ba&gt;] do_one_initcall+0x90/0x458
    [&lt;6da35917&gt;] kernel_init_freeable+0x188/0x200
    [&lt;db3f74d4&gt;] kernel_init+0x8/0x110
    [&lt;1f3cddf9&gt;] ret_from_fork+0x14/0x20
    [&lt;8cd12507&gt;] 0x0
unreferenced object 0xc214a280 (size 128):
  comm "swapper/0", pid 1, jiffies 4294937900 (age 3127.400s)
  hex dump (first 32 bytes):
    00 a0 ec ed 00 00 00 00 00 00 00 00 00 00 00 00  ................
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [&lt;3acd268d&gt;] arch_setup_dma_ops+0x4c/0x104
    [&lt;9f7d2cce&gt;] of_dma_configure+0x19c/0x3a4
    [&lt;ba07704b&gt;] really_probe+0xb0/0x47c
    [&lt;4f510e4f&gt;] driver_probe_device+0x78/0x1c4
    [&lt;7481a0cf&gt;] device_driver_attach+0x58/0x60
    [&lt;0ff8f5c1&gt;] __driver_attach+0xb8/0x158
    [&lt;86006144&gt;] bus_for_each_dev+0x74/0xb4
    [&lt;10159dca&gt;] bus_add_driver+0x1c0/0x200
    [&lt;8a265265&gt;] driver_register+0x74/0x108
    [&lt;e0f3451a&gt;] exynos_drm_init+0xb0/0x134
    [&lt;db3fc7ba&gt;] do_one_initcall+0x90/0x458
    [&lt;6da35917&gt;] kernel_init_freeable+0x188/0x200
    [&lt;db3f74d4&gt;] kernel_init+0x8/0x110
    [&lt;1f3cddf9&gt;] ret_from_fork+0x14/0x20
    [&lt;8cd12507&gt;] 0x0
unreferenced object 0xedeca000 (size 4096):
  comm "swapper/0", pid 1, jiffies 4294937900 (age 3127.400s)
  hex dump (first 32 bytes):
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [&lt;3acd268d&gt;] arch_setup_dma_ops+0x4c/0x104
    [&lt;9f7d2cce&gt;] of_dma_configure+0x19c/0x3a4
    [&lt;ba07704b&gt;] really_probe+0xb0/0x47c
    [&lt;4f510e4f&gt;] driver_probe_device+0x78/0x1c4
    [&lt;7481a0cf&gt;] device_driver_attach+0x58/0x60
    [&lt;0ff8f5c1&gt;] __driver_attach+0xb8/0x158
    [&lt;86006144&gt;] bus_for_each_dev+0x74/0xb4
    [&lt;10159dca&gt;] bus_add_driver+0x1c0/0x200
    [&lt;8a265265&gt;] driver_register+0x74/0x108
    [&lt;e0f3451a&gt;] exynos_drm_init+0xb0/0x134
    [&lt;db3fc7ba&gt;] do_one_initcall+0x90/0x458
    [&lt;6da35917&gt;] kernel_init_freeable+0x188/0x200
    [&lt;db3f74d4&gt;] kernel_init+0x8/0x110
    [&lt;1f3cddf9&gt;] ret_from_fork+0x14/0x20
    [&lt;8cd12507&gt;] 0x0
unreferenced object 0xc214a300 (size 128):
  comm "swapper/0", pid 1, jiffies 4294937900 (age 3127.400s)
  hex dump (first 32 bytes):
    00 a3 14 c2 00 a3 14 c2 00 40 18 c2 00 80 18 c2  .........@......
    02 00 02 00 ad 4e ad de ff ff ff ff ff ff ff ff  .....N..........
  backtrace:
    [&lt;08cbd8bc&gt;] iommu_domain_alloc+0x24/0x50
    [&lt;b835abee&gt;] arm_iommu_create_mapping+0xe4/0x134
    [&lt;3acd268d&gt;] arch_setup_dma_ops+0x4c/0x104
    [&lt;9f7d2cce&gt;] of_dma_configure+0x19c/0x3a4
    [&lt;ba07704b&gt;] really_probe+0xb0/0x47c
    [&lt;4f510e4f&gt;] driver_probe_device+0x78/0x1c4
    [&lt;7481a0cf&gt;] device_driver_attach+0x58/0x60
    [&lt;0ff8f5c1&gt;] __driver_attach+0xb8/0x158
    [&lt;86006144&gt;] bus_for_each_dev+0x74/0xb4
    [&lt;10159dca&gt;] bus_add_driver+0x1c0/0x200
    [&lt;8a265265&gt;] driver_register+0x74/0x108
    [&lt;e0f3451a&gt;] exynos_drm_init+0xb0/0x134
    [&lt;db3fc7ba&gt;] do_one_initcall+0x90/0x458
    [&lt;6da35917&gt;] kernel_init_freeable+0x188/0x200
    [&lt;db3f74d4&gt;] kernel_init+0x8/0x110
    [&lt;1f3cddf9&gt;] ret_from_fork+0x14/0x20

Signed-off-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Reviewed-by: Lukasz Luba &lt;lukasz.luba@arm.com&gt;
Signed-off-by: Inki Dae &lt;inki.dae@samsung.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Store the IOMMU mapping created by the device core of each Exynos DRM
sub-device and restore it when the Exynos DRM driver is unbound. This
fixes IOMMU initialization failure for the second time when a deferred
probe is triggered from the bind() callback of master's compound DRM
driver. This also fixes the following issue found using kmemleak
detector:

unreferenced object 0xc2137640 (size 64):
  comm "swapper/0", pid 1, jiffies 4294937900 (age 3127.400s)
  hex dump (first 32 bytes):
    50 a3 14 c2 80 a2 14 c2 01 00 00 00 20 00 00 00  P........... ...
    00 10 00 00 00 80 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [&lt;3acd268d&gt;] arch_setup_dma_ops+0x4c/0x104
    [&lt;9f7d2cce&gt;] of_dma_configure+0x19c/0x3a4
    [&lt;ba07704b&gt;] really_probe+0xb0/0x47c
    [&lt;4f510e4f&gt;] driver_probe_device+0x78/0x1c4
    [&lt;7481a0cf&gt;] device_driver_attach+0x58/0x60
    [&lt;0ff8f5c1&gt;] __driver_attach+0xb8/0x158
    [&lt;86006144&gt;] bus_for_each_dev+0x74/0xb4
    [&lt;10159dca&gt;] bus_add_driver+0x1c0/0x200
    [&lt;8a265265&gt;] driver_register+0x74/0x108
    [&lt;e0f3451a&gt;] exynos_drm_init+0xb0/0x134
    [&lt;db3fc7ba&gt;] do_one_initcall+0x90/0x458
    [&lt;6da35917&gt;] kernel_init_freeable+0x188/0x200
    [&lt;db3f74d4&gt;] kernel_init+0x8/0x110
    [&lt;1f3cddf9&gt;] ret_from_fork+0x14/0x20
    [&lt;8cd12507&gt;] 0x0
unreferenced object 0xc214a280 (size 128):
  comm "swapper/0", pid 1, jiffies 4294937900 (age 3127.400s)
  hex dump (first 32 bytes):
    00 a0 ec ed 00 00 00 00 00 00 00 00 00 00 00 00  ................
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [&lt;3acd268d&gt;] arch_setup_dma_ops+0x4c/0x104
    [&lt;9f7d2cce&gt;] of_dma_configure+0x19c/0x3a4
    [&lt;ba07704b&gt;] really_probe+0xb0/0x47c
    [&lt;4f510e4f&gt;] driver_probe_device+0x78/0x1c4
    [&lt;7481a0cf&gt;] device_driver_attach+0x58/0x60
    [&lt;0ff8f5c1&gt;] __driver_attach+0xb8/0x158
    [&lt;86006144&gt;] bus_for_each_dev+0x74/0xb4
    [&lt;10159dca&gt;] bus_add_driver+0x1c0/0x200
    [&lt;8a265265&gt;] driver_register+0x74/0x108
    [&lt;e0f3451a&gt;] exynos_drm_init+0xb0/0x134
    [&lt;db3fc7ba&gt;] do_one_initcall+0x90/0x458
    [&lt;6da35917&gt;] kernel_init_freeable+0x188/0x200
    [&lt;db3f74d4&gt;] kernel_init+0x8/0x110
    [&lt;1f3cddf9&gt;] ret_from_fork+0x14/0x20
    [&lt;8cd12507&gt;] 0x0
unreferenced object 0xedeca000 (size 4096):
  comm "swapper/0", pid 1, jiffies 4294937900 (age 3127.400s)
  hex dump (first 32 bytes):
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [&lt;3acd268d&gt;] arch_setup_dma_ops+0x4c/0x104
    [&lt;9f7d2cce&gt;] of_dma_configure+0x19c/0x3a4
    [&lt;ba07704b&gt;] really_probe+0xb0/0x47c
    [&lt;4f510e4f&gt;] driver_probe_device+0x78/0x1c4
    [&lt;7481a0cf&gt;] device_driver_attach+0x58/0x60
    [&lt;0ff8f5c1&gt;] __driver_attach+0xb8/0x158
    [&lt;86006144&gt;] bus_for_each_dev+0x74/0xb4
    [&lt;10159dca&gt;] bus_add_driver+0x1c0/0x200
    [&lt;8a265265&gt;] driver_register+0x74/0x108
    [&lt;e0f3451a&gt;] exynos_drm_init+0xb0/0x134
    [&lt;db3fc7ba&gt;] do_one_initcall+0x90/0x458
    [&lt;6da35917&gt;] kernel_init_freeable+0x188/0x200
    [&lt;db3f74d4&gt;] kernel_init+0x8/0x110
    [&lt;1f3cddf9&gt;] ret_from_fork+0x14/0x20
    [&lt;8cd12507&gt;] 0x0
unreferenced object 0xc214a300 (size 128):
  comm "swapper/0", pid 1, jiffies 4294937900 (age 3127.400s)
  hex dump (first 32 bytes):
    00 a3 14 c2 00 a3 14 c2 00 40 18 c2 00 80 18 c2  .........@......
    02 00 02 00 ad 4e ad de ff ff ff ff ff ff ff ff  .....N..........
  backtrace:
    [&lt;08cbd8bc&gt;] iommu_domain_alloc+0x24/0x50
    [&lt;b835abee&gt;] arm_iommu_create_mapping+0xe4/0x134
    [&lt;3acd268d&gt;] arch_setup_dma_ops+0x4c/0x104
    [&lt;9f7d2cce&gt;] of_dma_configure+0x19c/0x3a4
    [&lt;ba07704b&gt;] really_probe+0xb0/0x47c
    [&lt;4f510e4f&gt;] driver_probe_device+0x78/0x1c4
    [&lt;7481a0cf&gt;] device_driver_attach+0x58/0x60
    [&lt;0ff8f5c1&gt;] __driver_attach+0xb8/0x158
    [&lt;86006144&gt;] bus_for_each_dev+0x74/0xb4
    [&lt;10159dca&gt;] bus_add_driver+0x1c0/0x200
    [&lt;8a265265&gt;] driver_register+0x74/0x108
    [&lt;e0f3451a&gt;] exynos_drm_init+0xb0/0x134
    [&lt;db3fc7ba&gt;] do_one_initcall+0x90/0x458
    [&lt;6da35917&gt;] kernel_init_freeable+0x188/0x200
    [&lt;db3f74d4&gt;] kernel_init+0x8/0x110
    [&lt;1f3cddf9&gt;] ret_from_fork+0x14/0x20

Signed-off-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Reviewed-by: Lukasz Luba &lt;lukasz.luba@arm.com&gt;
Signed-off-by: Inki Dae &lt;inki.dae@samsung.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>drm/exynos: hdmi: don't leak enable HDMI_EN regulator if probe fails</title>
<updated>2020-03-02T04:02:41+00:00</updated>
<author>
<name>Marek Szyprowski</name>
<email>m.szyprowski@samsung.com</email>
</author>
<published>2020-02-20T12:57:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=3b6a9b19ab652efac7ad4c392add6f1235019568'/>
<id>3b6a9b19ab652efac7ad4c392add6f1235019568</id>
<content type='text'>
Move enabling and disabling HDMI_EN optional regulator to probe() function
to keep track on the regulator status. This fixes following warning if
probe() fails (for example when I2C DDC adapter cannot be yet gathered
due to the missing driver). This fixes following warning observed on
Arndale5250 board with multi_v7_defconfig:

[drm] Failed to get ddc i2c adapter by node
------------[ cut here ]------------
WARNING: CPU: 0 PID: 214 at drivers/regulator/core.c:2051 _regulator_put+0x16c/0x184
Modules linked in: ...
CPU: 0 PID: 214 Comm: systemd-udevd Not tainted 5.6.0-rc2-next-20200219-00040-g38af1dfafdbb #7570
Hardware name: Samsung Exynos (Flattened Device Tree)
[&lt;c0312258&gt;] (unwind_backtrace) from [&lt;c030cc10&gt;] (show_stack+0x10/0x14)
[&lt;c030cc10&gt;] (show_stack) from [&lt;c0f0d3a0&gt;] (dump_stack+0xcc/0xe0)
[&lt;c0f0d3a0&gt;] (dump_stack) from [&lt;c0346a58&gt;] (__warn+0xe0/0xf8)
[&lt;c0346a58&gt;] (__warn) from [&lt;c0346b20&gt;] (warn_slowpath_fmt+0xb0/0xb8)
[&lt;c0346b20&gt;] (warn_slowpath_fmt) from [&lt;c0893f58&gt;] (_regulator_put+0x16c/0x184)
[&lt;c0893f58&gt;] (_regulator_put) from [&lt;c0893f8c&gt;] (regulator_put+0x1c/0x2c)
[&lt;c0893f8c&gt;] (regulator_put) from [&lt;c09b2664&gt;] (release_nodes+0x17c/0x200)
[&lt;c09b2664&gt;] (release_nodes) from [&lt;c09aebe8&gt;] (really_probe+0x10c/0x350)
[&lt;c09aebe8&gt;] (really_probe) from [&lt;c09aefa8&gt;] (driver_probe_device+0x60/0x1a0)
[&lt;c09aefa8&gt;] (driver_probe_device) from [&lt;c09af288&gt;] (device_driver_attach+0x58/0x60)
[&lt;c09af288&gt;] (device_driver_attach) from [&lt;c09af310&gt;] (__driver_attach+0x80/0xbc)
[&lt;c09af310&gt;] (__driver_attach) from [&lt;c09ace34&gt;] (bus_for_each_dev+0x68/0xb4)
[&lt;c09ace34&gt;] (bus_for_each_dev) from [&lt;c09ae00c&gt;] (bus_add_driver+0x130/0x1e8)
[&lt;c09ae00c&gt;] (bus_add_driver) from [&lt;c09afd98&gt;] (driver_register+0x78/0x110)
[&lt;c09afd98&gt;] (driver_register) from [&lt;bf139558&gt;] (exynos_drm_init+0xe8/0x11c [exynosdrm])
[&lt;bf139558&gt;] (exynos_drm_init [exynosdrm]) from [&lt;c0302fa8&gt;] (do_one_initcall+0x50/0x220)
[&lt;c0302fa8&gt;] (do_one_initcall) from [&lt;c03dc02c&gt;] (do_init_module+0x60/0x210)
[&lt;c03dc02c&gt;] (do_init_module) from [&lt;c03daf44&gt;] (load_module+0x1c0c/0x2310)
[&lt;c03daf44&gt;] (load_module) from [&lt;c03db85c&gt;] (sys_finit_module+0xac/0xbc)
[&lt;c03db85c&gt;] (sys_finit_module) from [&lt;c0301000&gt;] (ret_fast_syscall+0x0/0x54)
Exception stack(0xecca3fa8 to 0xecca3ff0)
...
---[ end trace 276c91214635905c ]---

Signed-off-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Reviewed-by: Andrzej Hajda &lt;a.hajda@samsung.com&gt;
Signed-off-by: Inki Dae &lt;inki.dae@samsung.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Move enabling and disabling HDMI_EN optional regulator to probe() function
to keep track on the regulator status. This fixes following warning if
probe() fails (for example when I2C DDC adapter cannot be yet gathered
due to the missing driver). This fixes following warning observed on
Arndale5250 board with multi_v7_defconfig:

[drm] Failed to get ddc i2c adapter by node
------------[ cut here ]------------
WARNING: CPU: 0 PID: 214 at drivers/regulator/core.c:2051 _regulator_put+0x16c/0x184
Modules linked in: ...
CPU: 0 PID: 214 Comm: systemd-udevd Not tainted 5.6.0-rc2-next-20200219-00040-g38af1dfafdbb #7570
Hardware name: Samsung Exynos (Flattened Device Tree)
[&lt;c0312258&gt;] (unwind_backtrace) from [&lt;c030cc10&gt;] (show_stack+0x10/0x14)
[&lt;c030cc10&gt;] (show_stack) from [&lt;c0f0d3a0&gt;] (dump_stack+0xcc/0xe0)
[&lt;c0f0d3a0&gt;] (dump_stack) from [&lt;c0346a58&gt;] (__warn+0xe0/0xf8)
[&lt;c0346a58&gt;] (__warn) from [&lt;c0346b20&gt;] (warn_slowpath_fmt+0xb0/0xb8)
[&lt;c0346b20&gt;] (warn_slowpath_fmt) from [&lt;c0893f58&gt;] (_regulator_put+0x16c/0x184)
[&lt;c0893f58&gt;] (_regulator_put) from [&lt;c0893f8c&gt;] (regulator_put+0x1c/0x2c)
[&lt;c0893f8c&gt;] (regulator_put) from [&lt;c09b2664&gt;] (release_nodes+0x17c/0x200)
[&lt;c09b2664&gt;] (release_nodes) from [&lt;c09aebe8&gt;] (really_probe+0x10c/0x350)
[&lt;c09aebe8&gt;] (really_probe) from [&lt;c09aefa8&gt;] (driver_probe_device+0x60/0x1a0)
[&lt;c09aefa8&gt;] (driver_probe_device) from [&lt;c09af288&gt;] (device_driver_attach+0x58/0x60)
[&lt;c09af288&gt;] (device_driver_attach) from [&lt;c09af310&gt;] (__driver_attach+0x80/0xbc)
[&lt;c09af310&gt;] (__driver_attach) from [&lt;c09ace34&gt;] (bus_for_each_dev+0x68/0xb4)
[&lt;c09ace34&gt;] (bus_for_each_dev) from [&lt;c09ae00c&gt;] (bus_add_driver+0x130/0x1e8)
[&lt;c09ae00c&gt;] (bus_add_driver) from [&lt;c09afd98&gt;] (driver_register+0x78/0x110)
[&lt;c09afd98&gt;] (driver_register) from [&lt;bf139558&gt;] (exynos_drm_init+0xe8/0x11c [exynosdrm])
[&lt;bf139558&gt;] (exynos_drm_init [exynosdrm]) from [&lt;c0302fa8&gt;] (do_one_initcall+0x50/0x220)
[&lt;c0302fa8&gt;] (do_one_initcall) from [&lt;c03dc02c&gt;] (do_init_module+0x60/0x210)
[&lt;c03dc02c&gt;] (do_init_module) from [&lt;c03daf44&gt;] (load_module+0x1c0c/0x2310)
[&lt;c03daf44&gt;] (load_module) from [&lt;c03db85c&gt;] (sys_finit_module+0xac/0xbc)
[&lt;c03db85c&gt;] (sys_finit_module) from [&lt;c0301000&gt;] (ret_fast_syscall+0x0/0x54)
Exception stack(0xecca3fa8 to 0xecca3ff0)
...
---[ end trace 276c91214635905c ]---

Signed-off-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Reviewed-by: Andrzej Hajda &lt;a.hajda@samsung.com&gt;
Signed-off-by: Inki Dae &lt;inki.dae@samsung.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>drm/exynos: dsi: fix workaround for the legacy clock name</title>
<updated>2020-03-02T04:02:34+00:00</updated>
<author>
<name>Marek Szyprowski</name>
<email>m.szyprowski@samsung.com</email>
</author>
<published>2020-02-20T12:30:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=c0fd99d659ba5582e09625c7a985d63fc2ca74b5'/>
<id>c0fd99d659ba5582e09625c7a985d63fc2ca74b5</id>
<content type='text'>
Writing to the built-in strings arrays doesn't work if driver is loaded
as kernel module. This is also considered as a bad pattern. Fix this by
adding a call to clk_get() with legacy clock name. This fixes following
kernel oops if driver is loaded as module:

Unable to handle kernel paging request at virtual address bf047978
 pgd = (ptrval)
 [bf047978] *pgd=59344811, *pte=5903c6df, *ppte=5903c65f
 Internal error: Oops: 80f [#1] SMP ARM
 Modules linked in: mc exynosdrm(+) analogix_dp rtc_s3c exynos_ppmu i2c_gpio
 CPU: 1 PID: 212 Comm: systemd-udevd Not tainted 5.6.0-rc2-next-20200219 #326
 videodev: Linux video capture interface: v2.00
 Hardware name: Samsung Exynos (Flattened Device Tree)
 PC is at exynos_dsi_probe+0x1f0/0x384 [exynosdrm]
 LR is at exynos_dsi_probe+0x1dc/0x384 [exynosdrm]
 ...
 Process systemd-udevd (pid: 212, stack limit = 0x(ptrval))
 ...
 [&lt;bf03cf14&gt;] (exynos_dsi_probe [exynosdrm]) from [&lt;c09b1ca0&gt;] (platform_drv_probe+0x6c/0xa4)
 [&lt;c09b1ca0&gt;] (platform_drv_probe) from [&lt;c09afcb8&gt;] (really_probe+0x210/0x350)
 [&lt;c09afcb8&gt;] (really_probe) from [&lt;c09aff74&gt;] (driver_probe_device+0x60/0x1a0)
 [&lt;c09aff74&gt;] (driver_probe_device) from [&lt;c09b0254&gt;] (device_driver_attach+0x58/0x60)
 [&lt;c09b0254&gt;] (device_driver_attach) from [&lt;c09b02dc&gt;] (__driver_attach+0x80/0xbc)
 [&lt;c09b02dc&gt;] (__driver_attach) from [&lt;c09ade00&gt;] (bus_for_each_dev+0x68/0xb4)
 [&lt;c09ade00&gt;] (bus_for_each_dev) from [&lt;c09aefd8&gt;] (bus_add_driver+0x130/0x1e8)
 [&lt;c09aefd8&gt;] (bus_add_driver) from [&lt;c09b0d64&gt;] (driver_register+0x78/0x110)
 [&lt;c09b0d64&gt;] (driver_register) from [&lt;bf038558&gt;] (exynos_drm_init+0xe8/0x11c [exynosdrm])
 [&lt;bf038558&gt;] (exynos_drm_init [exynosdrm]) from [&lt;c0302fa8&gt;] (do_one_initcall+0x50/0x220)
 [&lt;c0302fa8&gt;] (do_one_initcall) from [&lt;c03dd02c&gt;] (do_init_module+0x60/0x210)
 [&lt;c03dd02c&gt;] (do_init_module) from [&lt;c03dbf44&gt;] (load_module+0x1c0c/0x2310)
 [&lt;c03dbf44&gt;] (load_module) from [&lt;c03dc85c&gt;] (sys_finit_module+0xac/0xbc)
 [&lt;c03dc85c&gt;] (sys_finit_module) from [&lt;c0301000&gt;] (ret_fast_syscall+0x0/0x54)
 Exception stack(0xd979bfa8 to 0xd979bff0)
 ...
 ---[ end trace db16efe05faab470 ]---

Signed-off-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Reviewed-by: Andrzej Hajda &lt;a.hajda@samsung.com&gt;
Signed-off-by: Inki Dae &lt;inki.dae@samsung.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Writing to the built-in strings arrays doesn't work if driver is loaded
as kernel module. This is also considered as a bad pattern. Fix this by
adding a call to clk_get() with legacy clock name. This fixes following
kernel oops if driver is loaded as module:

Unable to handle kernel paging request at virtual address bf047978
 pgd = (ptrval)
 [bf047978] *pgd=59344811, *pte=5903c6df, *ppte=5903c65f
 Internal error: Oops: 80f [#1] SMP ARM
 Modules linked in: mc exynosdrm(+) analogix_dp rtc_s3c exynos_ppmu i2c_gpio
 CPU: 1 PID: 212 Comm: systemd-udevd Not tainted 5.6.0-rc2-next-20200219 #326
 videodev: Linux video capture interface: v2.00
 Hardware name: Samsung Exynos (Flattened Device Tree)
 PC is at exynos_dsi_probe+0x1f0/0x384 [exynosdrm]
 LR is at exynos_dsi_probe+0x1dc/0x384 [exynosdrm]
 ...
 Process systemd-udevd (pid: 212, stack limit = 0x(ptrval))
 ...
 [&lt;bf03cf14&gt;] (exynos_dsi_probe [exynosdrm]) from [&lt;c09b1ca0&gt;] (platform_drv_probe+0x6c/0xa4)
 [&lt;c09b1ca0&gt;] (platform_drv_probe) from [&lt;c09afcb8&gt;] (really_probe+0x210/0x350)
 [&lt;c09afcb8&gt;] (really_probe) from [&lt;c09aff74&gt;] (driver_probe_device+0x60/0x1a0)
 [&lt;c09aff74&gt;] (driver_probe_device) from [&lt;c09b0254&gt;] (device_driver_attach+0x58/0x60)
 [&lt;c09b0254&gt;] (device_driver_attach) from [&lt;c09b02dc&gt;] (__driver_attach+0x80/0xbc)
 [&lt;c09b02dc&gt;] (__driver_attach) from [&lt;c09ade00&gt;] (bus_for_each_dev+0x68/0xb4)
 [&lt;c09ade00&gt;] (bus_for_each_dev) from [&lt;c09aefd8&gt;] (bus_add_driver+0x130/0x1e8)
 [&lt;c09aefd8&gt;] (bus_add_driver) from [&lt;c09b0d64&gt;] (driver_register+0x78/0x110)
 [&lt;c09b0d64&gt;] (driver_register) from [&lt;bf038558&gt;] (exynos_drm_init+0xe8/0x11c [exynosdrm])
 [&lt;bf038558&gt;] (exynos_drm_init [exynosdrm]) from [&lt;c0302fa8&gt;] (do_one_initcall+0x50/0x220)
 [&lt;c0302fa8&gt;] (do_one_initcall) from [&lt;c03dd02c&gt;] (do_init_module+0x60/0x210)
 [&lt;c03dd02c&gt;] (do_init_module) from [&lt;c03dbf44&gt;] (load_module+0x1c0c/0x2310)
 [&lt;c03dbf44&gt;] (load_module) from [&lt;c03dc85c&gt;] (sys_finit_module+0xac/0xbc)
 [&lt;c03dc85c&gt;] (sys_finit_module) from [&lt;c0301000&gt;] (ret_fast_syscall+0x0/0x54)
 Exception stack(0xd979bfa8 to 0xd979bff0)
 ...
 ---[ end trace db16efe05faab470 ]---

Signed-off-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Reviewed-by: Andrzej Hajda &lt;a.hajda@samsung.com&gt;
Signed-off-by: Inki Dae &lt;inki.dae@samsung.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>drm/exynos: dsi: propagate error value and silence meaningless warning</title>
<updated>2020-03-02T04:02:27+00:00</updated>
<author>
<name>Marek Szyprowski</name>
<email>m.szyprowski@samsung.com</email>
</author>
<published>2020-02-27T07:06:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=0a9d1e3f3f038785ebc72d53f1c409d07f6b4ff5'/>
<id>0a9d1e3f3f038785ebc72d53f1c409d07f6b4ff5</id>
<content type='text'>
Properly propagate error value from devm_regulator_bulk_get() and don't
confuse user with meaningless warning about failure in getting regulators
in case of deferred probe.

Signed-off-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Reviewed-by: Krzysztof Kozlowski &lt;krzk@kernel.org&gt;
Signed-off-by: Inki Dae &lt;inki.dae@samsung.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Properly propagate error value from devm_regulator_bulk_get() and don't
confuse user with meaningless warning about failure in getting regulators
in case of deferred probe.

Signed-off-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Reviewed-by: Krzysztof Kozlowski &lt;krzk@kernel.org&gt;
Signed-off-by: Inki Dae &lt;inki.dae@samsung.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>drm/exynos: Rename Exynos to lowercase</title>
<updated>2020-01-21T00:09:42+00:00</updated>
<author>
<name>Krzysztof Kozlowski</name>
<email>krzk@kernel.org</email>
</author>
<published>2020-01-04T15:21:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=c0bf499f6f84634c14cdec0afd1f17ff4121afa2'/>
<id>c0bf499f6f84634c14cdec0afd1f17ff4121afa2</id>
<content type='text'>
Fix up inconsistent usage of upper and lowercase letters in "Exynos"
name.

"EXYNOS" is not an abbreviation but a regular trademarked name.
Therefore it should be written with lowercase letters starting with
capital letter.

The lowercase "Exynos" name is promoted by its manufacturer Samsung
Electronics Co., Ltd., in advertisement materials and on website.

Signed-off-by: Krzysztof Kozlowski &lt;krzk@kernel.org&gt;
Signed-off-by: Inki Dae &lt;inki.dae@samsung.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fix up inconsistent usage of upper and lowercase letters in "Exynos"
name.

"EXYNOS" is not an abbreviation but a regular trademarked name.
Therefore it should be written with lowercase letters starting with
capital letter.

The lowercase "Exynos" name is promoted by its manufacturer Samsung
Electronics Co., Ltd., in advertisement materials and on website.

Signed-off-by: Krzysztof Kozlowski &lt;krzk@kernel.org&gt;
Signed-off-by: Inki Dae &lt;inki.dae@samsung.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>drm/exynos: change callback names</title>
<updated>2020-01-21T00:09:42+00:00</updated>
<author>
<name>Inki Dae</name>
<email>inki.dae@samsung.com</email>
</author>
<published>2019-12-19T02:07:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=11f954899d55c622afbbf23925ce1faf5d647c81'/>
<id>11f954899d55c622afbbf23925ce1faf5d647c81</id>
<content type='text'>
This patch changes Exynos specific 'disable' and 'enable'
callback names to 'atomic_disable/enable' for the consistency.

Signed-off-by: Inki Dae &lt;inki.dae@samsung.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch changes Exynos specific 'disable' and 'enable'
callback names to 'atomic_disable/enable' for the consistency.

Signed-off-by: Inki Dae &lt;inki.dae@samsung.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Backmerge v5.5-rc7 into drm-next</title>
<updated>2020-01-20T01:42:57+00:00</updated>
<author>
<name>Dave Airlie</name>
<email>airlied@redhat.com</email>
</author>
<published>2020-01-20T01:08:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=3d4743131b8de970faa4b979ead0fadfe5d2de9d'/>
<id>3d4743131b8de970faa4b979ead0fadfe5d2de9d</id>
<content type='text'>
msm needs 5.5-rc4, go to the latest.

Signed-off-by: Dave Airlie &lt;airlied@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
msm needs 5.5-rc4, go to the latest.

Signed-off-by: Dave Airlie &lt;airlied@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>drm/exynos: dsi: Fix bridge chain handling</title>
<updated>2020-01-08T08:09:48+00:00</updated>
<author>
<name>Boris Brezillon</name>
<email>boris.brezillon@collabora.com</email>
</author>
<published>2019-12-27T14:41:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=f66ff55a9bd06855f9c6b8f29d8760f77bfe43c2'/>
<id>f66ff55a9bd06855f9c6b8f29d8760f77bfe43c2</id>
<content type='text'>
Commit 05193dc38197 ("drm/bridge: Make the bridge chain a double-linked
list") patched the bridge chain logic to use a double-linked list instead
of a single-linked list. This change induced changes to the Exynos driver
which was manually resetting the encoder-&gt;bridge element to NULL to
control the enable/disable sequence of the bridge chain. During this
conversion, 2 bugs were introduced:

1/ list_splice() was used to move chain elements to our own internal
   chain, but list_splice() does not reset the source list to an empty
   state, leading to unexpected bridge hook calls when
   drm_bridge_chain_xxx() helpers were called by the core. Replacing
   the list_splice() call by list_splice_init() fixes this problem.

2/ drm_bridge_chain_xxx() helpers operate on the
   bridge-&gt;encoder-&gt;bridge_chain list, which is now empty. When the
   helper uses list_for_each_entry_reverse() we end up with no operation
   done which is not what we want. But that's even worse when the helper
   uses list_for_each_entry_from(), because in that case we end up in
   an infinite loop searching for the list head element which is no
   longer encoder-&gt;bridge_chain but exynos_dsi-&gt;bridge_chain. To address
   that problem we stop using the bridge chain helpers and call the
   hooks directly.

Reported-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Fixes: 05193dc38197 ("drm/bridge: Make the bridge chain a double-linked list")
Signed-off-by: Boris Brezillon &lt;boris.brezillon@collabora.com&gt;
Tested-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Reviewed-by: Andrzej Hajda &lt;a.hajda@samsung.com&gt;
Link: https://patchwork.freedesktop.org/patch/msgid/20191227144124.210294-3-boris.brezillon@collabora.com
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Commit 05193dc38197 ("drm/bridge: Make the bridge chain a double-linked
list") patched the bridge chain logic to use a double-linked list instead
of a single-linked list. This change induced changes to the Exynos driver
which was manually resetting the encoder-&gt;bridge element to NULL to
control the enable/disable sequence of the bridge chain. During this
conversion, 2 bugs were introduced:

1/ list_splice() was used to move chain elements to our own internal
   chain, but list_splice() does not reset the source list to an empty
   state, leading to unexpected bridge hook calls when
   drm_bridge_chain_xxx() helpers were called by the core. Replacing
   the list_splice() call by list_splice_init() fixes this problem.

2/ drm_bridge_chain_xxx() helpers operate on the
   bridge-&gt;encoder-&gt;bridge_chain list, which is now empty. When the
   helper uses list_for_each_entry_reverse() we end up with no operation
   done which is not what we want. But that's even worse when the helper
   uses list_for_each_entry_from(), because in that case we end up in
   an infinite loop searching for the list head element which is no
   longer encoder-&gt;bridge_chain but exynos_dsi-&gt;bridge_chain. To address
   that problem we stop using the bridge chain helpers and call the
   hooks directly.

Reported-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Fixes: 05193dc38197 ("drm/bridge: Make the bridge chain a double-linked list")
Signed-off-by: Boris Brezillon &lt;boris.brezillon@collabora.com&gt;
Tested-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Reviewed-by: Andrzej Hajda &lt;a.hajda@samsung.com&gt;
Link: https://patchwork.freedesktop.org/patch/msgid/20191227144124.210294-3-boris.brezillon@collabora.com
</pre>
</div>
</content>
</entry>
<entry>
<title>drm/exynos: gsc: add missed component_del</title>
<updated>2019-12-18T23:52:42+00:00</updated>
<author>
<name>Chuhong Yuan</name>
<email>hslester96@gmail.com</email>
</author>
<published>2019-11-18T11:39:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=84c92365b20a44c363b95390ea00dfbdd786f031'/>
<id>84c92365b20a44c363b95390ea00dfbdd786f031</id>
<content type='text'>
The driver forgets to call component_del in remove to match component_add
in probe.
Add the missed call to fix it.

Signed-off-by: Chuhong Yuan &lt;hslester96@gmail.com&gt;
Signed-off-by: Inki Dae &lt;inki.dae@samsung.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The driver forgets to call component_del in remove to match component_add
in probe.
Add the missed call to fix it.

Signed-off-by: Chuhong Yuan &lt;hslester96@gmail.com&gt;
Signed-off-by: Inki Dae &lt;inki.dae@samsung.net&gt;
</pre>
</div>
</content>
</entry>
</feed>
