[Intel-gfx] [PATCH 5/5] drm/i915: Move hdcp msg detection into shim

Ramalingam C ramalingam.c at intel.com
Thu Mar 8 06:29:14 UTC 2018

On Tuesday 27 February 2018 04:20 AM, Chris Wilson wrote:
> Quoting Ramalingam C (2018-02-26 17:12:39)
>> DP and HDMI HDCP specifications are varying with respect to
>> detecting the R0 and ksv_fifo availability.
>> DP will produce CP_IRQ and set a bit for indicating the R0 and
>> FIFO_READY status.
>> Whereas HDMI will set a bit for FIFO_READY but there is no bit
>> indication for R0 ready. And also polling of READY bit is needed for
>> HDMI as ther is no CP_IRQ.
>> So Fielding the CP_IRQ for DP and the polling the READY bit for a
>> period and blindly waiting for a fixed time for R0 incase of HDMI are
>> moved into corresponding hdcp_shim.
>> Signed-off-by: Ramalingam C <ramalingam.c at intel.com>
>> ---
>> +static int intel_dp_hdcp_wait_for_cp_irq(struct completion *cp_irq_recved,
>> +                                        int timeout)
>> +{
>> +       long ret;
>> +
>> +       if (completion_done(cp_irq_recved))
>> +               reinit_completion(cp_irq_recved);
>> +
>> +       ret = wait_for_completion_interruptible_timeout(cp_irq_recved,
>> +                                                       msecs_to_jiffies(
>> +                                                       timeout));
>> +       reinit_completion(cp_irq_recved);
> This is not thread-safe.
> The trick is to use a waitqueue to interrupt the sleeps inside the wait
> loops to complete the polling quicker. (As stated, you can't escape the
> polling, and you always need to check the IRQ was for the event you
> expected anyway.)
> -Chris


I think I am lost here. Could you please help me understand what are we missing here?
Completion also uses the wait_queue and each thread that want to wait for a event waits on it.
And on IRQ arrival through complete_all we are marking the completion->done and waking up all the thread sleeping at completion wait_queue.

Are you suggesting wait_event_timeout as we have in intel_dp_aux_wait_done?


More information about the Intel-gfx mailing list