1414#include "intel_pxp_fe.h"
1515#include "gt/iov/intel_iov_query.h"
1616
17+ #define PRELIM_DRM_I915_PXP_OP_STATUS_ERROR_RETURN 0xfff
18+
1719int intel_pxp_fe_sm_ioctl_reserve_session (struct intel_pxp * pxp , struct drm_file * drmfile ,
1820 int protection_mode , u32 * pxp_tag );
1921
@@ -74,7 +76,6 @@ static void event_cb(int event, void *priv)
7476 unsigned long flags ;
7577 if (!pxp )
7678 return ;
77- printk ("PXP FE: event receive: %d\n" , event );
7879 spin_lock_irqsave (& pxp -> fe .irq_lock , flags );
7980 pxp -> session_events |= event ;
8081 spin_unlock_irqrestore (& pxp -> fe .irq_lock , flags );
@@ -88,7 +89,7 @@ void intel_pxp_fe_terminate(struct intel_pxp *pxp)
8889 mutex_lock (& pxp -> fe .session_mutex );
8990 for (int index = 0 ; index < INTEL_PXP_MAX_HWDRM_SESSIONS ; index ++ ) {
9091 if (pxp -> fe .hwdrm_sessions [index ].index >= 0 ) {
91- printk ( "%s, PXP FE: session terminate:%d\n" , __FUNCTION__ , index );
92+ drm_dbg ( & pxp -> fe . i915 -> drm , "%s, PXP FE: session terminate:%d\n" , __FUNCTION__ , index );
9293 intel_pxp_fe_sm_ioctl_terminate_session (pxp , pxp -> fe .hwdrm_sessions [index ].drmfile , index );
9394 }
9495 }
@@ -116,7 +117,7 @@ static void pxp_fe_session_work(struct work_struct *work)
116117 if (!events )
117118 return ;
118119
119- //printk( "PXP FE: processing event-flags 0x%08x", events);
120+ drm_info ( & pxp_fe -> i915 -> drm , "PXP FE: processing event-flags 0x%08x" , events );
120121
121122 if (events & PXP_INVAL_REQUIRED ) {
122123 intel_pxp_invalidate (pxp_fe -> i915 -> pxp );
@@ -143,7 +144,7 @@ int pxp_bind(void *gpu_priv, void *pxp_priv)
143144 struct virtio_pxp * vpxp = (struct virtio_pxp * )pxp_priv ;
144145 if (!pxp || !vpxp )
145146 return -1 ;
146- printk ("%s\n" , __FUNCTION__ );
147+ trace_printk ("%s\n" , __FUNCTION__ );
147148 pxp -> fe .vpxp = vpxp ;
148149 pxp -> fe .enabled = true;
149150 pxp -> fe .max_sessions = vpxp -> sessions ;
@@ -159,7 +160,7 @@ void pxp_unbind(void *gpu_priv)
159160 struct intel_pxp * pxp = (struct intel_pxp * )gpu_priv ;
160161 if (!pxp )
161162 return ;
162- printk ("%s\n" , __FUNCTION__ );
163+ trace_printk ("%s\n" , __FUNCTION__ );
163164 pxp -> fe .enabled = false;
164165}
165166
@@ -256,7 +257,7 @@ int intel_pxp_fe_start(struct intel_pxp *pxp)
256257 return 0 ;
257258 if (intel_pxp_is_active (pxp ))
258259 return 0 ;
259- printk ("%s\n" , __FUNCTION__ );
260+ DRM_INFO ("%s\n" , __FUNCTION__ );
260261 pxp_key_instance_update (pxp );
261262
262263 pxp -> fe .active = true;
@@ -270,7 +271,7 @@ void intel_pxp_fe_end(struct intel_pxp *pxp)
270271 return ;
271272 if (!intel_pxp_is_active (pxp ))
272273 return ;
273- printk ("%s\n" , __FUNCTION__ );
274+ DRM_INFO ("%s\n" , __FUNCTION__ );
274275 flush_work (& pxp -> fe .session_work );
275276 pxp -> fe .active = false;
276277}
@@ -310,7 +311,7 @@ int intel_pxp_fe_sm_ioctl_reserve_session(struct intel_pxp *pxp, struct drm_file
310311 int protection_mode , u32 * pxp_tag )
311312{
312313 int ret = 0 ;
313- int session_id = 0 ;
314+ int session_id = -1 ;
314315 struct prelim_drm_i915_pxp_set_session_status_params params ;
315316 memset (& params , 0 , sizeof (params ));
316317 if (!drmfile || !pxp_tag || pxp -> fe .avail_sessions <= 0 )
@@ -320,9 +321,11 @@ int intel_pxp_fe_sm_ioctl_reserve_session(struct intel_pxp *pxp, struct drm_file
320321 ret = virtio_set_session (pxp -> fe .vpxp , & params );
321322 * pxp_tag = params .pxp_tag ;
322323 session_id = * pxp_tag & PRELIM_DRM_I915_PXP_TAG_SESSION_ID_MASK ;
323- //printk("%s, session_id:%d, ret:%d\n",__FUNCTION__, session_id, ret);
324- if (session_id >= INTEL_PXP_MAX_HWDRM_SESSIONS || session_id < 0 ) {
325- DRM_ERROR ("PXP FE: invalid session id:%d" , session_id );
324+ drm_dbg (& pxp -> fe .i915 -> drm , "%s, session_id:%d, ret:%d\n" ,__FUNCTION__ , session_id , ret );
325+ if (session_id >= INTEL_PXP_MAX_HWDRM_SESSIONS || session_id < 0 || ret != 0 ) {
326+ DRM_ERROR ("PXP FE: invalid session id:%d, ret:%d" , session_id , ret );
327+ if (ret > 0 )
328+ return ret ;
326329 return -1 ;
327330 }
328331 pxp -> fe .avail_sessions -- ;
@@ -349,10 +352,9 @@ int intel_pxp_fe_sm_ioctl_mark_session_in_play(struct intel_pxp *pxp,
349352 params .pxp_tag = session_id ;
350353 params .req_session_state = PRELIM_DRM_I915_PXP_REQ_SESSION_IN_PLAY ;
351354 ret = virtio_set_session (pxp -> fe .vpxp , & params );
352- //printk("%s, session_id:%d, ret:%d\n",__FUNCTION__, session_id, ret);
353- if (ret < 0 )
354- return ret ;
355- pxp -> fe .hwdrm_sessions [session_id ].is_valid = true;
355+ drm_dbg (& pxp -> fe .i915 -> drm , "%s, session_id:%d, ret:%d\n" ,__FUNCTION__ , session_id , ret );
356+ if (!ret )
357+ pxp -> fe .hwdrm_sessions [session_id ].is_valid = true;
356358 return ret ;
357359}
358360
@@ -367,14 +369,14 @@ int intel_pxp_fe_sm_ioctl_terminate_session(struct intel_pxp *pxp,
367369 return - EINVAL ;
368370 if (!check_session_id (pxp , session_id ))
369371 return - EINVAL ;
372+ params .pxp_tag = session_id ;
373+ params .req_session_state = PRELIM_DRM_I915_PXP_REQ_SESSION_TERMINATE ;
374+ ret = virtio_set_session (pxp -> fe .vpxp , & params );
375+ drm_dbg (& pxp -> fe .i915 -> drm , "%s, session_id:%d, ret:%d\n" ,__FUNCTION__ , session_id , ret );
370376 pxp -> fe .hwdrm_sessions [session_id ].is_valid = false;
371377 pxp -> fe .hwdrm_sessions [session_id ].index = -1 ;
372378 pxp -> fe .hwdrm_sessions [session_id ].drmfile = NULL ;
373379 pxp -> fe .avail_sessions ++ ;
374- params .pxp_tag = session_id ;
375- params .req_session_state = PRELIM_DRM_I915_PXP_REQ_SESSION_TERMINATE ;
376- ret = virtio_set_session (pxp -> fe .vpxp , & params );
377- //printk("%s, session_id:%d, ret:%d\n",__FUNCTION__, session_id, ret);
378380 return ret ;
379381}
380382
@@ -394,7 +396,7 @@ int intel_pxp_fe_io_message(struct intel_pxp *pxp,
394396 params .msg_out = (u64 )msg_out ;
395397 params .msg_out_buf_size = msg_out_max_size ;
396398 ret = virtio_io_msg (pxp -> fe .vpxp , & params );
397- //printk( "%s, ret:%d, ret size:%d\n",__FUNCTION__, ret, params.msg_out_ret_size);
399+ drm_dbg ( & pxp -> fe . i915 -> drm , "%s, ret:%d, ret size:%d\n" ,__FUNCTION__ , ret , params .msg_out_ret_size );
398400 * msg_out_rcv_size = params .msg_out_ret_size ;
399401 return ret ;
400402}
@@ -416,7 +418,7 @@ int intel_pxp_fe_sm_ioctl_query_pxp_tag(struct intel_pxp *pxp,
416418 ret = virtio_query_tag (pxp -> fe .vpxp , & params );
417419 * pxp_tag = params .pxp_tag ;
418420 * session_is_alive = params .session_is_alive ;
419- //printk( "%s, ret:%d\n",__FUNCTION__, ret);
421+ drm_dbg ( & pxp -> fe . i915 -> drm , "%s, ret:%d\n" ,__FUNCTION__ , ret );
420422 return ret ;
421423}
422424
@@ -431,6 +433,7 @@ int intel_pxp_fe_gsccs_get_client_host_session_handle(struct intel_pxp *pxp, str
431433 params .request_type = request_type ;
432434 ret = virtio_host_session_handle_request (pxp -> fe .vpxp , & params );
433435 * host_session_handle = params .host_session_handle ;
436+ drm_dbg (& pxp -> fe .i915 -> drm , "%s, ret:%d\n" ,__FUNCTION__ , ret );
434437 return ret ;
435438}
436439
@@ -467,6 +470,10 @@ static int pxp_fe_set_session_status(struct intel_pxp *pxp,
467470 default :
468471 ret = - EINVAL ;
469472 }
473+ if (ret == PRELIM_DRM_I915_PXP_OP_STATUS_ERROR_RETURN )
474+ ret = -1 ;
475+ drm_dbg (& pxp -> fe .i915 -> drm , "set fe pxp session status (req %d ret %d)\n" ,
476+ params .req_session_state , ret );
470477
471478 if (ret >= 0 ) {
472479 pxp_ops -> status = ret ;
@@ -475,6 +482,9 @@ static int pxp_fe_set_session_status(struct intel_pxp *pxp,
475482 ret = - EFAULT ;
476483 else
477484 ret = 0 ;
485+ } else {
486+ DRM_ERROR ("Failed to set fe pxp session status (req %d ret%d)\n" ,
487+ params .req_session_state , ret );
478488 }
479489
480490 return ret ;
@@ -523,7 +533,7 @@ intel_pxp_fe_ioctl_io_message(struct intel_pxp *pxp, struct drm_file *drmfile,
523533 & params -> msg_out_ret_size );
524534
525535 if (ret ) {
526- drm_dbg (& i915 -> drm , "Failed to send/receive user TEE message\n" );
536+ drm_dbg (& i915 -> drm , "Failed to send/receive user TEE message, ret:%d \n" , ret );
527537 goto end ;
528538 }
529539
@@ -691,7 +701,7 @@ void intel_pxp_fe_close(struct intel_pxp *pxp, struct drm_file *drmfile)
691701 mutex_lock (& pxp -> fe .session_mutex );
692702 for (index = 0 ; index < INTEL_PXP_MAX_HWDRM_SESSIONS ; index ++ ) {
693703 if (pxp -> fe .hwdrm_sessions [index ].index >= 0 && (pxp -> fe .hwdrm_sessions [index ].drmfile == drmfile )) {
694- printk ( "%s, PXP FE: session terminate:%d\n" , __FUNCTION__ , index );
704+ drm_dbg ( & pxp -> fe . i915 -> drm , "%s, PXP FE: session terminate:%d\n" , __FUNCTION__ , index );
695705 intel_pxp_fe_sm_ioctl_terminate_session (pxp , pxp -> fe .hwdrm_sessions [index ].drmfile , index );
696706 }
697707 }
0 commit comments