From patchwork Mon Jan 15 17:16:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Escande X-Patchwork-Id: 10166193 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id AD73B600CA for ; Tue, 16 Jan 2018 08:56:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8A45F20500 for ; Tue, 16 Jan 2018 08:56:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7C36A209CC; Tue, 16 Jan 2018 08:56:12 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 07F4120500 for ; Tue, 16 Jan 2018 08:56:12 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 821EA6E1D9; Tue, 16 Jan 2018 08:54:21 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by gabe.freedesktop.org (Postfix) with ESMTPS id 885016E162 for ; Mon, 15 Jan 2018 17:17:21 +0000 (UTC) Received: from localhost.localdomain (unknown [IPv6:2a01:e35:8a7e:4790:5118:57f7:752d:6fb0]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: tescande) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id D7D75270B99; Mon, 15 Jan 2018 17:17:19 +0000 (GMT) From: Thierry Escande To: Archit Taneja , Inki Dae , Thierry Reding , Sandy Huang , Sean Paul , David Airlie Subject: [PATCH 39/40] drm/rockchip: analogix_dp: Fix invalid implementation of unbind Date: Mon, 15 Jan 2018 18:16:13 +0100 Message-Id: <20180115171614.14474-40-thierry.escande@collabora.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180115171614.14474-1-thierry.escande@collabora.com> References: <20180115171614.14474-1-thierry.escande@collabora.com> MIME-Version: 1.0 Content-Transfert-Encoding: 8bit X-Mailman-Approved-At: Tue, 16 Jan 2018 08:53:58 +0000 Cc: zain wang , Lin Huang , linux-kernel@vger.kernel.org, Douglas Anderson , dri-devel@lists.freedesktop.org, Tomasz Figa , linux-rockchip@lists.infradead.org, Yakir Yang , =?UTF-8?q?=C3=98rjan=20Eide?= , Mark Yao , Haixia Shi 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: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Tomasz Figa Current implementation of unbind dereferences the drvdata pointer assuming that it's its own data, however the ownership belongs to the analogix code, which means that the pointer is dereferenced with wrong type. Fix this by using the recently added platform data .cleanup() callback to do Rockchip-specific things at unbind. Cc: Kristian H. Kristensen Cc: Brian Norris Signed-off-by: Tomasz Figa [seanpaul fixed conflict keeping rockchip_dp_unbind() preserving clk_unprepare] Signed-off-by: Sean Paul Signed-off-by: Thierry Escande --- drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c index a6a3d6f1f127..eaa025730c28 100644 --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c @@ -161,6 +161,13 @@ static int rockchip_dp_get_modes(struct analogix_dp_plat_data *plat_data, return 0; } +static void rockchip_dp_cleanup(struct analogix_dp_plat_data *plat_data) +{ + struct rockchip_dp_device *dp = to_dp(plat_data); + + rockchip_drm_psr_unregister(&dp->encoder); +} + static bool rockchip_dp_drm_encoder_mode_fixup(struct drm_encoder *encoder, const struct drm_display_mode *mode, @@ -333,6 +340,7 @@ static int rockchip_dp_bind(struct device *dev, struct device *master, dp->plat_data.power_on = rockchip_dp_poweron; dp->plat_data.power_off = rockchip_dp_powerdown; dp->plat_data.get_modes = rockchip_dp_get_modes; + dp->plat_data.cleanup = rockchip_dp_cleanup; ret = rockchip_drm_psr_register(&dp->encoder, analogix_dp_psr_set); if (ret < 0) @@ -358,7 +366,6 @@ static void rockchip_dp_unbind(struct device *dev, struct device *master, struct rockchip_dp_device *dp = dev_get_drvdata(dev); analogix_dp_unbind(dp->adp); - rockchip_drm_psr_unregister(&dp->encoder); dp->encoder.funcs->destroy(&dp->encoder); }