Skip to content

Commit d6a209d

Browse files
committed
Merge tag 'drm-intel-fixes-2024-03-01' of https://anongit.freedesktop.org/git/drm/drm-intel into drm-fixes
- Fix to extract HDCP information from primary connector - Check for NULL mmu_interval_notifier before removing Signed-off-by: Daniel Vetter <[email protected]> From: Joonas Lahtinen <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents 9b467b4 + 01bb1ae commit d6a209d

File tree

2 files changed

+19
-31
lines changed

2 files changed

+19
-31
lines changed

drivers/gpu/drm/i915/display/intel_dp_hdcp.c

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -330,23 +330,13 @@ static const struct hdcp2_dp_msg_data hdcp2_dp_msg_data[] = {
330330
0, 0 },
331331
};
332332

333-
static struct drm_dp_aux *
334-
intel_dp_hdcp_get_aux(struct intel_connector *connector)
335-
{
336-
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
337-
338-
if (intel_encoder_is_mst(connector->encoder))
339-
return &connector->port->aux;
340-
else
341-
return &dig_port->dp.aux;
342-
}
343-
344333
static int
345334
intel_dp_hdcp2_read_rx_status(struct intel_connector *connector,
346335
u8 *rx_status)
347336
{
348337
struct drm_i915_private *i915 = to_i915(connector->base.dev);
349-
struct drm_dp_aux *aux = intel_dp_hdcp_get_aux(connector);
338+
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
339+
struct drm_dp_aux *aux = &dig_port->dp.aux;
350340
ssize_t ret;
351341

352342
ret = drm_dp_dpcd_read(aux,
@@ -399,7 +389,9 @@ intel_dp_hdcp2_wait_for_msg(struct intel_connector *connector,
399389
const struct hdcp2_dp_msg_data *hdcp2_msg_data)
400390
{
401391
struct drm_i915_private *i915 = to_i915(connector->base.dev);
402-
struct intel_hdcp *hdcp = &connector->hdcp;
392+
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
393+
struct intel_dp *dp = &dig_port->dp;
394+
struct intel_hdcp *hdcp = &dp->attached_connector->hdcp;
403395
u8 msg_id = hdcp2_msg_data->msg_id;
404396
int ret, timeout;
405397
bool msg_ready = false;
@@ -454,17 +446,16 @@ int intel_dp_hdcp2_write_msg(struct intel_connector *connector,
454446
unsigned int offset;
455447
u8 *byte = buf;
456448
ssize_t ret, bytes_to_write, len;
449+
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
450+
struct drm_dp_aux *aux = &dig_port->dp.aux;
457451
const struct hdcp2_dp_msg_data *hdcp2_msg_data;
458-
struct drm_dp_aux *aux;
459452

460453
hdcp2_msg_data = get_hdcp2_dp_msg_data(*byte);
461454
if (!hdcp2_msg_data)
462455
return -EINVAL;
463456

464457
offset = hdcp2_msg_data->offset;
465458

466-
aux = intel_dp_hdcp_get_aux(connector);
467-
468459
/* No msg_id in DP HDCP2.2 msgs */
469460
bytes_to_write = size - 1;
470461
byte++;
@@ -490,7 +481,8 @@ static
490481
ssize_t get_receiver_id_list_rx_info(struct intel_connector *connector,
491482
u32 *dev_cnt, u8 *byte)
492483
{
493-
struct drm_dp_aux *aux = intel_dp_hdcp_get_aux(connector);
484+
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
485+
struct drm_dp_aux *aux = &dig_port->dp.aux;
494486
ssize_t ret;
495487
u8 *rx_info = byte;
496488

@@ -515,8 +507,9 @@ int intel_dp_hdcp2_read_msg(struct intel_connector *connector,
515507
{
516508
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
517509
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
518-
struct intel_hdcp *hdcp = &connector->hdcp;
519-
struct drm_dp_aux *aux;
510+
struct drm_dp_aux *aux = &dig_port->dp.aux;
511+
struct intel_dp *dp = &dig_port->dp;
512+
struct intel_hdcp *hdcp = &dp->attached_connector->hdcp;
520513
unsigned int offset;
521514
u8 *byte = buf;
522515
ssize_t ret, bytes_to_recv, len;
@@ -530,8 +523,6 @@ int intel_dp_hdcp2_read_msg(struct intel_connector *connector,
530523
return -EINVAL;
531524
offset = hdcp2_msg_data->offset;
532525

533-
aux = intel_dp_hdcp_get_aux(connector);
534-
535526
ret = intel_dp_hdcp2_wait_for_msg(connector, hdcp2_msg_data);
536527
if (ret < 0)
537528
return ret;
@@ -561,13 +552,8 @@ int intel_dp_hdcp2_read_msg(struct intel_connector *connector,
561552

562553
/* Entire msg read timeout since initiate of msg read */
563554
if (bytes_to_recv == size - 1 && hdcp2_msg_data->msg_read_timeout > 0) {
564-
if (intel_encoder_is_mst(connector->encoder))
565-
msg_end = ktime_add_ms(ktime_get_raw(),
566-
hdcp2_msg_data->msg_read_timeout *
567-
connector->port->parent->num_ports);
568-
else
569-
msg_end = ktime_add_ms(ktime_get_raw(),
570-
hdcp2_msg_data->msg_read_timeout);
555+
msg_end = ktime_add_ms(ktime_get_raw(),
556+
hdcp2_msg_data->msg_read_timeout);
571557
}
572558

573559
ret = drm_dp_dpcd_read(aux, offset,
@@ -651,12 +637,11 @@ static
651637
int intel_dp_hdcp2_capable(struct intel_connector *connector,
652638
bool *capable)
653639
{
654-
struct drm_dp_aux *aux;
640+
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
641+
struct drm_dp_aux *aux = &dig_port->dp.aux;
655642
u8 rx_caps[3];
656643
int ret;
657644

658-
aux = intel_dp_hdcp_get_aux(connector);
659-
660645
*capable = false;
661646
ret = drm_dp_dpcd_read(aux,
662647
DP_HDCP_2_2_REG_RX_CAPS_OFFSET,

drivers/gpu/drm/i915/gem/i915_gem_userptr.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,9 @@ i915_gem_userptr_release(struct drm_i915_gem_object *obj)
379379
{
380380
GEM_WARN_ON(obj->userptr.page_ref);
381381

382+
if (!obj->userptr.notifier.mm)
383+
return;
384+
382385
mmu_interval_notifier_remove(&obj->userptr.notifier);
383386
obj->userptr.notifier.mm = NULL;
384387
}

0 commit comments

Comments
 (0)