From patchwork Mon Jun 23 05:32:22 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rahul Sharma X-Patchwork-Id: 4405971 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id CF21B9F387 for ; Tue, 24 Jun 2014 00:59:45 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id E342B20303 for ; Tue, 24 Jun 2014 00:59:44 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 0F85020353 for ; Tue, 24 Jun 2014 00:59:44 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D97656E08A; Mon, 23 Jun 2014 17:59:40 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mailout3.samsung.com (mailout3.samsung.com [203.254.224.33]) by gabe.freedesktop.org (Postfix) with ESMTP id 049896E0FE for ; Sun, 22 Jun 2014 22:34:14 -0700 (PDT) Received: from epcpsbgr3.samsung.com (u143.gpu120.samsung.co.kr [203.254.230.143]) by mailout3.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0N7L009F3WRQARE0@mailout3.samsung.com> for dri-devel@lists.freedesktop.org; Mon, 23 Jun 2014 14:33:26 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [172.20.52.123]) by epcpsbgr3.samsung.com (EPCPMTA) with SMTP id 55.AF.14704.52CB7A35; Mon, 23 Jun 2014 14:33:25 +0900 (KST) X-AuditID: cbfee68f-b7fef6d000003970-7b-53a7bc25eca6 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id A5.A8.05196.52CB7A35; Mon, 23 Jun 2014 14:33:25 +0900 (KST) Received: from localhost.localdomain ([107.108.83.245]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0N7L00JJKWRH6C90@mmp2.samsung.com>; Mon, 23 Jun 2014 14:33:25 +0900 (KST) From: Rahul Sharma To: dri-devel@lists.freedesktop.org Subject: [PATCH 2/5 v2] drm/exynos: stop mixer before gating clocks during poweroff Date: Mon, 23 Jun 2014 11:02:22 +0530 Message-id: <1403501545-16482-3-git-send-email-rahul.sharma@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1403501545-16482-1-git-send-email-rahul.sharma@samsung.com> References: <1403501545-16482-1-git-send-email-rahul.sharma@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrALMWRmVeSWpSXmKPExsWyRsSkWld1z/Jgg0UT9CyufH3PZjHp/gQW i++7vrBb9C64ymYx4/w+JouFL+Itpiw6zOrA7rFz1l12j/vdx5k8+rasYvT4vEkugCWKyyYl NSezLLVI3y6BK+N381r2go98FbdnzGNpYDzI08XIySEhYCLR9auHGcIWk7hwbz1bFyMXh5DA UkaJPQebmGCK7jfsZASxhQSmM0q0ThCCKGpnktj0fhobSIJNQFdi9sFnYEUiAsoSfyeuYgQp YhZYzijxcnMLWJGwQKjEqkvPwWwWAVWJhX0LWEFsXgEPiUtPVwHZHEDbFCTmTLIBCXMKeEp0 XfoOtdhD4uGjBewgMyUE+tkl5nxcyA4xR0Di2+RDLBC9shKbDkB9IylxcMUNlgmMwgsYGVYx iqYWJBcUJ6UXGesVJ+YWl+al6yXn525iBIb26X/P+ncw3j1gfYgxGWjcRGYp0eR8YGzklcQb GpsZWZiamBobmVuakSasJM57/2FSkJBAemJJanZqakFqUXxRaU5q8SFGJg5OqQbGuj3656+m b+BIllmnf5fHb9eVzS/dp7Lev3TrZ/UvbtVDu+bvqWLoMzLZWLeX+9U3u4RHt1w+F55ddi7B b5Pm52O/VFf9sLkVyj39AeOtZTqnS+fazL7i2vC4QO9nujmvZK7a7Sbdh3u4ox4fOC4z9fE9 4wVpyoGr5x/s+frDyEYlv67H2GWRtxJLcUaioRZzUXEiAB3cwUuDAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprPIsWRmVeSWpSXmKPExsVy+t9jQV3VPcuDDR50qFtc+fqezWLS/Qks Ft93fWG36F1wlc1ixvl9TBYLX8RbTFl0mNWB3WPnrLvsHve7jzN59G1ZxejxeZNcAEtUA6NN RmpiSmqRQmpecn5KZl66rZJ3cLxzvKmZgaGuoaWFuZJCXmJuqq2Si0+ArltmDtAFSgpliTml QKGAxOJiJX07TBNCQ9x0LWAaI3R9Q4LgeowM0EDCGsaM381r2Qs+8lXcnjGPpYHxIE8XIyeH hICJxP2GnYwQtpjEhXvr2UBsIYHpjBKtE4S6GLmA7HYmiU3vp4El2AR0JWYffAbWICKgLPF3 4ipGkCJmgeWMEi83t4AVCQuESqy69BzMZhFQlVjYt4AVxOYV8JC49HQVkM0BtE1BYs4kG5Aw p4CnRNel74wQiz0kHj5awD6BkXcBI8MqRtHUguSC4qT0XCO94sTc4tK8dL3k/NxNjODIeSa9 g3FVg8UhRgEORiUeXg235cFCrIllxZW5hxglOJiVRHgbG4BCvCmJlVWpRfnxRaU5qcWHGE2B jprILCWanA+M6rySeENjE3NTY1NLEwsTM0slcd6DrdaBQgLpiSWp2ampBalFMH1MHJxSDYxO 1RKVH4sXCJZZV+0K+1i/r2TjvgUFoTP6L3vvzT4n4z5VfeasH3aSE3I2n0zZ9Pp7uElP0q1Z L+ezr3i+0ebBj7CS8BCBub+ed/stufLBaO55gava3rxbKtW1Fv/Ncc++Kbl30tHpVRfalPva 5xkV5tTMPrZ09Yed/r/2mQcLPMgy2PHzw+JAJZbijERDLeai4kQAKe9GaLICAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected X-Mailman-Approved-At: Mon, 23 Jun 2014 17:59:40 -0700 Cc: kgene.kim@samsung.com, joshi@samsung.com, linux-samsung-soc@vger.kernel.org, Rahul Sharma X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.15 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=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, T_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 Mixer should be power gated only after it is gracefully stopped. The recommended sequence is to Stop the mixer and wait till it enters to IDLE state before gating the clocks and power to the mixer. Signed-off-by: Rahul Sharma --- drivers/gpu/drm/exynos/exynos_mixer.c | 15 +++++++++++++++ drivers/gpu/drm/exynos/regs-mixer.h | 1 + 2 files changed, 16 insertions(+) diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c index c00abbe..d359501 100644 --- a/drivers/gpu/drm/exynos/exynos_mixer.c +++ b/drivers/gpu/drm/exynos/exynos_mixer.c @@ -377,6 +377,20 @@ static void mixer_run(struct mixer_context *ctx) mixer_regs_dump(ctx); } +static void mixer_stop(struct mixer_context *ctx) +{ + struct mixer_resources *res = &ctx->mixer_res; + int timeout = 20; + + mixer_reg_writemask(res, MXR_STATUS, 0, MXR_STATUS_REG_RUN); + + while (!(mixer_reg_read(res, MXR_STATUS) & MXR_STATUS_REG_IDLE) && + --timeout) + usleep_range(10000, 12000); + + mixer_regs_dump(ctx); +} + static void vp_video_buffer(struct mixer_context *ctx, int win) { struct mixer_resources *res = &ctx->mixer_res; @@ -1094,6 +1108,7 @@ static void mixer_poweroff(struct exynos_drm_manager *mgr) } mutex_unlock(&ctx->mixer_mutex); + mixer_stop(ctx); mixer_window_suspend(mgr); ctx->int_en = mixer_reg_read(res, MXR_INT_EN); diff --git a/drivers/gpu/drm/exynos/regs-mixer.h b/drivers/gpu/drm/exynos/regs-mixer.h index 4537026..5f32e1a 100644 --- a/drivers/gpu/drm/exynos/regs-mixer.h +++ b/drivers/gpu/drm/exynos/regs-mixer.h @@ -78,6 +78,7 @@ #define MXR_STATUS_BIG_ENDIAN (1 << 3) #define MXR_STATUS_ENDIAN_MASK (1 << 3) #define MXR_STATUS_SYNC_ENABLE (1 << 2) +#define MXR_STATUS_REG_IDLE (1 << 1) #define MXR_STATUS_REG_RUN (1 << 0) /* bits for MXR_CFG */