@@ -4406,50 +4406,56 @@ static bool check_single_encoder_cloning(struct intel_atomic_state *state,
44064406}
44074407
44084408static void link_nv12_planes (struct intel_crtc_state * crtc_state ,
4409- struct intel_plane_state * plane_state ,
4410- struct intel_plane_state * linked_state )
4409+ struct intel_plane_state * uv_plane_state ,
4410+ struct intel_plane_state * y_plane_state )
44114411{
4412- struct intel_display * display = to_intel_display (plane_state );
4413- struct intel_plane * plane = to_intel_plane (plane_state -> uapi .plane );
4414- struct intel_plane * linked = to_intel_plane (linked_state -> uapi .plane );
4412+ struct intel_display * display = to_intel_display (uv_plane_state );
4413+ struct intel_plane * uv_plane = to_intel_plane (uv_plane_state -> uapi .plane );
4414+ struct intel_plane * y_plane = to_intel_plane (y_plane_state -> uapi .plane );
44154415
44164416 drm_dbg_kms (display -> drm , "UV plane [PLANE:%d:%s] using Y plane [PLANE:%d:%s]\n" ,
4417- plane -> base .base .id , plane -> base .name ,
4418- linked -> base .base .id , linked -> base .name );
4417+ uv_plane -> base .base .id , uv_plane -> base .name ,
4418+ y_plane -> base .base .id , y_plane -> base .name );
44194419
4420- plane_state -> planar_linked_plane = linked ;
4420+ uv_plane_state -> planar_linked_plane = y_plane ;
44214421
4422- linked_state -> is_y_plane = true;
4423- linked_state -> planar_linked_plane = plane ;
4422+ y_plane_state -> is_y_plane = true;
4423+ y_plane_state -> planar_linked_plane = uv_plane ;
44244424
4425- crtc_state -> enabled_planes |= BIT (linked -> id );
4426- crtc_state -> active_planes |= BIT (linked -> id );
4427- crtc_state -> update_planes |= BIT (linked -> id );
4425+ crtc_state -> enabled_planes |= BIT (y_plane -> id );
4426+ crtc_state -> active_planes |= BIT (y_plane -> id );
4427+ crtc_state -> update_planes |= BIT (y_plane -> id );
44284428
4429- crtc_state -> data_rate [linked -> id ] = crtc_state -> data_rate_y [plane -> id ];
4430- crtc_state -> rel_data_rate [linked -> id ] = crtc_state -> rel_data_rate_y [plane -> id ];
4429+ crtc_state -> data_rate [y_plane -> id ] = crtc_state -> data_rate_y [uv_plane -> id ];
4430+ crtc_state -> rel_data_rate [y_plane -> id ] = crtc_state -> rel_data_rate_y [uv_plane -> id ];
44314431
44324432 /* Copy parameters to Y plane */
4433- linked_state -> ctl = plane_state -> ctl | PLANE_CTL_YUV420_Y_PLANE ;
4434- linked_state -> color_ctl = plane_state -> color_ctl ;
4435- linked_state -> view = plane_state -> view ;
4436- linked_state -> decrypt = plane_state -> decrypt ;
4437-
4438- intel_plane_copy_hw_state (linked_state , plane_state );
4439- linked_state -> uapi .src = plane_state -> uapi .src ;
4440- linked_state -> uapi .dst = plane_state -> uapi .dst ;
4441-
4442- if (icl_is_hdr_plane (display , plane -> id )) {
4443- if (linked -> id == PLANE_7 )
4444- plane_state -> cus_ctl |= PLANE_CUS_Y_PLANE_7_ICL ;
4445- else if (linked -> id == PLANE_6 )
4446- plane_state -> cus_ctl |= PLANE_CUS_Y_PLANE_6_ICL ;
4447- else if (linked -> id == PLANE_5 )
4448- plane_state -> cus_ctl |= PLANE_CUS_Y_PLANE_5_RKL ;
4449- else if (linked -> id == PLANE_4 )
4450- plane_state -> cus_ctl |= PLANE_CUS_Y_PLANE_4_RKL ;
4451- else
4452- MISSING_CASE (linked -> id );
4433+ y_plane_state -> ctl = uv_plane_state -> ctl | PLANE_CTL_YUV420_Y_PLANE ;
4434+ y_plane_state -> color_ctl = uv_plane_state -> color_ctl ;
4435+ y_plane_state -> view = uv_plane_state -> view ;
4436+ y_plane_state -> decrypt = uv_plane_state -> decrypt ;
4437+
4438+ intel_plane_copy_hw_state (y_plane_state , uv_plane_state );
4439+ y_plane_state -> uapi .src = uv_plane_state -> uapi .src ;
4440+ y_plane_state -> uapi .dst = uv_plane_state -> uapi .dst ;
4441+
4442+ if (icl_is_hdr_plane (display , uv_plane -> id )) {
4443+ switch (y_plane -> id ) {
4444+ case PLANE_7 :
4445+ uv_plane_state -> cus_ctl |= PLANE_CUS_Y_PLANE_7_ICL ;
4446+ break ;
4447+ case PLANE_6 :
4448+ uv_plane_state -> cus_ctl |= PLANE_CUS_Y_PLANE_6_ICL ;
4449+ break ;
4450+ case PLANE_5 :
4451+ uv_plane_state -> cus_ctl |= PLANE_CUS_Y_PLANE_5_RKL ;
4452+ break ;
4453+ case PLANE_4 :
4454+ uv_plane_state -> cus_ctl |= PLANE_CUS_Y_PLANE_4_RKL ;
4455+ break ;
4456+ default :
4457+ MISSING_CASE (y_plane -> id );
4458+ }
44534459 }
44544460}
44554461
@@ -4482,8 +4488,8 @@ static int icl_check_nv12_planes(struct intel_atomic_state *state,
44824488 struct drm_i915_private * dev_priv = to_i915 (state -> base .dev );
44834489 struct intel_crtc_state * crtc_state =
44844490 intel_atomic_get_new_crtc_state (state , crtc );
4485- struct intel_plane * plane , * linked ;
44864491 struct intel_plane_state * plane_state ;
4492+ struct intel_plane * plane ;
44874493 int i ;
44884494
44894495 if (DISPLAY_VER (dev_priv ) < 11 )
@@ -4505,35 +4511,38 @@ static int icl_check_nv12_planes(struct intel_atomic_state *state,
45054511 return 0 ;
45064512
45074513 for_each_new_intel_plane_in_state (state , plane , plane_state , i ) {
4508- struct intel_plane_state * linked_state = NULL ;
4514+ struct intel_plane_state * y_plane_state = NULL ;
4515+ struct intel_plane * y_plane ;
4516+
4517+ if (plane -> pipe != crtc -> pipe )
4518+ continue ;
45094519
4510- if (plane -> pipe != crtc -> pipe ||
4511- !(crtc_state -> nv12_planes & BIT (plane -> id )))
4520+ if ((crtc_state -> nv12_planes & BIT (plane -> id )) == 0 )
45124521 continue ;
45134522
4514- for_each_intel_plane_on_crtc (& dev_priv -> drm , crtc , linked ) {
4515- if (!icl_is_nv12_y_plane (display , linked -> id ))
4523+ for_each_intel_plane_on_crtc (& dev_priv -> drm , crtc , y_plane ) {
4524+ if (!icl_is_nv12_y_plane (display , y_plane -> id ))
45164525 continue ;
45174526
4518- if (crtc_state -> active_planes & BIT (linked -> id ))
4527+ if (crtc_state -> active_planes & BIT (y_plane -> id ))
45194528 continue ;
45204529
4521- linked_state = intel_atomic_get_plane_state (state , linked );
4522- if (IS_ERR (linked_state ))
4523- return PTR_ERR (linked_state );
4530+ y_plane_state = intel_atomic_get_plane_state (state , y_plane );
4531+ if (IS_ERR (y_plane_state ))
4532+ return PTR_ERR (y_plane_state );
45244533
45254534 break ;
45264535 }
45274536
4528- if (!linked_state ) {
4537+ if (!y_plane_state ) {
45294538 drm_dbg_kms (& dev_priv -> drm ,
45304539 "[CRTC:%d:%s] need %d free Y planes for planar YUV\n" ,
45314540 crtc -> base .base .id , crtc -> base .name ,
45324541 hweight8 (crtc_state -> nv12_planes ));
45334542 return - EINVAL ;
45344543 }
45354544
4536- link_nv12_planes (crtc_state , plane_state , linked_state );
4545+ link_nv12_planes (crtc_state , plane_state , y_plane_state );
45374546 }
45384547
45394548 return 0 ;
0 commit comments