From patchwork Thu Nov 13 16:37:46 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hajda X-Patchwork-Id: 5299201 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 1732DC11AD for ; Thu, 13 Nov 2014 16:38:18 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 3589D20219 for ; Thu, 13 Nov 2014 16:38:17 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 43C7A20211 for ; Thu, 13 Nov 2014 16:38:16 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 437686E68E; Thu, 13 Nov 2014 08:38:15 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mailout3.w1.samsung.com (mailout3.w1.samsung.com [210.118.77.13]) by gabe.freedesktop.org (Postfix) with ESMTP id F26696E51B for ; Thu, 13 Nov 2014 08:38:13 -0800 (PST) Received: from eucpsbgm2.samsung.com (unknown [203.254.199.245]) by mailout3.w1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NEZ001YCL0HMD80@mailout3.w1.samsung.com> for dri-devel@lists.freedesktop.org; Thu, 13 Nov 2014 16:41:05 +0000 (GMT) X-AuditID: cbfec7f5-b7f956d000005ed7-4f-5464de748207 Received: from eusync2.samsung.com ( [203.254.199.212]) by eucpsbgm2.samsung.com (EUCPMTA) with SMTP id 0B.24.24279.47ED4645; Thu, 13 Nov 2014 16:38:12 +0000 (GMT) Received: from AMDC1061.digital.local ([106.116.147.88]) by eusync2.samsung.com (Oracle Communications Messaging Server 7u4-23.01 (7.0.4.23.0) 64bit (built Aug 10 2011)) with ESMTPA id <0NEZ00FSHKV93H60@eusync2.samsung.com>; Thu, 13 Nov 2014 16:38:12 +0000 (GMT) From: Andrzej Hajda To: Inki Dae Subject: [PATCH 5/7] drm/exynos/mixer: simplify poweron flag Date: Thu, 13 Nov 2014 17:37:46 +0100 Message-id: <1415896668-27226-6-git-send-email-a.hajda@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1415896668-27226-1-git-send-email-a.hajda@samsung.com> References: <1415896668-27226-1-git-send-email-a.hajda@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrHJMWRmVeSWpSXmKPExsVy+t/xK7ol91JCDJbMNLW4te4cq8WVr+/Z LCbdn8Bi8eLeRRaLtUfusjuwetzvPs7k0bdlFWMAUxSXTUpqTmZZapG+XQJXxtpXU1kKmtQq 1rT/YmtgvC/fxcjJISFgIrF+XjsjhC0mceHeerYuRi4OIYGljBKz1xxghnD6mCS+T9vKBlLF JqAp8XfzTTBbREBZYtW+dnaQImaBxYwSDxpusXYxcnAIC9hI/H1fCFLDIqAqsWDnNnYQm1fA WWLjoxMsENvkJE4em8wKYnMKuEj0LlrMDGILAdW8n7aedQIj7wJGhlWMoqmlyQXFSem5RnrF ibnFpXnpesn5uZsYIWHydQfj0mNWhxgFOBiVeHg/cKeECLEmlhVX5h5ilOBgVhLh9T4MFOJN SaysSi3Kjy8qzUktPsTIxMEp1cDI8z2Ty6K3Y2P9GsV75gaBio2LVyqKLzsaFXE95Nf2jaHN hmd0TrEGz3Fz3rDZ+vnc06yb/sh9SFo/6Yfr1HuMXpKLTmze6m5451/5orX/H6+KWmn6q/vo LkapMNuV2+8weKw8J3Th+nXh6pzOfeIP5JsavQK3RW5I8+WeeUtgsuM0j/NHk0RSlViKMxIN tZiLihMBV2i+R/EBAAA= Cc: Andrzej Hajda , dri-devel@lists.freedesktop.org, Marek Szyprowski X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-5.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The driver uses bool protected by mutex to track power state. The patch replaces this combo with single bit and atomic bitops. Signed-off-by: Andrzej Hajda --- drivers/gpu/drm/exynos/exynos_mixer.c | 51 ++++++++++------------------------- 1 file changed, 14 insertions(+), 37 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c index 360a40b..2465b1d 100644 --- a/drivers/gpu/drm/exynos/exynos_mixer.c +++ b/drivers/gpu/drm/exynos/exynos_mixer.c @@ -85,18 +85,21 @@ enum mixer_version_id { MXR_VER_128_0_0_184, }; +enum mixer_flag_bits { + MXR_BIT_POWERED, +}; + struct mixer_context { struct platform_device *pdev; struct device *dev; struct drm_device *drm_dev; int pipe; + unsigned long flags; bool interlace; - bool powered; bool vp_enabled; bool has_sclk; u32 int_en; - struct mutex mixer_mutex; struct mixer_resources mixer_res; struct hdmi_win_data win_data[MIXER_WIN_NR]; enum mixer_version_id mxr_ver; @@ -894,7 +897,7 @@ static int mixer_enable_vblank(struct exynos_drm_manager *mgr) struct mixer_context *mixer_ctx = mgr->ctx; struct mixer_resources *res = &mixer_ctx->mixer_res; - if (!mixer_ctx->powered) { + if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags)) { mixer_ctx->int_en |= MXR_INT_EN_VSYNC; return 0; } @@ -911,7 +914,7 @@ static void mixer_disable_vblank(struct exynos_drm_manager *mgr) struct mixer_context *mixer_ctx = mgr->ctx; struct mixer_resources *res = &mixer_ctx->mixer_res; - if (!mixer_ctx->powered) { + if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags)) { mixer_ctx->int_en &= MXR_INT_EN_VSYNC; return; } @@ -980,12 +983,8 @@ static void mixer_win_commit(struct exynos_drm_manager *mgr, int zpos) DRM_DEBUG_KMS("win: %d\n", win); - mutex_lock(&mixer_ctx->mixer_mutex); - if (!mixer_ctx->powered) { - mutex_unlock(&mixer_ctx->mixer_mutex); + if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags)) return; - } - mutex_unlock(&mixer_ctx->mixer_mutex); if (win > 1 && mixer_ctx->vp_enabled) vp_video_buffer(mixer_ctx, win); @@ -1004,13 +1003,10 @@ static void mixer_win_disable(struct exynos_drm_manager *mgr, int zpos) DRM_DEBUG_KMS("win: %d\n", win); - mutex_lock(&mixer_ctx->mixer_mutex); - if (!mixer_ctx->powered) { - mutex_unlock(&mixer_ctx->mixer_mutex); + if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags)) { mixer_ctx->win_data[win].resume = false; return; } - mutex_unlock(&mixer_ctx->mixer_mutex); spin_lock_irqsave(&res->reg_slock, flags); mixer_vsync_set_update(mixer_ctx, false); @@ -1027,12 +1023,8 @@ static void mixer_wait_for_vblank(struct exynos_drm_manager *mgr) { struct mixer_context *mixer_ctx = mgr->ctx; - mutex_lock(&mixer_ctx->mixer_mutex); - if (!mixer_ctx->powered) { - mutex_unlock(&mixer_ctx->mixer_mutex); + if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags)) return; - } - mutex_unlock(&mixer_ctx->mixer_mutex); drm_vblank_get(mgr->crtc->dev, mixer_ctx->pipe); @@ -1084,13 +1076,8 @@ static void mixer_poweron(struct exynos_drm_manager *mgr) struct mixer_context *ctx = mgr->ctx; struct mixer_resources *res = &ctx->mixer_res; - mutex_lock(&ctx->mixer_mutex); - if (ctx->powered) { - mutex_unlock(&ctx->mixer_mutex); + if (test_bit(MXR_BIT_POWERED, &ctx->flags)) return; - } - - mutex_unlock(&ctx->mixer_mutex); pm_runtime_get_sync(ctx->dev); @@ -1101,9 +1088,7 @@ static void mixer_poweron(struct exynos_drm_manager *mgr) clk_prepare_enable(res->sclk_mixer); } - mutex_lock(&ctx->mixer_mutex); - ctx->powered = true; - mutex_unlock(&ctx->mixer_mutex); + set_bit(MXR_BIT_POWERED, &ctx->flags); mixer_reg_writemask(res, MXR_STATUS, ~0, MXR_STATUS_SOFT_RESET); @@ -1120,21 +1105,15 @@ static void mixer_poweroff(struct exynos_drm_manager *mgr) struct mixer_context *ctx = mgr->ctx; struct mixer_resources *res = &ctx->mixer_res; - mutex_lock(&ctx->mixer_mutex); - if (!ctx->powered) { - mutex_unlock(&ctx->mixer_mutex); + if (!test_bit(MXR_BIT_POWERED, &ctx->flags)) return; - } - mutex_unlock(&ctx->mixer_mutex); mixer_stop(ctx); mixer_window_suspend(mgr); ctx->int_en = mixer_reg_read(res, MXR_INT_EN); - mutex_lock(&ctx->mixer_mutex); - ctx->powered = false; - mutex_unlock(&ctx->mixer_mutex); + clear_bit(MXR_BIT_POWERED, &ctx->flags); clk_disable_unprepare(res->mixer); if (ctx->vp_enabled) { @@ -1269,8 +1248,6 @@ static int mixer_bind(struct device *dev, struct device *manager, void *data) return -ENOMEM; } - mutex_init(&ctx->mixer_mutex); - if (dev->of_node) { const struct of_device_id *match; match = of_match_node(mixer_match_types, dev->of_node);