Skip to content

Commit

Permalink
Merge tag 'drm-misc-fixes-2017-11-13' of git://anongit.freedesktop.or…
Browse files Browse the repository at this point in the history
…g/drm/drm-misc into drm-next

Driver Changes:
- qxl: Use a shadow bo as primary and blit to it to fix flicker (Gerd)
- rockchip: Convert psr spinlock to mutex (Emil)

Cc: Emil Renner Berthing <[email protected]>
Cc: Gerd Hoffmann <[email protected]>

* tag 'drm-misc-fixes-2017-11-13' of git://anongit.freedesktop.org/drm/drm-misc:
  drm/rockchip: analogix_dp: Use mutex rather than spinlock
  • Loading branch information
airlied committed Nov 13, 2017
2 parents 9c11731 + 44419ce commit ecc325b
Showing 1 changed file with 6 additions and 8 deletions.
14 changes: 6 additions & 8 deletions drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ struct rockchip_dp_device {
struct reset_control *rst;

struct work_struct psr_work;
spinlock_t psr_lock;
struct mutex psr_lock;
unsigned int psr_state;

const struct rockchip_dp_chip_data *data;
Expand All @@ -83,29 +83,27 @@ struct rockchip_dp_device {
static void analogix_dp_psr_set(struct drm_encoder *encoder, bool enabled)
{
struct rockchip_dp_device *dp = to_dp(encoder);
unsigned long flags;

if (!analogix_dp_psr_supported(dp->dev))
return;

DRM_DEV_DEBUG(dp->dev, "%s PSR...\n", enabled ? "Entry" : "Exit");

spin_lock_irqsave(&dp->psr_lock, flags);
mutex_lock(&dp->psr_lock);
if (enabled)
dp->psr_state = EDP_VSC_PSR_STATE_ACTIVE;
else
dp->psr_state = ~EDP_VSC_PSR_STATE_ACTIVE;

schedule_work(&dp->psr_work);
spin_unlock_irqrestore(&dp->psr_lock, flags);
mutex_unlock(&dp->psr_lock);
}

static void analogix_dp_psr_work(struct work_struct *work)
{
struct rockchip_dp_device *dp =
container_of(work, typeof(*dp), psr_work);
int ret;
unsigned long flags;

ret = rockchip_drm_wait_vact_end(dp->encoder.crtc,
PSR_WAIT_LINE_FLAG_TIMEOUT_MS);
Expand All @@ -114,12 +112,12 @@ static void analogix_dp_psr_work(struct work_struct *work)
return;
}

spin_lock_irqsave(&dp->psr_lock, flags);
mutex_lock(&dp->psr_lock);
if (dp->psr_state == EDP_VSC_PSR_STATE_ACTIVE)
analogix_dp_enable_psr(dp->dev);
else
analogix_dp_disable_psr(dp->dev);
spin_unlock_irqrestore(&dp->psr_lock, flags);
mutex_unlock(&dp->psr_lock);
}

static int rockchip_dp_pre_init(struct rockchip_dp_device *dp)
Expand Down Expand Up @@ -381,7 +379,7 @@ static int rockchip_dp_bind(struct device *dev, struct device *master,
dp->plat_data.power_off = rockchip_dp_powerdown;
dp->plat_data.get_modes = rockchip_dp_get_modes;

spin_lock_init(&dp->psr_lock);
mutex_init(&dp->psr_lock);
dp->psr_state = ~EDP_VSC_PSR_STATE_ACTIVE;
INIT_WORK(&dp->psr_work, analogix_dp_psr_work);

Expand Down

0 comments on commit ecc325b

Please sign in to comment.