drm/rockchip: vop2: At rk3588 splice mode we need use vp0 to set config done

If less this commit, it will trigger null point at the following case:

1. VP0 -> HDMI0 & HDMI1 for dual 8K splice output;
2. Play HDR video, the port_mux_cfg is update and enter additional config done;
3. The crtc for VP1 isn't registered, so the crtc state is null;

The error logs:

[   21.985727][  T399] Unable to handle kernel NULL pointer dereference
at virtual address 0000000000000165
[   21.986201][  T238] ueventd: restorecon_recursive:
/sys/devices/platform/fde80000.hdmi/extcon/extcon11
[   21.986563][  T399] Mem abort info:
[   21.986565][  T399]   ESR = 0x0000000096000005
[   21.986568][  T399]   EC = 0x25: DABT (current EL), IL = 32 bits
[   21.988612][  T399]   SET = 0, FnV = 0
[   21.988943][  T399]   EA = 0, S1PTW = 0
[   21.989284][  T399]   FSC = 0x05: level 1 translation fault
[   21.989776][  T399] Data abort info:
[   21.990095][  T399]   ISV = 0, ISS = 0x000000

...

[   22.003577][  T399] Call trace:
[   22.003864][  T399]  vop2_cfg_done+0x11c/0x184
[   22.004262][  T399]  vop2_setup_port_mux+0xdc/0x1b8
[   22.004693][  T399]  vop2_crtc_atomic_begin+0x2a50/0x2c90
[   22.005177][  T399]  drm_atomic_helper_commit_planes+0x40/0x1e0
[   22.005706][  T399]
rockchip_drm_atomic_helper_commit_tail_rpm+0x1b4/0x26c
[   22.006320][  T399]  commit_tail+0xa4/0x154
[   22.006696][  T399]  drm_atomic_helper_commit+0x1c4/0x1e4
[   22.007178][  T399]  drm_atomic_commit+0xa4/0xd0
[   22.007589][  T399]  drm_mode_atomic_ioctl+0x5e4/0x754
[   22.008051][  T399]  drm_ioctl_kernel+0x80/0xf8
[   22.008461][  T399]  drm_ioctl+0x2d4/0x554

Signed-off-by: Sandy Huang <hjc@rock-chips.com>
Change-Id: I9076a866fe82c8f8972b94d09fbb5c7e1eb8e61a
This commit is contained in:
Sandy Huang
2024-04-03 14:57:51 +08:00
parent 85087083de
commit 3a992a666d
+1 -1
View File
@@ -10668,7 +10668,7 @@ static void vop2_crtc_atomic_begin(struct drm_crtc *crtc, struct drm_atomic_stat
sort(vop2_zpos_splice, splice_nr_layers, sizeof(vop2_zpos_splice[0]),
vop2_zpos_cmp, NULL);
vop2_setup_port_mux(splice_vp);
vop2_setup_port_mux(vp);
if (!vp->hdr10_at_splice_mode)
vop2_setup_layer_mixer_for_vp(splice_vp, vop2_zpos_splice);
vop2_setup_hdr10(splice_vp, vop2_zpos_splice[0].win_phys_id);