Skip to content

Commit 3682d60

Browse files
Yannick Fertrefourmone
Yannick Fertre
authored andcommitted
drm/stm: ltdc: reset ltdc on crtc enable
To avoid any blocking point between uboot and the kernel, ltdc must be reset. To have a continuous display, the reset is conditional on the boolean "default-on". The reset must be done when activating the crtc. Change-Id: I1f8c31087ea28fab4ff56400f1aa863541ed08c3 Signed-off-by: Yannick Fertre <yannick.fertre@foss.st.com> Reviewed-on: https://gerrit.st.com/c/mpu/oe/st/linux-stm32/+/416185
1 parent 49ba6ad commit 3682d60

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

drivers/gpu/drm/stm/ltdc.c

+15-6
Original file line numberDiff line numberDiff line change
@@ -810,8 +810,18 @@ static void ltdc_crtc_atomic_enable(struct drm_crtc *crtc,
810810

811811
DRM_DEBUG_DRIVER("\n");
812812

813-
if (pm_runtime_active(ddev->dev))
813+
if (pm_runtime_active(ddev->dev)) {
814+
if (!IS_ERR(ldev->rstc)) {
815+
reset_control_assert(ldev->rstc);
816+
usleep_range(10, 20);
817+
reset_control_deassert(ldev->rstc);
818+
}
819+
820+
/* Wait a while to clear the current display */
821+
mdelay(30);
822+
814823
pm_runtime_put_sync_suspend(ddev->dev);
824+
}
815825

816826
/* get encoder from crtc */
817827
drm_for_each_encoder(en_iter, ddev)
@@ -2413,7 +2423,6 @@ int ltdc_load(struct drm_device *ddev)
24132423
struct drm_bridge *bridge;
24142424
struct drm_panel *panel;
24152425
struct drm_crtc *crtc;
2416-
struct reset_control *rstc;
24172426
struct resource *res;
24182427
int irq, i, nb_endpoints;
24192428
int ret = -ENODEV;
@@ -2472,7 +2481,7 @@ int ltdc_load(struct drm_device *ddev)
24722481
}
24732482
}
24742483

2475-
rstc = devm_reset_control_get_exclusive(dev, NULL);
2484+
ldev->rstc = devm_reset_control_get_exclusive(dev, NULL);
24762485

24772486
mutex_init(&ldev->err_lock);
24782487

@@ -2483,10 +2492,10 @@ int ltdc_load(struct drm_device *ddev)
24832492
* remain activated and reset shouldn't be done
24842493
*/
24852494
if (!def_value) {
2486-
if (!IS_ERR(rstc)) {
2487-
reset_control_assert(rstc);
2495+
if (!IS_ERR(ldev->rstc)) {
2496+
reset_control_assert(ldev->rstc);
24882497
usleep_range(10, 20);
2489-
reset_control_deassert(rstc);
2498+
reset_control_deassert(ldev->rstc);
24902499
}
24912500
}
24922501

drivers/gpu/drm/stm/ltdc.h

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ struct ltdc_device {
7171
u32 crc;
7272
u32 max_burst_length;
7373
struct reserved_mem *rot_mem;
74+
struct reset_control *rstc;
7475
struct stm32_firewall firewall[LTDC_MAX_FIREWALL];
7576
bool plane_enabled[LTDC_MAX_LAYER];
7677
};

0 commit comments

Comments
 (0)