mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-28 22:57:37 +00:00
135 lines
3.6 KiB
Diff
135 lines
3.6 KiB
Diff
|
From fb997ad6c00fcd16102805aa1cd98ede592dc577 Mon Sep 17 00:00:00 2001
|
||
|
From: Kevin Mihelich <kevin@archlinuxarm.org>
|
||
|
Date: Sun, 23 Apr 2017 13:42:34 -0600
|
||
|
Subject: [PATCH 4/4] skip HDCP setup
|
||
|
|
||
|
This causes a lockup immediately upon starting X.
|
||
|
---
|
||
|
drivers/gpu/drm/rockchip/cdn-dp-core.c | 89 ----------------------------------
|
||
|
1 file changed, 89 deletions(-)
|
||
|
|
||
|
diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.c b/drivers/gpu/drm/rockchip/cdn-dp-core.c
|
||
|
index e10ac220ef4b..c9d94e17b13c 100644
|
||
|
--- a/drivers/gpu/drm/rockchip/cdn-dp-core.c
|
||
|
+++ b/drivers/gpu/drm/rockchip/cdn-dp-core.c
|
||
|
@@ -1151,88 +1151,6 @@ static int cdn_dp_pd_event(struct notifier_block *nb,
|
||
|
return NOTIFY_DONE;
|
||
|
}
|
||
|
|
||
|
-static int cdn_dp_set_hdcp_drm_property(struct cdn_dp_device *dp, uint64_t val)
|
||
|
-{
|
||
|
- struct drm_connector *connector = &dp->connector;
|
||
|
- struct drm_mode_config *mc = &connector->dev->mode_config;
|
||
|
-
|
||
|
- return drm_object_property_set_value(&connector->base,
|
||
|
- mc->content_protection_property,
|
||
|
- val);
|
||
|
-}
|
||
|
-
|
||
|
-static bool cdn_dp_hdcp_authorize(struct cdn_dp_device *dp)
|
||
|
-{
|
||
|
- bool auth_done = false;
|
||
|
- u16 tx_status;
|
||
|
- u32 sw_event;
|
||
|
- int ret;
|
||
|
-
|
||
|
- mutex_lock(&dp->lock);
|
||
|
-
|
||
|
- /*
|
||
|
- * HDCP authentication might cause the disconnect hpd event, just
|
||
|
- * stop the hdcp event SM.
|
||
|
- */
|
||
|
- if (!dp->connected) {
|
||
|
- auth_done = true;
|
||
|
- goto out;
|
||
|
- }
|
||
|
-
|
||
|
- sw_event = cdn_dp_get_event(dp);
|
||
|
-
|
||
|
- if (sw_event & HDCP_TX_STATUS_EVENT) {
|
||
|
- auth_done = true;
|
||
|
-
|
||
|
- ret = cdn_dp_hdcp_tx_status_req(dp, &tx_status);
|
||
|
- if (ret)
|
||
|
- goto out;
|
||
|
- if (HDCP_TX_STATUS_ERROR(tx_status)) {
|
||
|
- dev_err(dp->dev, "hdcp status error: %x\n",
|
||
|
- HDCP_TX_STATUS_ERROR(tx_status));
|
||
|
- goto out;
|
||
|
- } else if (tx_status & HDCP_TX_STATUS_AUTHENTICATED) {
|
||
|
- cdn_dp_set_hdcp_drm_property(dp,
|
||
|
- DRM_MODE_CONTENT_PROTECTION_ENABLED);
|
||
|
- goto out;
|
||
|
- } else {
|
||
|
- auth_done = false;
|
||
|
- }
|
||
|
- }
|
||
|
-
|
||
|
- if (sw_event & HDCP_TX_IS_RECEIVER_ID_VALID_EVENT) {
|
||
|
- ret = cdn_dp_hdcp_tx_is_receiver_id_valid_req(dp);
|
||
|
- if (ret) {
|
||
|
- auth_done = true;
|
||
|
- goto out;
|
||
|
- }
|
||
|
- ret = cdn_dp_hdcp_tx_respond_id_valid(dp, true);
|
||
|
- if (ret)
|
||
|
- auth_done = true;
|
||
|
- }
|
||
|
-
|
||
|
-out:
|
||
|
- mutex_unlock(&dp->lock);
|
||
|
-
|
||
|
- return auth_done;
|
||
|
-}
|
||
|
-
|
||
|
-static void cdn_dp_hdcp_event_work(struct work_struct *work)
|
||
|
-{
|
||
|
- struct cdn_dp_device *dp = container_of(work, struct cdn_dp_device,
|
||
|
- hdcp_event_work.work);
|
||
|
- unsigned long timeout = jiffies +
|
||
|
- msecs_to_jiffies(HDCP_EVENT_TIMEOUT_MS);
|
||
|
-
|
||
|
- while (time_before(jiffies, timeout)) {
|
||
|
- if (cdn_dp_hdcp_authorize(dp))
|
||
|
- return;
|
||
|
- msleep(HDCP_RETRY_INTERVAL_MS);
|
||
|
- }
|
||
|
-
|
||
|
- dev_err(dp->dev, "Failed to authorize hdcp\n");
|
||
|
-}
|
||
|
-
|
||
|
static int cdn_dp_bind(struct device *dev, struct device *master, void *data)
|
||
|
{
|
||
|
struct cdn_dp_device *dp = dev_get_drvdata(dev);
|
||
|
@@ -1240,7 +1158,6 @@ static int cdn_dp_bind(struct device *dev, struct device *master, void *data)
|
||
|
struct drm_connector *connector;
|
||
|
struct cdn_dp_port *port;
|
||
|
struct drm_device *drm_dev = data;
|
||
|
- struct drm_mode_config *mode_config;
|
||
|
int ret, i;
|
||
|
|
||
|
ret = cdn_dp_parse_dt(dp);
|
||
|
@@ -1253,7 +1170,6 @@ static int cdn_dp_bind(struct device *dev, struct device *master, void *data)
|
||
|
dp->active_port = -1;
|
||
|
|
||
|
INIT_WORK(&dp->event_work, cdn_dp_pd_event_work);
|
||
|
- INIT_DELAYED_WORK(&dp->hdcp_event_work, cdn_dp_hdcp_event_work);
|
||
|
|
||
|
encoder = &dp->encoder;
|
||
|
|
||
|
@@ -1310,11 +1226,6 @@ static int cdn_dp_bind(struct device *dev, struct device *master, void *data)
|
||
|
|
||
|
schedule_work(&dp->event_work);
|
||
|
|
||
|
- mode_config = &connector->dev->mode_config;
|
||
|
- drm_object_attach_property(&connector->base,
|
||
|
- mode_config->content_protection_property,
|
||
|
- DRM_MODE_CONTENT_PROTECTION_UNDESIRED);
|
||
|
-
|
||
|
return 0;
|
||
|
|
||
|
err_free_connector:
|
||
|
--
|
||
|
2.12.2
|
||
|
|