Skip to content

Commit 76f2c96

Browse files
Sean Andersontomba
authored andcommitted
drm: zynqmp_dp: Take dp->lock in zynqmp_dp_hpd_work_func
Add a non-locking version of zynqmp_dp_bridge_detect and use it in zynqmp_dp_hpd_work_func so we can take the lock explicitly. This will make it easier to check for hpd_ignore when we add debugfs support. Signed-off-by: Sean Anderson <[email protected]> Signed-off-by: Tomi Valkeinen <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 17f12a4 commit 76f2c96

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

drivers/gpu/drm/xlnx/zynqmp_dp.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1566,14 +1566,13 @@ static int zynqmp_dp_bridge_atomic_check(struct drm_bridge *bridge,
15661566
return 0;
15671567
}
15681568

1569-
static enum drm_connector_status zynqmp_dp_bridge_detect(struct drm_bridge *bridge)
1569+
static enum drm_connector_status __zynqmp_dp_bridge_detect(struct zynqmp_dp *dp)
15701570
{
1571-
struct zynqmp_dp *dp = bridge_to_dp(bridge);
15721571
struct zynqmp_dp_link_config *link_config = &dp->link_config;
15731572
u32 state, i;
15741573
int ret;
15751574

1576-
mutex_lock(&dp->lock);
1575+
lockdep_assert_held(&dp->lock);
15771576

15781577
/*
15791578
* This is from heuristic. It takes some delay (ex, 100 ~ 500 msec) to
@@ -1602,16 +1601,26 @@ static enum drm_connector_status zynqmp_dp_bridge_detect(struct drm_bridge *brid
16021601
dp->num_lanes);
16031602

16041603
dp->status = connector_status_connected;
1605-
mutex_unlock(&dp->lock);
16061604
return connector_status_connected;
16071605
}
16081606

16091607
disconnected:
16101608
dp->status = connector_status_disconnected;
1611-
mutex_unlock(&dp->lock);
16121609
return connector_status_disconnected;
16131610
}
16141611

1612+
static enum drm_connector_status zynqmp_dp_bridge_detect(struct drm_bridge *bridge)
1613+
{
1614+
struct zynqmp_dp *dp = bridge_to_dp(bridge);
1615+
enum drm_connector_status ret;
1616+
1617+
mutex_lock(&dp->lock);
1618+
ret = __zynqmp_dp_bridge_detect(dp);
1619+
mutex_unlock(&dp->lock);
1620+
1621+
return ret;
1622+
}
1623+
16151624
static const struct drm_edid *zynqmp_dp_bridge_edid_read(struct drm_bridge *bridge,
16161625
struct drm_connector *connector)
16171626
{
@@ -1695,7 +1704,10 @@ static void zynqmp_dp_hpd_work_func(struct work_struct *work)
16951704
struct zynqmp_dp *dp = container_of(work, struct zynqmp_dp, hpd_work);
16961705
enum drm_connector_status status;
16971706

1698-
status = zynqmp_dp_bridge_detect(&dp->bridge);
1707+
mutex_lock(&dp->lock);
1708+
status = __zynqmp_dp_bridge_detect(dp);
1709+
mutex_unlock(&dp->lock);
1710+
16991711
drm_bridge_hpd_notify(&dp->bridge, status);
17001712
}
17011713

0 commit comments

Comments
 (0)