From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751332AbdBXM7Q (ORCPT ); Fri, 24 Feb 2017 07:59:16 -0500 Received: from dougal.metanate.com ([90.155.101.14]:64163 "EHLO metanate.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751265AbdBXMz1 (ORCPT ); Fri, 24 Feb 2017 07:55:27 -0500 From: John Keeping To: Mark Yao Cc: Chris Zhong , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, Sean Paul , John Keeping Subject: [PATCH v4 01/23] drm/rockchip: dw-mipi-dsi: don't configure hardware in mode_set for MIPI Date: Fri, 24 Feb 2017 12:54:44 +0000 Message-Id: <20170224125506.21533-2-john@metanate.com> X-Mailer: git-send-email 2.12.0.rc0.230.gf625d4cdb9.dirty In-Reply-To: <20170224125506.21533-1-john@metanate.com> References: <20170224125506.21533-1-john@metanate.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With atomic modesetting the hardware will be powered off when the mode_set function is called. We should configure the hardware in the enable function, which is the atomic version of "commit" so let's use the enable hook rather than commit while we're at it. Signed-off-by: John Keeping Reviewed-by: Sean Paul --- v4: - Add Sean's Reviewed-by v3: - Squash together with the commit to s/commit/enable/ Unchanged in v2 --- drivers/gpu/drm/rockchip/dw-mipi-dsi.c | 49 +++++++++++++++------------------- 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c index d9aa382bb629..bbd992299f73 100644 --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c @@ -819,34 +819,8 @@ static void dw_mipi_dsi_encoder_mode_set(struct drm_encoder *encoder, struct drm_display_mode *adjusted_mode) { struct dw_mipi_dsi *dsi = encoder_to_dsi(encoder); - int ret; dsi->mode = adjusted_mode; - - ret = dw_mipi_dsi_get_lane_bps(dsi); - if (ret < 0) - return; - - if (clk_prepare_enable(dsi->pclk)) { - dev_err(dsi->dev, "%s: Failed to enable pclk\n", __func__); - return; - } - - dw_mipi_dsi_init(dsi); - dw_mipi_dsi_dpi_config(dsi, mode); - dw_mipi_dsi_packet_handler_config(dsi); - dw_mipi_dsi_video_mode_config(dsi); - dw_mipi_dsi_video_packet_config(dsi, mode); - dw_mipi_dsi_command_mode_config(dsi); - dw_mipi_dsi_line_timer_config(dsi); - dw_mipi_dsi_vertical_timing_config(dsi); - dw_mipi_dsi_dphy_timing_config(dsi); - dw_mipi_dsi_dphy_interface_config(dsi); - dw_mipi_dsi_clear_err(dsi); - if (drm_panel_prepare(dsi->panel)) - dev_err(dsi->dev, "failed to prepare panel\n"); - - clk_disable_unprepare(dsi->pclk); } static void dw_mipi_dsi_encoder_disable(struct drm_encoder *encoder) @@ -875,17 +849,36 @@ static void dw_mipi_dsi_encoder_disable(struct drm_encoder *encoder) clk_disable_unprepare(dsi->pclk); } -static void dw_mipi_dsi_encoder_commit(struct drm_encoder *encoder) +static void dw_mipi_dsi_encoder_enable(struct drm_encoder *encoder) { struct dw_mipi_dsi *dsi = encoder_to_dsi(encoder); int mux = drm_of_encoder_active_endpoint_id(dsi->dev->of_node, encoder); u32 val; + int ret; + + ret = dw_mipi_dsi_get_lane_bps(dsi); + if (ret < 0) + return; if (clk_prepare_enable(dsi->pclk)) { dev_err(dsi->dev, "%s: Failed to enable pclk\n", __func__); return; } + dw_mipi_dsi_init(dsi); + dw_mipi_dsi_dpi_config(dsi, dsi->mode); + dw_mipi_dsi_packet_handler_config(dsi); + dw_mipi_dsi_video_mode_config(dsi); + dw_mipi_dsi_video_packet_config(dsi, dsi->mode); + dw_mipi_dsi_command_mode_config(dsi); + dw_mipi_dsi_line_timer_config(dsi); + dw_mipi_dsi_vertical_timing_config(dsi); + dw_mipi_dsi_dphy_timing_config(dsi); + dw_mipi_dsi_dphy_interface_config(dsi); + dw_mipi_dsi_clear_err(dsi); + if (drm_panel_prepare(dsi->panel)) + dev_err(dsi->dev, "failed to prepare panel\n"); + dw_mipi_dsi_phy_init(dsi); dw_mipi_dsi_wait_for_two_frames(dsi); @@ -933,7 +926,7 @@ dw_mipi_dsi_encoder_atomic_check(struct drm_encoder *encoder, static struct drm_encoder_helper_funcs dw_mipi_dsi_encoder_helper_funcs = { - .commit = dw_mipi_dsi_encoder_commit, + .enable = dw_mipi_dsi_encoder_enable, .mode_set = dw_mipi_dsi_encoder_mode_set, .disable = dw_mipi_dsi_encoder_disable, .atomic_check = dw_mipi_dsi_encoder_atomic_check, -- 2.12.0.rc0.230.gf625d4cdb9.dirty From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Keeping Subject: [PATCH v4 01/23] drm/rockchip: dw-mipi-dsi: don't configure hardware in mode_set for MIPI Date: Fri, 24 Feb 2017 12:54:44 +0000 Message-ID: <20170224125506.21533-2-john@metanate.com> References: <20170224125506.21533-1-john@metanate.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170224125506.21533-1-john@metanate.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Mark Yao Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, Chris Zhong , linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org V2l0aCBhdG9taWMgbW9kZXNldHRpbmcgdGhlIGhhcmR3YXJlIHdpbGwgYmUgcG93ZXJlZCBvZmYg d2hlbiB0aGUKbW9kZV9zZXQgZnVuY3Rpb24gaXMgY2FsbGVkLiAgV2Ugc2hvdWxkIGNvbmZpZ3Vy ZSB0aGUgaGFyZHdhcmUgaW4gdGhlCmVuYWJsZSBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGF0b21p YyB2ZXJzaW9uIG9mICJjb21taXQiIHNvIGxldCdzIHVzZQp0aGUgZW5hYmxlIGhvb2sgcmF0aGVy IHRoYW4gY29tbWl0IHdoaWxlIHdlJ3JlIGF0IGl0LgoKU2lnbmVkLW9mZi1ieTogSm9obiBLZWVw aW5nIDxqb2huQG1ldGFuYXRlLmNvbT4KUmV2aWV3ZWQtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxA Y2hyb21pdW0ub3JnPgotLS0KdjQ6Ci0gQWRkIFNlYW4ncyBSZXZpZXdlZC1ieQp2MzoKLSBTcXVh c2ggdG9nZXRoZXIgd2l0aCB0aGUgY29tbWl0IHRvIHMvY29tbWl0L2VuYWJsZS8KVW5jaGFuZ2Vk IGluIHYyCi0tLQogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMgfCA0OSAr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjEgaW5z ZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL2R3LW1pcGktZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlw aS1kc2kuYwppbmRleCBkOWFhMzgyYmI2MjkuLmJiZDk5MjI5OWY3MyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL2R3LW1pcGktZHNpLmMKQEAgLTgxOSwzNCArODE5LDggQEAgc3RhdGljIHZvaWQg ZHdfbWlwaV9kc2lfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIs CiAJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewogCXN0cnVj dCBkd19taXBpX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7Ci0JaW50IHJldDsK IAogCWRzaS0+bW9kZSA9IGFkanVzdGVkX21vZGU7Ci0KLQlyZXQgPSBkd19taXBpX2RzaV9nZXRf bGFuZV9icHMoZHNpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuOwotCi0JaWYgKGNsa19wcmVw YXJlX2VuYWJsZShkc2ktPnBjbGspKSB7Ci0JCWRldl9lcnIoZHNpLT5kZXYsICIlczogRmFpbGVk IHRvIGVuYWJsZSBwY2xrXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlkd19taXBp X2RzaV9pbml0KGRzaSk7Ci0JZHdfbWlwaV9kc2lfZHBpX2NvbmZpZyhkc2ksIG1vZGUpOwotCWR3 X21pcGlfZHNpX3BhY2tldF9oYW5kbGVyX2NvbmZpZyhkc2kpOwotCWR3X21pcGlfZHNpX3ZpZGVv X21vZGVfY29uZmlnKGRzaSk7Ci0JZHdfbWlwaV9kc2lfdmlkZW9fcGFja2V0X2NvbmZpZyhkc2ks IG1vZGUpOwotCWR3X21pcGlfZHNpX2NvbW1hbmRfbW9kZV9jb25maWcoZHNpKTsKLQlkd19taXBp X2RzaV9saW5lX3RpbWVyX2NvbmZpZyhkc2kpOwotCWR3X21pcGlfZHNpX3ZlcnRpY2FsX3RpbWlu Z19jb25maWcoZHNpKTsKLQlkd19taXBpX2RzaV9kcGh5X3RpbWluZ19jb25maWcoZHNpKTsKLQlk d19taXBpX2RzaV9kcGh5X2ludGVyZmFjZV9jb25maWcoZHNpKTsKLQlkd19taXBpX2RzaV9jbGVh cl9lcnIoZHNpKTsKLQlpZiAoZHJtX3BhbmVsX3ByZXBhcmUoZHNpLT5wYW5lbCkpCi0JCWRldl9l cnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gcHJlcGFyZSBwYW5lbFxuIik7Ci0KLQljbGtfZGlzYWJs ZV91bnByZXBhcmUoZHNpLT5wY2xrKTsKIH0KIAogc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZW5j b2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKQEAgLTg3NSwxNyArODQ5 LDM2IEBAIHN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXIpCiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNsayk7CiB9 CiAKLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2VuY29kZXJfY29tbWl0KHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcikKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2VuY29kZXJfZW5hYmxlKHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIHsKIAlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9 IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOwogCWludCBtdXggPSBkcm1fb2ZfZW5jb2Rlcl9hY3Rp dmVfZW5kcG9pbnRfaWQoZHNpLT5kZXYtPm9mX25vZGUsIGVuY29kZXIpOwogCXUzMiB2YWw7CisJ aW50IHJldDsKKworCXJldCA9IGR3X21pcGlfZHNpX2dldF9sYW5lX2Jwcyhkc2kpOworCWlmIChy ZXQgPCAwKQorCQlyZXR1cm47CiAKIAlpZiAoY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGNsaykp IHsKIAkJZGV2X2Vycihkc2ktPmRldiwgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBjbGtcbiIsIF9f ZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAorCWR3X21pcGlfZHNpX2luaXQoZHNpKTsKKwlkd19t aXBpX2RzaV9kcGlfY29uZmlnKGRzaSwgZHNpLT5tb2RlKTsKKwlkd19taXBpX2RzaV9wYWNrZXRf aGFuZGxlcl9jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhkc2kp OworCWR3X21pcGlfZHNpX3ZpZGVvX3BhY2tldF9jb25maWcoZHNpLCBkc2ktPm1vZGUpOworCWR3 X21pcGlfZHNpX2NvbW1hbmRfbW9kZV9jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV9saW5lX3Rp bWVyX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX3ZlcnRpY2FsX3RpbWluZ19jb25maWcoZHNp KTsKKwlkd19taXBpX2RzaV9kcGh5X3RpbWluZ19jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV9k cGh5X2ludGVyZmFjZV9jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV9jbGVhcl9lcnIoZHNpKTsK KwlpZiAoZHJtX3BhbmVsX3ByZXBhcmUoZHNpLT5wYW5lbCkpCisJCWRldl9lcnIoZHNpLT5kZXYs ICJmYWlsZWQgdG8gcHJlcGFyZSBwYW5lbFxuIik7CisKIAlkd19taXBpX2RzaV9waHlfaW5pdChk c2kpOwogCWR3X21pcGlfZHNpX3dhaXRfZm9yX3R3b19mcmFtZXMoZHNpKTsKIApAQCAtOTMzLDcg KzkyNiw3IEBAIGR3X21pcGlfZHNpX2VuY29kZXJfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlciwKIAogc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MK IGR3X21pcGlfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzID0gewotCS5jb21taXQgPSBkd19taXBp X2RzaV9lbmNvZGVyX2NvbW1pdCwKKwkuZW5hYmxlID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9lbmFi bGUsCiAJLm1vZGVfc2V0ID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9tb2RlX3NldCwKIAkuZGlzYWJs ZSA9IGR3X21pcGlfZHNpX2VuY29kZXJfZGlzYWJsZSwKIAkuYXRvbWljX2NoZWNrID0gZHdfbWlw aV9kc2lfZW5jb2Rlcl9hdG9taWNfY2hlY2ssCi0tIAoyLjEyLjAucmMwLjIzMC5nZjYyNWQ0Y2Ri OS5kaXJ0eQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: john@metanate.com (John Keeping) Date: Fri, 24 Feb 2017 12:54:44 +0000 Subject: [PATCH v4 01/23] drm/rockchip: dw-mipi-dsi: don't configure hardware in mode_set for MIPI In-Reply-To: <20170224125506.21533-1-john@metanate.com> References: <20170224125506.21533-1-john@metanate.com> Message-ID: <20170224125506.21533-2-john@metanate.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org With atomic modesetting the hardware will be powered off when the mode_set function is called. We should configure the hardware in the enable function, which is the atomic version of "commit" so let's use the enable hook rather than commit while we're at it. Signed-off-by: John Keeping Reviewed-by: Sean Paul --- v4: - Add Sean's Reviewed-by v3: - Squash together with the commit to s/commit/enable/ Unchanged in v2 --- drivers/gpu/drm/rockchip/dw-mipi-dsi.c | 49 +++++++++++++++------------------- 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c index d9aa382bb629..bbd992299f73 100644 --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c @@ -819,34 +819,8 @@ static void dw_mipi_dsi_encoder_mode_set(struct drm_encoder *encoder, struct drm_display_mode *adjusted_mode) { struct dw_mipi_dsi *dsi = encoder_to_dsi(encoder); - int ret; dsi->mode = adjusted_mode; - - ret = dw_mipi_dsi_get_lane_bps(dsi); - if (ret < 0) - return; - - if (clk_prepare_enable(dsi->pclk)) { - dev_err(dsi->dev, "%s: Failed to enable pclk\n", __func__); - return; - } - - dw_mipi_dsi_init(dsi); - dw_mipi_dsi_dpi_config(dsi, mode); - dw_mipi_dsi_packet_handler_config(dsi); - dw_mipi_dsi_video_mode_config(dsi); - dw_mipi_dsi_video_packet_config(dsi, mode); - dw_mipi_dsi_command_mode_config(dsi); - dw_mipi_dsi_line_timer_config(dsi); - dw_mipi_dsi_vertical_timing_config(dsi); - dw_mipi_dsi_dphy_timing_config(dsi); - dw_mipi_dsi_dphy_interface_config(dsi); - dw_mipi_dsi_clear_err(dsi); - if (drm_panel_prepare(dsi->panel)) - dev_err(dsi->dev, "failed to prepare panel\n"); - - clk_disable_unprepare(dsi->pclk); } static void dw_mipi_dsi_encoder_disable(struct drm_encoder *encoder) @@ -875,17 +849,36 @@ static void dw_mipi_dsi_encoder_disable(struct drm_encoder *encoder) clk_disable_unprepare(dsi->pclk); } -static void dw_mipi_dsi_encoder_commit(struct drm_encoder *encoder) +static void dw_mipi_dsi_encoder_enable(struct drm_encoder *encoder) { struct dw_mipi_dsi *dsi = encoder_to_dsi(encoder); int mux = drm_of_encoder_active_endpoint_id(dsi->dev->of_node, encoder); u32 val; + int ret; + + ret = dw_mipi_dsi_get_lane_bps(dsi); + if (ret < 0) + return; if (clk_prepare_enable(dsi->pclk)) { dev_err(dsi->dev, "%s: Failed to enable pclk\n", __func__); return; } + dw_mipi_dsi_init(dsi); + dw_mipi_dsi_dpi_config(dsi, dsi->mode); + dw_mipi_dsi_packet_handler_config(dsi); + dw_mipi_dsi_video_mode_config(dsi); + dw_mipi_dsi_video_packet_config(dsi, dsi->mode); + dw_mipi_dsi_command_mode_config(dsi); + dw_mipi_dsi_line_timer_config(dsi); + dw_mipi_dsi_vertical_timing_config(dsi); + dw_mipi_dsi_dphy_timing_config(dsi); + dw_mipi_dsi_dphy_interface_config(dsi); + dw_mipi_dsi_clear_err(dsi); + if (drm_panel_prepare(dsi->panel)) + dev_err(dsi->dev, "failed to prepare panel\n"); + dw_mipi_dsi_phy_init(dsi); dw_mipi_dsi_wait_for_two_frames(dsi); @@ -933,7 +926,7 @@ dw_mipi_dsi_encoder_atomic_check(struct drm_encoder *encoder, static struct drm_encoder_helper_funcs dw_mipi_dsi_encoder_helper_funcs = { - .commit = dw_mipi_dsi_encoder_commit, + .enable = dw_mipi_dsi_encoder_enable, .mode_set = dw_mipi_dsi_encoder_mode_set, .disable = dw_mipi_dsi_encoder_disable, .atomic_check = dw_mipi_dsi_encoder_atomic_check, -- 2.12.0.rc0.230.gf625d4cdb9.dirty